-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
sherpa-onnx 的 Go API 来处理长音频(比如一段 21 分钟的 WAV 音频),处理流程是:离线说话人分离 + 离线 ASR (SenseVoice)。
我已经加上了 -DSHERPA_ONNX_ENABLE_GPU=ON 参数,自己从源码编译了带有 CUDA 支持的 .so 共享库,并替换了 Go module 缓存中的文件,成功启用了 GPU 加速。
在测试中我发现,ASR 解码部分的 GPU 加速非常明显,速度极快;但是说话人分离这一步,处理 21 分钟的音频需要将近 5 分钟,这在我们后续处理几小时的长录音时会遇到严重的性能瓶颈。
以下是我的环境和配置信息:
- 运行环境
系统: Linux (基于 AutoDL 容器)GPU: NVIDIA GeForce RTX 3090 (24GB 显存)CUDA 版本: 12.8 / 13.0开发语言: Go (github.com/k2-fsa/sherpa-onnx-go)测试音频: 21.2 分钟 (16000Hz, 单声道 Mono, WAV)
- 使用的模型
分割模型: sherpa-onnx-pyannote-segmentation-3-0/model.onnx
声纹嵌入模型: 3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx
ASR 模型: sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/model.int8.onnx (SenseVoice int8 量化版)
在 RTX 3090 上,
OfflineSpeakerDiarization (Pyannote + 3DSpeaker) 处理 21 分钟录音耗时约 5 分钟,这个速度是符合预期的正常表现吗?还是我的参数配置(比如缺少什么多线程参数或者内部 Provider 处理问题)不对?在目前架构下,聚类(Clustering)步骤是不是纯 CPU 运行的?这部分是否是不可优化的核心瓶颈?对于长时间录音,目前库里有没有更小、更快的分割/声纹模型可以替换,能够在牺牲一点点精度的情况下来大幅度换取速度?如果业务上确实需要处理 6 小时级别的超大音频,且强制要求区分说话人,官方是否有其他工程上的架构或优化建议?