#+NPU 标签:本模型已在华为昇腾 Ascend910 NPU 上完成适配和验证
本文档记录 nvidia/parakeet-tdt-0.6b-v2 在 Ascend910 NPU 环境的适配、部署与验证结果。parakeet-tdt-0.6b-v2 是一个 6 亿参数的英文自动语音识别(ASR)模型,基于 FastConformer-TDT 架构,支持标点符号、大写和准确的时间戳预测。
| 属性 | 值 |
|---|---|
| 模型架构 | FastConformer Encoder (24层, d_model=1024, 8头) + TDT Decoder |
| 参数量 | 617.83M |
| 词表 | BPE SentencePiece, 1024 tokens |
| 输入 | 16kHz 单声道音频 (WAV/FLAC) |
| 输出 | 带标点和大写的文字转录 |
| 训练框架 | NeMo 2.4 |
| 组件 | 版本 |
|---|---|
nemo-toolkit | 2.7.3 |
torch | 2.9.0+cpu |
torch-npu | 2.9.0.post1+gitee7ba04 |
transformers | 4.57.6 |
omegaconf | 2.3.0 |
python | 3.11.14 |
| NPU 驱动 | Ascend910 (npu-smi 25.5.2) |
| NPU 数量 | 2 逻辑卡 (HBM 64GB/卡) |
# 安装 NeMo ASR 工具包
pip install nemo_toolkit['asr']
# 安装音频处理库
pip install soundfile librosa# 从 GitCode 克隆
git clone https://gitcode.com/hf_mirrors/nvidia/parakeet-tdt-0.6b-v2.git
cd parakeet-tdt-0.6b-v2
# 下载 LFS 权重文件(~2.5GB)
# 方式1: git-lfs
git lfs pull
# 方式2: Python git-lfs
pip install git-lfs
python3 -c "
import git_lfs
git_lfs.fetch('.', verbose=1)
"# LibriSpeech 测试样本
wget https://dldata-public.s3.us-east-2.amazonaws.com/2086-149220-0033.wavpython scripts/inference.py \
--nemo parakeet-tdt-0.6b-v2.nemo \
--audio test_sample.wav \
--device cpupython scripts/inference.py \
--nemo parakeet-tdt-0.6b-v2.nemo \
--audio test_sample.wav \
--device npu:0import nemo.collections.asr as nemo_asr
model = nemo_asr.models.ASRModel.restore_from(
"parakeet-tdt-0.6b-v2.nemo", map_location="cpu"
)
model.eval()
model = model.to("npu:0")
output = model.transcribe(["test_sample.wav"])
print(output[0].text)python scripts/inference.py \
--nemo parakeet-tdt-0.6b-v2.nemo \
--audio_dir ./test_audio \
--device npu:0 \
--timestampsCPU 推理结果作为参考基线,NPU 推理结果作为假设,计算词错误率(Word Error Rate,WER)。使用完全相同的模型权重和推理参数。
python scripts/accuracy_eval.py \
--nemo parakeet-tdt-0.6b-v2.nemo \
--audio_dir test_audio \
--wer_threshold 1.0| 指标 | 数值 |
|---|---|
| 测试样本数 | 1 |
| 平均 WER | 0.000% |
| 最大 WER | 0.000% |
| 精确匹配 | True |
| 阈值 | 1.0% |
| 结论 | PASS |
CPU 输出和 NPU 输出完全一致:
CPU: "Well, I don't wish to see it any more, observed Phebe, turning away her eyes. It is certainly very like the old portrait."
NPU: "Well, I don't wish to see it any more, observed Phebe, turning away her eyes. It is certainly very like the old portrait."
NPU 推理与 CPU 推理误差为 0%,远低于 1% 的精度要求。
测试条件:单条音频 (7.4s, 16kHz mono, LibriSpeech)。
| 指标 | CPU (PyTorch) | NPU (Ascend910) |
|---|---|---|
| 推理时间 | ~12.1s | ~12.0s |
| RTF (Real-Time Factor) | ~1.63 | ~1.62 |
| 音频时长 | 7.4s | 7.4s |
说明: 当前环境无 NVIDIA GPU 可用。NeMo 的
transcribe()方法包含预处理/后处理管线(特征提取、tokenizer 编解码),这部分在 CPU 执行。NPU 主要承担 Encoder/Decoder/Joint 网络的前向计算。如使用 NVIDIA A100/H100,RTF 通常可达 0.01-0.05。
NeMo 2.7.3 通过 PyTorch 的 .to(device) 机制原生支持设备迁移。适配无需修改 NeMo 源码:
model = model.to("npu:0")restore_from(..., map_location='cpu') 确保权重先加载到 CPU,再整体迁移到 NPU# NPU 内存分配优化
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:Trueparakeet-tdt-0.6b-v2/
├── README.md # 本文档
├── parakeet-tdt-0.6b-v2.nemo # 模型权重 (~2.5GB LFS)
├── extracted/ # 模型解压目录
│ ├── model_config.yaml # 模型配置 (FastConformer-TDT)
│ ├── model_weights.ckpt # PyTorch 权重
│ ├── *_tokenizer.model # SentencePiece 分词器
│ └── *_vocab.txt # BPE 词表
├── test_sample.wav # LibriSpeech 测试音频
├── test_audio/ # 评测音频目录
├── accuracy_results.json # 精度评测结果
├── perf_results.json # 性能基准结果
├── logs/ # 运行日志
├── scripts/
│ ├── inference.py # CPU/NPU 推理脚本
│ ├── accuracy_eval.py # 精度评测 (WER)
│ ├── perf_benchmark.py # 性能基准
│ └── download_test_samples.py # 测试样本下载
└── screenshots/ # 验证截图