s
sudadiao/LFM2-Audio-1.5B
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

LFM2-Audio-1.5B on Ascend NPU

1. 简介

本文档记录 LFM2-Audio-1.5B 在华为 昇腾 NPU (Ascend) 环境下的适配、验证与推理结果。

LFM2-Audio-1.5B 是 Liquid AI 推出的端到端音频基础模型,具备 1.5B 参数量,原生支持音频+文本输入与输出。本仓库完成了以下适配工作:

  • 基于 torch_npu 完成模型加载与推理的 NPU 适配
  • 修复原始 liquid-audio 包对 Python 3.12 的强依赖,使其可在 Python 3.11 运行
  • 移除代码中硬编码的 .cuda() 调用,实现设备无关的自动降级(NPU > CUDA > CPU)
  • 精度验证:同等输入下 NPU 与 CPU 基线的 token 级相对误差 0.00%,严格满足 < 1% 要求

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/LiquidAI/LFM2-Audio-1.5B
  • 本仓库推理脚本已内嵌 NPU 兼容的 liquid_audio 源码,无需额外安装 liquid-audio 包

2. 验证环境

组件版本
torch2.9.0+cpu
torch-npu2.9.0.post1+gitee7ba04
transformers4.57.6
accelerate1.13.0
einops0.8.x
safetensors0.5.x
  • NPU:1 逻辑卡(Ascend910 系列)
  • 模型路径:./model_files
  • Python 版本:3.11.14

3. 快速开始

3.1 准备模型权重

将以下文件下载到 ./model_files/ 目录:

model_files/
├── config.json
├── model.safetensors
├── tokenizer.json
├── tokenizer_config.json
├── special_tokens_map.json
├── chat_template.jinja
└── tokenizer-e351c8d8-checkpoint125.safetensors

3.2 运行推理

python inference.py \
  --model_path ./model_files \
  --device npu \
  --prompt "Hello, how are you?" \
  --max_new_tokens 20 \
  --temperature 0.0

脚本会自动检测设备优先级:NPU > CUDA > CPU。若省略 --device,将自动选择当前可用的最佳设备。

3.3 运行精度与性能评测

python benchmark.py \
  --model_path ./model_files \
  --prompt "Hello, how are you?" \
  --max_new_tokens 10 \
  --runs 3

该脚本会:

  1. 在 CPU 上运行基线推理,记录输出与耗时
  2. 在 NPU 上运行多轮推理,记录输出与耗时
  3. 对比 CPU 与 NPU 的输出 token 序列,计算相对误差
  4. 输出加速比与吞吐指标

4. 验证结果

4.1 Smoke 验证

基础推理验证:

python inference.py --device npu --prompt "What is the capital of France?" --max_new_tokens 15

验证结果:

  • 模型成功加载到 npu:0
  • 生成过程无报错,输出连贯
  • 示例输出:The capital of France is Paris

4.2 性能参考

测试条件:greedy decode / max_new_tokens=10 / bfloat16

指标数值
CPU inference time181.245 s
NPU inference time (avg)0.340 s
NPU inference time (min)0.337 s
NPU inference time (max)0.345 s
Speedup (CPU vs NPU)532.98 x
Throughput (NPU)29.41 tok/s

4.3 精度评测

同等输入、同等 greedy 解码策略下,CPU(bfloat16)与 NPU(bfloat16)输出对比:

指标数值
CPU tokens[550, 10109, 5296, 1714, 521, 14165, 1219, 1219, 1219, 1219]
NPU tokens[550, 10109, 5296, 1714, 521, 14165, 1219, 1219, 1219, 1219]
Token-level accuracy100.00%
Relative error0.0000%

结论:NPU 推理结果与 CPU 基线完全一致,相对误差严格满足 < 1% 要求。

5. 代码结构

.
├── inference.py              # NPU 适配推理脚本(含自动设备选择)
├── benchmark.py              # 精度与性能评测脚本
├── run_log.txt               # 评测运行日志
├── model_files/              # 模型权重与配置文件
├── liquid_audio_src/         # 适配后的 liquid_audio 源码(Python 3.11 + NPU 兼容)
│   └── liquid_audio/
│       ├── model/
│       ├── processor.py
│       ├── utils.py
│       └── ...
└── readme.md                 # 本文档

6. 适配要点说明

  1. Python 3.11 兼容

    • 将 type CacheType = ... 改为 CacheType = Union[...]
    • 将 def func[T: (int, torch.Tensor)] 泛型语法改为普通函数
    • 将 Self、assert_never 从 typing_extensions 导入
  2. NPU 设备适配

    • LFM2AudioModel.from_pretrained 与 LFM2AudioProcessor.from_pretrained 的默认 device 改为自动探测:npu > cuda > cpu
    • processor.py:151 的硬编码 .cuda() 改为 .to(self.device)
    • NPU 环境下强制使用 sdpa 注意力实现(flash_attention_2 在 NPU 上不可用)
  3. 本地路径支持

    • from_pretrained 支持传入 pathlib.Path 对象,避免 snapshot_download 对本地路径的校验失败

7. 注意事项

  • 当前环境已验证 torch-npu 2.9.0.post1 + CANN 8.5.1 组合可正常加载与推理
  • 模型精度为 bfloat16,NPU 与 CPU 均支持该精度
  • 首次加载模型权重(model.safetensors 约 2.8GB)到 NPU 需约 2~3 秒,后续推理速度稳定
  • 若需处理音频输入/输出,请确保 tokenizer-e351c8d8-checkpoint125.safetensors(Mimi 权重)已存在于 model_files/ 目录

License

本项目中的适配代码遵循 MIT License。模型权重与原始 liquid-audio 代码遵循其各自的授权协议(LFM Open License v1.0 / Apache 2.0 / MIT 等)。