返回

文章详情

ESP32S3集群运行1.58位(BitNet)语言模型

Hacker News2026年9月28日 21:26

这是一个在多个ESP32S3上运行的分布式管道推理引擎,采用1.58位(BitNet)语言模型。架构:该项目在由7个ESP32S3组成的集群上运行切分的0.5B大规模语言模型(LLM)。一个节点作为主节点,其他节点作为从节点。主节点运行分词器和嵌入,而其他节点运行注意力层和多层感知机(MLP)。主节点和从节点通过高速SPI Daisy-Chain通信。 ┌─────────────────────────────────────────────────────────┐ │ 主节点 │ │ │ │ [ 提示 ] ---> BPE 分词器 │ │ │ │ │ │ 嵌入 (INT4,约14MB闪存) │ │ │ │ │ │ (SPI CH A - 发送到节点1) │ └───────────────────────┬─────────────────────────────────┘ │ 隐状态向量 (FP32) ▼ ┌─────────────────────────────────────────────────────────┐ │ 计算节点1 │ │ (SPI CH B - 从主节点接收) │ │ │ │ ► 层 0 到 3 (4x Transformer 块) │ │ • RMSNorm (FP16 scaled to FP32) │ │ • 1.58位 注意力 (Q,K,V,O 投影) + RoPE │ │ • KV 缓存 (PSRAM) │ │ • 1.58位 MLP (门,向上,向下投影) │ │ │ │ (SPI CH A - 发送到节点2) │ └───────────────────────┬─────────────────────────────────┘ │ ... (节点2至5) │ ▼ ┌─────────────────────────────────────────────────────────┐ │ 计算节点6 │ │ (SPI CH B - 从节点5接收) │ │ │ │ ► 层 20 到 23 (4x Transformer 块) │ │ • 相同的1.58位架构 │ │ │ │ (SPI CH A - 发送回主节点) │ └───────────────────────┬─────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ 主节点 │ │ (SPI CH B - 从节点6接收) │ │ │ │ 最终 RMS Norm │ │ (FP16,在'fnorm'分区中64KB) │ │ │ │ │ │ LM 头(与INT4嵌入关联) │ │ │ │ │ │ 贪婪采样 │ │ │ │ │ │ [ 输出 ] <--- 下一个令牌ID │ └─────────────────────────────────────────────────────────┘ 开始使用 请参考工作流指南以开始该项目。 项目结构: . ├── README.md # 项目文档 ├── workflow.md # 逐步刷写、模型准备和接线指南 ├── .gitignore # Git忽略构建文件和二进制文件的规则 │ ├── docs/ │ └── images/ # 架构图和硬件照片 ├── master_board/ # 主节点的固件 (ESP-IDF) ├── main/ │ ├── main.cpp # 主调度器,用户I/O & BPE分词器 │ ├── embedding.cpp # INT4嵌入查找逻辑 │ ├── lm_head.cpp # LM头映射和贪婪采样 │ └── spi_bus.cpp # 主节点双通道SPI驱动 ├── partitions.csv # 自定义分区表 (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 注意力,RoPE & KV-缓存运行时 │ ├── lut_table.cpp # 极限优化的查找表 │ └── spi_bus.cpp # Daisy-chain SPI DMA接收器/发射器 ├── partitions.csv # 节点的层分区布局 └── 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_structure.py # 用于检查.safetensors的调试工具 └── flash_*.bat # 多线程快速刷写脚本 许可证 该项目根据MIT许可证发布 - 详见LICENSE文件。 致谢 灵感、相关作品和参考资料: ESP-32-s3-Story-maker-LLM - 对于在ESP32-S3上进行单节点量化LLM部署的灵感。 esp32s3-distributed-ai - 对于在微控制器上进行多节点分布式AI架构的灵感。 BitNet - 1.58位三元量化概念和架构。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

☕请我喝杯咖啡