语音识别工作负载之所以苛刻,是因为它把严格的延迟要求与大规模并行计算结合在一起。实时转写服务不能无限缓冲;它必须在音频帧到达时立即处理,同时保持识别准确率。GPU 可以加速声学模型和语言模型的推理,但要正确估算其规模,必须理解音频流、模型复杂度与批处理策略之间的关系。
本文将介绍如何在不依赖厂商基准测试数据猜测的情况下,为实时语音识别估算 GPU 容量。
理解工作负载流水线
语音识别通常遵循一条流水线:音频预处理、特征提取、声学模型推理、解码以及文本后处理。GPU 负载集中在声学模型上,它需要将音频帧与训练好的神经网络进行比对计算。
- 音频流可能是简短的语音片段,也可能是长时间的连续会话
- 采样率和帧移决定了推理运行的频率
- 模型大小决定了内存占用和每帧的计算量
- 对多条流进行批处理可以提高吞吐量,但会增加延迟
仅凭并发用户数无法估算 GPU 规模。两个偶尔低声说话的用户与两个持续交谈的用户,给系统带来的负载截然不同。
按音频流估算,而不是按用户估算
一种实用的方法是先将用户换算为活跃音频流,然后确定单块 GPU 在您的延迟预算内能够支撑多少条流。
- 确定每个语音片段或每个词的目标最大延迟
- 在候选 GPU 上测量或估算每帧的推理时间
- 根据音频参数计算帧率
- 确定在不超出延迟上限的情况下可以交错处理多少条流
- 为突发流量和系统开销预留安全余量
如果采用批处理,请在不同批次大小下建模吞吐量。更大的批次可以提高 GPU 利用率,但会增加最坏情况下的等待时间。
语音识别 GPU 规划检查清单
| 参数 | 为什么重要 |
|---|---|
| 活跃流数量 | 直接决定 GPU 负载 |
| 延迟目标 | 限制批处理可以激进到什么程度 |
| 模型大小 | 决定每次推理的内存和计算量 |
| 帧率 | 决定推理频率 |
| GPU 显存 | 必须容纳模型权重和活跃流状态 |
| 安全余量 | 抵御突发流量和模型更新的影响 |
显存,而不仅仅是算力
现代语音模型可能非常庞大。GPU 显存必须容纳模型权重、中间激活值、流式解码器的键值缓存(key-value cache)以及任何束搜索(beam search)状态。显存不足会迫使您缩小批次或对模型进行量化,而这可能影响识别准确率。
规划 GPU 显存时要像规划算力一样仔细。一块速度更快但显存不足的 GPU,其实际吞吐量可能不如一块速度较慢但余量更充足的 GPU。