【深度分析】在 $8 晶片上跑 28.9M 參數的 LLM——以及它如何羞辱了整個 AI 產業

如果有人告訴你,他在一顆成本 8 美元的微控制器上跑了一顆 28.9M 參數的 LLM——而且是以每秒 9 個 token 的速度、完全離線、不連任何伺服器——你的第一個反應大概是「用了什麼模型壓縮黑魔法」。但這個專案的真正故事比黑魔法更奇怪,也更讓 AI 產業難堪。那個 100 倍的效能躍升,不是來自新的注意力機制,不是來自 MoE,不是來自任何一種你會在 NeurIPS 論文標題裡看到的架構創新。它來自一個問題——而整個 AI 產業以經忘記這個問題很久了:你的參數,到底住在哪裡?
原文摘要
這個專案來自開發者 slvDev,在 ESP32-S3 微控制器上實作了一個 28.9M 參數的語言模型。ESP32-S3 是一顆成本約 8 美元的晶片,搭載 512KB SRAM、8MB PSRAM 和 16MB flash。模型經過 4-bit 量化後大小為 14.9MB,完全在裝置端執行——不連網、不送伺服器、沒有任何雲端依賴。推論速度達到約 9.5 tok/s 端到端(純計算部分為 9.72 tok/s)。在此之前,在類似晶片上跑過的 LLM 最大只有 260K 參數,這個專案大約是它的 110 倍。
核心技術靈感來自 Google Gemma 模型的 Per-Layer Embeddings(PLE)。關鍵洞察在於把「思考」和「知識」分開存放:25M 參數的嵌入查表(embedding lookup table)存在慢速但容量大的 flash 中,每次 token 生成時只從中讀取約 450 bytes(6 個 row);而 559K 參數的 dense core——真正負責 attention 和 FFN 計算的「思考核心」——留在快速的 SRAM 中,每個 token 都會完整使用。
記憶體階層的設計是整個專案最核心的架構決策。SRAM(512KB,頻寬 240 MB/s)存放 559K 參數的 dense core,這是推論的「熱路徑」,每個 token 都必須經過它。PSRAM(8MB,頻寬 60.7 MB/s)存放 output head(約 1.64MB)和 KV cache,其中 output head 是當前系統的效能瓶頸——它佔據每個 token 推理時間的約 55%。FLASH(16MB,隨機讀取 512B 僅需 20.3 µs)存放 25M 參數的 PLE 查表,這是整個設計最巧妙的地方:雖然查表本身巨大,但每個 token 只存取極小的一部分,查表成本僅佔每個 token 總時間的約 0.7%(~0.12 ms),幾乎是免費的。
PLE 相對於 baseline 的效果非常明確。在相同 dense core 大小的條件下,PLE 將 perplexity 從 12.58 降到 11.41(改善約 0.098 nats,幅度 9.3%)。更重要的是,這個改善幅度在詞彙表大小為 32768 時,是詞彙表大小為 4096 時的 4 倍——大詞彙表正是 PLE 的甜蜜點。這也解釋了為什麼 PLE 在這個專案中特別有效:語言模型需要大詞彙表,而傳統的 embedding 層在大詞彙表下會吃掉大量參數預算,PLE 將這部分移到了廉價的 flash 儲存。
量化穩健性可能是整個專案中最反直覺的發現。在 4-bit PTQ(訓練後量化)之後,PLE 相對於 baseline 的 perplexity 優勢完全保留(相對優勢維持在 124-128%)。這違反了一般直覺——通常我們認為冗餘度高的架構對量化更敏感,但 PLE 的 25M 參數查表反而因為其稀疏存取模式而天生抗量化。作者明確指出,PLE 不需要 QAT(量化感知訓練)就能在 4-bit 精度下保持完整優勢,這在邊緣裝置部署上是一個巨大的實用優勢。
硬體驗證的數據進一步確認了設計的有效性。在真實的 ESP32-S3 晶片上測量:flash 隨機讀取 512 bytes 的延遲為 20.3 µs,每 token 的查表成本約 0.12 ms(佔總推理時間的 ~0.7%)。關鍵瓶頸不在 flash 查表,而在 output head——受限於 PSRAM 的頻寬。純頻寬上限約為 58 tok/s,距離當前的 9.5 tok/s 還有相當的優化空間。
控制實驗提供了因果證據。ple_notable 變體保留了 PLE 的管線結構但移除了實際的 flash 查表——結果比 baseline 還差(-0.017 nats),證明了效能增益完全來自 flash 中儲存的查表內容,而非管線本身。另一個 bigcore 變體將 dense core 大小加倍,獲得了 +0.170 nats 的改善,而 PLE 大約回收了其中的 15%。作者指出,在桌機上你會直接加大核心——但在 ESP32 上,核心是固定矽面積,flash 才是充裕的資源。這正是記憶體階層設計的核心命題:在資源不對稱的硬體上,你把參數放在哪裡,比你有多少參數更重要。
頻寬測量數據完整記錄在 RESULTS.md 中:PSRAM 循序讀取為 60.7 MB/s,SRAM 循序讀取為 240 MB/s,flash 隨機讀取 512B 為 20.3 µs,每 token 查表成本 ~0.12 ms,純頻寬理論上限約 58 tok/s。
片上生成效能的演進過程記錄了從原型到可用系統的完整迭代:初版純量 port 僅有 0.57 tok/s;將 head 移至 PSRAM 並清理程式碼後提升至 4.61-4.77 tok/s;啟用雙核 exact head 達到 5.67-6.22 tok/s;最終的 int8 staged head 加上 int8 activations 達到了約 9.5 tok/s。當前 runtime 的時間分解為:head 57.6ms、attention 25.6ms、PLE 8.5ms、FFN 6.9ms、input 4.4ms——清楚顯示 output head 是壓倒性的瓶頸。
模型在 ESP32-S3 上的實際輸出範例是一段 TinyStories 風格的文字:「Once upon a time, there was a little girl named Lily. She loved to play outside in the sunshine. One day, she saw a big tree with a hole in it. She was curious and wanted to see what was inside.」這段輸出雖然簡單,但語法正確、情節連貫、角色一致——考慮到它是在一顆 8 美元的晶片上、完全離線生成的,這本身就是一個技術宣言。
專案的局限性同樣值得誠實記錄。模型僅使用 TinyStories 資料集訓練,不具備任何世界知識、算術能力或多步推理能力。ESP32-S3 的 SIMD 指令集尚未被使用——作者指出 output head 已經被 PSRAM 頻寬瓶頸卡住,SIMD 加速大約有 15% 的潛在改善空間,但不會是下一個數量級的跳躍。作者獨立完成整個專案,沒有任何外部程式碼依賴。
城武觀點
整個 AI 產業對「架構創新」的定義有一個系統性的盲點。過去五年,我們看到 Transformer 變體、MoE、各種注意力機制的優化——這些都被歸類為「架構創新」。但參數的「居住地」——它們在記憶體階層中的位置——從來不被視為架構問題。ESP32 這個專案的 100 倍增益,完全來自記憶體放置策略:把 25M 參數的查表丟到 flash,只在需要時讀取 0.002% 的內容,而把真正算力密集的 559K 參數留在 SRAM。沒有任何新的模型架構,沒有任何新的數學,只是重新分配了參數的居住地。
那些說「這只是邊緣裝置的小把戲」的人,請反過來問自己一個問題:你在 GPU 集群上跑的那些模型,有多少參數其實只是存在 HBM 裡、每個 token 只讀取其中極小的一部分?如果你把 HBM 到 SRAM 的資料移動模式畫出來,你會發現那些「我們需要更多 GPU」的論證,有很大一部分是在為糟糕的記憶體階層設計買單。記憶體階層設計不是邊緣裝置的專屬問題——ESP32 只是把它逼到極限,讓它變得可見。
PLE 的量化穩健性是最諷刺的發現。你以為最浪費的架構——一個 25M 參數的巨大查表——結果最抗量化。我們對「效率」的直覺在這裡完全失效:稀疏存取的冗餘結構,比我們那些精心設計的 dense 架構更能在低位精度下存活。這不是巧合,而是一個應該讓我們所有人停下來從新思考的信號:你對「效率」的定義,是從誰的硬體視角出發的?是從一個 homogeneous compute 的視角(所有參數平等),還是從一個 heterogeneous memory 的視角(參數有快有慢、有貴有便宜)?整個產業的效率討論幾乎不碰記憶體階層設計——這要嘛是知識盲點,要嘛是結構性利益使然。畢竟,如果效率的答案不是「買更多 GPU」,NVIDIA 的營收曲線就要重畫了。
真正的效率革命不會來自更大的 GPU 集群。它會來自一個目前沒有人在問的問題:參數該住在哪裡,和參數該長成什麼樣子,是同一個問題。 ESP32 專案的作者——一個獨立開發者,沒有研究經費,沒有 TPU pod——在 8 美元的晶片上示範了這一點。整個 AI 產業欠他一個認真的回應。
城武的未解檔案——你花幾百萬美元買 GPU 的時候,有沒想過你的參數其實只需要住對地方?
- 原文:Running a 28.9M parameter LLM on an $8 microcontroller(slvDev, GitHub, 2026-07-23)