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

encodec_24khz Ascend NPU 部署指南

项目简介

encodec_24khz 是 Meta AI 开发的高保真神经音频编解码器 (Neural Audio Codec),能够将音频信号压缩到低比特率同时保持高质量音质。该模型基于深度学习技术,支持实时音频编码和解码,适用于语音压缩、音乐压缩等场景。

特性

  • 支持 Ascend NPU 推理加速
  • CPU vs NPU 精度对比测试 (< 1% 误差)
  • 24kHz 采样率音频处理
  • 支持多码率 (1.5, 3.0, 6.0, 12.0, 24.0 kbps)
  • 实时音频编解码能力

环境要求

  • 硬件: 华为 Ascend 910 系列 NPU
  • CANN: 8.0.RC1 或更高版本
  • PyTorch: 2.0+ with torch_npu
  • Docker: 容器名称 test-modelagent
  • transformers: 4.31+

目录结构

encodec_24khz-ascend/
├── inference.py          # 推理测试脚本
├── log.txt               # 测试日志
├── README.md             # 本文档
├── test_audio.npy        # 测试音频样本
├── test_sample.txt       # 测试样本说明
├── inference_result.json  # 推理结果
└── precision_result.json # 精度测试结果

部署步骤

1. 进入容器

docker exec -it test-modelagent bash

2. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

3. 准备模型文件

模型文件位于 /data/ysws/agentsp/5-16/encodec_24khz/facebook/encodec_24khz/ 目录下:

  • model.safetensors - 模型权重 (约 93MB)
  • config.json - 模型配置
  • preprocessor_config.json - 预处理器配置
  • pytorch_model.bin - PyTorch 权重

4. 安装依赖

pip install transformers torch_npu -i https://pypi.huaweicloud.com/repository/pypi/simple/

使用方式

方式一:普通推理模式

运行推理脚本进行音频编码和解码:

cd /data/ysws/agentsp/5-16/encodec_24khz-ascend/

python3 inference.py --mode inference

方式二:精度测试模式 (CPU vs NPU)

运行精度对比测试,验证 NPU 计算结果与 CPU 一致性:

cd /data/ysws/agentsp/5-16/encodec_24khz-ascend/

python3 inference.py --mode precision_test

方式三:完整测试 (推理 + 精度)

cd /data/ysws/agentsp/5-16/encodec_24khz-ascend/

python3 inference.py --mode all

命令行参数说明

参数说明默认值
--mode测试模式: inference, precision_test 或 allall

测试验证

精度测试结果

指标实测值阈值状态
最大相对误差0.7452%< 1.00%PASS
最大绝对误差2.19e-02--
CPU 推理时间1.372s--
NPU 推理时间0.052s--
加速比26.25x> 1xPASS

性能数据

操作耗时
NPU 编码时间 (1秒音频)8.285s
NPU 解码时间 (1秒音频)2.727s
NPU 前向传播时间0.414s
精度测试 NPU 推理0.052s

推理结果示例

输入音频: 1秒, 24kHz采样率, 单声道 输出音频: 1秒, 24kHz采样率, 单声道 编码后码本形状: torch.Size([1, 1, 2, 75])

Python API 使用示例

基本音频编解码

import torch
from transformers import EncodecModel, AutoProcessor

MODEL_DIR = "/data/ysws/agentsp/5-16/encodec_24khz/facebook/encodec_24khz"

model = EncodecModel.from_pretrained(MODEL_DIR)
processor = AutoProcessor.from_pretrained(MODEL_DIR)

model = model.to("npu:0").eval()

audio = torch.randn(24000)
inputs = processor(raw_audio=audio.numpy(), sampling_rate=24000, return_tensors="pt")
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    output = model(**inputs)

audio_values = output.audio_values

编码后解码

encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"])
decoded = model.decode(encoder_outputs.audio_codes, encoder_outputs.audio_scales, inputs["padding_mask"])

