近两个月来,小智AI的受欢迎程度持续攀升。此前我们介绍了自建服务端的初步尝试,反响远超预期,后台收到了海量咨询。由于精力有限无法逐一回复,因此从本篇开始,将逐步整理成系列文章,集中解答大家最关心的问题。
为清晰阐述整体交互逻辑,我们当时手绘了一张架构图,供大家回顾。从图中可以直观看出,服务端延迟主要来自三个环节:语音转文本(ASR)、大语言模型(LLM)以及文本转语音(TTS),并且这三个环节均采用流式输入输出方式。
小智如何实现平均语音响应延迟低于800ms?这要从完整交互链路说起。今天,我们先深入拆解第一环——自动语音识别(ASR),为各位的技术选型提供参考。
ASR技术方案选型解析
ASR的技术方案主要有两条路径:要么接入外部API,要么在本地部署模型。本地部署又可细分为GPU推理和CPU推理两种方式。
接入外部语音识别API
我们重点测试了阿里云语音识别服务中的Paraformer系列。采用按量计费模式,sensevoice-v1价格为2.52元/小时,而paraformer-realtime-v2则便宜许多,仅0.864元/小时。但需注意API限流:sensevoice-v1的RPS为10,paraformer-realtime-v2为20。此外,Paraformer支持实时流式识别,而sensevoice不支持流式,且仅接受URL输入。
本地部署ASR模型
该方案也是小智开源服务端所采用的,涉及三个本地模型:VAD模型、ASR模型和声纹向量模型。本地部署的最大优势在于完全自主可控,当请求并发量上升时,能够灵活动态地扩缩容。下面,我们来实测这几个模型的延迟表现。
本地部署模型延迟实测
本次测试采用的模型分别为:VAD模型使用speech_fsmn_vad_zh-cn-16k-common-pytorch,ASR模型选用近期热门的SenseVoiceSmall,声纹向量模型则采用speech_eres2netv2w24s4ep4_sv_zh-cn_16k-common。
我们以一段4.3秒的音频作为样本,进行流式输入测试。代码逻辑为读取PCM数据,按照帧大小(60ms对应960字节)逐步输入给worker,最后再发送几段空白音频以触发识别结束。
实测数据如下表所示:
| 处理任务 | GPU推理延迟(秒) | CPU推理延迟(秒) |
|---|---|---|
| VAD | 0.005 | 0.007 |
| ASR (SenseVoice) | 0.07 | 0.36 |
| Embed | 0.04 | 0.49 |
注:上述测试所用GPU为Nvidia GTX 4080。
VAD模型参数规模较小,GPU推理的优势并不显著。然而,语音识别和声纹向量这两个模型若不使用GPU,用户体验将大幅下降。既然决定采用GPU,接下来需重点关注成本和配置问题。
基于GPU的推理方案与成本分析
好消息是,这三个模型对显存要求不高,4GB显存即可满足需求。不过,当前市场上主流GPU云厂商的最低配置方案通常从11GB显存起步,价格约为0.99元/小时。
若您有更低成本的方案,欢迎在评论区分享交流。
我们在趋动云上测试了最低配置方案,并编写了并发测试代码。测试结果显示:CPU满载运行,内存占用与显存占用情况清晰可见。GPU利用率基本维持在100%,显存峰值未超过4GB。内存方面至少需要保证4GB以上,主要用于处理客户端发送的音频数据。
程序启动后,会维护一个worker字典,每个会话拥有独立的worker实例,支持并行处理。然而,随着并发量上升,延迟也会明显增加。要实现负载均衡,需要在asr-server服务端实现相应逻辑,然后手动进行扩容。
最后算一笔经济账:单台实例每天成本为0.49×24=12元,一个月即360元。因此,打算自建服务端的朋友,光是ASR这一项开销,您可要考虑清楚?
当然,如果只是个人尝试,可以薅一波新手福利。许多平台为新注册用户赠送免费算力,不妨先体验一番。
