在8美元的微控制器上運行2890萬參數的LLM
一位開發者成功在成本約8美元的ESP32-S3微控制器上運行了一個2890萬參數的語言模型,利用谷歌Gemma模型中的逐層嵌入技術將大部分參數存儲在閃存中。文本生成完全在設備上運行,速度約9.5個token/秒,相比此前26萬參數的模型取得了巨大飛躍。
近日,一名開發者成功在售價約8美元的ESP32-S3微控制器上運行了一個擁有2890萬參數的語言模型。該模型完全在芯片本地運行,無需連接服務器,並以每秒約9.5個token的速度將生成的文本輸出到連接的小屏幕上。這是微控制器上運行語言模型的一次重大突破——此前同類模型的最大參數規模僅為26萬,而新模型的大小是其100倍以上。
關鍵數字:參數總量2890萬(其中2500萬存儲在閃存查找表中);芯片為ESP32-S3,配備512KB SRAM、8MB PSRAM和16MB閃存;生成速度約9.5 token/秒;模型大小在4位量化後僅為14.9MB。
微控制器的SRAM非常有限(僅512KB),傳統上整個模型必須常駐SRAM,因此只能容納極小的模型。解決方案來自谷歌Gemma模型中的逐層嵌入(Per-Layer Embeddings)技術:將語言模型中龐大的嵌入表(2500萬行)存儲在慢速閃存中,每次只需讀取每個token所需的約450字節數據,而負責實際計算的小型核心部分則留在快速SRAM中。這樣一來,大部分模型幾乎不會佔用運行資源,只是靜靜地留在閃存中,每次被少量採樣。據項目作者稱,此前似乎沒有人嘗試過在如此小的芯片上實現這一設計。
該模型基於TinyStories數據集訓練,因此擅長編寫簡短、連貫的故事。它無法回答問題、遵循指令、編寫代碼或提供事實信息——這種侷限性源於模型負責推理的小型核心部分,而閃存技巧並未改變這一點。項目的意義在於展示了將大模型塞進極小芯片的架構可能性,而非模型本身的強大能力。
項目已在GitHub上開源,包含完整的固件、接線説明、訓練和量化代碼。開發者還特意保留了混亂的提交歷史,包括一次由於參數計算錯誤導致數字膨脹的bug及其修正過程,供他人蔘考。該項目還引用了Andrej Karpathy的llama2.c項目,證明了即使在受限的硬件上,通過巧妙的內存管理,也能運行相對複雜的語言模型。代碼倉庫中包含了詳細的説明文檔(RESULTS.md),記錄了實驗方法、消融實驗和片上測量數據,為後續研究提供了寶貴的參考。