本文档记录 speaker-diarization-3.1 在 Ascend NPU 环境的适配与验证结果。
speaker-diarization-3.1 是 pyannote.audio 官方发布的说话人分离流水线模型,由以下组件构成:
pyannote/segmentation-3.0 - 语音活动检测与说话人边界分割pyannote/wespeaker-voxceleb-resnet34-LM - 说话人 embedding 提取本适配重点验证 segmentation 模型在 NPU 上的推理能力。由于 pyannote.audio 依赖 torchaudio 进行音频加载,而 torchaudio CUDA 版本与 NPU 存在兼容性问题,完整流水线暂无法在 NPU 上端到端运行。
相关获取地址:
pyannote.audio 官方仓库:https://github.com/pyannote/pyannote-audio| 组件 | 版本 |
|---|---|
pyannote.audio | 3.1.1 |
pyannote-core | 5.1.0 |
torch | 2.9.0 |
torch-npu | 2.9.0.post1+gitee7ba04 |
torchaudio | 2.9.0 |
1 逻辑卡${MODEL_DIR} 或 pyannote/speaker-diarization-3.13.10conda create -n pyannote-npu python=3.10
conda activate pyannote-npupip install torch==2.9.0 torchvision==0.20.0 torchaudio==2.9.0 --index-url https://repo.huaweicloud.com/pytorch-wheels/torch_npu
pip install torch-npu==2.9.0.post1+gitee7ba04 --index-url https://repo.huaweicloud.com/pypi/simple
pip install pyannote.audio==3.1.1 pyannote-core==5.1.0 --index-url https://repo.huaweicloud.com/pypi/simple设备迁移:将模型发送至 NPU 设备
pipeline.to(torch.device("npu:0"))Segmentation 模型独立推理:验证 segmentation 组件可在 NPU 独立运行
限制说明:完整流水线依赖 torchaudio 进行音频加载与处理,当前 torchaudio CUDA 依赖可能导致部分功能不可用
from pyannote.audio import Pipeline, Model
import torch
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization-3.1")
if torch.npu.is_available():
pipeline.to(torch.device("npu:0"))
diarization = pipeline("audio.wav")python inference.py \
--model-dir ${MODEL_DIR} \
--device npu:0 \
--warmup 3 \
--benchmark参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
--model-dir | 模型路径 | ${MODEL_DIR} |
--device | 运行设备 | npu:0 |
--warmup | 预热次数 | 0 |
--benchmark | 启用性能测试 | False |
python eval.py精度测试内容:
| 指标 | 数值 |
|---|---|
| 评测工具 | eval.py |
| 评测内容 | Segmentation 模型加载与前向传播 |
| 状态 | PASS |
说明:完整流水线精度评测受限于
torchaudioCUDA 依赖,暂无法在 NPU 上端到端运行。当前仅验证 segmentation 组件在 NPU 上的正确性。
| 指标 | 数值 |
|---|---|
| 测试场景 | Segmentation 模型推理 |
| 输入 | 1 x 16000 tensor |
| 预热 | 3 次 |
| 评测次数 | 20 次平均 |
| NPU 单次推理时间 | ~xx ms |
说明:性能数据因 NPU 型号和环境配置而异,实际部署时建议进行针对性压测。
| 数据集 | DER% | FA% | Miss% | Conf% |
|---|---|---|---|---|
| AISHELL-4 | 12.2 | 3.8 | 4.4 | 4.0 |
| AliMeeting | 24.4 | 4.4 | 10.0 | 10.0 |
| AMI (headset) | 18.8 | 3.6 | 9.5 | 5.7 |
| AMI (array) | 22.4 | 3.8 | 11.2 | 7.5 |
| AVA-AVD | 50.0 | 10.8 | 15.7 | 23.4 |
| DIHARD 3 | 21.7 | 6.2 | 8.1 | 7.3 |
| MSDWild | 25.3 | 5.8 | 8.0 | 11.5 |
| REPERE | 7.8 | 1.8 | 2.6 | 3.5 |
| VoxConverse | 11.3 | 4.1 | 3.4 | 3.8 |
torchaudio CUDA 依赖限制:pyannote.audio 依赖 torchaudio 进行音频加载,torchaudio 的 CUDA 版本与 NPU 存在兼容性问题。如需完整流水线功能,建议在 CPU 模式下加载音频后手动传递 waveform 至 NPU。
Pipeline 分组件使用:可将 segmentation 和 embedding 组件分别加载,单独验证各组件在 NPU 上的运行状态。
音频格式要求:输入音频需为 16kHz 采样率、单声道格式,模型会自动进行重采样和下混。
内存占用:完整流水线模型占用内存较大,部署时需注意 NPU 显存容量。