开发者生态
morning
ESP32S3集群运行1.58位(BitNet)语言模型
2026-09-29
1 阅读
约8分钟阅读
nkko
字号:
ESP32s3-LLM-Cluster 多个运行 1.58 位 (BitNet) 语言模型的 ESP32S3 上的分布式管道推理引擎。架构 该项目在 7 个 ESP32s3 集群上运行切片 0.5B LLM。一个作为master,其他作为节点。主节点运行分词器和嵌入,其他注意力层和 MLP 在节点上运行。主站和节点通过高速 SPI 菊花链进行通信。 ┌───────────────────────────────────────────────────┐ │ 主节点 │ │ │ │ [ 提示 ] ---> BPE Tokenizer │ │ │ │ │ 令牌嵌入 │ │ (INT4, ~14MB in Flash) │ │ │ │ │ (SPI CH A - TX 到节点 1) │ └──────────────────────┬──────────────────────────────┘ │ 隐藏状态向量 (FP32) ▼ ┌────────────────────────────────────────────────────┐ │ 计算节点 1 │ │ (SPI CH B - 来自主机的 RX) │ │ │ │ ► 第 0 至 3 层(4x 变压器块) │ │ • RMSNorm(FP16 缩放至 FP32) │ │ • 1.58 位注意力(Q、K、V、O proj)+ RoPE │ │ • KV 缓存(PSRAM) │ │ • 1.58 位 MLP(门、上、下项目) │ │ │ │ (SPI CH A - TX 至节点 2) │ └──────────────────────┬────────────────────────────────┘ │ ... (节点 2 至 5) │ ▼ ┌───────────────────────────────────────────────────┐ │ 计算节点 6 │ │ (SPI CH B - 来自节点 5 的 RX) │ │ │ │ ► 第 20 层至 23 层(4x 变压器块) │ │ • 相同的 1.58 位架构 │ │ │ │ (SPI CH A - TX 返回主设备) │ └─────────────────────┬─────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────┐ │ 主节点 │ │ (SPI CH B - 来自节点 6 的 RX) │ │ │ │ 最终 RMS 范数 │ │ (FP16,“fnorm”分区中的 64KB) │ │ │ │ │ LM 头(绑定到 INT4 嵌入) │ │ │ │ │ 贪婪采样 │ │ │ │ │ [ 输出 ] <--- 下一个 Token ID │ └────────────────────────────────────────────────────┘ 入门请参考工作流程指南开始项目。项目结构。 / │ │ ├── main.cpp # 主编排器、用户 I/O 和 BPE tokenizer │ │ ├── embedding.cpp # INT4 嵌入查找逻辑 │ │ ├── lm_head.cpp # LM Head 映射和贪婪采样 │ │ └── spi_bus.cpp # 主双通道 SPI 驱动 │ ├──partitions.csv # 自定义分区table (token, model, fnorm) │ └── CMakeLists.txt │ ├── node_firmware/ # 计算节点固件 (ESP-IDF) │ ├── main/ │ │ ├── main.cpp # 节点工作入口点和推理循环 │ │ ├── bitlinear.cpp # 1.58 位三元线性层实现 │ │ ├── bitlinear_forward.S # 针对 1.58 位的汇编优化 MAC 操作 │ │ ├── qwen_attention.cpp # Qwen Attention、RoPE 和 KV-Cache 运行时 │ │ ├── lut_table.cpp # 用于极端优化的查找表 │ │ └── spi_bus.cpp # 菊花链 SPI DMA 接收器/发送器 │ ├── partitions.csv # Node 的层分区布局 │ └── CMakeLists.txt │ ├── python_tools/ # PC 端量化和预处理套件 ├──crop_token.py # 词汇修剪(缩小到 32K 个 token) ├──crop_model_weight.py # 嵌入矩阵切片 ├── qat_158.py # BitNet QAT (量化感知训练)微调 ├── bit4_embedding.py # 用于嵌入的 INT4 权重打包器 ├── pack_tokenizer_bin.py # 将分词器规则序列化为 ESP32 .bin ├── pack_model_bin.py # 打包 1.58 位层块以进行物理对齐 ├── Look_model_struct.py # 用于检查的调试工具.safetensors └── flash_*.bat # 多线程快闪脚本 许可证 该项目已获得 MIT 许可证 - 详细信息请参阅 LICENSE 文件。致谢 灵感、相关作品和参考:ESP-32-s3-Story-maker-LLM - ESP32-S3 上单节点量化 LLM 部署的灵感。 esp32s3-distributed-ai - 微控制器上多节点分布式 AI 架构的灵感。 BitNet - 1.58 位三元量化概念和架构。
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