本文档记录 google/medasr 在 华为昇腾 Atlas 800 A2 / A3 上的适配与验证结果。
MedASR 是 Google 发布的医学自动语音识别(ASR)模型,专门针对放射学(radiology)语音转录场景。模型架构为 lasr_ctc,非因果语言模型,无法直接通过 vLLM-Ascend 部署,需使用 transformers.AutoModel + torch_npu 进行原生推理。
相关获取地址:
transformers 开发版(GitHub main)以获得 lasr_ctc 架构支持| 组件 | 版本 |
|---|---|
torch | 2.9.0+cpu |
torch-npu | 2.9.0.post1+gitee7ba04 |
transformers | 5.8.0.dev0 (GitHub main) |
huggingface_hub | 1.14.0 |
librosa | 0.11.0 |
Atlas 910B4 (32GB HBM)npu-smi 25.5.18.5.1/opt/atomgit/models/medasrnpu-smi info需看到 NPU 状态为 OK。
pip install torch==2.9.0 --index-url https://download.pytorch.org/whl/cpu
pip install torch_npu==2.9.0.post1
pip install git+https://github.com/huggingface/transformers.git
pip install huggingface_hub>=1.14.0
pip install librosa注意:lasr_ctc 架构目前仅在 transformers 开发版(GitHub main)中可用,尚未发布到 PyPI 稳定版。安装开发版后,vllm-ascend 的依赖约束可能会报警告,但本模型不走 vLLM 链路,不影响使用。
推荐通过 ModelScope(国内高速)或 HuggingFace 镜像下载:
from modelscope import snapshot_download
snapshot_download(
"google/medasr",
local_dir="/path/to/medasr"
)export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download google/medasr --local-dir /path/to/medasr注意:google/medasr 为受限模型(gated model),下载前需在 HuggingFace 或 ModelScope 上接受使用协议。
以下脚本可直接在昇腾 NPU 上完成单条语音的 ASR 推理:
#!/usr/bin/env python3
"""MedASR NPU 单条推理示例"""
import time
import torch
import torch_npu
import librosa
from transformers import AutoModel, AutoProcessor
MODEL_PATH = "/path/to/medasr"
AUDIO_PATH = f"{MODEL_PATH}/test_audio.wav"
DEVICE = "npu"
# 1. 加载 Processor 与模型
processor = AutoProcessor.from_pretrained(MODEL_PATH, trust_remote_code=True)
model = AutoModel.from_pretrained(
MODEL_PATH,
trust_remote_code=True,
dtype=torch.float32,
)
model = model.to(DEVICE)
model.eval()
# 2. 加载音频(16kHz 单声道)
audio, sr = librosa.load(AUDIO_PATH, sr=16000)
# 3. 预处理
inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
inputs = {
k: v.to(DEVICE) if isinstance(v, torch.Tensor) else v
for k, v in inputs.items()
}
# 4. NPU 推理
with torch.no_grad():
start = time.time()
outputs = model(**inputs)
torch.npu.synchronize()
elapsed = time.time() - start
# 5. 解码
predicted_ids = torch.argmax(outputs.logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)[0]
print(f"推理耗时: {elapsed:.3f}s")
print(f"识别结果: {transcription}")使用模型自带 test_audio.wav 进行验证:
python medasr_npu_infer.py验证结果:
[EXAM TYPE] CT chest PE protocol ...
[INDICATION] 54-year-old female, shortness of breath, evaluate for PE ...
[FINDINGS] ... The main PA is patent ...
[IMPRESSION] Acute segmental PE, right lower lobe ...测试条件:单条 43.8s 音频(16kHz),Atlas 910B4,FP32。
| 指标 | 数值 |
|---|---|
| 首帧冷启动 | ~16.4 s |
| 热启动平均 latency | ~0.31 s |
| 最小 latency | 0.041 s |
| 最大 latency | 1.396 s |
首帧耗时较长主要是模型权重加载与图编译(ACL Graph)开销;后续推理因图缓存而显著加速。
lasr_ctc 架构在 transformers < 5.0 的稳定版中不存在,必须使用 GitHub main 分支或等效的开发版本。trust_remote_code=True。vllm serve 启动。librosa.resample 转换。