From Transformer to Chip:將 NanoGPT 落地到 Ultra Low Power RISC-V 的工程歷程
January 4, 2026
在資源有限、工具鏈地獄與兩週時程下,將 Transformer 部署到極低功耗晶片的完整歷程。
Transformer on Chip
2026 年 01 月 04 日 · 閱讀時間約 12 分鐘
前言
這不是一個「訓練了超強大模型」的故事,也不是一個「加速器跑出幾十倍效能」的故事。這是一段在資源限制、極短時程下,把 Transformer Model - GPT2 部署進 Endpoint 低功耗等級晶片裡的歷程。
起點:為了硬體加速而生的軟體旅程
最初,這項研究源自公司正在開發的 Compute In Memory 神經網路硬體加速器。CIM的核心價值在於,將運算與記憶體靠得極近,降低資料搬移成本,從架構層面解決能耗、運算時間瓶頸,特別適合深度學習這類 Memory-bound Workload。
為了能在硬體尚未完全成熟前,仍然「看得見、摸得到」CIM 的價值,公司希望有一個 Reference Workload / Golden Model,能夠:
- 對齊未來CIM的運算模式
- 能在公司現有產品平台的 Ultra Low Power RISC-V SoC 上跑起來
- 同時具備Demo價值,展示 Design House 也具備 AI & Hardware & Software co-design 的技能樹
於是,任務落到了我身上。
時間壓力
事情真正變得困難,是在時間被「鎖死」的那一刻。公司在 2026 年 1 月 CES 有一場工程展示,展示上述提到的三個重點,而我拿到「確定要參展CES Demo」的時間點,只剩兩週。一人作業、沒有平行方案、沒有「跑不起來就算了」的空間。這不是研究型的題目,而是交付導向的工程任務。
技術路線選擇
要 Demo 何種模型才能有效展示我們的工程能力,這個任務也落在我身上。經充分研究後,選擇 NanoGPT 當作本次開發的起點:
- NanoGPT,為 Andrej Karpathy (OpenAI Founding Researcher、Ex-Tesla AI Director) 著名的開源專案
- 之中使用的 GPT2 架構具有一定的識別度
- Transformer Block 單元在初步評估後判斷是能對齊嵌入式硬體限制(SRAM、Flash、算力、功耗等等)
這不是做 SOTA 研究,而是實際要能活在晶片上的 Transformer Model。
真正的戰場:Toolchain 地獄
如果你沒有真的把模型 Deploy 到 Micro-controller上,很難理解什麼叫做「生態系不支援」。
這不是某一個 Library 的問題,而是整條 Toolchain 從上到下的每一層都在拒絕你:
Model Layer:TensorFlow Keras
看起來一切正常,模型可以訓練、可以驗證。
Compiler Layer:TFLite Converter
當我以為 TFLite Converter 已經將 Keras 模型成功輸出成 TFLite Graph 時,部署到晶片時仍常常出現 LiteRT Operator 不支援 這樣的羅生門。於是我只能回頭一次次的調整 Keras Layer。
Runtime Layer:TFLite Micro / LiteRT
重複無數次,好不容易將 Operator 支援度問題解決,準備在晶片上跑,結果只留下一句:
AllocateTensors() returned kTfLiteError
沒有 stack trace、沒有 hint、沒有 debug info。
只有我跟整條 Toolchain 的對峙。
第一次成功,但離 Demo 還很遠
經過一番折騰,終於讓 NanoGPT 運行起來。當第一個 Token 生成出來的那一刻,我以為終點到了。
然後我看了一下時間:20 秒。
每一個 Token,都需要 20 秒。
這不是「慢」的問題,而是「完全不可能 Demo」的問題。因為第一版的實作中,每次生成新 Token 時,都會重新計算整個序列的 K 和 V 值——這在理論上是正確的,但在實務上,根本撐不起一場展示。
回頭擁抱 KV-cache:演算法是Free Fruit,但工具鏈不是
於是,我回頭研究主流的 KV-cache 演算法。
在學術上,這是個「Free Fruit」——演算法本身已經被充分驗證,理論也很清楚。
但在工程上,這意味著:
我必須重新走一遍 Toolchain 的坑,而且這上次還要更複雜與痛苦。
因為接下來我才發現…
關鍵現實:KV-cache 是一個生態系黑洞
KV-cache 是種 Multi-head Attention 的 Activation Value。
在PC或GPU上,它是理所當然的設計;但在 Embedded 世界裡,它卻是一個異類:
- 它是種 activation 私自量化這個值,會造成 Transformer 結果不佳的狀況
實際嘗試時,幾乎所有想用的方案都被擋掉:
- ❌ INT8 Model 搭配 FP32 KV-cache → LiteRT 不支援 Hybrid Model
- ❌ 客製化 Full INT8 Model & KV-cache → CMSIS-NN 不支援INT8 Activation
結論其實非常殘酷:
目前最主流的 LiteRT INT8 Ecosystem,沒有一條完整、可落地的 KV-cache 路徑。
工程抉擇:回頭擁抱FP32,但並不是 Free Lunch
於是,短短幾天內做了一個工程導向、而非理論最優的決定:
放棄 INT8,全面使用 FP32。
但這個選擇,一點也不輕鬆。
FP32 解決了生態系問題,卻立刻帶來另一組現實壓力:
- 記憶體占用瞬間放大
- 浮點運算吞吐成為瓶頸,本次的硬體平台只有一個 FPU,Decode Latency 明顯上升
如果沒有處理好,模型可以跑,但 Demo 依舊會遇到運算過慢的問題。
KV-cache 拯救了複雜度,但 FP32 拉高了計算成本
KV-cache 的價值是關鍵性的:
- Attention 運算的時間複雜度從 O(n²) 降為 O(n)
這讓 Transformer 在 Embedded 上「理論上」可行。
但現實是:
- KV-cache 少算了 Attention
- FP32 又讓每一步算得更慢
一來一往,如果不針對 運算路徑與記憶體存取 額外做優化,Transformer Decoding 仍然會陷入 Compute bottleneck。
異質記憶體開發經驗變成關鍵
這時候,過去幾個月在 Heterogeneous Memory(Flash / SRAM / DTIM) 的經驗,反而變成了關鍵救命繩。
因為 FP32 + KV-cache 的前提是:
需要提前知道:
- 哪些資料能放 Flash
- 哪些一定要在 SRAM
- 哪些 Code 值得搬進 DTIM
否則:
- Memory Bandwidth 直接吃滿
- Decoder latency 爆炸
- 最後的結果是——跑得起來,但 Demo 不成立
解法不是漂亮,而是務實
最後真正能工作的設計,是一連串「為了活下來」的取捨:
模型端 (Python)
- 移除 Dynamic Slicing
- 不在模型中更新 cache
- 只輸出新的 K / V
Runtime (C/C++)
- 手動管理 KV-cache
計算策略
- Full FP32 Computation
- Window-based KV-cache
系統層
- Flash / SRAM / DTIM 精細配置
-O2、頻率調整、記憶體配置反覆測試
結語:Endpoint AI 工程能力的完整實證

最終,成功地讓 NanoGPT 在一顆 Ultra Low Power RISC-V SoC 上生成文字,這是公司第一次在晶片上展示如此複雜的 AI 模型運算能力。從 CIM 硬體加速的願景出發,走過 Toolchain 地獄與 KV-cache 掙扎,最終完整地走過了 Neural Network Development → Graph Compilation → on-chip Runtime Computation 的 Full Stack AI Engineering 旅程。
這個系統不只是一個 Demo,更是一個完整的 Software Stack 驗證:從 Model Definition、Compiler Toolchain、到 Runtime Optimization,整條路徑都已經被打通。它證明了我們的晶片與軟體能力,已經準備好迎接下一階段的 CIM 硬體加速 挑戰。
在 2026 CES 的展示中,當 “Once upon a time” 的 prompt 在晶片上逐字生成 TinyStories 時,這不僅是技術可行性的證明,更是對未來 Endpoint AI 方向的一次成功探索與工程能力的實證。