Kimi-Audio音频大模型介绍、本地部署与开发

Source

目录

一、模型介绍

二、模型部署

 1、创建工作空间

2、下载模型

3、下载依赖

4、下载模型库 

5、下载glm4_tokenizer

6、代码编程修改


4 月 26 日,Moonshot AI正式宣布推出Kimi-Audio,一款全新的开源音频基础模型,旨在推动音频理解、生成和交互领域的技术进步。这一发布引发了全球AI社区的广泛关注,被认为是多模态AI发展的重要里程碑。Kimi-Audio-7B-Instruct基于Qwen2.5-7B架构,并结合Whisper技术,展现了强大的多功能性。

一、模型介绍

Kimi Audio被设计为一个通用的音频基础模型,能够在一个统一的框架内处理各种音频处理任务。主要功能包括:

通用功能:处理各种任务,如语音识别(ASR)、音频问答(AQA)、音频字幕(AAC)、语音情感识别(SER)、声音事件/场景分类(SEC/ASC)和端到端语音对话。

最先进的性能:在众多音频基准测试中取得SOTA结果(见评估和技术报告)。

大规模预训练:对超过1300万小时的各种音频数据(语音、音乐、声音)和文本数据进行预训练,实现强大的音频推理和语言理解。

新颖的架构:采用混合音频输入(连续声学+离散语义标记)和具有并行头的LLM核心来生成文本和音频标记。

高效推理:基于流匹配的块流式去标记器,用于低延迟音频生成。

开源:我们发布了代码、用于预训练和指令微调的模型检查点,以及一个全面的评估工具包,以促进社区的研究和开发。

模型地址:https://github.com/MoonshotAI/Kimi-Audio

论文地址:https://github.com/MoonshotAI/Kimi-Audio/blob/master/assets/kimia_report.pdf

模型数据:魔搭社区

模型架构:

测评结果: 

Kimi-Audio与以往音频语言模型在各类基准测试上的表现对比

语音识别方面,LibriSpeech英文测试集,Kimi-Audio的错误率(WER)只有1.28%,比Qwen2.5-Omni的2.37%还低一截。AISHELL-1中文:WER 0.60%,比上一代模型低一半。此外多场景、多语种、多环境,Kimi-Audio基本都是榜首。

音频理解方面,Kimi-Audio在MMAU、MELD、VocalSound、TUT2017等公开集上,分数都是最高。比如MMAU的“声音理解”类,Kimi-Audio得分73.27,超过其它竞品。

音频对话&音频聊天方面,VoiceBench的多项任务,Kimi-Audio都是第一,平均得分76.93。

Kimi-Audio的卓越性能得益于其庞大的训练数据集。据官方披露,该模型在超过1300万小时的多样化音频数据上进行训练,涵盖语音、音乐、环境音等多种类型。Moonshot AI还开源了Kimi-Audio的训练代码、模型权重以及评估工具包。

二、模型部署

环境 :ubuntu22.4 系统、内存32G、GPU 32G 英伟达V100、CPU 16核

Python 3.10.12

Pytorch 2.4.1

CUDA  12.1

前置部署请参照 

Ubuntu22.4部署及更新cuda11.8与cuda12.1-CSDN博客

 1、创建工作空间

mkdir /opt/workspace

2、下载模型

cd /opt/workspace
git clone https://github.moeyy.xyz/https://github.com/MoonshotAI/Kimi-Audio.git

 

3、下载依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

下载flash_attn依赖(这一步很重要,要不然代码程序无法执行)

pip install flash_attn

如果一直无法安装,可直接下载安装文件,然后再安装

cd /opt/workspace/
wget https://github.moeyy.xyz/https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.4.post1/flash_attn-2.7.4.post1+cu12torch2.4cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
pip install flash_attn-2.7.4.post1+cu12torch2.4cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

以上下载地址可参考:Releases · Dao-AILab/flash-attention · GitHub 

4、下载模型库 

模型库地址:魔搭社区

在/opt/workspace/Kimi-Audio/中创建文件夹moonshotai 

定位到目录

cd moonshotai

执行如下操作

sudo apt-get install git-lfs
git lfs  install
git clone https://www.modelscope.cn/moonshotai/Kimi-Audio-7B.git

5、下载glm4_tokenizer

为何要下载gml4,是因为源码中调用,官方代码中没有

 查看源码

