本案例给出语音对话大模型MOSS-Speech在NPU环境部署,并基于torch_npu执行推理任务的迁移实践。
使用约束
| 依赖软件 | 版本 |
|---|---|
| 昇腾NPU驱动 | >=25.0.RC1.1商发版本 |
| 昇腾NPU固件 | >=25.0.RC1.1商发版本 |
| CANN Toolkit | >=8.2.RC1商发版本 |
| CANN Kernel | >=8.2.RC1商发版本 |
| CANN NNAL | >=8.2.RC1商发版本 |
硬件设备
| 设备型号 | NPU配置 |
|---|---|
| Atlas 800I A2 910B | 1卡 |
安装依赖包: pip install -r requirements.txt
MOSS-Speech推理依赖MOSS-Speech和MOSS-Speech-Codec
https://modelscope.cn/models/openmoss/MOSS-Speech
https://modelscope.cn/models/AI-ModelScope/MOSS-Speech-Codec
https://huggingface.co/spaces/OpenMOSS-Team/MOSS-Speech/tree/main
在环境依赖中,对diffusers/utils/dynamic_modules_utils.py进行修改
由于对cached_download不支持,对第28行注释,并做以下修改:
#from huggingface_hub import cached_download, hf_hub_download, model_info
from huggingface_hub import hf_hub_download, model_info此外,将288行的cached_download修改为hf_hub_download
在环境依赖中,对transformers/models/whisper/feature_extraction_whisper.py进行修改
将第319行修改为:
#input_features = extract_fbank_features(input_features[0], device)
input_features = extract_fbank_features(input_features[0], 'cpu')MOSS-Speech的Space包含TTS必备代码,并对MOSS-Speech/Matcha-TTS/matcha/models/components/transformer.py进行修改
第267行增加对bf16的转换:
norm_hidden_states.to(torch.bfloat16),对MOSS-Speech/cosyvoice/hifigan/generator.py进行修改,
#inverse_transform = torch.istft(torch.complex(real, img), self.istft_params["n_fft"], self.istft_params["hop_len"],
# self.istft_params["n_fft"], window=self.stft_window.to(magnitude.device))
inverse_transform = torch.istft(torch.complex(real, img).to("cpu"), self.istft_params["n_fft"], self.istft_params["hop_len"], self.i stft_params["n_fft"], window=self.stft_window.to("cpu"))infer.py是推理主入口,将Moss-Speech和Moss-Speech对TTS的引入加入到path中,示例:
sys.path.append("./MOSS-Speech-space/MOSS-Speech/")
sys.path.append("./MOSS-Speech-space/MOSS-Speech/Matcha-TTS/")此外,需要修改prompt_audio音频路径,model_path模型路径和codec_path路径。
python infer.py