章节 01
导读 / 主楼:YUA-T16:面向LLM推理的INT8矩阵加速硬件开源项目
YUA-T16是一个专为大型语言模型前馈网络推理设计的INT8精度16x16 GEMM矩阵乘法加速器,提供从RTL设计到FPGA验证再到ASIC流片的完整硬件加速解决方案。
正文
YUA-T16是一个专为大型语言模型前馈网络推理设计的INT8精度16x16 GEMM矩阵乘法加速器,提供从RTL设计到FPGA验证再到ASIC流片的完整硬件加速解决方案。
章节 01
YUA-T16是一个专为大型语言模型前馈网络推理设计的INT8精度16x16 GEMM矩阵乘法加速器,提供从RTL设计到FPGA验证再到ASIC流片的完整硬件加速解决方案。
章节 02
随着大型语言模型(LLM)的快速发展,推理效率已成为制约AI应用普及的关键瓶颈。特别是Transformer架构中的前馈网络(Feed-Forward Network, FFN)层,占据了模型推理时间和能耗的很大一部分。传统的通用处理器(CPU/GPU)在执行矩阵乘法(GEMM)操作时存在能效比低、延迟高等问题,难以满足边缘设备和实时应用的需求。
YUA-T16项目应运而生,它是一个专为LLM FFN推理设计的硬件加速器,采用INT8量化精度,专注于16x16矩阵乘法瓦片(tile)的高效计算。该项目不仅提供了完整的RTL设计,还包含了从FPGA验证到ASIC多项目晶圆(MPW)流片的完整工具链,为研究者和开发者提供了一个端到端的硬件加速解决方案。
章节 03
YUA-T16的核心是一个16x16的INT8矩阵乘法单元,采用脉动阵列(systolic array)架构实现高效的并行计算。这种设计允许数据在阵列中流动,每个处理单元(PE)在数据经过时执行乘累加(MAC)操作,最大限度地减少了内存访问次数,提高了计算吞吐量。
INT8量化的选择基于以下考虑:
章节 04
项目采用了典型的AI加速器分层架构:
章节 05
项目定义了48个寄存器,分布在11个功能块中,提供了对加速器各个方面的精细控制:
| 功能块 | 关键寄存器 | 说明 |
|---|---|---|
| 全局 | G2_ID (0x47320001), VERSION, CAP0 | 设备识别和能力查询 |
| 复位 | BOOT_CAUSE, SW_RESET, WDOG_CTRL | 系统复位和看门狗控制 |
| 队列 | Q0-Q3 DOORBELL, STATUS, OVERFLOW | 命令队列管理 |
| DMA | SUBMIT_LO/HI, CTRL, STATUS, ERR_CODE | DMA传输控制 |
| 内存管理 | USAGE, RESERVED, STATE | 内存压力状态监控 |
| 计算单元 | RUNSTATE, CTRL, FAULT_STATUS | 计算单元状态和控制 |
| 性能监控 | MXU_BUSY_CYCLES, TILE_COUNT, FREEZE | 性能计数器 |
| 中断 | PENDING, MASK, FORCE, CAUSE_LAST | 中断管理 |
| 追踪 | HEAD, TAIL, CTRL | 1K条目追踪缓冲区 |
这种寄存器映射设计遵循了硬件设计的最佳实践,提供了清晰的软件接口,便于驱动程序开发和系统调试。
章节 06
项目提供了完整的主机端软件栈,包含14个Python模块:
这些工具不仅简化了硬件验证过程,也为最终的驱动程序开发提供了参考实现。
章节 07
项目采用了多层次的验证方法:
章节 08
yua-t16/
├── rtl/ # SystemVerilog RTL源码(7个新模块)
│ ├── mxu_core.sv # 矩阵乘法单元核心
│ ├── mxu_ctrl.sv # 控制逻辑
│ ├── mxu_datapath.sv # 数据通路
│ ├── mxu_sram.sv # 片上存储
│ ├── mxu_dma.sv # DMA引擎
│ ├── mxu_top.sv # 顶层封装
│ └── mxu_pkg.sv # 共享参数和类型定义
│
├── tb/ # 测试平台(cocotb)
│ ├── tb_g2_ctrl_top_host_e2e.py # 主机驱动GEMM E2E测试
│ ├── dma_responder.py # DMA测试内存模型
│ └── ...
│
├── tools/ # Python主机栈(14个模块)
│ ├── orbit_device.py # 设备HAL
│ ├── orbit_mmio_map.py # 寄存器映射SSOT
│ ├── orbit_desc.py # 描述符打包器+CRC
│ ├── orbit_scheduler.py # 操作调度器
│ └── orbit_debug_protoa.py # 调试CLI
│
├── tests/ # 16个测试文件,208个测试
├── fpga/vck190/ # Vivado项目+Tcl脚本
├── scripts/ # 板级冒烟测试
├── openlane/ # ASIC设计流程配置
├── runtime/ # 运行时库
├── driver/ # 驱动程序源码
├── include/ # 头文件
├── sim/ # 仿真脚本
├── spec/ # 设计文档
└── docs/ # 15份设计文档
这种清晰的代码组织结构体现了专业硬件设计项目的最佳实践,便于团队协作和代码维护。