发现glm4中竟然缺少文件,查看官网发现竟然超链接到GitHub - THUDM/GLM-4-Voice: GLM-4-Voice | 端到端中英语音对话模型

cd /opt/workspace/Kimi-Audio/kimia_infer/models/tokenizer
rm -fr glm4
git clone https://github.moeyy.xyz/https://github.com/THUDM/GLM-4-Voice.git
mv GLM-4-Voice glm4

 结果如下

6、代码编程修改

 将/opt/workspace/Kimi-Audio/infer.py文件中第九行内容moonshotai/Kimi-Audio-7B-Instruct修改为moonshotai/Kimi-Audio-7B

代码如下(已完善注释): 

# 导入必要的库
from kimia_infer.api.kimia import KimiAudio  # Kimi音频模型接口
import os  # 操作系统接口
import soundfile as sf  # 音频文件读写库


if __name__ == "__main__":
    # 初始化KimiAudio模型
    model = KimiAudio(
        model_path="moonshotai/Kimi-Audio-7B",  # 指定模型路径
        load_detokenizer=True,  # 加载detokenizer
    )

    # 设置采样参数
    sampling_params = {
        "audio_temperature": 0.8,  # 音频生成温度(音频情感波动性)
        "audio_top_k": 10,  # 音频生成的top-k采样
        "text_temperature": 0.0,  # 文本生成温度
        "text_top_k": 5,  # 文本生成的top-k采样
        "audio_repetition_penalty": 1.0,  # 音频重复惩罚因子
        "audio_repetition_window_size": 64,  # 音频重复窗口大小
        "text_repetition_penalty": 1.0,  # 文本重复惩罚因子
        "text_repetition_window_size": 16,  # 文本重复窗口大小
    }

    # ================= 第一部分:语音识别(ASR) =================
    # 构建消息列表,包含用户指令和音频输入
    messages = [
        {"role": "user", "message_type": "text", "content": "请将音频内容转换为文字。"},  # 文本指令
        {
            "role": "user",
            "message_type": "audio",
            "content": "test_audios/asr_example.wav",  # 音频文件路径
        },
    ]

    # 调用模型生成文本输出(语音转文字)
    wav, text = model.generate(messages, **sampling_params, output_type="text")
    print(">>> output text: ", text)  # 打印识别结果

    # ================= 第二部分:音频处理 =================
    # 创建输出目录
    output_dir = "test_audios/output"
    os.makedirs(output_dir, exist_ok=True)  # 如果目录不存在则创建
    
    # 构建只包含音频输入的消息
    messages = [
        {
            "role": "user",
            "message_type": "audio",
            "content": "test_audios/qa_example.wav",  # 输入音频文件
        }
    ]

    # 调用模型同时生成音频和文本输出
    wav, text = model.generate(messages, **sampling_params, output_type="both")
    
    # 保存生成的音频文件
    sf.write(
        os.path.join(output_dir, "output.wav"),  # 输出文件路径
        wav.detach().cpu().view(-1).numpy(),  # 处理音频数据
        24000,  # 采样率24kHz
    )
    print(">>> output text: ", text)  # 打印生成的文本

代码展示了如何使用KimiAudio模型进行音频处理任务。我来为您解释一下代码的主要功能:

  1. 首先导入必要的库:

    • KimiAudio:Kimi音频模型的接口
    • os:操作系统接口
    • soundfile:音频文件读写库
  2. 主要功能分为两部分:

第一部分 - 语音识别(ASR):

  • 加载KimiAudio模型,指定模型路径为"moonshotai/Kimi-Audio-7B-Instruct"
  • 设置采样参数,包括音频和文本生成的各种温度、top_k等参数
  • 构建消息列表,包含一条文本指令和一条音频输入
  • 调用模型生成文本输出(语音转文字)

第二部分 - 音频处理:

  • 创建输出目录
  • 构建只包含音频输入的消息
  • 调用模型同时生成音频和文本输出
  • 使用soundfile将生成的音频保存为WAV文件

注意事项:

  1. 代码中使用了相对路径"test_audios/"下的音频文件,请确保这些文件存在
  2. 输出音频采样率设为24000Hz
  3. 模型需要加载detokenizer(load_detokenizer=True)

这个示例展示了KimiAudio模型的两个主要功能:

  • 语音识别(将音频转为文字)
  • 音频生成/处理(输入音频生成新的音频)

6、代码调试

cd /opt/workspace/Kimi-Audio/
python3 infer.py