开源项目 Tesseract 发布了面向可重构电路的 FPGA 加速卡设计及语言模型运行软件。语言模型开发者可在 Alveo U200 卡上执行推理,先生成候选令牌,再批量验证,以提高生成速度。
1. 分别发布硬件与固件
11月10日发布的 Tesseract Core 1.0.0 包含加载到卡上的电路映像与设计代码。同期发布的 Tesseract Basis 1.1.0 提供固件开发工具与主机软件。固件是控制卡运行的底层软件,主机软件则是在卡外发送指令的计算机程序。电路映像与运行软件分开分发。
Basis 1.1.0 的主要修正 是实测卡的内存容量。U200 每通道为 8GiB,但卡的 shell 报告为 16GB,之前超出通道容量的地址可能回绕到起点,覆盖模型权重。新版本打开卡时会确认实际容量,并将其用于堆(程序动态使用的内存区域)的布局与边界检查。模型无法装入内存时,会报 WEIGHT heap full 错误并停止。
运行路径与 llama.cpp 连接。连接软件将支持的运算交给卡,其余交由 CPU 处理。完整模式下,KV 缓存(存储先前令牌计算结果的空间)和注意力(计算应参考输入哪些部分的过程)也在卡上处理,每生成一个令牌请求一次任务。
2. 构建与在卡上运行
入门指南给出的顺序是:获取子模块(将外部仓库一起纳入的组件),应用补丁(对原始代码的修改),安装控制核心的工具链(用于构建和编译的工具集合),再用 CMake 构建。在卡上运行需要 XRT 2.18.179。主机打开设备时,会加载电路映像及单独构建的固件文件。
准备好基本推理后,可用专用测量工具测试多令牌预测。以下是性能文档中的运行示例,指定目标模型、草稿文件和提示词文件,测量不同候选数下的速度。
tsr-mtp -m TARGET.gguf [-md MTP.gguf] --spec-type draft-mtp --mtp-mode all --mtp-k-list 1,2,3,4 \
--mtp-device xrt --mtp-prompts PROMPTS.txt -n 128 -c 2048 -t 8安装后,可先通过自检检查设备,再用模型验证工具与 CPU 输出进行比较。
3. U200 上实测的 llama.cpp 速度
据项目公布的信息,以下结果使用一张 U200 在完整模式下测得。提示词处理与生成速度分别列出三次运行的平均值及标准差,后者表示测量值偏离平均值的程度;功耗为生成期间卡本身的平均功耗。以下两张表使用的是 Basis 1.0.0 固件,而非 Basis 1.1.0。
条件:1张 Alveo U200,Ryzen 7 9700X,8个主机线程,核心 200MHz,完整模式,Q8_0 KV 缓存,Flash Attention(减少注意力计算内存用量的技术),提示词 512令牌、处理批次 512令牌、生成 64令牌,重复 3次,Basis 1.0.0
| 模型 | 量化,即降低数值精度以缩小模型的方式 | 提示词(令牌/秒) | 生成(令牌/秒) | 卡功耗(W) |
|---|---|---|---|---|
| Qwen3.8 27B | Q8_0 | 5.079 ± 0.001 | 1.587 ± 0.001 | 55.9 |
| Qwen3.5 9B | Q8_0 | 16.617 ± 0.004 | 4.992 ± 0.006 | 55.3 |
| Gemma 4 31B | Q4_K_M | 9.294 ± 0.003 | 2.442 ± 0.001 | 58.6 |
| Gemma 4 26B-A4B | Q8_0 | 20.942 ± 0.020 | 10.178 ± 0.013 | 55.8 |
| Gemma 4 12B | Q8_0 | 15.538 ± 0.011 | 3.743 ± 0.001 | 57.7 |
| Gemma 4 E4B | Q8_0 | 39.399 ± 0.022 | 9.034 ± 0.012 | 55.4 |
| Gemma 4 E2B | Q8_0 | 75.959 ± 0.091 | 17.442 ± 0.007 | 54.9 |
即使卡的设置相同,各模型的生成速度也有明显差异。项目将另一次聊天运行中获得的卡周期数与每令牌耗时对照后,报告卡上执行时间占 98~99%。在此设置下,决定速度的主要是卡上耗时,而非主机处理。
卡一次只能由一个进程使用。由于模型和量化方式不同,不能将速度差异仅归因于模型大小。
4. 草稿令牌验证的收益与成本
多令牌预测支持包含在当天稍早发布的 Basis 1.0.0 中。
多令牌预测不再逐个确定输出令牌,而是先生成多个候选,再批量验证。项目报告称,在所测三个模型的各候选数设置下,输出均与普通贪心解码一致,即每步选择最可能令牌的生成方式。用于性能比较的普通生成基线,也在同一进程中使用相同提示词测得。
条件:1张 Alveo U200,Ryzen 7 9700X,8个主机线程,完整模式,Q8_0 KV 缓存,Flash Attention,上下文长度 2048令牌,对 3个聊天提示词各贪心生成 128令牌,每种候选数运行 1次,Basis 1.0.0
| 模型 | 目标/草稿量化 | 最优候选数 | 普通生成(令牌/秒) | 多令牌预测(令牌/秒) |
|---|---|---|---|---|
| Qwen3.8 27B | Q4_K_M / Q8_0 (单独文件) | 3 | 2.19 | 3.59 |
| Qwen3.8 2B | Q4_K_M / Q4_K_M (同一文件) | 1 | 23.06 | 25.45 |
| Gemma 4 26B-A4B | Q8_0 / Q8_0 (单独文件) | 1 | 10.15 | 11.77 |
据项目公布的数据,27B 模型在候选数为三个时达到 1.64倍速度。另外两个模型均在候选数为一个时最快,分别达到 1.10倍和 1.16倍速度。最优设置下,Qwen3.8 27B 每步接受 2.09个候选令牌,Qwen3.8 2B 和 Gemma 4 26B-A4B 则各为 0.81个。这表明实际接受率比提出更多候选更重要。
收益在于批量验证候选,从而缩短生成时间。代价是增加草稿生成与验证工作,部分模型还需准备单独的草稿权重文件。文档说明,超过最优候选数后,验证耗时增加会削弱收益;2B 模型在候选数为四个时比普通生成更慢。
此次发布的实用价值在于同时提供 U200 推理路径与验证工具,并为按模型调整草稿候选数提供依据。
