Arm 工程师用 ExecuTorch 在 Pixel 11 上剖析 Nemotron 3.5 流式语音识别

Published · AI Daily — AI-assisted deep research, methodology & disclosure

Arm 工程师在 PyTorch 博客发表的案例研究称,更长的音频分块使 FP16 的词错误率从 15.2% 降到 11.5%(80 至 1,120 毫秒),SME2 矩阵指令让 Pixel 11 上 FP16 的整段处理快了 2.12 倍。所有数字都是厂商一侧的测量。

Arm 工程师用 ExecuTorch 在手机上剖析流式语音识别

10 月 26 日,PyTorch 博客发布了两位 Arm 工程师撰写的案例研究。他们把多语言流式语音模型 Nemotron 3.5 从 PyTorch 导出到 ExecuTorch,并在 Google Pixel 11 手机上做了性能剖析。作者供职于 Arm,而被测的指令集扩展正是 Arm 的产品,因此下文的每一个数字都是厂商一侧的测量。研究要回答的问题是:数值精度和音频分块大小如何影响准确率,单线程处理这段音频需要多少时间,以及实际运行的是哪些计算核。文章开头先给出一个提醒:在完整录音上准确率最高的模型,在必须边说边出字时可能差得多。

准确率取决于分块大小

流式识别按块处理音频。按文章的描述,模型每 10 毫秒生成一个特征向量,编码器再把它压缩为每 80 毫秒一个位置。测试的分块大小为 80、320、560 和 1,120 毫秒。作者在主机上,用 ExecuTorch 的 XNNPACK 后端测量了词错误率(WER),即替换、删除和插入的总错误数除以参考词总数,语料为四个公开数据集中的 14,019 条语句。从 80 毫秒到 1,120 毫秒,使用 16 位浮点(FP16)时 WER 从 15.2% 降到 11.5%,使用 8 位整数权重(称为 QC8W)时从 15.5% 降到 11.7%。在每种分块大小下,FP16 与 32 位浮点的差距都小于 0.03 个百分点,而 QC8W 多出 0.21 至 0.31 个百分点。更长的分块有利于准确率,但会让第一个文字出现得更晚。

手机上的测量显示了什么

为了测速度,团队在 Pixel 11 上处理了一段 24.9 秒的录音,分块为 1,120 毫秒,只用一个固定在中等性能 CPU 核心上的推理线程。他们构建了两次 ExecuTorch 1.3.1,分别开启和关闭 Arm 的 SME2 矩阵指令,每种设置做两次预热和一次带追踪的正式测量。开启 SME2 后,FP16 的处理时间从 9.79 秒降到 4.61 秒,快了 2.12 倍;QC8W 从 5.20 秒降到 3.24 秒,快了 1.61 倍。作者用实时因子表示,即处理时间除以音频长度:FP16 为 0.19,QC8W 为 0.13。他们强调,这一余量并不能消除等待音频到达的时间。矩阵乘法贡献了大部分提升,FP16 下从 8.2 秒降到 3.1 秒,而数据搬运在两个构建中耗时大致相同,因此在总时间中的占比变大。

实际运行了哪些计算核

算子耗时无法说明运行的是哪些底层例程,所以作者还用 Arm 的性能分析器采样了原生调用路径。他们报告,矩阵硬件在采样中占用的比例,FP16 为 38.4%,QC8W 为 53.7%,并说明这不是峰值算力的利用率。采样确认,两种情况下都运行了为 SME2 编写的计算核,同时还有其他计算核:部分 FP16 运算仍走较早的 NEON 向量路径,部分 QC8W 运算仍以 32 位浮点运行。文章指出,本次使用的 ETDump 和 Streamline 不能直接连通模型层与实际执行的计算核视图;作者把逐层映射列为后续工作。

如何使用这些结果

这项研究展示的是一种方法,而不是结论:同时选择分块大小和精度,并在目标设备上同时测量准确率和延迟。它的局限也很清楚。准确率测试在主机上进行,而不是在手机上。手机上的计时只用了一段录音、一个线程,每种设置只有一次正式测量。结果来自单一设备,并带有 Arm 自己的优化。准备做产品的团队应当用自己的音频、语言和散热条件重复这些测试。

为什么要同时看三项指标

流式识别的评估不能只看一个数字。准确率受分块大小影响:最小的 80 毫秒分块,FP16 的词错误率为 15.2%,最大的 1,120 毫秒分块为 11.5%,相差 3.7 个百分点,但分块越大,用户等待第一个字出现的时间越长。处理速度取决于芯片是否支持 SME2,以及计算核是否真的用上了它:同一模型在同一部手机上,FP16 的整段处理时间可以相差 2.12 倍。第三项是精度。QC8W 在开启 SME2 后的绝对耗时更短,为 3.24 秒,而 FP16 为 4.61 秒;但 SME2 带来的提速倍数小于 FP16,只有 1.61 倍对 2.12 倍;关闭 SME2 时两者的耗时分别为 5.20 秒和 9.79 秒。文章指出,数据搬运在两个构建中耗时大致相同,因此占总时间的比例上升,限制了整体提速。选择哪种组合,取决于产品先要满足准确率目标,还是先要满足延迟预算。

还要注意,文中的词错误率是把四个语料合并后,用总错误词数除以总参考词数得到的,反映的是整体表现。口音较重、噪声较大或专业词汇较多的场景,结果可能明显不同,所以上述数字不能直接当作某个具体产品的预期。

Sources

FAQ

为什么流式语音识别中分块大小很重要?

流式模型必须在拿到完整录音之前输出文字。研究报告称,分块从 80 毫秒增至 1,120 毫秒,FP16 的词错误率从 15.2% 降到 11.5%,但第一个文字出现得更晚。因此准确率必须按实际部署使用的分块大小来测量。

SME2 在手机上带来了什么变化?

在 Pixel 11 上用一个推理线程处理 24.9 秒的录音,FP16 关闭 SME2 需要 9.79 秒,开启后为 4.61 秒,快了 2.12 倍;8 位的 QC8W 从 5.20 秒降到 3.24 秒,快了 1.61 倍。作者供职于生产该指令集的 Arm。

这些结果能推广到多大范围?

范围不大。准确率是在主机上测的,手机上的计时只用了单一设备、一段录音、一个线程,每种设置一次正式测量。团队应当用自己的音频、语言和散热条件重复测试,而不要直接套用文中的倍率和百分比。