开源项目 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。

表:单张 U200 上各模型的处理速度

条件:1张 Alveo U200,Ryzen 7 9700X,8个主机线程,核心 200MHz,完整模式,Q8_0 KV 缓存,Flash Attention(减少注意力计算内存用量的技术),提示词 512令牌、处理批次 512令牌、生成 64令牌,重复 3次,Basis 1.0.0

U200 上实测的 llama.cpp 速度
模型量化,即降低数值精度以缩小模型的方式提示词(令牌/秒)生成(令牌/秒)卡功耗(W)
Qwen3.8 27BQ8_05.079 ± 0.0011.587 ± 0.00155.9
Qwen3.5 9BQ8_016.617 ± 0.0044.992 ± 0.00655.3
Gemma 4 31BQ4_K_M9.294 ± 0.0032.442 ± 0.00158.6
Gemma 4 26B-A4BQ8_020.942 ± 0.02010.178 ± 0.01355.8
Gemma 4 12BQ8_015.538 ± 0.0113.743 ± 0.00157.7
Gemma 4 E4BQ8_039.399 ± 0.0229.034 ± 0.01255.4
Gemma 4 E2BQ8_075.959 ± 0.09117.442 ± 0.00754.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: 普通生成(令牌/秒) 2.19, 多令牌预测(令牌/秒) 3.59; Qwen3.8 2B: 普通生成(令牌/秒) 23.06, 多令牌预测(令牌/秒) 25.45; Gemma 4 26B-A4B: 普通生成(令牌/秒) 10.15, 多令牌预测(令牌/秒) 11.77普通生成(令牌/秒)多令牌预测(令牌/秒)Qwen3.8 27B2.193.59Qwen3.8 2B23.0625.45Gemma 4 26B-A4B10.1511.77
相同提示词下普通生成与草稿验证的速度
草稿令牌验证的收益与成本
模型目标/草稿量化最优候选数普通生成(令牌/秒)多令牌预测(令牌/秒)
Qwen3.8 27BQ4_K_M / Q8_0 (单独文件)32.193.59
Qwen3.8 2BQ4_K_M / Q4_K_M (同一文件)123.0625.45
Gemma 4 26B-A4BQ8_0 / Q8_0 (单独文件)110.1511.77

据项目公布的数据,27B 模型在候选数为三个时达到 1.64倍速度。另外两个模型均在候选数为一个时最快,分别达到 1.10倍和 1.16倍速度。最优设置下,Qwen3.8 27B 每步接受 2.09个候选令牌,Qwen3.8 2B 和 Gemma 4 26B-A4B 则各为 0.81个。这表明实际接受率比提出更多候选更重要。

收益在于批量验证候选,从而缩短生成时间。代价是增加草稿生成与验证工作,部分模型还需准备单独的草稿权重文件。文档说明,超过最优候选数后,验证耗时增加会削弱收益;2B 模型在候选数为四个时比普通生成更慢。

此次发布的实用价值在于同时提供 U200 推理路径与验证工具,并为按模型调整草稿候选数提供依据。