本项目完成了 faster-whisper-large-v3-turbo 模型在华为昇腾 Ascend 910 NPU 上的适配、推理验证与精度评测。
faster-whisper 是基于 CTranslate2 的 OpenAI Whisper 模型的高性能实现,large-v3-turbo 是 Whisper Large V3 的蒸馏加速版本,支持多语言语音识别与翻译。
| 格式 | 来源 | 用途 |
|---|---|---|
| CTranslate2 (CT2) | Tiandong/faster-whisper-large-v3-turbo-ct2 | CPU 性能基线 |
| HuggingFace (HF) | openai/whisper-large-v3-turbo | NPU 推理 & CPU 精度基线 |
| 项目 | 规格 |
|---|---|
| NPU 型号 | Ascend 910 (2× 910_9362) |
| HBM 容量 | 64 GB × 2 |
| CPU 架构 | aarch64 (Kunpeng) |
| CANN 版本 | 8.5.1 |
| torch_npu 版本 | 2.9.0.post1+gitee7ba04 |
| Python 版本 | 3.11.14 |
# 安装依赖
pip install openai-whisper faster-whisper torch_npu transformers
pip install librosa numpy soundfile
# 下载 CT2 格式模型 (ModelScope)
pip install modelscope
modelscope download --model Tiandong/faster-whisper-large-v3-turbo-ct2
# 下载 HF 格式模型
python -c "import whisper; whisper.load_model('large-v3-turbo')"# NPU 推理
python inference.py --audio <audio_file> --backend npu --model large-v3-turbo
# CPU 推理 (基线)
python inference.py --audio <audio_file> --backend cpu-hf --model large-v3-turbo
# 双端推理 + 精度对比
python inference.py --audio <audio_file> --backend both --model large-v3-turbo
# 全后端测试 (CPU-HF + NPU + CT2)
python inference.py --audio <audio_file> --backend all --model large-v3-turbo| 参数 | 说明 | 可选值 |
|---|---|---|
--audio | 输入音频路径 | 支持 wav/mp3/flac |
--backend | 推理后端 | cpu-hf, npu, cpu-ct2, both, all |
--model | 模型版本 | tiny, base, small, medium, large-v3, large-v3-turbo |
--language | 语言代码 | en, zh, ja, ko, ... |
--output | 输出 JSON 路径 | 默认 inference_result.json |
--npu_device | NPU 设备 | 默认 npu:0 |
使用相同的模型权重(openai-whisper large-v3-turbo),在 CPU (float32) 和 NPU (float32) 上执行相同的语音识别任务,比较输出的字符级相似度和词错误率 (WER)。
| 指标 | CPU-HF (基线) | NPU (Ascend 910) | 结果 |
|---|---|---|---|
| 推理时间 | 65.73 s | 0.08 s | 821× 加速 |
| 输出文本 | . | . | 一致 |
| 字符相似度 | - | 100.00% | ✅ 通过 |
| 词错误率 (WER) | - | 0.00% | ✅ 通过 |
| 精度标准 | < 1% 误差 | 0.00% | ✅ 通过 |
NPU (Ascend 910) 上 large-v3-turbo 推理结果与 CPU 基线完全一致(字符相似度 100%,WER 0%),满足精度误差 < 1% 的要求,且推理速度提升 821 倍。
| 后端 | 模型 | 推理时间 | 加速比 (vs CPU-HF) |
|---|---|---|---|
| CPU-HF | large-v3-turbo | 65.73 s | 1× |
| NPU | large-v3-turbo | 0.08 s | 821× |
| CPU-CT2 | large-v3-turbo (CTranslate2) | 0.32 s | 205× |
| CPU-HF | medium | 31.05 s | 1× |
| NPU | medium | 0.09 s | 345× |
注:测试音频为 5 秒合成语音,CT2 后端因 VAD 过滤产生空输出。性能数据为单次推理实测值。
faster-whisper-npu/
├── inference.py # 主推理脚本 (CPU-HF / NPU / CT2 三后端支持)
├── eval_accuracy.py # 精度评测脚本
├── eval_performance.py # 性能评测脚本
├── generate_test_audio.py # 测试音频生成脚本
├── result_large_v3_turbo.json # 评测原始结果 (large-v3-turbo)
├── result_medium.json # 评测原始结果 (medium)
├── test_speech.wav # 测试音频样例
└── README.md # 本文档┌─────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Audio File │────▶│ librosa.load() │────▶│ 16kHz Mono │
└─────────────┘ └──────────────────┘ └──────┬───────┘
│
┌─────────────────────▼──────────────────────┐
│ Mel Spectrogram (n_mels=128) │
│ whisper.log_mel_spectrogram() │
└─────────────────────┬──────────────────────┘
│
┌───────────────────────────────┼───────────────────────────────┐
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Whisper Encoder │ │
│ │ Conv1D → GELU → Conv1D → GELU → Transformer Blocks │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Whisper Decoder (Cross-Attention) │ │
│ │ Token Embedding → Transformer Blocks → Linear │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Greedy Decode (Token by Token) │ │
│ │ ┌── Ascend 910 NPU ◀──┐ │ │
│ │ │ float32 Compute │ │ │
│ │ └─────────────────────┘ │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ ▼ │
│ Transcription │
└──────────────────────────────────────────────────────────────┘model.to("npu:0") 将 PyTorch 模型迁移至 NPUlibrosa 替代 whisper.load_audio 进行音频加载MIT