模型结构

  • 架构类型: EncodecModel
  • 采样率: 24000 Hz
  • 音频通道: 1 (单声道)
  • 码本维度: 128
  • 码本大小: 1024
  • 量化器数量: 2
组件说明
encoder音频编码器,将波形转为离散码
decoder音频解码器,从码恢复波形
quantizer矢量量化器,压缩表示

推理参数配置

从 config.json 提取的关键参数:

{
  "audio_channels": 1,
  "codebook_dim": 128,
  "codebook_size": 1024,
  "compress": 2,
  "hidden_size": 128,
  "num_filters": 32,
  "num_residual_layers": 1,
  "sampling_rate": 24000,
  "target_bandwidths": [1.5, 3.0, 6.0, 12.0, 24.0],
  "use_causal_conv": true
}

常见问题

Q: 精度测试失败?

A: 检查 NPU 驱动是否正确安装。0.7% 的数值误差是正常的,因为 NPU 和 CPU 使用不同的计算精度和算子实现。

Q: 推理时间较长?

A: 首次推理需要编译算子。后续推理会显著加快。编码时间 > 解码时间是正常的,因为编码涉及量化操作。

Q: 如何处理不同采样率的音频?

A: 在输入前需要将音频重采样到 24kHz。可以在预处理时使用 librosa 或 scipy.signal 进行重采样。

测试日志

============================================================
Encodec 24kHz NPU Test
Model: facebook/encodec_24khz
Output: /data/ysws/agentsp/5-16/encodec_24khz-ascend
============================================================

============================================================
Encodec Inference Test (NPU)
============================================================
Device: npu:0
Model: /data/ysws/agentsp/5-16/encodec_24khz/facebook/encodec_24khz
Loading model...
Loading weights: 100%|██████████| 252/252 [00:00<00:00, 5608.67it/s]
Model loaded successfully
Input audio shape: torch.Size([1, 24000])
Sampling rate: 24000 Hz
Duration: 1 sec
Processed input shape: torch.Size([1, 1, 24000])
Running encoder...
Encoded codes shape: torch.Size([1, 1, 2, 75])
Encoded scales: [None]
Encoding time: 8.285s
Running decoder...
Decoded audio shape: torch.Size([1, 1, 24000])
Decoding time: 2.727s
Total inference time: 11.012s

Running full encode-decode forward pass...
Forward pass output shape: torch.Size([1, 1, 24000])
Forward pass time: 0.414s

Inference result saved to /data/ysws/agentsp/5-16/encodec_24khz-ascend/inference_result.json

============================================================
Precision Test (CPU vs NPU)
============================================================
Using device: npu:0
Loading model on CPU...
Loading weights: 100%|██████████| 252/252 [00:00<00:00, 8297.73it/s]
Loading model on npu:0...
Loading weights: 100%|██████████| 252/252 [00:00<00:00, 9926.79it/s]
Loading processor...
Test audio shape: torch.Size([1, 24000])
Running inference on CPU...
Running inference on NPU...
CPU inference time: 1.372s
NPU inference time: 0.052s
Speedup: 26.25x
Max absolute error: 2.193899e-02
Max relative error: 0.7452% (threshold: 1.0%)
Status: PASS

Precision result saved to /data/ysws/agentsp/5-16/encodec_24khz-ascend/precision_result.json

============================================================
Creating Test Audio Sample
============================================================
Saved test audio: /data/ysws/agentsp/5-16/encodec_24khz-ascend/test_audio.npy (shape: (24000,))
Saved test sample info: /data/ysws/agentsp/5-16/encodec_24khz-ascend/test_sample.txt

============================================================
Test Complete!
============================================================

参考链接

  • 原始模型: https://huggingface.co/facebook/encodec_24khz
  • 论文: EnCodec: End-to-End Neural Audio Codec
  • GitHub: facebookresearch/encodec

许可证

本项目遵循 Apache-2.0 许可证