eldgw/medasr-ascend-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MedASR on Ascend NPU via transformers + torch_npu

1. 简介

本文档记录 google/medasr 在 华为昇腾 Atlas 800 A2 / A3 上的适配与验证结果。

MedASR 是 Google 发布的医学自动语音识别(ASR)模型,专门针对放射学(radiology)语音转录场景。模型架构为 lasr_ctc,非因果语言模型,无法直接通过 vLLM-Ascend 部署,需使用 transformers.AutoModel + torch_npu 进行原生推理。

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/google/medasr
  • 权重下载地址(HuggingFace):https://huggingface.co/google/medasr
  • 本验证基于 transformers 开发版(GitHub main)以获得 lasr_ctc 架构支持

2. 验证环境

组件版本
torch2.9.0+cpu
torch-npu2.9.0.post1+gitee7ba04
transformers5.8.0.dev0 (GitHub main)
huggingface_hub1.14.0
librosa0.11.0
  • NPU:Atlas 910B4 (32GB HBM)
  • 驱动:npu-smi 25.5.1
  • CANN:8.5.1
  • 模型路径:/opt/atomgit/models/medasr

3. 环境准备

3.1 确认昇腾设备

npu-smi info

需看到 NPU 状态为 OK。

3.2 安装依赖

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 链路,不影响使用。

4. 下载模型权重

推荐通过 ModelScope(国内高速)或 HuggingFace 镜像下载:

ModelScope(推荐)

from modelscope import snapshot_download
snapshot_download(
    "google/medasr",
    local_dir="/path/to/medasr"
)

HuggingFace 镜像

export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download google/medasr --local-dir /path/to/medasr

注意:google/medasr 为受限模型(gated model),下载前需在 HuggingFace 或 ModelScope 上接受使用协议。

5. NPU 推理脚本

以下脚本可直接在昇腾 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}")

6. Smoke 验证

使用模型自带 test_audio.wav 进行验证:

python medasr_npu_infer.py

验证结果:

  • Processor / Model / NPU 加载均成功
  • 推理输出为完整的放射学报告文本
  • 示例输出片段:
[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 ...

7. 性能参考

测试条件:单条 43.8s 音频(16kHz),Atlas 910B4,FP32。

指标数值
首帧冷启动~16.4 s
热启动平均 latency~0.31 s
最小 latency0.041 s
最大 latency1.396 s

首帧耗时较长主要是模型权重加载与图编译(ACL Graph)开销;后续推理因图缓存而显著加速。

8. 注意事项

  1. transformers 版本要求:lasr_ctc 架构在 transformers < 5.0 的稳定版中不存在,必须使用 GitHub main 分支或等效的开发版本。
  2. trust_remote_code:加载 Processor 和 Model 时均需设置 trust_remote_code=True。
  3. gated model:使用 ModelScope / HuggingFace 下载前,请先在接受协议页面点击同意。
  4. vLLM 不兼容:本模型为 encoder-decoder ASR 架构,不属于 vLLM-Ascend 的支持范围,请勿尝试通过 vllm serve 启动。
  5. NPU 图编译:首次推理会触发 ACL Graph 编译,耗时约 10–20s;重复调用时 latency 下降至 0.3s 左右。
  6. 音频格式:模型要求 16kHz 单声道;若输入为其他采样率,请先用 librosa.resample 转换。