冬
gcw_IDzXRVNw/WeSpeaker-ResNet34-LM-MLX-Ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

WeSpeaker-ResNet34-LM-MLX 昇腾 NPU 部署指南

环境信息

项目版本/内容
设备Atlas 800I A2 (8x 910B3)
镜像quay.io/ascend/vllm-ascend:v0.13.0
Python3.11.14
PyTorch2.8.0+cpu
torch_npu2.8.0.post2
librosa0.11.0
scipy1.17.0

文件结构

/data/
├── WeSpeaker-ResNet34-LM-MLX/         # 原始模型权重
│   ├── model.safetensors
│   ├── config.json
│   ├── README.md
│   └── modeling_wespeaker.py          # 适配模型实现
└── WeSpeaker-ResNet34-LM-MLX-ascend/   # 适配代码
    ├── inference.py                   # 推理脚本
    ├── README.md                       # 本文档
    └── log.txt                         # 运行日志

创建容器

docker rm -f test-modelagent

docker run -itd --privileged --name=test-modelagent --net=host --shm-size=500g \
  --device=/dev/davinci0 \
  --device=/dev/davinci1 \
  --device=/dev/davinci2 \
  --device=/dev/davinci3 \
  --device=/dev/davinci4 \
  --device=/dev/davinci5 \
  --device=/dev/davinci6 \
  --device=/dev/davinci7 \
  --device=/dev/davinci_manager \
  --device=/dev/devmm_svm \
  --device=/dev/hisi_hdc \
  -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
  -v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
  -v /usr/local/sbin/:/usr/local/sbin/ \
  -v /var/log/npu/slog/:/var/log/npu/slog \
  -v /var/log/npu/profiling/:/var/log/npu/profiling \
  -v /var/log/npu/dump/:/var/log/npu/dump \
  -v /var/log/npu/:/usr/slog \
  -v /etc/hccn.conf:/etc/hccn.conf \
  -v /data:/data \
  quay.io/ascend/vllm-ascend:v0.13.0 \
  bash

安装依赖

容器已预装必要依赖,无需额外安装。

运行推理

精度测试

docker exec test-modelagent bash -c "cd /data/ysws/agentsp/WeSpeaker-ResNet34-LM-MLX-ascend && python inference.py --precision_test 2>&1 | tee log.txt"

音频推理

docker exec test-modelagent bash -c "source /usr/local/Ascend/ascend-toolkit/set_env.sh && cd /data/ysws/agentsp/WeSpeaker-ResNet34-LM-MLX-ascend && python3 inference.py --audio_path /tmp/test_audio.wav 2>&1 | tee log.txt"

参数说明

参数说明默认值
--model_path模型权重路径/data/ysws/agentsp/WeSpeaker-ResNet34-LM-MLX
--audio_path待推理音频路径必需(精度测试时不需要)
--precision_test运行精度测试False
--device运行设备npu:0
--no_warmup跳过预热阶段False

精度测试结果

========================================================
Precision Comparison: CPU vs NPU
========================================================
Max errors: sum=1.91e-06, mean=1.49e-08, std=2.98e-08
PASS: NPU precision within 1% of CPU
========================================================
PRECISION TEST PASSED
========================================================
指标阈值实测值状态
max_error_sum< 1e-31.91e-06✅ PASS
max_error_mean< 1e-51.49e-08✅ PASS
max_error_std< 1e-52.98e-08✅ PASS

输出示例

2026-05-11 07:14:52,750 - INFO - WeSpeaker-ResNet34-LM-MLX Ascend NPU Inference
2026-05-11 07:14:54,600 - INFO - Model loaded on device: npu:0
2026-05-11 07:14:54,600 - INFO - 开始预热...
2026-05-11 07:14:54,834 - INFO - 预热完成
2026-05-11 07:14:54,834 - INFO - 开始推理...
2026-05-11 07:14:54,837 - INFO - Inference time: 0.0045s
2026-05-11 07:14:54,837 - INFO - Embedding shape: torch.Size([1, 256])
2026-05-11 07:14:54,837 - INFO - 推理成功完成!

性能参考

适配方案单音频推理时间
预热后 NPU~4.5ms
首次推理 NPU~9s

模型说明

WeSpeaker-ResNet34-LM 是一个说话人嵌入模型,从 pyannote 的 WeSpeaker VoxCeleb ResNet34-LM 转换而来,BatchNorm 已融合到 Conv2d 中。

模型规格

  • 架构: ResNet34 + Statistics Pooling
  • 参数: ~6.6M
  • 输入: 80维 log-mel 频谱, 16kHz 采样率
  • 输出: 256维 L2 归一化说话人嵌入

输出格式

  • embedding: L2 归一化的说话人嵌入,形状 (1, 256)

注意事项

  1. 模型使用 NPU 进行推理加速
  2. 输出为 L2 归一化向量,可直接用于余弦相似度计算
  3. 首次推理较慢(包含模型加载和编译优化)
  4. 精度测试基于 state_dict tensor 的 CPU vs NPU 比较