mimi 是由 Kyutai 开发的高保真音频神经编解码器模型,将音频信号压缩为离散的音频 token,支持 12.5Hz 的帧率和 1.1kbps 的比特率。该模型结合了语义和声学信息,特别适用于语音语言模型训练和文本转语音系统。
mimi-ascend/
├── inference.py # 推理测试脚本
├── log.txt # 测试日志
├── README.md # 本文档
└── test_audio.txt # 测试音频说明source /usr/local/Ascend/ascend-toolkit/set_env.sh模型文件位于 /data/ysws/agentsp/5-15/mimi/ 目录下:
pip install transformers torch_npu torchaudio运行推理脚本进行音频编解码:
cd /data/ysws/agentsp/5-15/mimi-ascend/
# 使用默认测试音频
python3 inference.py
# 使用指定设备
python3 inference.py --device npu:0运行精度对比测试,验证 NPU 计算结果与 CPU 一致性:
cd /data/ysws/agentsp/5-15/mimi-ascend/
# 运行完整精度测试
python3 inference.py --mode precision_test| 参数 | 说明 | 默认值 |
|---|---|---|
--mode | 测试模式: inference 或 precision_test | inference |
--device | 运行设备 | npu:0 (自动检测) |
| 指标 | 实测值 | 阈值 | 状态 |
|---|---|---|---|
| 相对误差 | 0.0944% | < 1.00% | PASS |
| 操作 | 耗时 |
|---|---|
| CPU 推理时间 (1秒音频) | 1.754s |
| NPU 推理时间 (1秒音频) | 11.848s |
| 输入 | 输出形状 | 采样率 |
|---|---|---|
| 1秒 440Hz 正弦波 + 噪声 | [1, 1, 24000] | 24kHz |
结果: CPU 和 NPU 输出的相对误差仅 0.0944%,精度测试通过
============================================================
mimi NPU 推理测试
============================================================
Model dir: /data/ysws/agentsp/5-15/mimi
Output dir: /data/ysws/agentsp/5-15/mimi-ascend
NPU available: True
NPU device count: 8
NPU 0: Ascend910B3, total_memory=61.0GB
============================================================
Precision Test: CPU vs NPU
============================================================
Loading feature extractor...
Creating test audio...
Loading model for CPU...
Loading model for NPU...
Running inference on CPU...
CPU audio values shape: torch.Size([1, 1, 24000])
Running inference on NPU...
NPU audio values shape: torch.Size([1, 1, 24000])
CPU inference time: 1.754s
NPU inference time: 11.848s
Max absolute error: 5.133450e-04
Max relative error: 9.437594e-04 (0.0944%)
PASS: True (threshold: 1.0%)
============================================================
PRECISION TEST RESULT
============================================================
Relative error: 9.437594e-04
CPU time: 1.754s
NPU time: 11.848s
PASS: True
============================================================
Test Complete!
============================================================import torch
from transformers import MimiModel, AutoFeatureExtractor
MODEL_DIR = "/data/ysws/agentsp/5-15/mimi"
feature_extractor = AutoFeatureExtractor.from_pretrained(MODEL_DIR)
model = MimiModel.from_pretrained(MODEL_DIR)
model = model.to("npu:0")
model.eval()
audio_array = 0.5 * np.sin(2 * np.pi * 440 * np.linspace(0, 1, 24000))
inputs = feature_extractor(
raw_audio=audio_array,
sampling_rate=feature_extractor.sampling_rate,
return_tensors="pt"
)
with torch.no_grad():
outputs = model(inputs["input_values"].to("npu:0"))
audio_values = outputs.audio_values
print(f"Audio shape: {audio_values.shape}") # torch.Size([1, 1, 24000])inputs = feature_extractor(raw_audio=audio_array, sampling_rate=24000, return_tensors="pt")
with torch.no_grad():
encoder_outputs = model.encode(inputs["input_values"])
audio_values = model.decode(encoder_outputs.audio_codes)[0]
print(f"Encoded codes shape: {encoder_outputs.audio_codes.shape}")
print(f"Decoded audio shape: {audio_values.shape}")| 组件 | 说明 |
|---|---|
| encoder | 音频编码器,将音频转为离散 token |
| decoder | 音频解码器,从 token 重建音频 |
| quantizer | 残差向量量化器 |
从 config.json 提取的关键参数:
{
"audio_channels": 1,
"sampling_rate": 24000,
"frame_rate": 12.5,
"codebook_size": 2048,
"codebook_dim": 256,
"hidden_size": 512,
"num_hidden_layers": 8,
"num_attention_heads": 8
}A: 正常现象。NPU 首次运行需要进行模型编译和算子加载,后续推理会快很多。
A: 检查 NPU 驱动是否正确安装,确保 CANN 环境变量已 source。0.1-0.2% 的数值误差是正常的。
A: 可以对长音频进行分chunk处理,或者调整 feature_extractor 的 chunk_length_s 参数。
A: 对于小批量或短音频,CPU 可能更快。NPU 的优势在大批量或长音频推理时更明显。
本项目遵循 CC-BY-4.0 许可证