TALOS-V2 FPGA Transformer加速器 | AI生成和翻译
问题:仓库介绍 https://github.com/Luthiraa/TALOS-V2
答案:
我将从它是什么、内部构成、以及为什么重要这三个方面来展开。
1. TALOS-V2 是什么
TALOS-V2 是一个 Transformer → FPGA RTL 硬件加速器项目。
它并非在 Python/CUDA 中运行 GPT 风格模型,而是:
- 将 Transformer 推理编译成 Verilog 风格的数据通路
- 直接在 FPGA(Cyclone V 级别开发板)上运行
- 将令牌生成完全交由硬件处理(无需宿主机端的解码循环)
这是一个教学与研究用途的加速器,而非生产级的机器学习基础设施。
关键指标:
- 在小型字符级 GPT 模型上可实现约 50k+ 令牌/秒的推理吞吐量
2. 核心思想(思维模型)
考虑一个标准 Transformer 模块:
x → [QKV 投影] → 注意力机制 → MLP → 逻辑值 → 采样 → 下一个令牌
TALOS-V2 将其重构为:
流式令牌 →
定点向量 →
共享矩阵向量乘引擎 →
QKV + MLP 重用模块 →
注意力调度的有限状态机 →
查表式 Softmax + 有界除法器 →
硬件采样器 →
输出下一个令牌
因此,不再是:
- 在 GPU 内核上进行张量运算
而是:
- 状态机 + 乘累加阵列 + ROM 权重 + 流式数据通路
3. 架构(实际构建了什么)
(1) 定点运算核心
- Q4.12 格式(16 位有符号定点数)
- 完全避免浮点运算
- 权重存储在 FPGA ROM 中(
$readmemh风格)
原因:
- 时序确定性强
- 符合 FPGA 的 DSP 和 LUT 资源限制
(2) 可复用的矩阵向量乘引擎(核心组件)
一切运算归结为:
y = W · x
用于:
- Q, K, V 投影
- 注意力输出投影
- MLP 扩展与投影
- 语言模型头
设计:
- 16 路流式 MAC 模块
- 跨层时分复用
关键权衡:
复用硬件,而非复制并行模块
(3) 注意力机制是一种调度,而非公式
原始数学运算:
[ softmax(QK^T / \sqrt{d}) V ]
RTL 分解:
- 流式点积计算 Q/K
- 最大值追踪(保证稳定性)
- 查表实现指数函数近似
- 累加处理
- 多周期除法引擎
重要之处:
- Softmax 不是一个功能模块
- 它是一条多阶段有限状态机流水线
(4) 确实有效的优化手段
并非“处处增加并行度”,而是:
-
将状态机工作融合到计算过程中
- 例如,在点积计算期间同步进行最大值追踪
-
有界数学运算引擎
- 除法 / RMSNorm 迭代单元
- 流式处理而非缓存
- 硬件采样(无需 CPU 参与)
- 针对注意力瓶颈的定向双除法器
- 时序收敛后提升时钟频率(约 56.25 MHz)
4. 性能指标
- 约 53k 令牌/秒
- 完整的生成循环在 FPGA 上运行
- 宿主机不参与令牌选择过程
这一点非常重要:
采样 + 下一个令牌循环完全在芯片上完成
因此,它并非“快速的内核执行”,而是硬件自回归推理循环。
5. 该仓库的趣味之处(工程视角)
这本质上可以理解为:
“如果将 GPT 推理看成是一个 CPU 流水线设计问题,结果会怎样?”
关键知识点:
A. Transformer 本质上是重复的矩阵向量乘
一旦你认识到:
注意力机制 = 矩阵向量乘 + 规约运算 + 归一化
MLP = 矩阵向量乘 + 激活函数 + 矩阵向量乘
架构便可精简为一个可复用的计算模块。
B. 硬件迫使你考虑调度
在软件中:
- 操作是声明式的
在 TALOS 中:
- 一切是周期排序的状态机步骤
C. 瓶颈在于存储和除法,而非乘累加运算
- Softmax / 除法主导了设计复杂性
- 计算本身相比布线与时序收敛而言较为廉价
6. 简洁思维导图
+-------------------+
令牌 ---> | 嵌入 ROM |
+---------+---------+
|
v
+-------------------+
| 16路矩阵向量乘 | <--- 所有层共享
+----+---+---+------+
Q K V MLP
|
v
+-------------------+
| 注意力有限状态机 |
| 查表指数+除法 |
+---------+---------+
|
v
+-------------------+
| 语言模型头+采样器 |
| (硬件随机数生成) |
+---------+---------+
|
v
下一个令牌
7. 一句话总结
TALOS-V2 是一个编译为 FPGA 数据通路的 Transformer 推理引擎,其中:
- 矩阵向量乘 = 单一可复用硬件模块
- 注意力机制 = 调度的有限状态机
- Softmax/除法 = 有界近似处理
- 采样 = 片上逻辑
- 结果 = 约 50k 令牌/秒的自回归生成
如果你愿意,我可以进一步分解:
- 每个令牌周期精确的状态机调度
- 16 路模块如何映射 QKV 权重
- 或将其与 TensorRT / CUDA 内核融合方案相比,评估此 RTL 方法的优劣
参考资料:
