openTPU:由AI代理设计的开源加速器

openTPU将自动架构竞赛(auto-arch-tournament)的经验应用于AI加速器设计,旨在探索AI代理在硬件设计领域的潜力,以及其构建能够运行自身推理芯片的能力。

该项目不仅是一个硬件设计,更是一个完整的学习平台。所有代码均托管于单一仓库中,涵盖从SystemVerilog硬件设计、指令集、位精确模拟器、内核语言及其编译器,到驱动真实PCIe卡的宿主软件。开发者可通过该项目深入理解AI加速器从Python矩阵乘法到底层连线的完整工作原理。

实测性能与数据

该设计在Inspur YPCB-00338卡(搭载Xilinx Kintex-7 xc7k480t FPGA及双通道DDR3)上进行了实测。测试结果显示,硬件运行结果与模拟器逐位一致,成功运行了包括LFM2.5、Qwen3、Gemma 4、SmolLM3及Phi-4-mini在内的十款现代模型。

在流式返回logits的场景下(96个令牌),4-bit量化配置展现出更快的解码速度。例如,LFM2设备端/墙钟时间解码速度分别达到89.5/84.5 tok/s,Qwen3为33.7/33.3 tok/s。相较于早期使用Xilinx MIG构建的生产镜像se-cand3,新镜像在解码性能上保持接近(误差在2.3%以内),但在预填充阶段速度提升显著,Qwen3.5快1.3倍,LFM2(4-bit)快2.0倍。此外,新镜像启动时核心CPU可在12秒内完成双DDR3通道校准,无需宿主机参与。

针对参数量超过卡片4 GiB容量的混合专家(MoE)模型,openTPU通过从宿主机流式传输专家权重来运行。实测数据显示:

  • LFM2.5-8B-A1B(85亿参数,17亿活跃):在160个令牌内测得10.6 tok/s,专家槽位命中率98.5%,每令牌流式传输5.2 MB。
  • Qwen3.5-35B-A3B(347亿参数,30亿活跃):测得3.95 tok/s,专家命中率62%,每令牌流式传输153 MB,PCIe带宽占用1.41 GB/s。

上述结果均与模拟器逐位匹配。通过采用FP4值配合两级块缩放的4-bit量化技术(每权重4.25位,LM头部保持int8),每令牌字节数减少约三分之一,解码速度提升40%至45%。

架构原理与工作流

openTPU架构刻意保持简洁,无缓存且无隐藏调度。序列器每个周期向特定单元发送一条指令:DMA负责数据移动,矩阵单元处理从DRAM流式传输的int8权重乘法,向量单元执行fp32运算,量化器则将结果转回int8。这种设计使得每次数据移动都对应一条指令,便于通过追踪记录清晰分析周期消耗。

其工作流如下:

  1. 内核编译:使用Python编写的内核代码(如MLP、Attention)通过@ol.jit装饰器编译。
  2. 指令生成:编译器将其转化为ISA指令,每条指令包含8个32位字。
  3. 仿真与验证:Python编写的ISA模拟器与SystemVerilog编写的RTL代码进行位级对齐验证。
  4. 硬件部署:通过Vivado生成比特流并加载至FPGA卡,经PCIe与宿主机通信。

Lens分析器可从RTL、模拟器或硬件记录中提取运行轨迹,提供屋顶线图、时间轴及指令级表格,帮助开发者优化性能。

试用与开发指南

除物理卡片外,openTPU的全套工具链均可在笔记本电脑上运行。用户可通过pip安装依赖,并使用pytest进行RTL测试(需Verilator 5)。支持通过otpu-chat命令在模拟器或真实硬件上与多款模型进行交互,并通过otpu-smi监控温度、功耗及DRAM带宽等指标。

推荐阅读顺序为:指令集文档(docs/isa.md)、内核与编译器文档、模拟器源码、RTL硬件实现、模型基准测试及物理卡片文档。

后续规划

  • 优化DRAM效率:目前DDR3-1066读取率已达峰值的82%-85%,团队正进一步优化LiteDRAM路径以挖掘剩余性能。
  • 时序与面积优化:当前设计在133.33 MHz下收敛,时序裕量极小(WNS +0.032 ns),仍在通过Vivado迭代优化。
  • 提升预填充速度:生产镜像已包含四列脉动矩阵单元,后续将继续优化以提升受限于矩阵乘法速率的预填充性能。

openTPU采用Apache License 2.0开源协议,欢迎社区提交Issue和Pull Request。大部分贡献仅需Python和Verilator环境,无需FPGA硬件。