2 位 Arm 工程师于 2026 年 10 月 26 日在 PyTorch 博客发布了基于 ExecuTorch 1.3.1 的流式语音识别优化案例。发布方表示,在 Google Pixel 11 上启用 SME2 后,24.9 秒录音的 FP16(16 位浮点格式)处理时间降至约一半。应用需要同时选择每次集中处理的音频块大小与精度,以兼顾首字延迟和错误率。

结果

总处理时间原文。QC8W 使用动态 INT8 激活值和逐通道 INT8 权重。

条件:Google Pixel 11 · 24.9 秒录音 · 1,120 ms 音频块 · 1 个推理线程(固定在中核)· ExecuTorch 1.3.1 SME2 on/off · 预热 2 次 + 测量 1 次

单位:处理时间为秒

结果
精度关闭 SME2开启 SME2加速倍数实时因子(开启 SME2)
FP169.794.612.12倍0.19
QC8W (INT8)5.203.241.61倍0.13

实时因子为处理时间除以音频时长。发布方称,两种配置的处理速度均快于实时,仍有余量执行其他 CPU 任务。但首次文本输出不仅需要等待音频收集,还需等待预处理和推理。

为何出现这种差异

SME2 是 Arm 的矩阵运算扩展。发布方的 ETDump 分析显示,矩阵乘法(GEMM)占比最大,启用 SME2 后,其耗时和占比均有所下降。

表:基于 ETDump 的 GEMM 运算时间对比

条件:ETDump 算子耗时 · Pixel 11 · SME2 on/off 对比

单位:秒

基于 ETDump 的 GEMM(矩阵乘法)运算时间 (秒)FP16: 关闭 SME2 8.2, 开启 SME2 3.1; QC8W (INT8): 关闭 SME2 4.1, 开启 SME2 2.0关闭 SME2开启 SME2FP168.23.1QC8W (INT8)4.12.0
基于 ETDump 的 GEMM(矩阵乘法)运算时间 (秒)
为何出现这种差异
精度关闭 SME2开启 SME2
FP168.23.1
QC8W (INT8)4.12.0

在同一分析中,GEMM 占比在 FP16 下从 84%→67%,在 QC8W 下从 78%→62%。复制、拼接等数据移动耗时几乎不变,成为相对瓶颈。这些操作限制了整体加速效果,因此是后续优化的对象。

发布方的 Arm Streamline 测量显示,SME 利用率在 FP16 下为 38.4%,在 QC8W 下为 53.7%。这表示矩阵硬件的分配比例,并非相对于峰值运算速度的比例。

发布方的内核采样确认执行了 KleidiAI 的 SME2 GEMM 内核。部分 GEMM 在 FP16 构建中仍走用于向量运算的 NEON 路径,在 QC8W 构建中仍走 FP32 路径。

选择标准

各音频块大小的准确率原文。WER 即词错误率。

条件:主机端测量 · ExecuTorch 运行时 + XNNPACK CPU 后端 · 汇总 LibriSpeech Other、AMI Cleaned、Earnings22、VoxPopuli Cleaned AA 共 4 个语料库的 14,019 条话语

单位:WER 为 %

流式 WER 与音频块大小的关系 (%)80: FP16 WER 15.2, QC8W WER 15.5; 320: FP16 WER 12.67, QC8W WER 12.97; 560: FP16 WER 12.01, QC8W WER 12.26; 1,120: FP16 WER 11.50, QC8W WER 11.72FP16 WERQC8W WER8015.215.532012.6712.9756012.0112.261,12011.5011.72
流式 WER 与音频块大小的关系 (%)
选择标准
音频块大小 (ms)FP16 WERQC8W WER
8015.215.5
32012.6712.97
56012.0112.26
1,12011.5011.72

音频块越长,错误率越低,但等待首字的时间也越长。发布方给出的 560 ms 配置首次输出延迟估算为:开启 SME2 时,FP16 为 691 ms,QC8W 为 660 ms。估算将音频收集时间与模型三个处理阶段执行时间的中位数相加。使用合成输入和已初始化的流状态,分 3 轮测量,每种配置采集 75 个样本,并假定首次输出为文本。

同时应用案例中的 800 ms 延迟预算与 13% WER 上限时,320·560 ms 配置可作为候选。80 ms 超出错误率目标,1,120 ms 超出延迟目标。320 ms 有利于快速响应,560 ms 有利于准确率;在 560 ms 下,QC8W 的延迟余量更大。准确率余量充足时可用 QC8W 节省时间,余量紧张时则用 FP16。案例中,FP16 与 FP32 的差异小于 0.03%p,而 QC8W 的 WER 比 FP32 高出 0.21~0.31%p。

测量方法

复现时,保持 Nemotron 3.5 模型资料相同,并保留 XNNPACK、KleidiAI,仅切换 SME2 的开关状态。真机条件与第一张表相同。

ETDump 展示算子耗时,Arm Streamline 展示原生函数采样。

ETDump 文档要求的 CMake 设置如下。

-DEXECUTORCH_BUILD_DEVTOOLS=ON
-DEXECUTORCH_ENABLE_EVENT_TRACER=ON

使用 ExecuTorch 1.3.1 时,应先确认 SME2 构建,再通过 Inspector API 分析 ETDump 采集的数据,同时注意这些数值仅来自一台 Pixel 11 和一个 Nemotron 3.5 模型。