Qwen2 Lora LLM微调训练教程

Github:https://github.com/datawhalechina/self-llm/tree/master

 本项目是一个围绕开源大模型、针对国内初学者、基于 Linux 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者更好地使用开源大模型,帮助开源、自由的大模型更快融入到普通学习者的生活中。

  本项目的主要内容包括:

  1. 基于 Linux 平台的开源 LLM 环境配置指南,针对不同模型要求提供不同的详细环境配置步骤;
  2. 针对国内外主流开源 LLM 的部署使用教程,包括 LLaMA、ChatGLM、InternLM 等;
  3. 开源 LLM 的部署应用指导,包括命令行调用、在线 Demo 部署、LangChain 框架集成等;
  4. 开源 LLM 的全量微调、高效微调方法,包括分布式全量微调、LoRA、ptuning 等。

环境配置

在完成基本环境配置和本地模型部署的情况下,你还需要安装一些第三方库,可以使用以下命令:

python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install modelscope==1.18.0
pip install transformers==4.44.2
pip install streamlit==1.24.0
pip install sentencepiece==0.2.0
pip install accelerate==0.34.2
pip install datasets==2.20.0
pip install peft==0.11.1

模型下载

使用 modelscope 中的 snapshot_download 函数下载模型,第一个参数为模型名称,参数 cache_dir 为模型的下载路径。

在 /root/autodl-tmp 路径下新建 model_download.py 文件并在其中输入以下内容,粘贴代码后请及时保存文件,如下图所示。并运行 python /root/autodl-tmp/model_download.py 执行下载,模型大小为 15GB,下载模型大概需要 5 分钟。

import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('qwen/Qwen2.5-7B-Instruct', cache_dir='/root/autodl-tmp', revision='master')

指令集构建

LLM 的微调一般指指令微调过程。所谓指令微调,是说我们使用的微调数据形如:

{
  "instruction": "回答以下用户问题,仅输出答案。",
  "input": "1+1等于几?",
  "output": "2"
}

其中,instruction 是用户指令,告知模型其需要完成的任务;input 是用户输入,是完成用户指令所必须的输入内容;output 是模型应该给出的输出。

即我们的核心训练目标是让模型具有理解并遵循用户指令的能力。因此,在指令集构建时,我们应针对我们的目标任务,针对性构建任务指令集。例如,在本节我们使用由笔者合作开源的 Chat-甄嬛 项目作为示例,我们的目标是构建一个能够模拟甄嬛对话风格的个性化 LLM,因此我们构造的指令形如:

{
  "instruction": "你是谁?",
  "input": "",
  "output": "家父是大理寺少卿甄远道。"
}

我们所构造的全部指令数据集在根目录下。

数据格式化

Lora 训练的数据是需要经过格式化、编码之后再输入给模型进行训练的,如果是熟悉 Pytorch 模型训练流程的同学会知道,我们一般需要将输入文本编码为 input_ids,将输出文本编码为 labels,编码之后的结果都是多维的向量。我们首先定义一个预处理函数,这个函数用于对每一个样本,编码其输入、输出文本并返回一个编码后的字典:

def process_func(example):
    MAX_LENGTH = 384    # Llama分词器会将一个中文字切分为多个token,因此需要放开一些最大长度,保证数据的完整性
    input_ids, attention_mask, labels = [], [], []
    instruction = tokenizer(f"<|im_start|>system\n现在你要扮演皇帝身边的女人--甄嬛<|im_end|>\n<|im_start|>user\n{example['instruction'] + example['input']}<|im_end|>\n<|im_start|>assistant\n", add_special_tokens=False)  # add_special_tokens 不在开头加 special_tokens
    response = tokenizer(f"{example['output']}", add_special_tokens=False)
    input_ids = instruction["input_ids"] + response["input_ids"] + [tokenizer.pad_token_id]
    attention_mask = instruction["attention_mask"] + response["attention_mask"] + [1]  # 因为eos token咱们也是要关注的所以 补充为1
    labels = [-100] * len(instruction["input_ids"]) + response["input_ids"] + [tokenizer.pad_token_id]
    if len(input_ids) > MAX_LENGTH:  # 做一个截断
        input_ids = input_ids[:MAX_LENGTH]
        attention_mask = attention_mask[:MAX_LENGTH]
        labels = labels[:MAX_LENGTH]
    return {
        "input_ids": input_ids,
        "attention_mask": attention_mask,
        "labels": labels
    }

Qwen2 采用的 Prompt Template格式如下:

<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
你是谁?<|im_end|>
<|im_start|>assistant
我是一个有用的助手。<|im_end|>

加载 tokenizer 和半精度模型

模型以半精度形式加载,如果你的显卡比较新的话,可以用 torch.bfolat形式加载。对于自定义的模型一定要指定 trust_remote_code参数为 True

tokenizer = AutoTokenizer.from_pretrained('/root/autodl-tmp/qwen/Qwen2.5-7B-Instruct/', use_fast=False, trust_remote_code=True)

model = AutoModelForCausalLM.from_pretrained('/root/autodl-tmp/qwen/Qwen2.5-7B-Instruct/', device_map="auto",torch_dtype=torch.bfloat16)

定义 LoraConfig

LoraConfig这个类中可以设置很多参数,但主要的参数没多少,简单讲一讲,感兴趣的同学可以直接看源码。

  • task_type:模型类型
  • target_modules:需要训练的模型层的名字,主要就是 attention部分的层,不同的模型对应的层的名字不同,可以传入数组,也可以字符串,也可以正则表达式。
  • rlora的秩,具体可以看 Lora原理
  • lora_alphaLora alaph,具体作用参见 Lora 原理

Lora的缩放是啥嘞?当然不是 r(秩),这个缩放就是 lora_alpha/r, 在这个 LoraConfig中缩放就是 4 倍。

config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
    inference_mode=False, # 训练模式
    r=8, # Lora 秩
    lora_alpha=32, # Lora alaph,具体作用参见 Lora 原理
    lora_dropout=0.1# Dropout 比例
)

自定义 TrainingArguments 参数

TrainingArguments这个类的源码也介绍了每个参数的具体作用,当然大家可以来自行探索,这里就简单说几个常用的。

  • output_dir:模型的输出路径
  • per_device_train_batch_size:顾名思义 batch_size
  • gradient_accumulation_steps: 梯度累加,如果你的显存比较小,那可以把 batch_size 设置小一点,梯度累加增大一些。
  • logging_steps:多少步,输出一次 log
  • num_train_epochs:顾名思义 epoch
  • gradient_checkpointing:梯度检查,这个一旦开启,模型就必须执行 model.enable_input_require_grads(),这个原理大家可以自行探索,这里就不细说了。
args = TrainingArguments(
    output_dir="./output/Qwen2.5_instruct_lora",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    logging_steps=10,
    num_train_epochs=3,
    save_steps=100,
    learning_rate=1e-4,
    save_on_each_node=True,
    gradient_checkpointing=True
)

使用 Trainer 训练

trainer = Trainer(
    model=model,
    args=args,
    train_dataset=tokenized_id,
    data_collator=DataCollatorForSeq2Seq(tokenizer=tokenizer, padding=True),
)
trainer.train()

加载 lora 权重推理

训练好了之后可以使用如下方式加载 lora权重进行推理:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from peft import PeftModel

model_path = '/root/autodl-tmp/qwen/Qwen2.5-7B-Instruct/'
lora_path = 'lora_path'

# 加载tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_path)

# 加载模型
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto",torch_dtype=torch.bfloat16)

# 加载lora权重
model = PeftModel.from_pretrained(model, model_id=lora_path, config=config)

prompt = "你是谁?"
messages = [
    {"role": "system", "content": "现在你要扮演皇帝身边的女人--甄嬛"},
    {"role": "user", "content": prompt}
]

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

model_inputs = tokenizer([text], return_tensors="pt").to('cuda')

generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print(response)

MinMo: A Multimodal Large Language Model for Seamless Voice Interaction

FunAudioLLM Team   Tongyi Lab, Alibaba Group

用于语音交互的语音-文本多模态模型的先前工作可以大致分为 原生 模型和 对齐 模型。原生多模态模型使用单个框架同时对语音和文本的端到端理解和生成进行建模,然而,他们面临着语音和文本序列长度之间巨大差异、语音预训练不足以及灾难性地忘记文本LLMs的挑战;对齐的多模态模型在保持文本LLMs,然而,现有模型通常在小规模语音数据上进行训练,在有限的语音任务集上进行研究,并且缺乏对丰富而细致的说话风格的指令跟踪能力的系统探索

MinMo,这是一种多模态大型语言模型,具有大约 8B 参数,可实现无缝语音交互。 解决了先前对齐多模态模型的主要局限性。在 140 万小时的不同语音数据和广泛的语音任务上,通过语音到文本对齐、文本到语音对齐、语音到语音对齐和双工交互对齐等多个阶段来训练 MinMo。 经过多阶段训练后,MinMo 在保持文本LLMs,并且还促进了全双工对话,即用户和系统之间的同时双向通信。 此外,还提出了一种新颖而简单的语音解码器,它在语音生成方面优于以前的模型。MinMo 增强的指令跟踪功能支持根据用户指令控制语音生成,包括各种细微差别,包括情绪、方言和语速,并模仿特定声音。对于 MinMo,语音到文本的延迟约为 100 毫秒,理论上全双工延迟约为 600 毫秒,实际约为 800 毫秒。

  • 最先进的 (SOTA) 性能:MinMo 在语音对话、多语言语音识别、多语言语音翻译、情感识别、说话人分析和音频事件分析等基准测试中实现了当前的 SOTA 性能,同时还确保了文本大型模型的功能基本保持不变。
  • 指令控制音频生成:MinMo 支持端到端语音交互,按照用户指示控制生成音频的情感、方言和说话风格,以及模仿特定的语音音调,生成效率超过 90%。
  • 低延迟双工语音交互:MinMo 支持全双工语音交互,可实现流畅的多轮对话并防止背景噪音打断。语音到文本的延迟约为 100 毫秒,全双工延迟理论上约为 600 毫秒,实际约为 800 毫秒。
基准测试的性能概览:演示了 MinMo 在自动语音识别 (ASR)、语音到文本翻译 (S2TT)、口语问答 (SQA) 方面的功能,包括语音到文本 (S2T) 和语音到语音 (S2S)、语音分类 (VSC)、语音情感识别 (SER)、语言识别 (LID)、年龄识别和性别检测。MinMo 在所有这些任务上都超越了以前的 SOTA 模型

Introduction  

无缝语音交互表示用户与系统进行实时、自然、相关且类似人类的语音对话。促进无缝语音交互带来了巨大的挑战:

  • 系统需要准确、全面地理解音频,包括理解内容以及语音中的副语言线索(例如,情感、韵律)以及音频事件;
  • 系统应产生自然且富有表现力的语音响应;
  • 系统应向用户提供相关且合理的响应,作为智能聊天机器人;
  • 系统应支持全双工对话(同时双向通信),即系统在说话时倾听,用户在系统说话时可以自由打断,然后系统要么继续语音,要么停止响应,倾听用户,并提供对新用户查询的响应。

近年来,无缝语音交互系统获得了巨大的发展势头,尤其是随着多模态大型语言模型的进步,例如 GPT-4o和 Moshi。这些系统不仅可以产生自然而富有表现力的语音,还可以理解文字以外的线索,包括情感语气和音频事件。当前用于语音交互的多模态语言模型可分为两大类。

第一类包括原生多模态模型,例如 Moshi  和 GLM-4-Voice 。这些模型通常使用仅解码器的 Transformer 作为主干,在单个框架内同时对语音和文本模态的理解和生成进行建模;它们通常需要使用语音和文本数据进行预训练。这些模型存在两个主要限制。首先,在语音离散化之后,语音标记序列的长度通常是文本长度的两倍以上(例如,在 Moshi 中每秒 12.5 个标记)。随着模型大小的增长,序列长度的这种差异会带来挑战,例如 175B GPT-3 。其次,与文本相比,语音数据的稀缺性导致语音-文本训练数据高度不平衡,进而导致灾难性的遗忘。

第二类包括对齐的多模态模型,集成语音功能,同时旨在保持现有预训练文本LLM。这导致中间输出仍然包含文本,如 Llama-Omni  和 Freeze-Omni  等模型所示。然而,这些基于对齐的模型通常是在有限的语音数据(LLaMA-Omni 为 200K 样本,Freeze-Omni 为 120K 小时)上进行训练的,这导致了关于大型语音数据集对模型功能的影响以及原始文本LLM可能受到影响的问题。此外,尚未对这些模型进行广泛的语音任务调查,例如语音翻译、情感识别、说话人分析、语言识别和音频事件检测。此外,这些模型缺乏对丰富而细致的说话风格的指令遵循能力的系统评估,也缺乏对全双工对话能力的开发和评估,以实现无缝语音交互。

在这项工作中,我们引入了一种新的多模态大型语言模型 MinMo,以解决现有对齐多模态模型的这些局限性。MinMo 经过超过 140 万小时的语音数据训练,包括各种任务,例如语音转文本、文本转语音和语音转语音。这种广泛的培训使 MinMo 能够在各种基准上实现最先进的 (SOTA) 性能。还采用了一些方法,有效缓解了在大规模数据集训练后,模型对原始文本语言模型(text-LLM)聊天能力的灾难性遗忘问题,同时增强了语音理解和生成能力。

还提出了一种新颖的语音解码器,在保持结构简单的同时,兼具了优异的语音生成性能。LLaMA-Omni 使用一种非自回归(NAR)流式 Transformer,它将语言模型(LLM)的输出隐藏状态作为输入,并通过连接时序分类(CTC)预测响应的离散语音标记序列。然而,这种方法的性能相比自回归语音解码器较差。Freeze-Omni 使用了三种语音解码器,包括 NAR 前缀语音解码器、NAR 语音解码器和 AR(自回归)语音解码器,使模型结构更为复杂。有别于这两种策略,我们为 MinMo 设计了一种自回归(AR)流式 Transformer,其通过固定比例将 LLM 的输出隐藏状态与语音标记混合处理。

开发了一种机制,可以有效地促进与 MinMo 的全双工相互作用。具体来说,我们实现了一个全双工预测模块,该模块利用文本LLM 的语义理解功能来决定是继续系统响应,还是让步、倾听和响应新的用户查询。对于 MinMo,语音到文本的延迟约为 100 毫秒;全双工延迟理论上约为 600 毫秒,实际时约为 800 毫秒。

Related Work

Multimodal Spoken Dialogue Models:

多种语音基础模型已被开发用于通用音频理解,但尚未系统地探索其在语音交互方面的应用。例如,Qwen2-Audio 将 Whisper 语音编码器与预训练文本语言模型(LLM)集成,并通过多任务预训练和基于指令的监督微调使 LLM 具备语音理解能力。SALMONN 是另一种用于通用音频理解的语音-文本 LLM,通过 Q-Former 将单独的语音和音频编码器与预训练文本 LLM 集成,并采用 LoRA 进行模态对齐。

由于本研究旨在开发一种端到端多模态模型以实现无缝语音交互,我们将重点比较 MinMo 与用于语音交互的语音-文本模型(或称多模态语音对话模型)。同时或受到 GPT-4o 的启发,多模态语音对话模型的开发正如火如荼地进行,以实现与用户实时语音对话的能力。(Ji et al., 2024a) 对近期的语音对话模型进行了深入综述。一些研究支持传统的回合制语音聊天(即半双工通信),但无法处理全双工语音交互(即同时双向通信)。这些模型包括协作系统和端到端框架。

PSLM (Mitsui et al., 2024) 是一种协作系统,因为它依赖 ASR 处理音频输入,这会丢弃副语言信息并导致错误传播。PSLM 同时生成语音和文本标记,从而减少语音生成延迟;然而,其响应质量较低。与 PSLM 等协作系统不同,端到端框架直接接受音频输入并生成音频输出。

Llama-Omni (Fang et al., 2024) 和 Mini-Omni (Xie & Wu, 2024) 是两个近期的端到端框架,但尚未针对全双工通信进行训练。Llama-Omni 集成了 Whisper 语音编码器、语音适配器、流式语音解码器和声码器,并以预训练文本 LLM 作为基础。其语音解码器以非自回归(NAR)方式生成与生成文本前缀对应的离散单元。该模型采用两阶段训练策略:第一阶段冻结语音编码器,仅对语音适配器和 LLM 进行自回归训练;第二阶段冻结语音编码器、语音适配器和 LLM,仅使用 CTC 损失对语音解码器进行训练。Llama-Omni 被评估在语音转文本指令执行和语音转语音指令执行任务上的表现。

Mini-Omni 同样采用 Whisper 编码器,并通过适配器进行最小化训练,以保留 LLM 的能力。该模型通过模态对齐、适配器训练和多模态微调三个阶段进行训练。Mini-Omni 同时生成文本和音频标记,并填充 N 个标记以确保首先生成对应的文本标记,从而指导音频标记的生成。

MinMo 支持全双工语音对话。现有的全双工语音聊天系统同样可以分为协作系统和端到端模型两类。在协作系统中,VITA (Fu et al., 2024) 同时运行两个模型,即生成模型和监控模型,以支持全双工通信。当生成模型正在生成系统响应时,监控模型会监控环境,并在检测到有效的用户打断后结合上下文对新的用户查询提供响应,同时生成模型暂停并切换到监控角色。值得注意的是,VITA 仍然依赖外部的 TTS 模块生成语音输出。

另一种协作系统 (Wang et al., 2024a) 则通过 LLM 接入 ASR 模块和流式 TTS 模块运行。该系统不需要模态对齐,而是对预训练的文本 LLM 进行监督微调,采用以下范式:在每个时间步,LLM 要么处理一个输入标记,要么生成一个文本标记,要么输出一个特殊的控制标记,用于在 SPEAK 和 LISTEN 状态之间进行状态转换。所有这些任务都被定义为基于单一序列化流对话的下一个标记预测。全双工对话学习基于由 GPT-4 合成的数据进行,这些数据生成了包含不同类型用户打断的对话。值得注意的是,由于其级联架构,该系统面临高达 680ms 的高延迟问题。

在端到端全双工模型中,早期的 dGSLM (Nguyen et al., 2022) 提出了一个双塔架构,用于联合处理用户语音和系统语音的音频标记流。然而,该方法存在以下几个缺点:它依赖于仅基于语音的训练,未能利用预训练文本 LLM 的能力;仅使用语义标记,未充分建模语音的声学信息;不支持在线模式。LSLM (Ma et al., 2024b) 使用仅解码器的 Transformer 生成语音标记,并通过流式 SSL 编码器处理监听标记。该模型引入了一个中断标记,用于在检测到用户尝试轮流对话时停止发言。然而,模型在生成合理响应方面表现不足。

在最近的端到端全双工模型中,Moshi、GLM-4-Voice 、SyncLM 、IntrinsicVoice 和 Omni-Flatten原生多模态模型。这些模型在单一框架中同时建模语音和文本模态的理解和生成,基于 GPT 主干,并需要使用语音和文本数据进行自监督自回归预训练。如第 1 节所述,这些原生多模态模型需要应对语音标记与文本标记之间序列长度差异显著的问题,以及语音-文本训练数据高度不平衡及其导致的灾难性遗忘。IntrinsicVoice 使用 GroupFormer 从 LLM 的隐藏状态生成 HuBERT 标记,有效地将语音序列缩短到与文本序列相当的长度。Omni-Flatten 采用分阶段的逐步后期训练策略,通过块级的单流平铺语音和文本标记来学习全双工和无文本的语音到语音交互。

与这些原生多模态模型不同,我们的 MinMo 属于对齐多模态模型类别,该类别还包括 Llama-Omni、Mini-Omni2和 Freeze-Omni 。对齐多模态模型集成了语音功能,同时旨在保留现有预训练文本 LLM 的能力。Mini-Omni2 引入了基于命令的中断机制以支持全双工对话,但仅在 ASR 任务上进行评估,并与 Whisper、VITA 和 Mini-Omni 进行比较。Freeze-Omni是一个语音到语音模型,通过冻结预训练的文本 LLM 来保留其能力。它支持流式输入语音和生成流式输出语音,使用多任务训练,并通过块级状态预测来建模全双工语音交互。

我们的 MinMo 与这些对齐多模态模型在以下方面不同:我们探索了在更大规模的语音数据集(1.4 百万小时多样化语音数据,相较于 LLaMA-Omni 的 20 万样本和 Freeze-Omni 的 12 万小时)以及更广泛的语音任务上训练 MinMo。MinMo 还通过新颖的语音解码器、增强的指令跟随能力,以及对全双工语音对话能力的系统性训练和评估,与现有的对齐多模态模型形成了差异化。

文本风格 – 可控语音合成

多模态语音对话模型相比于基于文本的对话模型的显著特征在于其能够理解和生成超越文本内容的声学信息。语音模态不仅包含内容,还包括情感、方言和语速等声学信息。一个智能的多模态语音对话模型应该能够全面理解输入语音中的声学信息(例如情感),并且能够生成带有指定情感、方言、语速的响应,甚至模仿特定的声音,从而在沟通中实现更深层次的理解和响应。

协作系统如 ParalinGPT 、E-Chat 和 Spoken-LLM 通过整合副语言特征增强对情感等声学信息的理解。这些系统可以与可控风格的文本转语音(TTS)系统结合,以生成带有特定情感、语速和音量的响应。在文本风格可控 TTS 方面取得了显著进展,例如 TextrolSpeech 、PromptTTS 、PromptTTS2、InstructTTS 和 ControlSpeech 。

与这些协作系统相比,Moshi 使用一个具有单一演员声音和超过 70 种说话风格录音的 TTS 引擎,生成训练数据以支持在端到端模型中理解和生成声学信息。GLM-4-Voice利用高质量的多轮语音对话数据,这些数据针对特定语音风格需求(如语速、情感或方言)进行定制,从而支持风格可控的语音对话。然而,据我们所知,尚无研究表明对齐的多模态模型能够支持风格可控的语音生成。

与之前的研究声称对齐的多模态模型(如 Llama-Omni 和 Freeze-Omni)仅允许语言模型控制语音的内容而非风格和韵律相反,我们在本研究中提出了一种新型的流式语音解码器,用于对齐多模态模型 MinMo,并发现该解码器不仅增强了指令跟随能力,还使 MinMo 能够生成符合用户指定情感、方言、语速以及模仿特定声音的语音。

MinMo

模型架构

语音编码器采用预训练的 SenseVoice-large 编码模块,提供了强大的语音理解能力,支持多语言语音识别、情感识别和音频事件检测。输入投影器由一个随机初始化的两层 Transformer 和一个 CNN 层组成,用于维度对齐和降采样。我们选用预训练的 Qwen2.5-7B-instruct 模型作为预训练的文本 LLM,因为其在各种基准测试中的表现卓越(Team, 2024)。此外,我们利用 CosyVoice 2的流式音频生成机制,该机制具备低延迟并提供具有竞争力的语音合成性能。

对于每批接收的五个文本标记,我们将这些标记及其对应的最终隐藏层向量同时传递到输出投影器和语音标记语言模型(Voice Token LM)。输出投影器是一个单层线性模块,随机初始化用于维度对齐。语音标记语言模型(Voice Token LM)采用预训练的 CosyVoice 2 LM 模块,并以自回归方式生成十五个语音标记,确保高效且无缝的音频合成。这些语音标记由 Token2wav 合成器模块实时处理,生成最终的音频输出。

Token2wav 合成器包括一个预训练的流匹配模型,该模型将标记转换为梅尔频谱图,以及一个预训练的声码器,将梅尔频谱图转换为波形,两者均来源于 CosyVoice 2。MinMo 通过额外的隐藏嵌入实现端到端的完整训练,这些嵌入有助于根据用户指令控制语音风格,例如情感、方言和语速等。语音生成的详细信息详见 3.2 节。

全双工预测器模块由一个单层 Transformer 和一个线性 softmax 输出层组成,两者均为随机初始化。该模块实时预测是否响应用户指令或暂时停止当前系统播报,以处理来自用户的进一步音频输入。一旦全双工预测器决定系统响应是合适的,MinMo 会生成文本输出并同步以逐标记方式生成音频标记。

Streaming Voice Decoder

语音解码器包括三个组件:输出投影器、语音标记语言模型(Voice Token LM)和流式标记到波形(Token2wav)合成器。

输出投影器对齐 LLM 的维度与语音解码器的维度。LLM 的隐藏状态包含丰富的上下文信息,但语义上可能不够明确;而采样得到的文本标记更加精确,与生成的文本一致。同时,当前用户输入的隐藏状态包含显式的指令信息。在每轮对话中,用户输入的嵌入与 LLM 最后一层输出的隐藏状态将沿特征维度拼接,形成查询嵌入。查询嵌入与五个采样文本标记的嵌入,以及 LLM 最后一层输出的隐藏状态,将沿序列维度拼接并输入到投影器中。投影器的输出被称为语义向量,这些向量代表了丰富且准确的语义信息。

在输出投影器之后,使用语音标记语言模型(Voice Token LM)以自回归方式生成语音标记。该语言模型在交替的文本和语音标记序列上运行。具体而言,我们以 5:15 的固定比例混合语义向量和语音标记,即每五个语义向量后跟随十五个语音标记。

在训练过程中,采用教师强制策略,并引入一个特殊标记,用于指示下一个语义向量应被连接。当 LLM 的文本响应完成且语义向量耗尽时,我们插入一个“语音轮次”(turn of speech)标记,提示语音标记语言模型接下来的标记应完全为语音标记。当生成“语音结束”(end of speech)标记时,语音合成过程结束。

为了从语音令牌重建波形,我们使用现成的流式 token2wav 合成器。token2wav 合成器包含一个数据块感知流匹配模型和一个 mel 到 wave 声码器,能够以 15 个令牌为块合成波形。

语音解码器的理论延迟可以按以下方式计算:

其中 dl⁢l⁢m 表示 LLM 生成一个文本令牌的计算时间, dl⁢m 表示 LM 生成一个语音令牌的时间, ds⁢y⁢n 表示 token2wav 合成器生成每个语音令牌对应的波形的时间。

Tasks and Training Data

MinMo 的训练任务包括四类,包括 Speech-to-TextText-to-SpeechSpeech-to-Speech 和 Speech-to-ControlToken 任务。表 2 列出了每个类别中的具体任务及其相应的数据量表。

Speech-to-Text 任务。此类别包含大约 120 万小时的语音-文本配对数据,包括自动语音识别 (ASR)、语音到文本翻译 (S2TT)、语言识别 (LID)、上下文偏差语音识别、语音情感识别 (SER)、音频事件检测 (AED)、说话人分析、口语平滑等任务。这些任务的训练数据以 ChatML 格式组织,如以下示例所示:

Text-to-Speech tasks。该类别的数据主要由基础语音合成数据组成,与训练 CosyVoice 2 的数据相同。它包括 170000 小时的文本语音配对数据,并支持四种语言:中文、英文、韩文和日文。此外,还有大约 1000 小时的音频生成数据由指令控制。这些说明扩展为包括由 Qwen-Max 生成的自然语言描述,利用人类标记的属性,例如情感、语速、方言和角色扮演。

Speech-to-Speech 任务。 Speech-to-Speech 数据主要通过模拟获取,包括大约 10000 小时的多轮对话语音和 100 小时的风格可控多轮对话语音。模拟 Speech-to-Speech 聊天数据的方法如下:

对于主要来源于 Alpaca 和 ShareGPT3 的文本聊天数据,我们利用 CosyVoice 的零样本上下文生成方法 将用户文本转换为用户语音。我们使用来自选定说话人的 2 小时数据对 CosyVoice 的基本模型进行微调,为目标说话人创建一个语音合成模型,称为 CosyVoice-SFT。该模型合成了助手的语音(即系统语音)。使用zero-shot上下文生成进行用户语音合成的优势在于它能够确保生成的用户语音的多样性,从而增强 MinMo 的泛化性。

为了解决合成音频和真实音频之间的差异,我们从 ASR 数据中选择合适的真实语音作为用户语音查询,并使用相应的文本作为 Qwen-Max 的输入生成响应文本,然后使用 CosyVoice-SFT 模型将其合成为辅助语音。这种方法进一步增强了模型对真实用户音频输入的鲁棒性。

为了生成涵盖不同说话风格的对话语音,我们最初使用 Qwen-Max 来创建丰富的风格可控、多轮次文本对话集合。用户查询通过 Cosyvoice 的 zero-shot generation 转换为语音。随后,我们使用 Cosyvoice 2 来生成助手的富有表现力的语音。具体来说,我们将助手的响应内容和指导提示输入到 Cosyvoice 2 中,以合成特定风格的语音。此外,使用小型、多样化和初步录制的语音语料库作为提示语音,通过零镜头生成合成表达性响应语音。前一种方法增强了模拟语音的多样性,而后者更有效地构建了各种风格的表现力。

Speech-to-ControlToken 任务。Speech-to-ControlToken 数据主要由两部分组成。第一部分是从现有的真实语音交互数据中提取的,而第二部分是使用文本对话数据进行模拟的。具体来说,现有的真实语音交互数据包括 Alimeeting 、Fisher 等资源,以及我们内部的语音交互数据,总共大约 3000 小时。模拟数据主要包括开源 MOSS 数据集 和通过合成我们内部文本对话数据的口语对话,产生了大约 1000 小时的语音聊天数据。当使用这些语音交互数据构建双工训练数据时,我们应用启发式规则在样本上自动注释双工标签,如下所示:

  • 对于助手的轮流,将用户轮到的终点作为助手轮次的起点。
  • 对于用户的轮次,将助手轮次结束后的时间间隔 T 作为用户轮次的起点,其中 T∼𝒩⁢(0.6,0.42) 。
  • 对于用户的 Back-Channel,当用户(以对话中的一个说话者为用户)无法打断另一个说话者时,我们从语音交互数据中选择实例,并将其视为用户 Back-channel 的训练样本。

模型训练

MinMo 通过四个对齐阶段逐步训练:(1) 语音到文本对齐,(2) 文本到语音对齐,(3) 语音到语音对齐,以及 (4) 双工交互对齐。通过四个对齐阶段,MinMo 获得了端到端的音频理解和生成能力,同时保留了主干文本LLM,实现了低延迟并为用户提供了无缝的语音聊天体验,类似于 GPT-4o。这四个阶段详细说明如下。

语音到文本对齐Pre-align > Full-Align > SFT[LoRA]

第一阶段使用表 2 所示的语音转文本数据,将音频模态的输入潜在空间与预训练文本LLM。此阶段包括对图 3 中的输入投影和语音编码器的逐步更新,以及使用 LoRA 更新文本 LLM。考虑到语音编码器和LLM (Qwen2.5-7B) 是预先训练的,而输入投影的参数是随机初始化的,我们使用表 2 所示的语音转文本数据子集执行预对齐训练 (Pre-align),仅更新输入投影器。这个 Pre-align 阶段有效地防止了随机初始化的参数在初始训练阶段对预训练的 Voice Encoder 产生大的梯度影响。在预对齐之后,我们使用完整的语音转文本数据来训练输入投影器和语音编码器,同时保持 LLM 参数冻结,这个过程称为完全对齐。在 Full-Align 之后,使用涵盖各种任务的大约 130 万个样本进行指令微调 (SFT)。在此阶段,LLM 使用 LoRA 进行更新,从而增强模型遵循指令的能力。Full-Align 和 SFT 阶段中使用的特定数据比例如图 4 所示。Pre-Align 阶段使用大约 1/10 的 Full-Align 数据。

文本到语音对齐

第二阶段使用文本转语音数据将文本LLM音频模态的输出潜在空间对齐。此阶段首先训练 Output Projector,然后联合训练 Output Projector 和 Voice Token LM,同时保持其他 MinMo 参数冻结。除了基本的文本转语音功能外,我们还利用端到端框架使 MinMo 能够在语音交互中遵循用户指示,从而提供更富有表现力和娱乐性的音频响应。例如,用户可以通过指令控制音频输出的情感、语速、方言口音或说话人风格。构建了大约 1000 小时的 Instruct 语音合成数据,格式如表 3 所示。

语音到语音对齐。

第三阶段使用大约 10,000 小时的配对音频数据继续训练 MinMo。与文本到语音对齐阶段一致,我们继续仅更新 Output Projector 和语音令牌 LM。语音到语音对齐的训练数据不仅包括一般的语音到语音对话,还包括具有各种设置的音频生成指令,例如采用特定的方言、语速和口语对话的情感。我们发现,即使不更新 LLM,仅通过利用与小规模指令数据集对齐的嵌入(150 小时),大型模型仍然可以学习相当有效的音频生成控制能力。

双工交互对齐。

在完成前三个训练阶段后,MinMo 获得了音频理解、音频生成和半双工语音对话的能力。在此基础上,我们进一步添加了一个全双工模块,该模块经过 4000 小时的长篇人际口语对话训练。Full Duplex Predictor 模块在此阶段专门进行训练。Full Duplex Predictor 采用 全双工预测器将LLM的隐藏嵌入作为输入,用于预测模型是否需要生成响应。全双工预测器利用LLM固有的语义理解能力来判断:1)模型是否应该回应当前用户查询,2)模型是否应该停止正在进行的语音输出以聆听用户查询并提供适当的响应。来预测模型是否需要生成响应

Experiments

根据多个基准评估 MinMo:

语音识别和翻译

在普通话、英语、日语、韩语和其他六种语言的公共测试集上评估了 MinMo 的语音到文本转录功能。

对于普通话 (ZH)、日语 (JA)、韩语 (KO) 和粤语 (YUE),我们采用字符错误率 (CER) 来评估转录性能。对于英语 (EN)、德语 (DE)、法语 (FR)、俄语 (RU)、西班牙语 (ES) 和意大利语 (IT),单词错误率 (WER) 用作评估指标。

与 Whisper Large v3 和 Qwen2-Audio相比,MinMo 在各种语言的大多数测试集上都实现了卓越的 ASR 性能

在提示符显示或不带有 LID【语言ID】 信息的 Common Voice 上进行测试时,Whisper Large v3 和 Qwen2-Audio 的平均错误率存在显著差距,这表明这两个模型强烈依赖 LID 信息。相比之下,无论是否存在语言识别,MinMo 都表现出稳健且一致的 ASR 性能。

多语言语音翻译

在 Fleurs  和 CoVoST2  测试集上评估了语音到文本的翻译能力。

与其他端到端基线相比,MinMo 在中 ↔ 英和日 ↔ 英翻译上实现了 SOTA 性能,在其他语言对上实现了顶级性能。我们将这种强劲的性能归功于广泛的语音翻译训练数据(表 2 中 451K 小时的 S2TT 训练数据)和强大的音频编码器。 值得注意的是,尽管我们只用 CoVoST2 集(不包括 Fleurs 集)来增强我们的训练数据,但我们的模型在两个测试集上保持一致的性能,表明具有高鲁棒性。

Language Identification  语言识别

使用 Fleurs 数据集,该数据集涵盖 102 种语言。MinMo 实现了 85.3% 的语言识别准确率,优于表 7 所示的所有先前模型。具体来说,零样本 Whisper-V3 经常将粤语错误地归类为中文,而 MinMo 可以准确地识别粤语。

上下文偏见语音识别

上下文偏见,或称为热词定制,允许用户根据特定的上下文或热词获得定制化的ASR(自动语音识别)结果。MinMo通过集成用于上下文偏见的高级提示增强了ASR功能。我们为对齐和SFT阶段准备了相应的训练数据,通过将热词组织到语音处理指令之前的提示中,从而实现有效的定制。评估包括热词偏见测试和一般偏见测试,如表8所示。

热词偏见测试涉及使用SeACo-Paraformer(Shi et al., 2024)提供的三个数据集,这些数据集包含用于偏见评估的热词。一般偏见测试则使用包含较少热词的数据集,用于评估对无关热词的抗干扰能力。

MinMo 在 ASR 准确性(带和不带热词)以及硬质热词的召回率方面优于竞争性基线 SeACo-Paraformer

Speech Analysis and Understanding

Speech Emotion Recognition

使用来自 EmoBox 的七个广泛使用的情绪识别数据集评估了 MinMo 的语音情感识别 (SER) 能力,包括 CREMA-D (Cao et al., 2014)、MELD (Poria et al., 2019)、IEMOCAP (Busso et al., 2008)、MSP-Podcast (Martinez-Lucas et al., 2020)、CASIA (Zhang & Jia, 2008)、MER2023 (Lian et al., 2023) 和 ESD (周 et al., 2021)。这些数据集包括中英文语言和场景,例如表演、电视剧和日常对话。我们采用未加权平均准确率 (UA)、加权平均准确率 (WA) 和宏观 F1 分数 (F1) 作为评价指标。引用了来自最近的 SER 工具包 EmoBox(马 et al., 2024a)的这些测试集的结果。我们还使用其发布的模型检查点评估了基线音频LLM 模型 SALMONN 和 Qwen-Audio。

MinMo 在该基准测试的所有任务上都优于所有基线模型,包括语言 ID、性别、年龄、情感、发声分类任务,除了在声音问题分类任务上表现优于 Qwen-Audio

Audio Event Understanding

使用 Air-Bench 基准测试,将 MinMo 的语音和音频事件理解能力与其他 Audio-LLM。结果如表 12 所示。在语音声音分类任务 (Vocal Sound) 上,MinMo 超越了所有基线模型。然而,我们发现,在更复杂的声音问答任务中,MinMo 的表现比 Qwen-Audio 差,尽管性能仍然优于其他模型。这可以归因于两个因素:首先,在语音编码器和训练范式中,MinMo 主要是为语音交互而设计的,因此一些声音问题可能会超出其范围;其次,在评估过程中,MinMo 会预测音频中发生的情况,而不是严格选择 Air-Bench 提供的选项,因此 MinMo 生成的一些正确或相似的正确响应与后处理脚本的错误选择保持一致。

Speaker Analysis  

说话人分析涉及几项对于理解音频数据并与之交互至关重要的任务,包括性别检测、年龄估计、说话人计数、说话人识别、多说话人识别和目标说话人识别。结果表明,MinMo 在性别检测和年龄估计任务上优于所有基线模型

Speech-to-Text Enhancement

Spoken Language Smoothing【口语平滑】

口语语言平滑任务以口语ASR(自动语音识别)转录文本为输入,输出正式风格的书面文本。表14展示了口语语言平滑的一些示例。为该任务,我们通过扩展为ASR转录文本的口语到书面转换而创建的SWAB数据集(Liu et al., 2025),构建了一个多领域数据集用于训练和评估。SWAB数据集源自中文和英文的会议、播客及讲座。

在为原始视频和音频生成ASR转录文本后,大约十位注释人员根据ASR转录文本创建正式风格的书面文本,同时保留原始内容。SWAB的训练集包含20,000段文本,测试集包括100段中文和英文的随机抽样段落。我们对SWAB测试集进行全面微调,并将MinMo与基于Qwen2.5-7B的模型进行比较,结果如表15所示。

在客观指标评估中,我们使用BLEU(Papineni et al., 2002)、ROUGE(Lin, 2004)和BLEURT(Sellam et al., 2020),以人工目标为参考。然而,我们注意到口语语言平滑任务具有显著的主观性和多样性,因此基于词汇匹配的客观指标可能无法充分反映模型性能。因此,我们采用人工和LLM注释来提供信实性(S-Faithful,即对原始内容的信实性)和正式性(S-Formal)的排名评估。自动化LLM评分的提示见附录A.1。

表15显示,我们的模型与Qwen2.5-7B的性能相当,表明MinMo在平滑口语语言方面具有较好的能力。

标点插入和反向文本规范化

对于标点插入 (PUNC) 和反向文本归一化 (ITN) 任务,我们使用来自 Fleurs 数据集的中文和英文数据。我们将 MinMo 与 SenseVoice-L 和 whisper-large-v3 进行比较,如表 16 所示。鉴于标点符号插入和 ITN 任务的主观性,我们使用 GPT-4 Turbo 对三个结果进行排序进行评估。附录 A.2 中提供了自动评分的任务提示。第一名获得 3 分,第二名获得 2 分,第三名获得 1 分。最终分数是所有分数的平均值。在准备测试数据时,我们使用随机选项洗牌和多轮评分,以减少使用 ChatGPT 进行评估时的不确定性。最终结果表明,MinMo 在标点插入和 ITN 的主观评价中表现更好

Voice Generation

文本到语音(TTS)

为了评估我们语音解码器的合成准确性,我们将最新的SEED测试集(Anastassiou et al., 2024)转换为ChatLM格式。在该格式中,文本以用户内容的形式呈现,并以“Copy:”命令为前缀,LLM预计会复制该文本。测试集包括2,020个中文案例和1,088个英文案例。对于中文案例,我们使用了Paraformer-zh模型(Gao et al., 2022),而英文案例则使用了Whisper-large V3(Radford et al., 2023)。鉴于LLM存在的指令跟随问题,我们在推理过程中应用了教师强制方案,以最小化输入和输出文本之间的差异。语音解码器的内容一致性通过中文的CER(字符错误率)和英文的WER(词错误率)进行评估。

我们的发现表明,即使在应用了教师强制方案的情况下,只有大约20%的测试案例的输入和输出文本与LLM完全一致。由于不一致的输入和输出可能导致语音解码器的隐藏状态混乱,因此仅包括输入和输出文本一致的测试案例来计算错误率。结果如表17所示。我们观察到,与TTS基线模型CosyVoice 2.0-SFT(Du et al., 2024b)相比,MinMo在中文测试集上表现出稍微较低的内容一致性和语音质量。在英文测试集上,MinMo在内容一致性上表现相似,但NMOS(语音质量评分)稍低。这个下降可以归因于微调的说话人不同的声学特性,这影响了识别模型和NMOS评分器。然而,这种下降不会显著影响人类的理解。因此,主观评估可能更适合语音到语音的语音聊天模型,我们将在未来的工作中进一步探讨这一点。

指令跟随语音生成

为了评估指令跟随语音生成的性能,我们开发了一个包含30个会话和122个回合的多轮中文语音到语音测试集,涉及12种指令控制类型。这些控制类型包括情感(高兴、悲伤、惊讶、愤怒、恐惧)、方言(粤语、四川话)、语速(快、慢)、角色扮演(机器人、佩佩)以及默认风格。

为了评估指令跟随语音生成的准确性,听众根据指令类型对生成的音频进行分类。如表18所示,MinMo在指令控制准确性方面优于基线模型GLM-4-Voice,特别是在方言和角色扮演方面。

Voice Chat

为了将基础模型的对话功能转移到语音模态,我们为语音转文本 (speech2text) 和语音转语音 (speech2speech) 场景构建了多轮次对话数据。speech2text 数据主要分为两部分。首先,它源自开源多轮次纯文本数据,我们使用零样本文本转语音 (TTS) 技术合成用户轮次。其次,我们使用真实的自动语音识别 (ASR) 训练数据作为聊天查询,从大型模型获取文本响应,从而为 speech2text 生成交互式训练数据。

MinMo 模型在语音转语音 (S2S) 模式下与现有基线相比具有显著优势,实现了新的最先进的 (SOTA) 结果。在语音转文本 (S2T) 模式下,它还在 Llama Question 和 Web Question 数据集上实现了 SOTA 性能。但是,MinMo 的测试结果仍然表明,与 S2T 模式相比,S2S 模式的性能明显下降。我们将其归因于这样一个事实,即测试集中的许多答案都具有丰富的文本结构和专业词汇,这对模型的文本转语音 (TTS) 功能提出了更高的要求。此外,在 S2S 评估中用于获取答案文本换语音的自动语音识别 (ASR) 模型也会在一定程度上影响 S2S 指标。

从表 20 中可以观察到,通过将额外的 speech2text 任务数据整合到 MinMo 训练中,我们能够有效地保持基础模型的对话能力。与 ASR 与纯文本基本模型相结合的性能相比,MinMo 的对话能力在很大程度上保持一致。但是,MinMo 的响应分数略低于 Ground Truth 响应的质量。我们认为这种差异可以归因于两个主要原因。首先,多个语音任务的集成和在基础模型上实现 LoRA 训练,在一定程度上削弱了原始大型语言模型 (LLM。该表显示,与 ChitChat 测试集相比,MinMo 在 Alpaca 测试集上表现出更大的性能变化。其次,MinMo 的音频理解能力还有进一步改进的空间,并且仍有可能降低 ASR 任务中的字符错误率 (CER)。

Full Duplex Spoken Dialogue

为了评估 MinMo 在全双工语音交互中的能力,我们构建了三个测试集:中文 Alimeeting 数据集、英文 Fisher 数据集和一个模拟测试集,旨在更接近真实的人机对话场景。我们从两个角度评估 MinMo 的全双工能力:预测性能和预测效率。关于预测性能,评估分为三个任务:辅助轮流、用户轮流和用户反向引导。对于轮流任务,我们采用正 F1 分数作为分析指标,并引入了偏移距离 ( K ) 来更好地分析模型的性能。对于用户反向通道任务,我们利用准确性来评估 MinMo 识别反向通道话语的能力。

MinMo 模型在人机对话数据集上表现出值得称道的结果,无论是用户轮流还是助手轮流。当 K=10 时,预测性能接近 99%。在实际人机对话的测试集中,与人机对话测试集相比,MinMo 模型在辅助轮流上的表现表现出一定程度的下降。我们认为这主要是由于真实人类对话中背景噪音、语速、停顿和其他因素的高度可变性,这可能导致模型在助理轮流任务中出现一定程度的误判。但是,对于人与人对话中的用户轮流预测,MinMo 模型仍然保持了高水平的灵敏度和预测性能,确保在用户说话时系统及时停止说话,从而避免与用户重叠语音。这种敏感性和对用户语音的尊重也解释了为什么 MinMo 模型对用户反向通道评论保持 70%-80% 的预测准确性,如表所示。这与 user turn-taking model 的调优是一致的,表明两者之间存在一定的权衡。

为了对 MinMo 双工模式进行效率分析,我们还分别对人机对话和人机对话测试集进行了测试。如表 23 所示,MinMo 在用户轮流中的平均响应延迟为 250ms。在人机测试集中观察到最快的响应速度,为 88.8 毫秒,而最具挑战性的 Alimeeting 测试集显示延迟为 448.8 毫秒。在辅助轮流方面,MinMo 的平均响应延迟在 660ms 左右,与用户轮流预测所需的响应时间相比,这要长。我们将其归因于以下事实:用户轮流涉及用户语音的开始部分,而助手轮流涉及用户轮到即将结束的部分。因此,助理轮流的上下文语义信息更加全面,从而缩短了决策所需的时间滞后。

Full Duplex System Latency

MinMo 的双工交互由四个模块组成:全双工预测器,负责双工控制,语音转文本模块(语音编码器+输入投影仪+LLM)、文本转语音标记模块(输出投影仪+语音标记 LM)和 Token2Wav 模块。表 21 显示了每个模块的延迟。以 Assistant Turn-taking 为例,当用户的实际语音结束时,双工模型通常需要 250 ms 的延迟进行评估。在 Speech-to-Text 过程中,对前 5 个文本标记的预测大约需要 150 毫秒。预测最初的 15 个语音令牌大约需要 70 毫秒,从语音令牌转换到第一个音频数据包需要额外的 130 毫秒。因此,在开发基于 MinMo 的全双工语音对话系统时,助理轮流的标准体验延迟约为 250 + 150 + 70 + 130 = 600 毫秒。上述数值估计值是在使用 L20 GPU 和 BF16 模型格式进行测试期间得出的。

总结/局限性

MinMo 在超过 140 万小时语音的广泛数据集上进行了训练,展示了各种基准(包括口语对话、多语言语音识别和情感识别)的最新性能。通过利用多阶段对齐策略,MinMo 巧妙地平衡了音频理解和生成,同时最大限度地减少了基于文本的 LLMs。一项关键创新是 MinMo 用于流式端到端音频生成的新颖对齐方法。通过利用文本模型的隐藏层表示,MinMo 的语音解码器实现了结构简单性和有竞争力的性能以及低延迟。这种方法显著增强了模型的指令遵循能力,能够生成细致入微的语音,准确反映用户指定的情感、方言和说话风格。此外,MinMo 支持全双工交互,以大约 600 毫秒的延迟提供无缝的对话体验。总之,MinMo 代表了语音交互系统领域的重大进步。它不仅解决了序列长度差异和数据不平衡的固有挑战,还为自然和富有表现力的语音交互设定了新标准,为多模态语言模型的未来发展铺平了道路。

MinMo 有一些需要解决的局限性。首先,MinMo 基于预训练的文本大模型,使用对齐方式集成音频理解和音频生成能力;文本大型模型仅参与 LoRA 更新,其遵循各种指令(例如语言和任务遵循)的能力需要改进。需要进一步探索以确定使用更多高质量的文本数据对文本大型模型进行更全面的更新是否可以增强其指令跟踪能力。其次,MinMo 的端到端音频生成存在一些长尾发音错误问题。这个问题部分是由于保留了 LLM,部分原因是端到端建模输出文本中的一些特殊符号无法有效地转换为语音。可以探索数据扩展来解决这些长尾问题。此外,由 MinMo 中的指令控制的音频生成的整体效率需要提高。这部分是由于当前指令数据的整体大小较小,并且仅使用隐藏嵌入进行端到端对齐的限制,这限制了历史信息的传输。最后,虽然 MinMo 实现了基于语义的双工模块,但它仍然需要单独的 AEC 【AEC模块用于消除语音通信中由于麦克风拾取扬声器输出信号而产生的回声。】和 VAD 模块。将来,将探索完全端到端的双工模型。

SLAM-Omni: 单阶段训练下支持可控音色的语音对话模型

近几个月来,许多端到端的语音对话系统涌现,旨在解决级联系统中交互延迟过高以及基于文本交互下副语言信息丢失的问题。然而,目前大多数语音对话模型依赖于大量的语音对话数据以及高昂的训练代价,且存在响应音色单一的弊端。

近日,上海交通大学计算机系X-LANCE实验室联合微软亚洲研究院推出了面向低资源场景下支持可控音色的语音对话模型——SLAM-Omni。该模型只需要在4张GPU上单阶段训练15小时,即可获得远超此前同等规模模型的对话能力,并且具有优越的语音质量以及生成语音-文本一致性。在更大规模数据集上的实验表明SLAM-Omni在中文对话以及多轮对话上都有不俗的表现。

语音对话系统建模

本文首先探索了主流的语音对话系统建模方案,现有端到端系统主要通过将文本作为中间输出或隐藏状态来利用预训练的大语言模型(LLM)。这些方法可以分为文本驱动建模和音频-文本联合建模两类。

文本驱动建模保留了LLM原始架构,将文本隐状态传递给语音解码器生成音频,能够有效保留LLM的知识,使用其隐藏状态作为语音解码器的输入用于音频生成,但由于只使用文本tokens进行自回归建模,难以捕捉音频的情感和语调等副语言特征。音频-文本联合建模分为交替和并行两种范式,均将音频 tokens加入自回归建模,理论上提升对非语言信息的建模能力。交替范式通过交替使用文本和音频tokens进行生成,需要大量的语音-文本交替数据并重新训练LLM。而并行范式则并行地对文本和音频tokens自回归生成。SLAM-Omni在此基础上,通过预测单层语义tokens并结合语义分组建模的方式来加速音频生成,显著降低了训练成本。

主要贡献:

  • 提出了第一个针对具有说话者解耦语义token的语音交互系统的零样本音色控制解决方案。
  • 提出语义组建模方法来加速单层语义语音标记生成和模型训练。
  • 历史文本提示是为了在SDM【Existing spoken dialogue models】 中进行高效的多轮历史建模而提出的。
  • SLAM-Omni 是第一个实现单阶段训练的语音助手,需要最少的数据和计算资源
  • 实验表明,SLAM-Omni 在文本相关任务上优于类似规模的先前模型,并且在所有现有 SDM 中在声学质量和语音文本对齐方面表现出卓越的性能。更大数据集上的结果证明了其多语言和多轮对话能力。

方法

模型概述

SLAM-Omni通过将系统提示、历史文本提示和用户语音嵌入拼接作为输入,并在Vocoder中通过语者提示来控制音色【 借鉴TTS模型 cosyvoice: 条件流匹配模型 +HifiGAN】;同时,采用语义分组建模加速自回归过程中的语音token生成。

输入语音建模

SLAM-Omni使用Whisper编码器从用户语音指令中提取音频特征(50 Hz)。Whisper作为在大规模跨语言语音数据上训练的语音识别模型,提供了精准的转录和强大的多语言支持,是SLAM-Omni实现多轮多语言对话能力的基础。我们通过降采样处理音频特征,将多个连续帧合并,并通过线性投影将其转换为与LLM嵌入维度对齐的形式。这些处理后的音频特征与文本提示嵌入一起,作为输入传递给LLM。

输出语音建模

在语音输出方面,SLAM-Omni采用并行的音频-文本联合建模,并行地自回归预测文本和音频的语义tokens。为此,我们扩展了LLM的词表,新增了音频tokens的码本,并将原始的词嵌入矩阵与新嵌入合并。在每个生成步骤中,LLM输出的logits包含了文本和音频tokens的预测分布。然而,由于文本tokens(约为3Hz)和音频语义tokens(50Hz)的频率差异,直接以相同速率生成这两种tokens会导致语音对话模型的训练和推理成本大幅增加,同时增加了实时语音生成的延迟。

为了解决这一问题,本文提出了“语义分组建模”方法每步生成多个音频tokens,从而缓解频率不匹配带来的挑战。该方法通过线性层将音频logits投影到分组logits中,并对应的在训练过程中将原语义token序列按组进行划分。通过这种方式,模型能够在自回归过程的每步中同时处理多个音频tokens,从而加速语音生成并极大地降低训练和推理的成本。模型的训练目标可以表示为文本层和音频层交叉熵损失的加权和。

可控音色建模

SLAM-Omni通过将语音内容建模为语义tokens,天然地实现了音色与语言信息的解耦,将zero-shot音色控制从TTS扩展到了语音对话系统上。借鉴TTS模型(Cosyvoice)中的技术,SLAM-Omni使用条件流匹配模型将语义tokens和语者提示信息转换为mel频谱图,并通过HiFi-GAN合成波形。此外,为了支持实时语音生成,SLAM-Omni在流匹配的Transformer架构中采用了块因果注意力机制。

多轮对话

过去的语音对话模型在多轮对话建模上通常将文本和音频tokens交替作为历史,但较长的音频token序列显著提高了训练成本,限制了对话轮次。此外,较长的历史也会影响模型的上下文学习能力,并可能导致早期对话内容的遗忘。为了解决这些问题,SLAM-Omni引入“历史文本提示”(Historical Text Prompting)的方案,仅使用文本模态来表示对话历史。在多轮对话交互中,SLAM-Omni采用模板:<系统提示> <历史文本> <输入> <响应>。其中,系统提示指定模型角色和任务,历史提示则以文本形式存储过去的对话内容。这种方式与LLM的训练模式高度契合,同时避免了长音频序列建模的负担,使得模型能够在受限的上下文窗口内处理更多的对话轮次。在推理过程中,通过Whisper提取的语音特征可以解码成输入语音的转录文本,模型输出的文本tokens则通过分词器转换为文本。每轮对话中,由此得到的问题-响应文本对会被追加到历史对话中,以便下一轮使用。如图所示,第一轮语音对话的转录被纳入历史提示中,第二轮推理时计算得到的KV键值缓存可以在第三轮及以后的对话中复用,从而提高多轮推理的效率。

单阶段训练

此前的端到端语音对话模型通常需要进行模态适配、模态对齐和有监督微调等多阶段训练,这不仅需要精细的训练策略,还涉及多个超参数的调整,带来了显著的时间和计算成本。而SLAM-Omni通过简化为单阶段微调训练,能够在较小的数据集上快速收敛,展现了高效的训练效果。在我们的实验探索中,TTS和ASR的预训练都展示了快速的损失收敛,表明我们的方法无需大规模的模态对齐预训练。同时,进一步的实验还揭示,预训练实际上可能对模型的指令跟随能力和预训练知识保留产生负面影响。

实验设置

由于大多数开源的对话数据集仅为文本格式,我们通过zero-shot TTS系统合成语音对话语料。具体而言,我们使用CosyVoice模型生成用户输入的语音,同时随机从音色库中抽取语者提示,以控制音色。对于语音响应,我们使用CosyVoice模型生成语义tokens,它们在SLAM-Omni训练过程中作为目标音频tokens使用。我们使用的训练数据集包括VoiceAssistant-400K、英语多轮数据集UltraChat和中文对话数据集Belle_train_3.5M_CN。为了确保数据质量,我们清理了数据中的书面体(如表情符号、URL等),并限制了语音问题和响应的时长,以更好地模拟自然对话场景。在SLAM-Omni的主要实验中,仅使用VoiceAssistant-400K数据集,其他数据集则用于补充实验,评估模型在多轮和多语言对话任务中的表现。

对于用户输入,采用CosyVoice-300M模型来产生相应的语音。声音音色是通过从音色库中随机采样扬声器提示来控制的,该音色库包含来自seed-tts-eval3的1007个英语和1010个中文人类音频提示。对于助理响应,我们使用 CosyVoice-300M-SFT 的文本到令牌 LLM 来生成语义令牌这些令牌在 SLAM-Omni 训练期间用作目标音频令牌

在训练和推理过程中,为确保在低资源环境下的公平比较,我们使用Qwen2-0.5B作为LLM骨干,并选择Whisper-small作为语音编解码器。在主要实验中,SLAM-Omni采用的语义分组大小为G = 3。在单阶段训练中,SLAM-Omni进行全量微调,只有Whisper编码器保持冻结。整个训练过程大约需要在4个A100 GPU上进行15小时

为了全面评估语音对话模型的语音交互能力,本文提出了一个新的评测框架,涵盖理解、推理和口语对话三个关键环节。通过设计八个测试集,我们分别从这三方面考察模型的表现。在“理解”部分,评估模型是否能够理解并跟随用户指令;在“推理”部分,通过逻辑、数学和常识问题测试模型的推理能力;而在“口语对话”部分,我们测试模型在开放式对话场景下的交互能力。评估指标包括内容质量(通过ChatGPT评分)、语音质量(通过UTMOS评分)以及语音与文本的一致性(通过WER评分)。

实验结果

实验结果表明,SLAM-Omni在低资源场景下的表现超越了同规模的语音对话模型,在语音内容、音频质量和语音-文本一致性上显著提升,特别是在UTMOS和ASR-WER评分上表现突出,显示出其在音频建模方面的优势。在ChatGPT评测中,尽管和更大规模的模型相比仍存在差距,SLAM-Omni在理解、推理和口语对话能力上显著超越了同规模的Mini-Omni系列,表明其保留了更多的预训练LLM知识和指令跟随能力。

在音频质量和语音-文本一致性上,SLAM-Omni的表现优于所有其他语音对话模型,特别是在ASR-WER指标上,表明其语音-文本对齐更加紧密。而其他模型在生成过程中容易出现生成音频与文本不对齐的情况,尤其在长内容生成时,容易出现音频中断或长时间的静默,导致其UTMOS和ASR-WER评分较低。

消融实验表明,语义分组建模显著提高了生成语音与文本的对齐度,尤其当组大小G≥3时,ASR-WER低于5%,相比之下,没有执行分组算法的模型(G=1)的ASR-WER高达18.23%。这一差距主要来源于音频和文本token之间的频率不匹配。通过减少音频序列长度,语义分组建模有效缓解了这一问题,同时减少了训练和推理成本,并加速了音频生成,提供了更流畅的用户体验。

关于训练策略的消融实验表明,传统的多阶段训练方法虽然能略微提高模型的音频-文本对齐度,但在语音交互任务上的整体表现并未显著改善。相比之下,SLAM-Omni采用单阶段训练策略,显著提高了ChatGPT评分,并保持了相当的音频质量。通过直接在语音到语音数据上进行单阶段微调,SLAM-Omni能够更好地保留预训练LLM的知识,避免了传统预训练任务带来的知识流失问题,提高了训练效率。

附录:

Pre-training Details

对于ASR和TTS预训练,专门使用VoiceAssistant-400K数据集来确保一致性并避免引入外部数据。在 ASR 预训练期间,提供语音指令作为输入,其相应的转录文本作为目标输出。相反,对于 TTS 预训练,语音响应的转录被用作输入文本,而相应的语义token被设置为预测目标。优化和学习策略与微调期间采用的策略一致,值得注意的是,在 ASR 预训练期间仅计算文本层损失,而 TTS 预训练专门关注多层音频损失作为训练目标。

曲线显示,ASR 和 TTS 任务都实现了快速收敛,证明了模型在短时间内有效“理解”和“生成”语音的能力。这一观察表明,理解和生成任务中的模态对齐本质上是简单的,需要最少的预训练工作。此外,如表 6 所强调的,直接对语音到语音任务进行训练可以产生卓越的性能,同时减轻通常与预训练相关的知识退化。

总结 

本文提出了SLAM-Omni,一种单阶段训练下支持可控音色的端到端语音对话模型。通过语义分组建模,SLAM-Omni有效地对齐了音频和文本模态,同时加速了训练和推理过程。采用有监督的语义tokens解耦说话人信息,使得SLAM-Omni实现zero-shot音色控制。为了解决长音频历史带来的问题,我们引入了历史文本提示技术,将对话历史存储为文本,并通过键值缓存提高多轮推理效率。在少量数据训练仅仅60个GPU小时下,SLAM-Omni在文本相关能力上超越了同规模的语音对话模型,并在音质和语音-文本对齐方面表现优越。

MiniCPM-o 2.6: 端侧可用的 GPT-4o 级视觉、语音、多模态实时流式大模型

➤ 项目网站 🔗https://github.com/OpenBMB/MiniCPM-o

➤ 模型权重 🔗https://huggingface.co/openbmb/MiniCPM-o-2_6

🔗https://modelscope.cn/models/OpenBMB/MiniCPM-o-2_6

➤ Demo https://minicpm-omni-webdemo-us.modelbest.cn/

MiniCPM-o 2.6部署教程 详细的部署教程请参考文档

简介

多模态大模型的蓬勃发展始于视觉和语言,其中开源社区在图像理解能力方面实现了越来越强的性能表现。然而,我们的物理世界本质上是一个并行的连续多模态信息流,而当前大多数多模态大模型缺乏处理这样信息流的能力。最近的 GPT-4o 和 Gemini 2.0 等突破性工作迈出了朝这个目标的第一步,为领域的未来发展建立了雄心勃勃且充满希望的方向。

为了促进开源社区的探索,我们推出了 MiniCPM-o 2.6,一个从 MiniCPM-V 系列升级而来的最新性能最佳的端侧多模态大模型。该模型接受图像、视频、文本和音频输入,并以端到端方式生成高质量的文本和语音输出。虽然总参数量仅有 8B,MiniCPM-o 2.6 的视觉、语音和多模态流式能力达到了 GPT-4o-202405 级别,是开源社区中模态支持最丰富、性能最佳的模型之一。其主要特性包括:

  • 领先的视觉能力。 MiniCPM-o 2.6 在 OpenCompass 榜单上(综合 8 个主流多模态评测基准)平均得分 70.2,以 8B 量级的大小在单图理解方面超越了 GPT-4o-202405、Gemini 1.5 Pro 和 Claude 3.5 Sonnet 等主流商用闭源多模态大模型。此外,它的多图和视频理解表现也优于 GPT-4V 和 Claude 3.5 Sonnet,并展现出了优秀的上下文学习能力。
  • 出色的语音能力。 MiniCPM-o 2.6 支持可配置声音的中英双语实时语音对话。MiniCPM-o 2.6 在语音理解任务(如 ASR 和 STT 等)优于 GPT-4o-realtime,并在语音对话的语义和声学评估中展现了开源社区最佳的语音生成性能。它还支持情绪/语速/风格控制、语音克隆、角色扮演等进阶能力。
  • 强大的多模态流式交互能力。 作为一项新功能,MiniCPM-o 2.6 能够接受连续的视频和音频流,并和用户进行实时语音交互。在综合评测基准 StreamingBench 中(包含实时视频理解、全模态视音频理解、多模态上下文理解三大类评测),MiniCPM-o 2.6 取得开源社区最佳水平,并超过了 GPT-4o-202408 和 Claude 3.5 Sonnet。
  • 强大的 OCR 能力及其他功能。 MiniCPM-o 2.6 进一步优化了 MiniCPM-V 2.6 的众多视觉理解能力,可以处理任意长宽比的高清图像,像素数可达 180 万(如 1344×1344像素)。在 OCRBench 上取得 25B 以下最佳水平,超过 GPT-4o-202405 等商用闭源模型。基于最新的 RLHF-VRLAIF-V 和 VisCPM 技术,该模型具备了可信的多模态行为,在 MMHal-Bench 上超过了 GPT-4o 和 Claude 3.5,并支持英语、中文、德语、法语、意大利语、韩语等30多种语言的多模态交互。
  • 卓越的效率。  除了对个人用户友好的模型大小,MiniCPM-o 2.6 还表现出最先进的视觉 token 密度(即每个视觉 token 编码的像素数量)。它仅需 640 个 token 即可编码 180 万像素图像,比大多数模型少 75%。这一特性显著优化了模型的推理速度、首 token 延迟、内存占用和功耗。因此,MiniCPM-o 2.6 可以首次支持 iPad 等终端设备上的高效多模态实时流式交互。
多模态大模型发展趋势。多模态大模型的性能持续增强,并在真实世界的流式场景中支持越来越多的模态能力。与传统视觉语言模型的线性发展不同,这种发展趋势更加多维,就像攀登深处的山峰一样,可能蕴含更多变革性的宝藏。

我们将介绍 MiniCPM-o 2.6 中所面临的主要挑战及其相应的解决方案。

🤔 如何实现多模态流式交互?

人类能够持续感知来自环境的视觉、音频和文本信息流,并以较低延迟生成语音和文本回复,但这对当前的多模态大模型来说是一个重大挑战。

💡 1. 我们将各模态的离线编码/解码器改造为支持在线模式,从而支持流式输入/输出处理。

大多数模态的编码器和解码器都是离线的,大语言模型必须等待完整的视觉/音频输入的编码完成后才能进行处理,用户也必须等待语音完整生成后才能收听。我们在时间维度上将不同模态的输入/输出流分割成小块,并以块为单位进行编码/解码以实现更低的延迟。对于语音生成来说,我们设计了一种新颖的流式注意力策略使解码器能够在接收到第一个文本块时就开始生成音频。

💡 2. 我们提出了一种全模态时分复用机制来处理并行多模态流。

借鉴通信领域的时分复用技术,我们将每个模态的信息流分割成小块(每秒一块),并将同一秒内的所有模态信息组合成一个紧凑的序列单元输入给大语言模型主干。基于这个策略,主干模型可以高效地在线处理多模态信息流。

🤔 如何实现高效的端到端声音、情感、口音和语速可控的语音对话?

大多数传统语音对话模型都是基于 ASR-LLM-TTS 流水线实现的,会丢失大量用户复杂情感和环境声音等细粒度信息。而直接使用大语言模型生成音频 token 的端到端模型在训练和推理过程中都存在计算效率低的问题,且训练时数据效率也较低。

💡 我们基于混合的端到端架构在自然语音上进行了大规模预训练。

我们同时通过连续特征和文本将大语言模型和一个轻量级语音解码器连接起来。大语言模型产生的连续特征确保语音监督信号能够以端到端方式反向传播到全部模型参数,从而支持更高的能力上限。文本连接则提供了强大的语义控制并减少了训练数据需求。为了学习丰富的细粒度语音知识,我们在自然语音数据进行了大规模预训练,然后将模型与用户指令对齐。

端到端全模态架构

我们首先介绍 MiniCPM-o 2.6 的端到端全模态整体架构。该模型基于SigLip-400M、Whisper-medium-300M、ChatTTS-200M 和 Qwen2.5-7B-Instruct,总共有 8B 参数。整体架构如下所示。

端到端语音建模

大多数现有的多模态模型依赖 ASR 和 TTS 工具搭建流水线来理解和生成语音,导致了明显的语音信息损失和比较有限的语音控制能力。我们提出一种混合连接的端到端语音建模架构,在保证模型能力上限的同时具备优秀的训练和推理效率。

音频编码

我们首先使用 Whisper 编码音频输入,然后进一步压缩其特征表示来减小后续的计算开销。默认情况下,Whisper 编码器会为每秒音频生成 50 个 token。受 LLaVA-UHD 的启发,我们在将音频 token 输入到大语言模型主干之前会进一步压缩音频 token,以提高 token 信息密度和计算效率。实验结果表明从 50 token/秒压缩到 25 token/秒时,造成的信息损失几乎可以忽略,并可提高近一倍的计算效率。

语音解码

为了实现对语音输出的精细控制,我们首先从大语言模型主干中获得连续特征作为 speech embedding,然后通过大语言模型继续生成文本。speech embedding 和生成的文本同时会输入给解码器作为生成语音梅尔谱的控制条件。MiniCPM-o 2.6 使用了初始化自 ChatTTS 的轻量级自回归语音解码器来联合建模输入的 speech embedding、文本和输出的音频 token。

语音到语音架构

我们直接通过编码后的音频特征(不使用 ASR)将音频编码器与大语言模型连接起来。大语言模型和语音解码器则以混合方式连接:(1)speech embedding 连续特征控制语音、情感、口音及其他细粒度语音特征。在训练过程中,来自语音解码器的梯度会反向传播到包含大语言模型主干和音频编码器的整个模型参数。模型通过端到端方式训练,没有使用任何中间损失和监督。(2)我们还将来自大语言模型的文本输入到语音解码器,来提供更好的语义控制和训练数据效率。

得益于端到端的架构设计,MiniCPM-o 2.6 成为首个支持端到端语音克隆的通用语音对话模型。我们发现 MiniCPM-o 2.6 在语音克隆任务中可以达到与一些专业 TTS 工具相近的性能。

端到端视觉理解

MiniCPM-o 2.6 采用 LLaVA-UHD 的自适应视觉编码方案以实现高清视觉理解,支持处理最高 180 万像素(例如 1344×1344)的任意长宽比图像。具体而言,我们先将图像划分为多个切片,使得每个切片在分辨率和长宽比方面接近 ViT 的预训练设置。为了提高计算效率,我们支持每张图像最多 9 个切片。然后我们将每个切片及原始完整图像输入给 SigLIP 以获取视觉特征。最后,我们应用 perceiver resampler 将每个图像切片的特征序列压缩为 64 个视觉 token。更多细节参见 LLaVA-UHD 和MiniCPM-V 原始论文。

全模态流式机制

本章我们介绍 MiniCPM-o 2.6 的全模态流式机制,包括:(1)改造语音编码器和解码器以支持在线流式处理,(2)使大语言模型主干能够处理并行的多模态流信息。

流式音频编码

大多数现有模型只能在整个音频输入信号完整后才开始进行音频编码,从而引入了显著的延迟。为了解决这个问题,我们将输入音频分割成多个片段,每个片段是表示一秒钟的音频的固定数量音频 token。在音频编码过程中,每个片段采用因果注意力机制进行编码仅关注自身及之前的片段,从而满足在线流式编码的需求,同时与离线整体编码相比保持了最小的信息损失。

每个小方块表示1s的音频片段

流式语音解码

大多数语音生成模型要求在开始生成音频之前,所有文本 token 都已经完整就位,如图 A 所示。虽然这种方式在离线任务中表现良好,但无法满足流式场景的需求。对于流式模型而言,我们需要在部分文本生成时就开始生成(和播放)相应音频。

为了实现流式语音生成,我们每次输入固定数量的文本 token(一个大小为 n 的片段),而解码器立即输出固定数量的音频 token(一个大小为 m 的片段)。这个过程会对下一个文本 token 和音频 token 片段重复进行,以此类推。值得注意的是,文本片段与其对应音频片段之间的并不是精确对齐的。因此在实际应用中,我们为文本 token 片段的大小保留了更大的空余以避免意外情况。

为了实现上述流式策略并尽可能减小对当前最佳语音解码器的改动,我们主要引入了两个改变:

  1. 为文本预留前 N 个位置: 我们使用语音解码器上下文中的前 N 个位置来放置 speech embedding 和生成中的文本。
  2. 引入流式因果注意力掩码: 每个新生成的音频片段只能关注到已经生成的前几个文本 token 片段和其之前的所有音频 token。

在图 A-E 中,我们展示了每当引入新文本 token 和音频 token 时,注意力掩码是如何一步一步变化的。通过控制文本和音频 token 之间的片段注意力掩码,我们使得音频能以流式方式生成和播放。

  1. (文本和音频生成的开始)图 B 中,大语言模型主干生成 speech embedding 和前 n 个文本 token(此处 n=2)。然后,我们将 <Text BOS>(1 个位置)、speech embedding(1个位置)和文本 token(n个位置)输入到语音解码器中(总共输入了 2+n 个位置),基于此,模型可以生成最多 m 个音频 token(此处 m=4),但仅关注前 2+n 个位置以及所有之前的音频 token 位置。
  2. (步骤 1 的重复)图 C 中,大语言模型生成下一段 n 个文本 token。我们将这些新文本 token 输入到语音解码器中。然后,解码器生成下一段 m 个音频 token。
  3. (文本生成结束)图 D 中,大语言模型完成所有文本 token 的生成,产生了最后的 k 个文本 token(k<=n,此处 k=2)。剩余的 k 个文本 token 被输入到语音解码器中。然后,语音解码器生成下一个m个音频 token。
  4. (音频生成结束)图 E 中,语音解码器继续生成音频 token,直到生成 <Audio EOS> token。

这里的 N、n 和 m 是超参数。在实际应用中,我们使用 N=300、n=10、m=50,以实现性能与推理速度之间的平衡。

流式视觉理解

我们将视频流表示为以 1 帧每秒(1 fps)的帧序列。我们每秒钟从输入的视觉流中采样一帧,并使用自适应高分辨率编码策略对其进行编码,然后将编码后的特征输入给大语言模型主干。

为了在效率和性能之间取得平衡,我们设计了一种简单的混合分辨率策略。具体而言,我们只对用户请求结束时的最后一帧进行高分辨率编码(例如 1344 x 896),而其他帧则使用中等分辨率(例如 448 x 448)。

全模态时分复用

为了实现对不同模态的时间对齐的流式理解,我们提出了一种全模态时分复用机制。如整体框架图所示,我们首先使用共享的时间线对齐来自多个模态的信息流。受到通信领域时分复用技术的启发,我们将每个模态的流分成小块(每秒一块),并将同一秒块内的所有模态信息聚集成一个紧凑的序列单元。大语言模型则按时间顺序处理这些多模态序列单元。

需要注意的是,MiniCPM-o 2.6 可以独立于用户提问持续感知多模态输入流,这与现有的多模态流式模型只在用户提问期间获取单帧或少数几帧图像信息是不同的。通过这种方式,MiniCPM-o 2.6 能够处理需要时序记忆和推理的任务(例如,“球在哪个杯子里?”、“我刚才擦掉了哪些字?”)并原生支持多轮流式对话。

延迟分析

我们提供了纯音频模式下首次响应延迟的具体拆解分析。首次响应延迟指从用户请求结束到模型语音开始播放的延迟。作为参考,GPT-4o 在纯语音模式下的初始响应延迟约为 1.8 秒。MiniCPM-o 2.6 在iPad Pro(M4 芯片)上的初始响应延迟分解如下表所示:

多模态系统提示词

社区在使用文本提示词方面已经积累了丰富的经验,一个好的系统提示可以定义模型的角色、增强其准确性、优化细节表现和令模型聚焦重点。

生成语音回复的端到端全模态模型则面临新的挑战。模型输出的音频特征——如声音、语调、口音和其他细微特征至关重要,但无法仅通过文本传达。为了应对这一挑战,我们提出了多模态系统提示词的概念,允许用户通过声学特征控制模型的声音使其与用户意图相符

具体来说,多模态系统提示词包括传统的文本系统提示词和用于确定模型声音的音频部分。这一设计使得用户在推理时可以灵活配置声音。用户可以通过提供一段语音样例作为音频系统提示,来完成端到端的声音克隆;还可以通过将音频系统提示留空,基于语言描述要求模型创建一种新声音(例如 “请使用低沉有磁性的声音和我说话”)。

模型训练

MiniCPM-o 2.6 采用多阶段训练以逐步学习新模态的知识,从而避免模态冲突并将各种模态能力整合到一个模型中。整体的训练阶段可以分为预训练、指令微调和偏好对齐阶段。

预训练

我们首先分别对视觉和音频进行预训练以学习每种模态,然后进行全模态预训练以对齐这些模态。

视觉预训练。 我们利用大规模图像-文本对来对齐视觉和语言模块。在此阶段,我们仅更新视觉编码模块,让模型具备基本的图像理解和 OCR 能力。然后,我们在图文交替数据上训练视觉编码器和大语言模型,使模型具备多图理解和多模态上下文学习能力。

音频预训练。 我们使用音频-文本对数据来训练连接部分的权重,以实现音频模态和主干的对齐。为了学习丰富的细粒度语音知识,我们在自然语音数据上进行大规模端到端的预训练,然后根据用户指令对模型进行对齐。

全模态预训练。 在这一阶段,我们结合来自大规模网络视频的视频和音频流,使用 OTDM 机制使模型能够从不同模态中获取和对齐丰富的知识。

全模态指令微调

该阶段使用高质量的多模态数据进行监督微调,包括视觉问答、语音理解、语音生成和多模态流式视频(带音频)理解数据。我们对模型进行全参数微调以统一模型的视觉能力、语音理解和生成能力,以及流式多模态能力,同时增强模型的指令遵循能力。

偏好对齐

最后,MiniCPM-o 2.6 采用 RLAIF-V 技术以进一步提高模型的可信度和综合能力。在这个阶段,模型使用分而治之的策略对不同的回复进行评分以构建偏好数据集,并进行直接偏好优化训练(DPO)。同时,我们还特别将相比图像幻觉更常见的视频幻觉比例降低了63%。我们也使用了 MMPR 等开源偏好数据集来多样化训练数据。

评测

我们充分评估了 MiniCPM-o 2.6 的视觉理解、语音对话和多模态流式交互能力。实验结果表明,该模型在视觉、语音和多模态流式交互能力上的整体表现与 GPT-4o-202405 相当。

MiniCPM-o 2.6 的 iPad Pro 实机演示和 web demo 演示样例:

局限性

  1. 可能不稳定的语音输出。 多模态系统提示词使得更灵活的语音控制和许多有趣的功能成为可能,但也给语音输出的稳定性带来了更多挑战。传统的语音对话模型通过全参数记忆单一输出声音,与之相比,MiniCPM-o 2.6 需要从多模态系统提示词中提取和复制声音。受到该问题影响,语音生成结果可能会存在背景噪音和无意义声音等。
  2. 长语音生成。MiniCPM-o 2.6 原生支持最长 45 秒的单次语音生成,我们通过滑动窗口技术来支持生成更长的语音。模型训练与滑动窗口推理之间的差距可能导致长语音生成过程中的不稳定现象。
  3. 多模态流式交互能力。 作为一项实验性能力,模型的多模态流式交互能力在感知、理解和推理能力上仍然有限。我们期待社区的共同努力构建更优秀和可靠的性能效果。
  4. 网页 demo 高延迟。 用户在使用托管在海外服务器上的网页 demo 时可能会遇到异常的高延迟情况。我们建议在本地部署 demo(例如 4090 GPU 可以流畅运行)或使用合适的网络连接。

参考文献

  1. MiniCPM-V: A GPT-4V Level MLLM on Your Phone. 2024.
  2. RLHF-V: Towards Trustworthy MLLMs via Behavior Alignment from Fine-grained Correctional Human Feedback. CVPR 2024.
  3. RLAIF-V: Aligning MLLMs through Open-Source AI Feedback for Super GPT-4V Trustworthiness. 2024.
  4. LLaVA-UHD: an LMM Perceiving Any Aspect Ratio and High-Resolution Images. ECCV 2024.
  5. Large Multilingual Models Pivot Zero-Shot Multimodal Learning across Languages. ICLR 2024.

DeepSeek-V3 技术报告

原文:https://zhuanlan.zhihu.com/p/14890557782

DeepSeek-V3 是一款性能卓越的混合专家(MoE) 语言模型,整体参数规模达到 671B,其中每个 token 激活的参数量为 37B。评估结果表明,DeepSeek-V3 在性能上超越了其他开源模型,并能够与主流闭源模型相媲美。

引言

近年来,LLM 经历了快速迭代和演进,逐步缩小了与通用人工智能(AGI) 的差距。除了闭源模型外,开源模型阵营也在取得重大进展,包括 DeepSeek 系列、LLaMA 系列、Qwen 系列和 Mistral 系列,这些模型正在努力缩小与闭源模型的性能差距。

为了进一步突破开源模型的能力边界,研究团队开发了 DeepSeek-V3,这是一个基于 MoE 架构的大模型,总参数量达到 671B,其中每个 token 会激活 37B 个参数。

基于提升性能和降低成本的双重目标,在架构设计方面,DeepSeek-V3 采用了MLA来确保推理效率,并使用 DeepSeekMoE来实现经济高效的训练。这两种架构在 DeepSeek-V2 中已经得到验证,证实了它们能够在保持模型性能的同时实现高效的训练和推理。

除了延续这些基础架构外,研究团队还引入了两项创新策略来进一步提升模型性能。

首先,DeepSeek-V3 首创了无辅助损失的负载均衡策略,有效降低了负载均衡对模型性能的负面影响。另外,DeepSeek-V3 采用了多 token 预测训练目标,这种方法在评估基准测试中展现出了显著的性能提升。

为了提高训练效率,该研究采用了FP8 混合精度训练技术并对训练框架进行了全面优化。低精度训练作为一种高效的训练方案,其发展与硬件性能的提升密切相关。本研究首次在超大规模模型上成功验证了 FP8 混合精度训练框架的有效性。通过采用 FP8 计算和存储技术,显著提升了训练速度并降低了 GPU 内存占用。

在训练框架方面,研究团队开发的 DualPipe 算法实现了高效的流水线并行处理,减少了流水线停滞,并通过计算和通信并行处理的方式降低了训练过程中的通信开销。这种优化确保了即使在模型规模进一步扩大的情况下,只要维持适当的计算通信比例,就能在不同节点间实现细粒度专家分配,同时将全节点间的通信开销降至接近于零。

此外,研究团队优化了跨节点的全节点通信内核,充分利用了 InfiniBand(IB) 和 NVLink 的带宽性能。通过精细的内存优化,使得 DeepSeek-V3 的训练无需依赖成本高昂的张量并行技术

这些技术改进的综合运用实现了极高的训练效率。

预训练阶段,DeepSeek-V3 使用了 14.8T 高质量且多样化的 token 进行训练。整个预训练过程表现出了出人意料的稳定性,不仅没有出现不可恢复的损失突增,也未发生需要回滚的情况。

随后,模型进行了两个阶段的上下文长度扩展:第一阶段将最大上下文长度提升至 32K,第二阶段进一步扩展至 128K。

接着,研究团队对 DeepSeek-V3 基础模型进行了后训练,包括 SFT 和 RL,以增强模型对人类偏好的理解并进一步提升其性能。在后训练阶段,通过从 DeepSeek R1 系列模型中提取推理能力,同时精确控制模型的输出质量和长度比例。

DeepSeek-V3 在全面的基准测试评估中表现突出。尽管其训练成本较低,但综合评估结果显示,DeepSeek-V3-Base 已成为当前性能最强的开源基础模型,尤其在代码数学领域表现卓越。其对话版本不仅超越了其他开源模型,还在多个标准和开放式基准测试中展现出与领先闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相匹敌的性能。

值得注意的是,DeepSeek-V3 实现了极具竞争力的训练成本(详见表1),这得益于在算法、框架和硬件层面的整体优化设计。

表 1:DeepSeek-V3 的训练成本,假设 H800 的租赁价格为$2/GPU小时

在预训练阶段,每处理1T token 仅需 180K H800 GPU 小时,即在配备 2048 个 H800 GPU 的集群上仅需 3.7 天。因此,整个预训练阶段在不到两个月内完成,总计使用了 2664K GPU 小时。

加上上下文长度扩展所需的 119K GPU 小时和后训练阶段的 5K GPU 小时,DeepSeek-V3 的完整训练总共消耗了 2.788M GPU 小时。按照每 GPU 小时 2 美元的 H800 GPU 租用价格计算,总训练成本仅为 557.6 万美元。需要说明的是,这些成本仅包含 DeepSeek-V3 的正式训练环节,不包括前期架构研究、算法验证和数据实验等相关支出。

本研究的主要创新点包括:

架构创新

在 DeepSeek-V2 高效架构的基础上,创新性地提出了无辅助损失的负载均衡策略,有效降低了负载均衡过程对模型性能的影响。

开发并验证了多 token 预测(MTP)训练目标,证实了其对模型性能的提升作用,该技术还可用于推测解码来加速推理过程。

高效预训练

开发了 FP8 混合精度训练框架,首次在超大规模模型上验证了 FP8 训练的可行性和效果。

通过算法、框架和硬件的综合优化,突破了跨节点 MoE 训练中的通信瓶颈,实现了计算与通信的高度重叠。这种优化大幅提升了训练效率,降低了训练成本,同时支持了更大规模模型的训练而无需额外开销。

仅用 2.664M H800 GPU 小时就完成了 DeepSeek-V3 在 14.8T token 上的预训练,打造出当前最强大的开源基础模型。预训练后的其他训练阶段仅需 0.1M GPU 小时。

后训练——DeepSeek-R1 知识蒸馏

该研究提出了一种创新的知识蒸馏方法,将思维链 (CoT) 模型(特别是 DeepSeek R1 系列)的推理能力转移到标准 LLM 中,尤其是 DeepSeek-V3。这一方法成功地将 R1 的验证和反思机制整合到 DeepSeek-V3 中,显著提升了其推理能力,同时有效控制了输出的风格和长度。

核心评估成果

知识领域评估:

  • • 在教育类基准测试中,DeepSeek-V3 的表现超越了所有开源模型,在 MMLU、MMLU-Pro 和 GPQA 测试中分别获得了 88.5、75.9 和 59.1 的优异成绩。这一性能水平已与领先闭源模型 GPT-4o 和 Claude-Sonnet-3.5 相当,显著缩小了开源与闭源模型的性能差距。
  • • 在事实性知识评测中,DeepSeek-V3 在 SimpleQA 和中文 SimpleQA 测试中都展现出领先于其他开源模型的优势。特别值得注意的是,虽然其英语事实知识(SimpleQA)略逊于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实知识(中文 SimpleQA)方面却超越了这些模型,凸显了其在中文知识领域的特殊优势

技术能力评估:

  • • 在数学领域,DeepSeek-V3 在所有非 CoT 模型(包括开源和闭源)中取得了最优性能。值得注意的是,在 MATH-500 等特定测试中,其表现甚至超越了 GPT-4o,充分展示了其出色的数学推理能力。
  • • 在编程领域,DeepSeek-V3 在 LiveCodeBench 等编程竞赛基准测试中表现最为突出,确立了其在该领域的领先地位。在软件工程相关任务中,尽管略低于 Claude-Sonnet-3.5,但仍大幅领先于其他模型,展示了其在各类技术评测中的综合实力。

架构

DeepSeek-V3 的基本架构具有两个核心特征:

1.采用 MLA 实现高效推理

2.使用 DeepSeekMoE 实现经济高效的训练。

此外,该研究还开发了MTP训练目标,这一创新在评估基准测试中展现出显著的性能提升。

在其他未特别说明的架构细节方面,DeepSeek-V3 延续了 DeepSeek-V2 的设计方案。

基本架构

DeepSeek-V3 的基础架构建立在 Transformer 框架之上。为实现高效推理和降低训练成本,该模型采用了经 DeepSeek-V2 验证的 MLA 和 DeepSeekMoE 技术。相比 DeepSeek-V2,本研究在 DeepSeekMoE 中创新性地引入了无辅助损失负载均衡策略,有效降低了负载均衡过程对模型性能的影响。

图2展示了 DeepSeek-V3 的基本架构,本节将简要介绍 MLA 和 DeepSeekMoE 的技术细节。

图2:DeepSeek-V3 基本架构示意图。基于 DeepSeek-V2,团队采用了多头潜在注意力(MLA)和 DeepSeekMoE 架构,以实现高效推理和经济的训练。

多头潜在注意力机制

DeepSeek-V3 在注意力机制方面采用了 MLA 架构。设向量维度为d,注意力头数为𝑛,每个头的维度为 𝑑,在特定注意力层中第t个 token 的注意力输入表示为 h𝑡 ∈ Rd 。MLA 的核心创新在于对注意力键和值进行低秩联合压缩,以降低推理过程中的键值(KV)缓存开销:

其中:

  • ctKV∈Rdc 表示键和值的压缩潜在向量
  • dc(≪dhnh) 表示 KV 压缩维度
  • WDKV∈Rdc×d 为维度下投影变换矩阵
  • WUK,WUV∈Rdhnh×dc 分别为键和值的维度上投影变换矩阵
  • WKR∈RdhR×d 用于生成携带旋转位置编码(Rotary Positional Embedding, RoPE)的解耦键
  • RoPE(·)表示旋转位置编码矩阵的应用操作
  • [·;·]表示向量连接操作

在 MLA 中,生成过程仅需缓存高亮标记的向量ctKVktR,这种设计显著降低了 KV 缓存空间,同时保持了与标准MHA相当的性能水平。

对于注意力查询(Query)部分,模型同样采用低秩压缩技术,这种设计有效降低了训练过程中的激活值内存占用:

其中:

  • ctQ∈Rd′c 表示查询的压缩潜在向量
  • d′c(≪dhnh) 表示查询压缩维度
  • WDQ∈Rd′c×d 和 WUQ∈Rdhnh×d′c 分别为查询的维度降维和升维变换矩阵
  • WQR∈RdRhnh×d′c 用于生成携带旋转位置编码的解耦查询矩阵

最终,通过组合注意力查询(qt,i )、键 (kj,i)和值( vCj,i ),得到注意力机制的最终输出 Ut

其中𝑊𝑂 ∈ R𝑑×𝑑𝑛为输出维度变换矩阵。

DeepSeekMoE 及其无辅助损失负载均衡机制

DeepSeekMoE的基础架构:在前馈网络(Feed-Forward Networks, FFN) 部分,DeepSeek-V3 采用了 DeepSeekMoE 架构。相比传统的 MoE 架构(如 GShard),DeepSeekMoE 采用了更细粒度的专家分配机制,并创新性地将部分专家设置为共享专家。假设第 t个 token 的 FFN 输入为ut,其输出h′t的计算过程如下:

其中:

  •  Ns和 Nr 分别表示共享专家和路由专家的数量
  • FFNi(s) 和 FFNi(r)(·) 分别代表第 i 个共享专家和路由专家的处理函数
  • Kr 表示被激活的路由专家数量
  • , 代表第 i 个专家的权重系数
  • si,t 表示 token 与专家间的相关度
  • ei 代表第 i 个路由专家的特征向量
  • Topk(·,K) 函数返回第 t 个 token 与所有路由专家计算得到的相关度分数中最高的 K 个值。

无辅助损失负载均衡:对于 MoE 模型,不平衡的专家负载将导致路由崩溃,并在专家并行场景中降低计算效率。传统解决方案通常依赖辅助损失来避免不平衡负载。然而,过大的辅助损失会损害模型性能。为了在负载平衡和模型性能之间实现更好的权衡,研究团队开创了一种无辅助损失负载均衡策略来确保负载平衡。

具体而言,研究团队为每个专家引入了一个偏置项bi,并将其添加到相应的亲和度分数si,t中以确定 top-K 路由:

在这种设计中,偏置项仅用于路由选择,而门控值(用于与 FFN 输出相乘)仍基于原始相关度分数 si,t 计算。训练过程中,系统会实时监控每个训练步骤中所有批次的专家负载分布。在每个步骤结束时,对于负载过高的专家,其偏置项会减少 γ ;对于负载不足的专家,其偏置项会增加 γ ,其中 γ 是控制偏置更新速率的超参数。

通过这种动态调整机制,DeepSeek-V3 在训练过程中实现了专家负载的均衡分布,其性能优于传统仅依靠辅助损失来实现负载均衡的模型。

序列级辅助损失补充机制: 虽然 DeepSeek-V3 主要采用无辅助损失策略来实现负载均衡,但为了防止单个序列中出现显著的负载不均衡现象,模型还引入了补充性的序列级平衡损失:

其中平衡因子 α 是一个超参数,在 DeepSeek-V3 中被设置为极小值; 1(·) 表示指示函数; T 代表序列中的 token 总数。这种序列级平衡损失机制有助于保持单个序列内专家负载的均衡性。

节点约束路由机制: 类似于 DeepSeek-V2 的设备限制路由策略,DeepSeek-V3 采用了受控路由机制来优化训练过程中的通信开销。具体而言,系统限制每个 token 最多只能分配给 M 个计算节点,这些节点的选择基于每个节点上专家的最高 Kr/M 相关度分数总和。

在这种约束下,MoE 训练框架能够实现计算与通信的近乎完全并行处理

完整的 Token 保留机制: 得益于高效的负载均衡策略,DeepSeek-V3 在整个训练过程中都保持着良好的负载平衡状态。因此,训练过程中不存在 token 丢弃现象。同时,通过特定的推理部署策略,DeepSeek-V3 在推理阶段同样实现了完整的 token 保留。

多 token 预测机制 (Multi-Token Prediction, MTP)

DeepSeek-V3 创新性地采用了 MTP 目标,将预测范围扩展到每个位置的多个后续 token

这种设计具有双重优势:

首先,MTP 目标通过增加训练信号的密度可能提高数据利用效率;其次,它使模型能够提前规划表征,从而更准确地预测后续 token。

如图3所示,该实现方案与先前研究的方法有所不同:前者使用独立输出头并行预测 D 个额外 token,而 DeepSeek-V3 采用顺序预测方式,并在每个预测层级保持完整的因果关系链。

图3:MTP实现示意图。V3在每个深度上保持每个 token 预测过程中的完整因果依赖链。

MTP 模块架构: 具体实现中,模型采用 D 个串联模块来预测 D 个额外的 token。每个 MTP 模块(第k个)包含以下组件:

  • 共享向量层 Emb(·)
  • 共享输出头 OutHead(·)
  • Transformer 处理单元 TRM(·)
  • 维度映射矩阵 Mk∈Rd×2d

对于输入序列中的第 i 个 token ti ,在第 k 层预测时,模型首先将两个向量进行组合:该 token 在第 (k−1) 层的特征表示 hik−1∈Rd 和第 (i+k) 个 token 的向量 Emb(ti+k)∈Rd ,通过线性变换进行融合:

其中[·;·]表示向量拼接操作。需要特别说明的是,在 k=1 时,hik−1 代表主模型输出的特征表示。值得注意的是,每个 MTP 模块都与主模型共享同一个向量层。经过组合的特征向量 hi′k 随后输入到第 k 层的 Transformer 处理单元,生成该层的输出特征表示 hik :

其中 T 代表输入序列的长度, i:j 表示包含两端的切片操作。接着,系统将hik输入到共享输出层,计算第 k 个预测 token 的概率分布 Pi+1+kk∈RV (V 为词表大小):

输出层 OutHead(·) 首先通过线性变换将特征表示转换为 logits,然后使用 Softmax(·) 函数计算第 k 个预测 token 的概率分布。与向量层类似,每个 MTP 模块的输出层也与主模型共享。这种保持预测因果链的设计思路与 EAGLE 相近,但两者目标不同:EAGLE 主要用于推测解码,而本研究中的 MTP 主要用于优化训练效果。

MTP 训练目标优化: 系统为每个预测层级计算交叉熵损失 LMTPk :

其中,T 表示输入序列长度,ti 代表第 i 个位置的目标 token,ik[ti] 表示第 k 个 MTP 模块对 ti 的预测概率。最终,通过计算所有层级 MTP 损失的平均值并乘以权重系数 λ ,得到总体 MTP 损失 LMTP ,作为 DeepSeek-V3 的补充训练目标:

推理阶段的MTP:应用 MTP 机制的主要目的是提升基础模型的性能,因此在实际推理阶段可以不使用 MTP 模块,基础模型能够独立完成正常推理。此外,这些 MTP 模块也可以被重新配置用于推测解码,从而降低模型生成的时间延迟。

基础设施

计算集群架构

DeepSeek-V3 的训练环境是一个配备 2048 个 NVIDIA H800 GPU 的大规模计算集群。

该集群中的每个计算节点包含 8 个 GPU,这些 GPU 通过节点内的 NVLink 和 NVSwitch 实现高速互连。节点之间则采用 InfiniBand (IB) 技术进行高效通信。

训练框架设计

模型训练基于自主研发的 HAI-LLM 框架,这是一个经过优化的高效轻量级训练系统。DeepSeek-V3 的并行策略包含三个层面:16 路流水线并行(Pipeline Parallelism, PP)、跨 8 个节点的 64 路专家并行(Expert Parallelism, EP),以及 ZeRO-1 数据并行(Data Parallelism, DP)

为实现高效训练,该框架进行了多方面的工程优化:

  1. 开发了 DualPipe 流水线并行算法,相比现有 PP 方法,该算法显著减少了流水线停滞现象。更重要的是,它实现了前向和后向过程中计算与通信阶段的重叠,有效解决了跨节点专家并行带来的通信负载问题。
  2. 优化了跨节点全对全通信内核,充分利用 IB 和 NVLink 带宽,同时减少了通信所需的流式多处理器(SMs)资源占用。
  3. 通过精细的内存管理优化,使得模型训练无需依赖开销较大的张量并行(Tensor Parallelism, TP)技术。

DualPipe 技术与计算通信协同优化

在 DeepSeek-V3 中,跨节点专家并行机制引入了显著的通信开销,导致计算与通信比例接近1:1,影响了训练效率。

为解决这一问题,模型采用了创新性的 DualPipe 流水线并行算法。该算法通过两个关键优化实现性能提升:有效融合前向和后向计算的通信阶段,同时减少流水线阻塞。

DualPipe 的核心创新在于实现了单个前向和后向计算块内的计算通信重叠。具体来说,每个计算块被划分为四个功能模块:

  • 注意力机制
  • 全节点数据分发
  • MLP 处理
  • 全节点数据整合

特别地,在后向计算块中,注意力和 MLP 模块都被进一步细分为输入梯度计算权重梯度计算两个部分,这一设计借鉴了 ZeroBubble 的思路。此外,还包含专门的 PP 通信模块。

图4:个体前向和后向块的重叠策略(Transformer 块的边界未对齐)。橙色表示前向计算,绿色表示“输入的后向计算”,蓝色表示“权重的后向计算”,紫色表示 PP 通信,红色表示屏障。全对全(all-to-all)通信和 PP 通信可以完全隐藏。

如图4所示,通过优化排列这些功能模块,并精确调控用于通信和计算的 GPU 流处理器资源分配比例,系统能够在运行过程中有效隐藏全节点通信和 PP 通信开销。

完整的 DualPipe 调度机制如图5所示。它采用创新的双向流水线调度策略,实现了从流水线两端同时输入微批次数据,使得大部分通信过程能够与计算过程完全重叠。这种设计确保了即使在模型规模进一步扩大的情况下,只要维持适当的计算通信比例,就能在节点间实现细粒度的专家分配,同时将全节点通信开销降至接近于零。

图5:8 个 PP 排位和 20 个微批次在两个方向上的双管道调度示例。反向方向的微批次与前向方向的微批次对称,因此为简化说明,省略了反向微批次的批次 ID。两个由共享黑色边框围住的单元存在相互重叠的计算和通信。

值得注意的是,即使在通信负载相对较轻的常规应用场景中,DualPipe 仍然展现出显著的效率优势。表2对比了不同 PP 方法在流水线阻塞和内存使用方面的表现。

数据显示,相比 ZB1P 和 1F1B,DualPipe 大幅减少了流水线阻塞,而峰值活性内存仅增加了 1/PP 。虽然 DualPipe 需要维护两份模型参数副本,但由于训练过程采用了大规模 EP,这一冗余并未导致显著的内存开销增加。

与 Chimera 相比,DualPipe 的实现要求更为灵活,仅需要流水线阶段数和微批次数能被 2 整除,而不要求微批次数必须能被流水线阶段数整除。

此外,DualPipe 的一个重要特性是,随着微批次数量的增加,其流水线阻塞和激活内存占用都不会相应增加

跨节点all-to-all通信的高效实现

为了确保 DualPipe 具有充足的计算性能,系统采用了定制化的高效跨节点全对全通信内核(包括分发和组合功能),以节省用于通信的 SMs 数量。

这些内核的实现与 MoE 门控算法和集群的网络拓扑结构进行了协同设计。具体而言,在该集群中,跨节点 GPU 通过 IB 实现全连接,节点内通信则通过 NVLink 处理。NVLink 提供 160GB/s 的带宽,约为 IB(50GB/s)的 3.2 倍。为了有效利用 IB 和 NVLink 的不同带宽特性,系统限制每个 token 最多分发到 4 个节点,从而减少 IB 流量。对于每个 token,当确定其路由决策后,首先通过 IB 传输到目标节点上具有相同节点内索引的 GPU。一旦到达目标节点,系统确保其通过 NVLink 即时转发到承载目标专家的特定 GPU,避免被后续到达的 token 阻塞。

通过这种方式,IB 和 NVLink 的通信实现完全重叠,每个 token 能够在不产生 NVLink 额外开销的情况下,在每个节点上平均高效选择 3.2 个专家。这意味着,虽然 DeepSeek-V3 实际只选择 8 个路由专家,但它可以将这个数字扩展到最多 13 个专家(4 个节点 × 3.2 个专家/节点),同时保持相同的通信成本

总体而言,在这种通信策略下,仅需 20 个 SMs 就足以充分利用 IB 和 NVLink 的带宽。具体而言,系统采用了线程专门化技术,将 20 个 SMs 划分为 10 个通信信道。

在分发过程中,(1)IB 发送、(2) IB 到 NVLink 转发和(3) NVLink 接收由各自的线程组处理。分配给每个通信任务的线程组数量根据所有 SMs 的实际工作负载动态调整。

类似地,在组合过程中,(1) NVLink 发送、(2) NVLink 到 IB 转发和累积,以及(3) IB 接收和累积也由动态调整的线程组处理。此外,分发和组合内核与计算流重叠,因此还考虑了它们对其他 SM 计算内核的影响。具体而言,系统采用了定制的 PTX 指令自动调整通信块大小,这显著降低了 L2 缓存的使用和对其他 SMs 的干扰。

极致的内存节省与最小开销

为了减少训练期间的内存占用,系统采用了以下技术:

RMSNorm 和 MLA 上投影的重计算。在反向传播期间重新计算所有 RMSNorm 操作和 MLA 上投影,从而避免了持久存储其输出激活的需求。这种策略虽带来少量开销,但显著减少了存储激活所需的内存。

CPU 中的指数移动平均(EMA)。在训练期间,系统在 CPU 内存中保留模型参数的EMA,用于学习率衰减后对模型性能的早期估计。EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新。这种方法使维护 EMA 参数不会产生额外的内存或时间开销。

MTP的共享向量和输出头。采用 DualPipe 策略,将模型的最浅层(包括向量层)和最深层(包括输出头)部署在相同的PP等级上。这种安排使 MTP 模块和主模型之间能够物理共享参数和梯度,实现共享向量和输出头。这种物理共享机制进一步提高了内存使用效率。

FP8 训练

基于低精度训练领域的最新进展,本研究开发了一种细粒度混合精度框架,采用 FP8 数据格式训练 DeepSeek-V3。

尽管低精度训练技术展现出巨大潜力,但其实际应用常受到激活值、权重和梯度中异常值的制约。虽然推理量化技术取得重要突破,但在大规模语言模型预训练中成功应用低精度技术的案例仍然有限。

为了应对这一挑战并有效扩展 FP8 格式的动态范围,本研究采用了细粒度量化策略:

采用 1×Nc 元素的条状分组或Nc×Nc元素的块状分组。

通过提高精度累积过程,大幅降低了反量化带来的计算开销,这对实现高精度 FP8 通用矩阵乘法(GEMM)至关重要。此外,为降低 MoE 训练中的内存和通信开销,系统采用 FP8 格式进行激活值的缓存和分发,同时使用 BF16 格式存储低精度优化器状态。

该框架在与 DeepSeek-V2-Lite 和 DeepSeek-V2 规模相近的两个模型上进行了验证,训练数据量约为 1T token(详见原文附录B.1)。结果表明,与 BF16 基准相比,FP8 训练模型的相对损失误差始终保持在 0.25% 以下,这完全在训练随机性的可接受范围内。

混合精度框架

本研究在已有低精度训练技术的基础上,设计了专门的 FP8 训练混合精度框架。在这一框架中,大部分计算密集型操作采用 FP8 执行,而关键操作则保持原有数据格式,以实现训练效率和数值稳定性的最优平衡。

整体框架结构如图6所示。

图6:带有 FP8 数据格式的整体混合精度框架。为清晰起见,仅展示了线性算子。

首先,为提高模型训练速度,大部分核心计算操作(尤其是 GEMM 运算),均采用 FP8 精度实现。这些 GEMM 运算接收 FP8 格式的张量输入,输出 BF16 或 FP32 格式的结果。如图6所示,线性运算相关的三个 GEMM 操作,包括 Fprop(前向传播)Dgrad(激活值反向传播)和 Wgrad(权重反向传播),均采用 FP8 执行。这种设计策略理论上将计算速度提升至原有 BF16 方法的两倍。同时,FP8 格式的 Wgrad GEMM 使得激活值能够以 FP8 格式存储用于反向传播,显著降低了内存使用量

虽然 FP8 格式在效率方面具有优势,但某些运算由于对计算精度较为敏感,仍需要更高精度的支持。另外,部分计算开销较小的运算可以采用更高精度而不会显著影响整体训练效率。

因此,经过详细评估,系统对以下模块保持原有精度(BF16 或 FP32):向量层输出层MoE 门控模块标准化运算注意力运算模块。这种针对性的高精度保留策略确保了 DeepSeek-V3 训练过程的动态稳定性。为进一步保障数值计算的稳定性,主要权重参数、权重梯度和优化器状态均采用更高精度存储。虽然这些高精度组件会带来一定的内存开销,但通过在分布式训练系统中跨多个 DP 层级进行高效数据分割,这些额外开销得到了有效控制。

量化和乘法精度优化

基于混合精度 FP8 框架,研究团队开发了多种策略来提升低精度训练的准确性,主要从量化方法和乘法计算两个方面进行优化。

细粒度量化技术: 在低精度训练框架中,由于 FP8 格式的指数位较少导致其动态范围受限,经常出现数值溢出和下溢的问题。传统方法是将输入张量的最大绝对值映射到 FP8 格式的最大可表示值,将输入分布对齐到可表示范围内。然而,这种方法使得低精度训练对激活值中的极端值特别敏感,可能导致量化精度显著下降。

为解决这一问题,该研究提出了一种更细粒度的量化方法。如图7(a)所示,该方法采用两种不同的分组策略:

  1. 激活值采用 1×128 条状分组和缩放(每个 token 的每 128 个通道)
  2. 权重采用 128×128 块状分组和缩放(每 128 个输入通道对应 128 个输出通道)
图7(a): 研究提出了一种细粒度量化方法,用于减轻由特征异常值引起的量化误差;为简化说明,仅展示了前向传播(Fprop)。(b): 配合量化策略,团队通过以间隔 NC = 128 元素的 MMA 提升到 CUDA 核心,从而提高 FP8 GEMM 的精度,以进行高精度累加。

这种方法通过在更小范围内调整缩放因子,显著提高了量化过程对极端值的适应能力。原文附录B.2 中详细分析了在块状基础上对激活值进行分组和缩放时可能出现的训练不稳定现象。

该方法的一项重要创新是在 GEMM 操作的内部维度引入组级缩放因子。虽然标准 FP8 GEMM 不直接支持这一功能,但通过与精确 FP32 累积策略的结合,实现了高效的执行。值得注意的是,这种细粒度量化策略与微缩放格式的理念高度契合,而 NVIDIA 新一代 GPU(Blackwell 系列)的 Tensor Cores 已宣布将支持更细粒度的微缩放格式。这一设计为适配最新 GPU 架构的未来研究提供了重要参考。

累积精度优化: 低精度 GEMM 运算常见的下溢问题主要通过高精度累积来解决,通常采用 FP32 精度。然而,在 NVIDIA H800 GPU 上,FP8 GEMM 的累积精度仅能保持约 14 位有效数字,远低于 FP32 的累积精度。这个问题在内部维度 K 较大时尤为显著,这正是大规模模型训练中的常见情况,因为批量规模和模型宽度都有所增加。例如,在 K=4096 的两个随机矩阵 GEMM 运算测试中,Tensor Cores 的有限累积精度导致最大相对误差接近 2%。尽管存在这些问题,部分 FP8 框架仍将有限累积精度作为默认选项,这严重制约了训练精度的提升。

为解决这一问题,系统采用了 CUDA Cores 提升策略来获得更高的计算精度。如图7(b)所示,在 Tensor Cores 执行 MMA(矩阵乘法累加)时,中间结果先使用有限位宽累加。当达到 NC 间隔时,这些部分结果会转移到 CUDA Cores 的 FP32 寄存器中进行全精度累加。结合细粒度量化在内部维度 K 上的组级缩放因子,系统能够在 CUDA Cores 上高效完成反量化过程,仅带来极少的额外计算开销。

这种设计虽然降低了单个线程组的 WGMMA 指令发出率,但在 H800 架构上通过并发执行两个 WGMMA 得到了优化:一个线程组执行提升操作的同时,另一个可以执行 MMA 操作。这种重叠执行机制保证了 Tensor Cores 的高效利用。实验证明,将 NC 设为 128 个元素(即 4 个 WGMMA)是在不引入显著开销的前提下,能够有效提升精度的最小累积间隔。

在数值表示方面,不同于先前工作采用的混合 FP8 格式(Fprop 使用 E4M3,Dgrad 和 Wgrad 使用 E5M2),本研究在所有张量计算中统一采用 E4M3 格式以提高精度。这种设计的可行性源于细粒度量化策略(平铺和块状缩放),通过在较小元素组内共享指数位来有效缓解有限动态范围的影响。

为确保量化精度并简化框架设计,系统采用在线量化方法,而不是像其他张量级量化框架那样使用基于历史记录的延迟量化。系统对每个1×128激活平铺或 128×128 权重块实时计算最大绝对值,据此确定缩放因子并完成 FP8 格式的在线量化。

低精度存储与通信优化

在 FP8 训练框架的基础上,通过将缓存的激活值和优化器状态转换为更低精度格式,系统进一步优化了内存占用和通信开销。

优化器状态的精度优化: 系统在 AdamW 优化器中使用 BF16 代替 FP32 格式来记录一阶和二阶动量,这种改变并未带来明显的性能损失。同时,为确保训练过程的数值稳定性,主要权重参数(优化器存储)和梯度值(用于批量累积)仍保持 FP32 格式。

激活值精度优化: 如图6所示,Wgrad 运算采用 FP8 执行。为降低内存占用,系统在线性运算的反向传播中使用 FP8 格式缓存激活值。但在实现低成本高精度训练时,以下运算需要特殊处理:

  1. 注意力层后的线性层输入:这些激活值同时用于注意力运算的反向传播,因此对精度特别敏感。系统为这些激活值专门设计了 E5M6 数据格式。在反向传播时,这些激活值的量化模式从 1×128 转换为 128×1 。为避免引入额外的量化误差,所有缩放因子都采用 2 的整数次幂。
  2. MoE 中 SwiGLU 运算的输入:为优化内存使用,系统仅缓存 SwiGLU 运算的输入,在反向传播时重新计算输出。这些激活值采用 FP8 格式存储,并通过细粒度量化方法实现内存效率和计算精度的最优平衡。

低精度通信优化: 通信带宽限制是 MoE 模型训练中的主要性能瓶颈。为解决这一问题,系统在执行 MoE 上投影前将激活值转换为 FP8 格式,再进行数据分发,这种方式与 MoE 上投影中的 FP8 前向传播保持兼容。与注意力层后的线性层输入处理方式相同,这里的激活值缩放因子也采用 2 的整数次幂。同样的处理方式也应用于 MoE 下投影前的激活值梯度计算。考虑到训练精度的重要性,前向和反向传播中的组合运算环节都保持 BF16 格式,以确保训练管道关键环节的计算精度。

推理和部署

DeepSeek-V3 部署在 H800 集群上,集群中每个节点内的 GPU 通过 NVLink 互连,集群内所有 GPU 通过 IB 实现全连接。为同时确保在线服务质量(SLO)和高吞吐量,该系统采用了将预填充和解码阶段分离的部署策略。

预填充

预填充阶段的最小部署单元配置为 4 个节点 32 个 GPU。

注意力机制部分采用 4 路张量并行(TP4)配合序列并行(SP),结合 8 路数据并行(DP8)。较小的 TP 规模有效控制了通信开销。

MoE 部分采用 32 路专家并行(EP32),确保每个专家能处理足够规模的批量数据,提升计算效率。MoE 的全节点通信采用与训练阶段相同的方式:先通过 IB 在节点间传输 token,再通过 NVLink 在节点内 GPU 间传递。特别地,浅层的密集 MLP 采用单路张量并行以降低 TP 通信开销。

为实现 MoE 部分各专家间的负载平衡,系统需要确保每个 GPU 处理相近数量的 token。为此,采用了冗余专家部署策略,对高负载专家进行复制和冗余部署。

系统基于在线部署时收集的统计数据识别高负载专家,并定期调整(如每 10 分钟)。确定冗余专家后,基于负载观测数据在节点内 GPU 间重新分配专家,在不增加跨节点通信开销的前提下,尽可能实现 GPU 间的负载均衡。

DeepSeek-V3 在预填充阶段配置了 32 个冗余专家,每个 GPU 除原有的 8 个专家外,还分配一个额外的冗余专家。此外,为提升吞吐量并降低全对全和 TP 通信开销,系统同时处理两个计算负载相近的微批次,将一个批次的注意力和 MoE 计算与另一个批次的数据分发和聚合重叠。

目前正在探索专家动态冗余机制,使每个 GPU 分配更多专家(如 16 个),但每次推理仅激活其中 9 个。在每层全对全操作开始前,系统实时计算全局最优路由方案。由于预填充阶段本身计算量较大,计算路由方案的额外开销几乎可以忽略。

解码

在解码阶段,系统将共享专家作为一种路由专家处理。这意味着每个 token 在路由时会选择 9 个专家,其中共享专家被视为一个必然选择的高负载专家。

解码阶段的最小部署单元由 40 个节点 320 个 GPU 构成。注意力部分采用 TP4 配合 SP,结合 DP80,而 MoE 部分使用 EP320。MoE 部分,每个 GPU 仅分配一个专家,其中 64 个 GPU 专门负责冗余专家和共享专家。分发和聚合环节的全节点通信通过 IB 直接点对点传输实现低延迟。同时,系统引入 IBGDA 技术进一步降低延迟并提升通信效率。

与预填充阶段类似,系统基于在线服务的专家负载统计数据,定期确定冗余专家配置。由于每个 GPU 仅分配一个专家,无需进行专家重新分配。系统也在研究解码阶段的动态冗余策略,但这需要对全局最优路由方案的计算算法进行更细致的优化,并与分发内核进行融合以减少开销。

此外,为提升吞吐量并降低全节点通信开销,系统正在探索在解码阶段同时处理两个计算负载相近的微批次。与预填充不同的是,在解码阶段注意力机制占用更多时间,因此系统将一个批次的注意力计算与另一个批次的分发、MoE 处理和数据聚合进行重叠。

在解码阶段,每个专家处理的批量规模相对较小(通常不超过 256 个 token),系统瓶颈在于内存访问而非计算能力。由于 MoE 部分只需加载单个专家的参数,内存访问开销较小,因此即使分配较少的 SMs 也不会显著影响整体性能。基于这一特点,系统只需分配少量 SMs 用于分发、MoE 处理和数据聚合,避免影响注意力部分的计算速度。

硬件设计建议

基于全对全通信和 FP8 训练方案的实践经验,研究团队对 AI 硬件厂商提出以下芯片设计建议。

通信硬件 DeepSeek-V3 通过实现计算与通信的并行处理,在计算过程中有效隐藏了通信延迟。这种设计相比串行计算和通信方式,显著降低了对通信带宽的要求。然而,目前的通信实现需要占用大量宝贵的 SMs 资源(如在 H800 GPU 的 132 个 SMs 中占用 20 个),这限制了计算吞吐能力。

另外,将 SMs 用于通信导致张量核心资源的严重浪费。目前,SMs 在全对全通信中主要承担以下任务:

  • 在 IB 和 NVLink 网络间转发数据,同时汇聚来自单个 GPU 发往同一节点内多个 GPU 的 IB 数据流。
  • 在 RDMA 缓冲区(注册的 GPU 内存区域)与输入/输出缓冲区间传输数据。
  • 执行全对全组合的归约运算。
  • 在跨 IB 和 NVLink 网络向多个专家传输分块数据时管理细粒度内存布局。

期望未来硬件厂商能开发专门的硬件,将这些通信任务从计算核心 SM 中分离出来,设计成类似 NVIDIA SHARP 的 GPU 协处理器或网络协处理器。同时,为降低应用开发难度,希望这种硬件能从计算单元的角度统一管理 IB(横向扩展)和 NVLink(纵向扩展)网络。通过这种统一接口,计算单元只需提交简单的通信请求,就能在整个 IB-NVLink 统一网络中轻松实现读取、写入、多播和归约等操作。

计算硬件

张量核心中的 FP8 GEMM 累积精度提升: 当前 NVIDIA Hopper 架构的张量核心在实现 FP8 GEMM 时采用定点累积方式,通过基于最大指数的右移操作对尾数积进行对齐后再相加。实验显示,该设计在符号填充右移后仅使用每个尾数积的最高 14 位,并舍弃超出范围的位。然而,例如要从 32 个 FP8 × FP8 乘法的累积中获得精确的 FP32 结果,至少需要 34 位精度。因此,建议未来芯片设计提高张量核心的累积精度以支持全精度累积,或根据具体训练和推理算法的精度需求选择合适的累积位宽,以在保证计算效率的同时将误差控制在可接受范围内。

支持平铺和块状量化:现有 GPU 仅支持整体张量量化,缺乏对平铺和块状等细粒度量化的硬件支持。当前实现中,达到NC间隔时需要将部分结果从张量核心复制到 CUDA 核心,进行缩放因子乘法运算,再添加到 CUDA 核心的 FP32 寄存器中。虽然结合精确 FP32 累积策略显著降低了反量化开销,但张量核心和 CUDA 核心间频繁的数据移动仍然制约了计算效率。因此,建议未来芯片支持细粒度量化,使张量核心能够直接接收缩放因子并实现组级缩放的 MMA 操作。这样可以直接在张量核心内完成全部的部分和累积与反量化计算,直到生成最终结果,避免频繁的数据迁移。

支持在线量化:尽管研究证实了在线量化的有效性,但当前硬件难以有效支持这一技术。现有流程中需要从 HBM 读取 128 个 BF16 激活值(上一步的计算结果)进行量化,将量化后的 FP8 值写回 HBM,然后再次读取用于 MMA 操作。为解决这一低效问题,建议未来芯片将 FP8 格式转换与 TMA 访问集成为单一融合操作,实现在激活值从全局内存传输到共享内存过程中完成量化,避免频繁的内存读写。同时建议支持线程束级格式转换指令以提升性能,促进层标准化与 FP8 转换的更好融合。另一种方案是采用近内存计算方法,将计算逻辑放置在 HBM 附近,使 BF16 元素在从 HBM 读入 GPU 时直接转换为 FP8,从而将片外内存访问减少约 50%。

支持转置GEMM操作: 现有架构难以实现矩阵转置与 GEMM 操作的有效融合。目前的工作流中,前向传播阶段的激活值需要先量化为 1×128 FP8 平铺格式并存储。在反向传播时,系统必须读取矩阵,执行反量化,进行转置操作,再重新量化为 128×1 平铺格式,最后存入 HBM。为优化内存操作效率,建议未来芯片设计中,对训练和推理中常用的精度格式,支持在 MMA 操作前直接从共享内存进行转置读取。这一改进配合 FP8 格式转换和 TMA 访问的融合机制,将大幅优化量化处理流程。

预训练

数据构建

相比 DeepSeek-V2,本次预训练语料库在提升数学编程样本占比的同时,扩大了英语和中文之外的多语言覆盖范围。

数据处理流程也经过改进,在保持语料多样性的同时降低了数据冗余。系统采用文档打包方法维持数据完整性,但训练过程中不使用跨样本注意力掩码。最终训练语料库包含 14.8T 经 tokenizer 处理的高质量多样化 token。

在 DeepSeekCoder-V2 的训练中发现,填充中间(FIM)策略在保持下一个 token 预测能力的同时,还能让模型基于上下文准确预测中间文本。因此 DeepSeek-V3 的预训练也采用了这一策略。具体实现上,使用前缀-后缀-中间(PSM)框架构建如下数据结构:

<|fim_begin|> pre<|fim_hole|> suf<|fim_end|> middle<|eos_token|>。

该结构在预打包阶段应用于文档级别,FIM 策略的应用比率为 0.1,与 PSM 框架保持一致。

DeepSeek-V3 采用词表大小为 128K 的字节级 BPE tokenizer 。为提高多语言压缩效率,对预分词器和训练数据进行了相应调整。与 DeepSeek-V2 相比,新的预分词器引入了标点符号和换行符的组合 token。然而这种设计在处理无终端换行符的多行提示词时可能产生 token 边界偏差,尤其是在少样本评估场景。为此,训练时对一定比例的组合 token 进行随机分割,使模型接触更多特殊情况来减轻这种偏差。

超参数设置

模型架构参数

系统采用 61 层 Transformer 结构,隐藏维度为 7168。所有可学习参数采用标准差 0.006 的随机初始化。

在 MLA 结构中,注意力头数量 nh 设为 128,每个头的维度 dh 为 128。KV 压缩维度 dc 为 512,查询压缩维度 d′c 为 1536。解耦的查询和键部分,每个头的维度 dhR 设为 64。

除前三层外,所有 FFN 层都替换为 MoE 层,每个 MoE 层配置 1 个共享专家和 256 个路由专家,专家的中间隐藏维度为 2048。

在路由专家中,每个 token 激活 8 个专家,且最多分配到 4 个节点。多 token 预测深度 D 设为 1,即每个 token 除预测下一个精确 token 外,还需预测一个额外 token。

与 DeepSeek-V2 类似,DeepSeek-V3 在压缩潜在向量后添加了 RMSNorm 层,并在宽度瓶颈处引入额外缩放因子。在此配置下,模型总参数量达到 671B,其中每个 token 激活 37B 参数

训练参数

模型采用 AdamW 优化器,参数设置为: β1=0.9 , β2=0.95 ,权重衰减为 0.1。预训练阶段最大序列长度为 4K,在 14.8T token 上进行训练。

学习率调度采用以下策略:首先在前 2K 步内从 0 线性增加至 2.2×10−4 ;保持该学习率直至处理完 10T 训练 token;随后在 4.3T token 区间内按余弦衰减曲线降至 2.2×10−5 。在最后 500B token 的训练中,先用 2.2×10−5 的固定学习率训练 333B token,再以 7.3×10−6 的学习率完成剩余 167B token。

梯度裁剪范数设为 1.0。批量大小采用动态调整策略,在前 469B token 训练过程中从 3072 逐步增加至 15360,此后保持不变。模型采用流水线并行将不同层分配到不同 GPU,每层的路由专家均匀分布在 8 个节点的 64 个 GPU 上。节点限制路由中,每个 token 最多分配至 4 个节点( M=4 )。

在无辅助损失负载均衡方面,前 14.3T token 的偏置更新速度 γ 设为 0.001,剩余 500B token 设为 0。平衡损失参数 α 设为 0.0001,仅用于防止单个序列内出现极端不平衡。MTP 损失权重 λ 在前 10T token 中为 0.3,剩余 4.8T token 中降至 0.1。

长上下文扩展

DeepSeek-V3 采用与 DeepSeek-V2 相似的方法实现长上下文处理能力。预训练完成后,系统使用 YaRN 进行上下文扩展,通过两个各包含 1000 步的额外训练阶段,将上下文窗口从 4K 依次扩展至 32K 和 128K。系统沿用了 DeepSeek-V2 的 YaRN 配置,仅将其应用于解耦的共享键 ktR 。两个阶段采用相同的超参数设置:尺度 s=40 , α=1 , β=32 ,缩放因子 0.1lns+1 。

第一阶段将序列长度设为 32K,批量大小为 1920。第二阶段将序列长度提升至 128K,相应地将批量大小调整为 480。两个阶段均采用与预训练末期相同的学习率 7.3×10−6 。

经过这两阶段的扩展训练,DeepSeek-V3 成功实现了对最长 128K 输入序列的高效处理。如图8所示,在完成监督微调后,模型在“大海捞针”(NIAH)测试中表现出色,在整个 128K 的上下文范围内均保持稳定的性能表现。

图 8:在 NIAH 中的评估结果显示,DeepSeek-V3 在所有上下文窗口长度(最长可达 128K)上均表现优异。

评估

评估基准

DeepSeek-V3 基座模型在以英语和中文为主的多语言语料库上完成预训练,因此评估工作主要针对英语、中文及多语言基准。

评估采用集成于 HAI-LLM 框架的内部评估系统,涵盖以下类别(下划线表示中文基准,双下划线表示多语言基准):

  • 多学科选择题评估:MMLU、MMLU Redux、MMLU-Pro、MMMLU、C-Eval 和 CMMLU
  • 语言理解与推理能力:HellaSwag、PIQA、ARC 和 BigBench Hard (BBH)
  • 知识问答评估:TriviaQA 和 NaturalQuestions
  • 阅读理解测试:RACE、DROP、C3 和 CMRC
  • 指代消歧任务:CLUEWSC 和 WinoGrande
  • 语言建模评估:Pile 中文理解与文化认知:CCPM
  • 数学能力测试:GSM8K、MATH、MGSM 和 CMath
  • 编程能力评估:HumanEval、LiveCodeBench-Base(0801-1101)、MBPP 和 CRUXEval
  • 综合能力测试:AGIEval(包含英语和中文两个子集)

作为前期工作的延续,评估采用多种方法:部分数据集使用困惑度指标,包括 HellaSwag、PIQA、WinoGrande 等;部分采用生成式评估,如 TriviaQA、NaturalQuestions、DROP 等。对 Pile-test 采用语言建模评估方法,使用每字节比特数(BPB)作为统一度量标准,确保不同分词器模型间的公平比较。

评估结果

表3展示了 DeepSeek-V3 基座模型与主流开源基座模型的性能对比,包括 DeepSeek-V2-Base、Qwen2.5-72B- Base  LLaMA-3.1-405B-Base。所有模型均使用统一的内部评估框架和评估标准。需要说明的是,由于近几个月评估框架的更新,DeepSeek-V2-Base 的部分性能指标与此前报告略有差异。

表3:DeepSeek-V3-Base 与其他具有代表性的开源基础模型的性能对比。所有模型均在内部评估框架下进行了测试,并采用了统一的评估设置。得分差距在 0.3 以内的模型被视为表现相当。评估结果表明,DeepSeek-V3-Base 在大多数基准测试中表现出色,尤其是在数学和代码任务上表现尤为突出。

综合评估显示,DeepSeek-V3-Base 全面超越 DeepSeek-V2-Base 和 Qwen2.5-72B-Base,并在绝大多数基准测试中领先 LLaMA-3.1-405B-Base,成为当前性能最强的开源基座模型

具体性能对比如下:

  1. 相比 DeepSeek-V2-Base:通过模型架构优化、规模扩展和数据质量提升,DeepSeek-V3-Base 实现了显著性能提升。
  2. 相比 Qwen2.5-72B-Base:尽管仅使用一半的激活参数,DeepSeek-V3-Base 在英语、多语言、代码和数学领域均展现出明显优势。在中文评测中,除 CMMLU 外的其他测试也优于 Qwen-2.5-72B。
  3. 相比 LLaMA-3.1-405B-Base:即便对方拥有 11 倍的激活参数量,DeepSeek-V3-Base 在多语言、代码和数学领域仍表现更优。在英语和中文语言能力评测中表现相当或更佳,特别是在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 等测试中表现突出。

得益于高效的架构设计和全面的工程优化,DeepSeek-V3 实现了极高的训练效率。在现有训练框架和基础设施下,每处理1T token 仅需 180K H800 GPU 小时,远低于 72B 或 405B 密集模型的训练成本。

讨论

MTP策略的效果分析

表4显示了 MTP 策略的详细分析结果。

表 4:MTP 策略的消融实验结果表明,该策略在大多数评估基准测试中均能显著提升模型性能。

研究分别在两种规模的基准模型上验证了该策略的效果。小规模实验采用了总参数量为 15.7B 的基线 MoE 模型,使用 1.33T token 进行训练;大规模实验则采用总参数量为 228.7B 的基线 MoE 模型,使用 540B token 训练。在保持训练数据和其他架构不变的情况下,为基准模型增加深度为 1 的 MTP 模块进行对比实验。值得注意的是,由于在推理阶段会移除 MTP 模块,因此比较模型的推理开销完全相同。

结果表明,MTP 策略在绝大多数评估指标上都带来了持续的性能提升。

无辅助损失平衡策略的效果分析

表5展示了无辅助损失平衡策略的分析结果。

表5:无辅助损失负载均衡策略的消融实验结果显示,与完全基于辅助损失的方法相比,无辅助损失策略在大多数评估基准测试中表现出更优的模型性能。

研究同样在两种规模的基线模型上进行了验证。小规模模型总参数量为 15.7B,使用 1.33T token 训练;大规模模型总参数量为 228.7B,使用 578B token 训练。这两个基准模型都采用纯辅助损失来实现负载平衡,使用带有 top-K 相关度归一化的 sigmoid 门控函数,其辅助损失强度的超参数分别与 DeepSeek-V2-Lite 和 DeepSeek-V2 保持一致。

研究在保持其他条件不变的情况下,移除所有辅助损失并引入无辅助损失平衡策略进行对比。结果显示,无辅助损失策略在大多数评估指标上都实现了更好的性能表现。

批次级与序列级负载平衡对比

无辅助损失平衡与序列级辅助损失的核心区别在于平衡范围:前者是批次级,后者是序列级。

批次级平衡提供了更灵活的约束条件,不要求每个序列内部实现领域平衡,这种灵活性使专家能够更好地适应不同领域的特点。为验证这一观点,研究分别记录和分析了一个 16B 的基于辅助损失模型和一个 16B 的无辅助损失模型在 Pile 测试集各领域的专家负载情况。如图9所示,无辅助损失模型确实展现出更明显的专家专业化特征。

图9:Pile 测试集三个领域中,无辅助损失模型与基于辅助损失模型的专家负载分布对比。结果显示,无辅助损失模型展现出更强的专家特化能力。相对专家负载定义为实际专家负载与理论平衡负载的比值。由于篇幅限制,仅展示两个层的结果,完整数据可参见原文附录C。

为深入探究这种灵活性与性能提升之间的关联,研究还设计并验证了一种批次级辅助损失方法,该方法在训练批次而非序列层面实现负载平衡。实验表明,在达到相似的批次级负载平衡程度时,批次级辅助损失能够实现与无辅助损失方法相当的性能。

具体而言,在 1B MoE 模型上的验证损失分别为:序列级辅助损失 2.258,无辅助损失方法 2.253,批次级辅助损失 2.253。3B MoE 模型的实验也显示类似结果:序列级辅助损失模型的验证损失为 2.085,而无辅助损失方法和批次级辅助损失方法均达到 2.080。

尽管批次级负载平衡方法展现出稳定的性能优势,但在实际应用中仍面临两个效率挑战:

  1. 个别序列或小批量数据可能出现负载不均衡;
  2. 推理阶段可能因领域迁移导致负载失衡。

对于第一个挑战,通过采用大规模专家并行和数据并行的训练框架得到了有效解决,这确保了每个微批量都具有足够规模。对于第二个挑战,研究设计了带有冗余专家部署的高效推理框架来应对。

后训练

监督微调(SFT)

研究构建了包含 150 万个多领域实例的指令调优数据集,针对不同领域特点采用了相应的数据创建方法。

推理数据处理: 在数学、代码竞赛和逻辑谜题等推理类任务中,系统采用内部 DeepSeek-R1 模型生成数据。虽然 R1 生成的数据具有较高的准确性,但同时存在推理冗长、格式不规范和输出过长等问题。因此,研究的核心目标是在保持 R1 模型高准确性的同时,实现输出的清晰简洁。

具体实施方法如下:首先针对特定领域(如代码、数学或通用推理)开发专家模型,采用 SFT 和 RL 相结合的训练流程。该专家模型随后作为最终模型的数据生成器。

对每个训练实例,系统生成两类 SFT 样本:一类是问题与原始答案的直接配对,另一类则引入系统提示词,将其与问题和 R1 答案组合。系统提示经过优化设计,包含了引导模型生成具有自我反思和验证机制响应的指令。

在RL阶段,模型通过高温采样生成响应,即使在没有明确系统提示的情况下,也能有效融合 R1 生成数据和原始数据的特征。经过数百轮RL迭代,中间模型成功整合了 R1 的响应模式,显著提升了整体性能。随后,研究采用拒绝采样方法,利用专家模型作为数据源,为最终模型筛选高质量的 SFT 数据。这种方法既保持了 DeepSeek-R1 的高准确性,又确保了输出的简洁性和有效性。

非推理数据处理: 对于创意写作、角色扮演和基础问答等非推理任务,系统利用 DeepSeek-V2.5 生成响应,并通过人工标注确保数据质量。

SFT 训练配置: 研究对 DeepSeek-V3-Base 进行了两轮 SFT 数据集训练,采用余弦衰减的学习率调度策略,初始学习率为 5×10−6,逐步降低至 1×10−6。训练过程中采用多样本序列打包技术,同时通过样本掩码机制确保各样本间的独立性。

强化学习(RL)

奖励模型设计

在强化学习过程中,系统同时采用规则型模型型两种奖励模型(Reward Model, RM)

规则型奖励模型:对于可通过明确规则验证的任务,系统采用规则型奖励机制进行反馈评估。例如,在处理具有确定性答案的数学问题时,要求模型在特定格式(如方框内)给出最终答案,从而可以通过规则进行自动验证。同样,在处理 LeetCode 编程题时,系统可通过编译器执行测试用例生成客观反馈。这种基于规则的验证方法具有较高的可靠性,能有效防止模型的投机行为。

模型型奖励模型:对于具有标准答案但形式灵活的问题,系统使用奖励模型评估输出与标准答案的匹配程度。而对于创意写作等缺乏标准答案的任务,奖励模型则基于问题和回答的整体性给出评估反馈。该奖励模型基于 DeepSeek-V3 的 SFT checkpoint 进行训练。为增强模型可靠性,系统构建的偏好数据不仅包含最终评分,还包含推导评分的完整推理过程,这种设计有效降低了特定任务中的奖励扭曲风险。

群组相对策略优化(Group Relative Policy Optimization, GRPO)

系统采用与 DeepSeek-V2 相似的GRPO方法。这种方法不需要与策略模型规模相当的评论家模型,而是通过群组评分估计基线。具体实现中,对每个问题 q ,GRPO 从原策略模型 πθold 采样一组输出{o1,o2,···,oG} ,并通过最大化以下目标函数优化策略模型 πθ:

其中ε 和 β 表示超参数;πref 代表参考模型;Ai 表示优势函数,其计算基于每组内输出所对应的奖励序列 {r1,r2,…,rG}。

在RL过程中,系统融合了编程、数学、写作、角色扮演和问答等多领域的提示词任务。这种多样化的训练策略不仅提高了模型对人类偏好的适应性,还在基准测试中取得了显著提升,特别是在监督微调数据有限的场景下表现出色。

评估

评估方法设置

评估基准:除基础模型测试所用的基准外,系统还在下列基准上评估了指令调优模型的表现:IFEval、FRAMES 、LongBench v2、GPQA、SimpleQA、C SimpleQA、SWE-Bench Verified、Aider、LiveCodeBench(选取 2024 年 8-11 月题目)、Codeforces、2024 年中国高中数学奥林匹克(CNMO)和 2024 年美国数学邀请赛(AIME)。

基准模型对比:系统选取了多个代表性模型作为性能对照基准,包括 DeepSeek-V2-0506、DeepSeek-V2.5-0905、Qwen2.5 72B Instruct、LLaMA-3.1 405B Instruct、Claude-Sonnet-3.5-1022 和 GPT-4o-0513。其中 DeepSeek-V2 系列选取最具代表性的版本,闭源模型则通过其官方 API 进行评估。

评估具体配置:在标准基准评估中,MMLU、DROP、GPQA 和 SimpleQA 采用 simple-evals 框架的标准提示词模板。MMLU-Redux 的零样本测试采用 Zero-Eval 提示词格式。其他数据集则遵循原始评估方案,使用数据集开发者提供的默认提示词模板。

在代码和数学能力评估方面

  • HumanEval-Mul 数据集覆盖 Python、Java、Cpp、C#、JavaScript、TypeScript、PHP 和 Bash 共 8 种主流编程语言。
  • LiveCodeBench(使用 2024 年 8-11 月数据)的评估同时采用CoT和直接输出两种方式。
  • Codeforces 评估采用参赛者百分位数作为衡量标准。
  • SWE-Bench verified 采用无代理框架进行评估。
  • Aider 相关测试采用”diff”格式评估。

在数学能力测试中,AIME 和 CNMO 2024 使用采样温度 0.7,结果取 16 次运行的平均值,而 MATH-500 则采用贪婪解码策略。

所有评估中,模型的最大输出长度限制为 8192 个 token。

标准评估

表6的评估结果显示,DeepSeek-V3 在开源模型中表现最佳,且与 GPT-4o 和 Claude-3.5-Sonnet 等顶级闭源模型相比具有竞争力。

表 6 | DeepSeek-V3 与其他具有代表性的聊天模型的比较。所有模型均在限制输出长度为 8K 的配置下进行评估。包含少于 1000 个样本的基准测试会通过多次不同温度设置的测试来得出稳健的最终结果。DeepSeek-V3 是表现最佳的开源模型,同时在与前沿闭源模型的对比中也展现出强大的竞争力。

英语能力评估:在 MMLU(评估大语言模型多领域知识和任务能力的标准基准)中,DeepSeek-V3 与 LLaMA 3.1-405B、GPT-4o 和 Claude-Sonnet 3.5 等顶级模型表现相当,明显超越 Qwen2.5-72B。

在更具挑战性的 MMLU-Pro 教育知识评测中,DeepSeek-V3 的表现仅次于 Claude-Sonnet 3.5。

在经过标签修正的 MMLU-Redux 测试中,DeepSeek-V3 的表现领先其他模型。

在博士级评测 GPQA-Diamond 中,DeepSeek-V3 仅落后于 Claude 3.5 Sonnet,但大幅领先其他竞争模型。

在长文本理解方面,DeepSeek-V3 继续保持顶级水平。在 DROP 的少样本测试中达到 91.6 的 F1 分数,领先所有对比模型。在需要处理 10 万 token 上下文的 FRAMES 问答测试中,仅次于 GPT-4o 但显著优于其他模型,充分展示了其处理超长文本的能力。在最新发布的 LongBench v2 测试中的最优表现,进一步证实了这一能力。

在 SimpleQA 事实性知识测试中,DeepSeek-V3 虽然落后于 GPT-4o 和 Claude-Sonnet,但这主要源于其资源分配策略——更多训练资源用于中文知识学习,因此在 C-SimpleQA 中表现优异。在指令遵循能力评估中,相比前代 DeepSeek-V2 系列有显著提升,特别是在理解和执行特定格式要求方面。

代码与数学能力评估:在编程领域,DeepSeek-V3 的评估涵盖工程实践(SWE-Bench-Verified)算法编程(HumanEval、LiveCodeBench)两个维度。

在工程类任务中,虽然未能超越 Claude-Sonnet-3.5-1022,但明显优于其他开源模型。作为开源模型,DeepSeek-V3 的强大能力将推动软件工程和算法开发领域的创新,帮助开发者和研究人员拓展开源模型在编程领域的应用边界。

在算法编程任务上,借助先进的知识蒸馏技术,DeepSeek-V3 在 HumanEval-Mul 和 LiveCodeBench 等测试中超越所有基线模型。

在数学能力测试中,DeepSeek-V3 为非 o1 类模型树立了新标准。在 AIME、MATH-500 和 CNMO 2024 等具有挑战性的测试中,其得分比第二名 Qwen2.5 72B 高出约 10 个百分点,这种显著优势充分验证了 DeepSeek-R1 知识蒸馏技术的有效性。

中文能力评估:在中英双语支持方面,Qwen 和 DeepSeek 是两个代表性的模型系列。

在中文 SimpleQA 事实性知识测试中,尽管 Qwen2.5 的训练数据量更大(18T token,超出 DeepSeek-V3 的 14.8T token 约 20%),DeepSeek-V3 仍领先 16.4 个百分点。

在 C-Eval(中文教育知识评估) CLUEWSC(中文指代消歧挑战)等测试中,两个模型表现相当,表明它们在中文推理和教育任务方面都达到了较高水平。

开放式评估

除标准基准测试外,系统还采用 LLM 作为评估者对模型的开放式生成能力进行评估,结果见表7。

表 7:英文开放式对话评估。在 AlpacaEval 2.0 中,V3使用“长度控制胜率”作为核心评估指标,以衡量模型在对话生成中的表现。

评估严格遵循 AlpacaEval 2.0 和 Arena-Hard 的标准规范,使用 GPT-4-Turbo-1106 进行配对评估。

在 Arena-Hard 测试中,DeepSeek-V3 相对于 GPT-4-0314 基准取得了 86% 以上的优胜率,与 Claude-Sonnet-3.5-1022 等顶级模型表现相当,充分展示了其在处理复杂任务(包括编程和调试)方面的卓越能力。作为首个在 Arena-Hard 测试中突破 85% 的开源模型,DeepSeek-V3 显著缩小了与闭源模型的差距,为开源模型在高难度任务领域树立了新标准。

在 AlpacaEval 2.0 评测中,DeepSeek-V3 同样表现出色,超越了所有参评的开源和闭源模型,展示了其在写作和问答方面的优秀能力。特别是相比 DeepSeek-V2.5-0905 提升了 20%,证明了模型在基础任务处理能力上的显著进步。

生成式奖励模型性能

研究将 DeepSeek-V3 的评判能力与领先模型 GPT-4o 和 Claude-3.5 进行对比。如表8所示,在 RewardBench 评测中,DeepSeek-V3 达到了 GPT-4o-0806 和 Claude-3.5-Sonnet-1022 最优版本的水平,并超越了其他版本。

表 8:GPT-4o、Claude-3.5-sonnet 和 DeepSeek-V3 在 RewardBench 基准测试中的性能对比。

通过引入投票机制,DeepSeek-V3 的评判能力得到进一步提升。基于此,系统采用 DeepSeek-V3 配合投票机制对开放式问题进行评估反馈,有效提高了模型对齐过程的可靠性和稳定性。

讨论

DeepSeek-R1 知识蒸馏分析

研究基于 DeepSeek-V2.5 模型评估了 DeepSeek-R1 知识蒸馏的效果。对比实验中,基准模型使用短链式思维数据训练,而对照组使用专家检查点生成的数据。

表9的结果显示,蒸馏数据在 LiveCodeBench 和 MATH-500 基准测试中都带来了明显提升。

表9:DeepSeek-R1 蒸馏对模型性能的贡献分析。在 LiveCodeBench 和 MATH-500 基准测试中的评估设置与表6相同,旨在确保结果的可比性。

研究发现了一个重要的平衡点:知识蒸馏能提高性能,但同时会显著增加输出长度。为此,DeepSeek-V3 在蒸馏过程中采用了经过优化的参数配置,以平衡模型准确性和计算效率。

研究表明,从推理模型进行知识蒸馏是提升模型后期性能的有效方法。当前研究虽然主要关注数学和编程领域的知识蒸馏,但这种方法在其他领域也展现出广阔前景。其在特定领域的成功表明,长链式思维蒸馏技术有望提升模型在其他需要复杂推理的认知任务中的表现。未来研究将继续探索该方法在不同领域的应用。

自我奖励机制

奖励机制是强化学习中的核心要素,决定着优化方向。在编程或数学等可通过外部工具直接验证的领域,强化学习展现出显著效果。但在更一般场景中,直接通过规则编码构建反馈机制并不可行。因此,在开发 DeepSeek-V3 时,针对这类广泛场景,采用了宪制 AI 方法,使用模型自身的投票评估结果作为反馈。这种方法在对齐效果上取得显著成效,大幅提升了模型在主观评估中的表现。

通过引入额外的宪制规则,DeepSeek-V3 能够向预期方向优化。研究认为,将补充信息与语言模型结合作为反馈来源的范式具有重要意义。大语言模型能够将各类场景中的非结构化信息转化为有效奖励信号,促进模型的持续优化。除自我奖励外,研究团队也在探索其他通用且可扩展的奖励方法,以持续提升模型在通用场景中的能力。

MTP性能

DeepSeek-V3 通过 MTP 技术实现同时预测两个 token,结合推测解码框架显著提升了解码效率。关键问题是第二个预测 token 的可用性,评估显示在不同生成任务中,第二个 token 的接受率稳定保持在 85%-90%,表现出较高的可靠性。

这种高接受率使 DeepSeek-V3 的解码速度提升至原来的 1.8 倍(以每秒生成 token 数衡量)。

结论、局限性和未来发展方向

本研究介绍了 DeepSeek-V3 大规模混合专家语言模型,该模型总参数量达到 671B,每次处理激活 37B 参数,训练数据规模达 14.8T token。

模型在延续 MLA 和 DeepSeekMoE 架构优势的基础上,创新性地提出了无辅助损失负载均衡策略,并引入多 token 预测训练目标以提升性能。

通过采用 FP8 训练技术和精细的工程优化,模型实现了高效的训练过程。在后训练阶段,成功将 DeepSeek-R1 系列模型的推理能力迁移至新模型。

综合评估显示,DeepSeek-V3 不仅成为当前性能最强的开源模型,还达到了与 GPT-4o 和 Claude-3.5-Sonnet 等顶级闭源模型相当的水平。同时,模型维持了极具竞争力的训练成本,完整训练过程(包括预训练、上下文长度扩展和后训练)仅需 2.788M H800 GPU 小时。

尽管模型在性能和训练效率上表现出色,但仍存在一些局限性,特别是在部署方面:首先,为保证推理效率,模型的最小部署单元规模较大,可能超出小型团队的资源能力;其次,虽然当前部署方案使模型的端到端生成速度比上一代提升了两倍以上,但仍有优化空间。这些局限性有望随着硬件技术的进步得到自然解决。

秉持长期发展理念,DeepSeek 将继续坚持开源路线,稳步推进通用人工智能的研究。未来研究将重点关注以下方向:

  • 持续优化模型架构,提升训练和推理效率,探索支持无限上下文长度的高效方案。同时突破 Transformer 架构的固有局限,拓展模型的建模能力边界。
  • 深化训练数据的质量提升和规模扩展,探索新的训练信号来源,实现数据在多个维度的全面扩展。
  • 加强模型的深层推理能力,通过扩展推理的广度和深度,提升模型的智能水平和问题解决能力。
  • 建立更全面的多维度评估体系,避免过度优化特定基准测试集而产生的能力误判,确保模型评估的科学性和全面性。

Speech Datasets Collection-语音数据集汇总

来源:https://github.com/RevoSpeechTech/speech-datasets-collection

文本翻译数据集:https://opus.nlpl.eu/

openslr 下载:

1)修改为国内地址

例如 aishell,默认的run.sh里写的是www.openslr.org/resources/33,需要改为国内站点,http://openslr.magicdatatech.com/resources/33

其他目录可以看: http://openslr.magicdatatech.com/resources.php

在使用 wget 下载文件时,如果遇到下载速度慢的问题,可以通过以下几种方法加速下载:

1. 使用多个连接

wget 默认只使用单个连接进行下载,但是你可以使用 aria2 这种工具,它支持多线程下载,显著加速下载速度。aria2 可以通过以下命令安装:

sudo apt install aria2  # For Ubuntu/Debian
brew install aria2  # For macOS

然后你可以使用 aria2 下载文件:

aria2c -x 16 -s 16 <URL>

-x 16 表示使用 16 个连接来下载文件,-s 16 表示将下载源分为 16 个部分。

2. 使用 --limit-rate 限制下载速度

虽然这并不会直接加速下载,但如果下载的速度不稳定,设置一个合理的速率限制可以避免带宽波动影响速度。在命令中加上 --limit-rate 参数:

wget --limit-rate=1m <URL>

这将限制下载速度为每秒 1 MB。

3. 启用断点续传

如果下载过程中断,可以使用 -c--continue 参数来启用断点续传,从中断的地方继续下载:

wget -c <URL>

This is a curated list of open speech datasets for speech-related research (mainly for Automatic Speech Recognition).

Over 110 speech datasets are collected in this repository, and more than 70 datasets can be downloaded directly without further application or registration.

Notice:

  1. This repository does not show corresponding License of each dataset. Basically it’s OK to use these datasets for research purpose only. Please make sure the License is suitable before using for commercial purpose.
  2. Some small-scale speech corpora are not shown here for concision.

1. Data Overview

Dataset AcquisitionSup/UnsupAll Languages (Hours)Mandarin (Hours)English (Hours)
download directlysupervised199k +2110 +34k +
download directlyunsupervised530k +1360 +68k +
download directlytotal729k +3470 +102k +
need applicationsupervised53k +16740 +50k +
need applicationunsupervised60k +12400 +57k +
need applicationtotal113k +29140 +107k +
totalsupervised252k +18850 +84k +
totalunsupervised590k +13760 +125k +
totaltotal842k +32610 +209k +
  • Mandarin here includes Mandarin-English CS corpora.
  • Sup means supervised speech corpus with high-quality transcription.
  • Unsup means unsupervised or weakly-supervised speech corpus.

2. List of ASR corpora

a. datasets can be downloaded directly

idNameLanguageType/DomainPaper LinkData LinkSize (Hours)
1LibrispeechEnglishReading[paper][dataset]960
2TED_LIUM v1EnglishTalks[paper][dataset]118
3TED_LIUM v2EnglishTalks[paper][dataset]207
4TED_LIUM v3EnglishTalks[paper][dataset]452
5MLSMultilingualReading[paper][dataset]50k +
6thchs30MandarinReading[paper][dataset]35
7ST-CMDSMandarinCommands[dataset]100
8aishellMandarinRecording[paper][dataset]178
9aishell-3MandarinRecording[paper][dataset]85
10aishell-4MandarinMeeting[paper][dataset]120
11aishell-evalMandarinMisc[dataset]80 +
12PrimewordsMandarinRecording[dataset]100
13aidatatang_200zhMandarinRecord[dataset]200
14MagicDataMandarinRecording[dataset]755
15MagicData-RAMCMandarinConversational[paper][dataset]180
16Heavy Accent CorpusMandarinConversational[dataset]58 +
17AliMeetingMandarinMeeting[paper][dataset]120
18CN-CelebMandarinMisc[paper][dataset]unsup(274)
19CN-Celeb2MandarinMisc[paper][dataset]unsup(1090)
20The People’s SpeechEnglishMisc[paper][dataset]30k +
21Multilingual TEDxMultilingualTalks[paper][dataset]760 +
22VoxPopuliMultilingualMisc[paper][dataset]sup(1.8k)
unsup(400k)
23Libri-LightEnglishReading[paper][dataset]unsup(60k)
24Common Voice (Multilingual)MultilingualRecording[paper][dataset]sup(15k)
unsup(5k)
25Common Voice (English)EnglishRecording[paper][dataset]sup(2200)
unsup(700)
26JTubeSpeechJapaneseMisc[paper][dataset]1300
27ai4bharat NPTEL2020English(Indian)Lectures[dataset]weaksup(15.7k)
28open_sttRussianMisc[dataset]20k +
29ASCENDMandarin-English CSConversational[paper][dataset]10 +
30Crowd-Sourced SpeechMultilingualRecording[paper][dataset]1200 +
31Spoken WikipediaMultilingualRecording[paper][dataset]1000 +
32MuST-CMultilingualTalks[paper][dataset]6000 +
33M-AILABSMultilingualReading[dataset]1000
34CMU WildernessMultilingualMisc[paper][dataset]unsup(14k)
35Gram_VaaniHindiRecording[paper] [code][dataset]sup(100)
unsup(1k)
36VoxLingua107MultilingualMisc[paper][dataset]unsup(6600 +)
37Kazakh CorpusKazakhRecording[paper] [code][dataset]335
38VoxforgeEnglishRecording[dataset]130
39TatoebaEnglishRecording[dataset]200
40IndicWav2VecMultilingualMisc[paper][dataset]unsup(17k +)
41VoxCelebEnglishMisc[paper][dataset]unsup(352)
42VoxCeleb2EnglishMisc[paper][dataset]unsup(2442)
43RuLibrispeechRussianRead[dataset]98
44MediaSpeechMultilingualMisc[paper][dataset]40
45MUCS 2021 task1MultilingualMisc[dataset]300
46MUCS 2021 task2MultilingualMisc[dataset]150
47nicolingua-west-africanMultilingualMisc[paper][dataset]140 +
48Samromur 21.05SamromurMisc[code][dataset] [dataset][dataset]145
49Puebla-NahuatlPuebla-NahuatlMisc[paper][dataset]150 +
50GolosRussianMisc[paper][dataset]1240
51ParlaSpeech-HRCroatianParliament[paper][dataset]1816
52Lyon CorpusFrenchRecording[paper][dataset]185
53Providence CorpusEnglishRecording[paper][dataset]364
54CLARIN Spoken CorporaCzechRecording[dataset]1120 +
55Czech Parliament PlenaryCzechRecording[dataset]444
56(Youtube) Regional American CorpusEnglish (Accented)Misc[paper][dataset]29k +
57NISP DatasetMultilingualRecording[paper][dataset]56 +
58Regional African AmericanEnglish (Accented)Recording[paper][dataset]130 +
59Indonesian UnsupIndonesianMisc[dataset]unsup (3000+)
60Librivox-SpanishSpanishRecording[dataset]120
61AVSpeechEnglishAudio-Visual[paper][dataset]unsup(4700)
62CMLRMandarinAudio-Visual[paper][dataset]100 +
63Speech Accent ArchiveEnglishAccented[paper][dataset]TBC
64BibleTTSMultilingualTTS[paper][dataset]86
65NST-NorwegianNorwegianRecording[dataset]540
66NST-DanishDanishRecording[dataset]500 +
67NST-SwedishSwedishRecording[dataset]300 +
68NPSCNorwegianParliament[paper][dataset]140
69CI-AVSRCantoneseAudio-Visual[paper][dataset]8 +
70Aalto Finnish ParliamentFinnishParliament[paper][dataset]3100 +
71UserLibriEnglishReading[paper][dataset]
72Ukrainian SpeechUkrainianMisc[dataset]1300+
73UCLA-ASR-corpusMultilingualMisc[dataset]unsup(15k)
sup(9k)
74ReazonSpeechJapaneseMisc[paper] [code][dataset]15k
75BundestagGermanDebate[paper][dataset]sup(610)
unsup(1038)

b. datasets can be downloaded after application

idNameLanguageType/DomainPaper LinkData LinkSize (Hours)
1FisherEnglishConversational[paper][dataset]2000
2WenetSpeechMandarinMisc[paper][dataset]sup(10k)
weaksup(2.4k)
unsup(10k)
3aishell-2MandarinRecording[paper][dataset]1000
4aidatatang_1505zhMandarinRecording[dataset]1505
5SLT 2021 CSRCMandarinMisc[paper][dataset]400
6GigaSpeechEnglishMisc[paper][dataset]sup(10k)
unsup(23k)
7SPGISpeechEnglishMisc[paper][dataset]5000
8AESRC 2020English (accented)Misc[paper][dataset]160
9LaboroTVSpeechJapaneseMisc[paper][dataset]2000 +
10TAL_CSASRMandarin-English CSLectures[dataset]587
11ASRU 2019 ASRMandarin-English CSReading[dataset]700 +
12SEAMEMandarin-English CSRecording[paper][dataset]196
13Fearless StepsEnglishMisc[dataset]unsup(19k)
14FTSpeechDanishMeeting[paper][dataset]1800 +
15KeSpeechMandarinRecording[paper][dataset]1542
16KsponSpeechKoreanConversational[paper][dataset]969
17RVTE databaseSpanishTV[paper][dataset]800 +
18DiDiSpeechMandarinRecording[paper][dataset]800
19BabelMultilingualTelephone[paper][dataset]1000 +
20National Speech CorpusEnglish (Singapore)Misc[paper][dataset]3000 +
21MyST Children’s SpeechEnglishRecording[dataset]393
22L2-ARCTICL2 EnglishRecording[paper][dataset]20 +
23JSpeechMultilingualRecording[paper][dataset]1332 +
24LRS2-BBCEnglishAudio-Visual[paper][dataset]220 +
25LRS3-TEDEnglishAudio-Visual[paper][dataset]470 +
26LRS3-LangMultilingualAudio-Visual[dataset]1300 +
27QASRArabicDialects[paper][dataset]2000 +
28ADI (MGB-5)ArabicDialects[paper][dataset]unsup (3000 +)
29MGB-2ArabicTV[paper][dataset]1200 +
303MASSIVMultilingualAudio-Visual[paper][dataset]sup(310)
unsup(600)
31MDCCCantoneseMisc[paper][dataset]73 +
32Lahjoita PuhettaFinnishMisc[paper][dataset]sup(1600)
unsup(2000)
33SDS-200Swiss GermanDialects[paper][dataset]200
34Modality CorpusMultilingualAudio-Visual[paper][dataset]30 +
35Hindi-Tamil-EnglishMultilingualMisc[dataset]690
36English-Vietnamese CorpusEnglish, VietnameseMisc[paper][dataset]500+
37OLKAVSKoreanAudio-Visual[paper] [code][dataset]1150

3. References

混合专家模型 (MoE)

随着 Mixtral 8x7B (announcementmodel card) 的推出,一种称为混合专家模型 (Mixed Expert Models,简称 MoEs) 的 Transformer 模型在开源人工智能社区引起了广泛关注。

混合专家模型 (MoEs):

  • 与稠密模型相比, 预训练速度更快
  • 与具有相同参数数量的模型相比,具有更快的 推理速度
  • 需要 大量显存,因为所有专家系统都需要加载到内存中
  • 在 微调方面存在诸多挑战,但 近期的研究 表明,对混合专家模型进行 指令调优具有很大的潜力

什么是混合专家模型?

模型规模是提升模型性能的关键因素之一。在有限的计算资源预算下,用更少的训练步数训练一个更大的模型,往往比用更多的步数训练一个较小的模型效果更佳。

混合专家模型 (MoE) 的一个显著优势是它们能够在远少于稠密模型所需的计算资源下进行有效的预训练。这意味着在相同的计算预算条件下,您可以显著扩大模型或数据集的规模。特别是在预训练阶段,与稠密模型相比,混合专家模型通常能够更快地达到相同的质量水平。

那么,究竟什么是一个混合专家模型 (MoE) 呢?作为一种基于 Transformer 架构的模型,混合专家模型主要由两个关键部分组成:

  • 稀疏 MoE 层: 这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层MoE 层包含若干“专家”(例如 8 个),每个专家本身是一个独立的神经网络。在实际应用中,这些专家通常是前馈网络 (FFN),但它们也可以是更复杂的网络结构,甚至可以是 MoE 层本身,从而形成层级式的 MoE 结构。
  • 门控网络或路由: 这个部分用于决定哪些令牌 (token) 被发送到哪个专家。例如,在下图中,“More”这个令牌可能被发送到第二个专家,而“Parameters”这个令牌被发送到第一个专家。有时,一个令牌甚至可以被发送到多个专家。令牌的路由方式是 MoE 使用中的一个关键点,因为路由器由学习的参数组成,并且与网络的其他部分一同进行预训练。
[Switch Transformers paper](https://arxiv.org/abs/2101.03961) 论文中的 MoE layer

总结来说,在混合专家模型 (MoE) 中,将传统 Transformer 模型中的每个前馈网络 (FFN) 层替换为 MoE 层,其中 MoE 层由两个核心部分组成: 一个门控网络和若干数量的专家。

尽管混合专家模型 (MoE) 提供了若干显著优势,例如更高效的预训练和与稠密模型相比更快的推理速度,但它们也伴随着一些挑战:

  • 训练挑战: 虽然 MoE 能够实现更高效的计算预训练,但它们在微调阶段往往面临泛化能力不足的问题,长期以来易于引发过拟合现象。
  • 推理挑战: MoE 模型虽然可能拥有大量参数,但在推理过程中只使用其中的一部分,这使得它们的推理速度快于具有相同数量参数的稠密模型。然而,这种模型需要将所有参数加载到内存中,因此对内存的需求非常高。以 Mixtral 8x7B 这样的 MoE 为例,需要足够的 VRAM 来容纳一个 47B 参数的稠密模型。之所以是 47B 而不是 8 x 7B = 56B,是因为在 MoE 模型中,只有 FFN 层被视为独立的专家,而模型的其他参数是共享的。此外,假设每个令牌只使用两个专家,那么推理速度 (以 FLOPs 计算) 类似于使用 12B 模型 (而不是 14B 模型),因为虽然它进行了 2x7B 的矩阵乘法计算,但某些层是共享的。

混合专家模型简史

混合专家模型 (MoE) 的理念起源于 1991 年的论文 Adaptive Mixture of Local Experts。这个概念与集成学习方法相似,旨在为由多个单独网络组成的系统建立一个监管机制。在这种系统中,每个网络 (被称为“专家”) 处理训练样本的不同子集,专注于输入空间的特定区域。那么,如何选择哪个专家来处理特定的输入呢?这就是门控网络发挥作用的地方,它决定了分配给每个专家的权重。在训练过程中,这些专家和门控网络都同时接受训练,以优化它们的性能和决策能力。

在 2010 至 2015 年间,两个独立的研究领域为混合专家模型 (MoE) 的后续发展做出了显著贡献:

  1. 组件专家: 在传统的 MoE 设置中,整个系统由一个门控网络和多个专家组成。在支持向量机 (SVMs) 、高斯过程和其他方法的研究中,MoE 通常被视为整个模型的一部分。然而,Eigen、Ranzato 和 Ilya 的研究 探索了将 MoE 作为更深层网络的一个组件。这种方法允许将 MoE 嵌入到多层网络中的某一层,使得模型既大又高效。
  2. 条件计算: 传统的神经网络通过每一层处理所有输入数据。在这一时期,Yoshua Bengio 等研究人员开始探索基于输入令牌动态激活或停用网络组件的方法。

这些研究的融合促进了在自然语言处理 (NLP) 领域对混合专家模型的探索。特别是在 2017 年,Shazeer 等人 (团队包括 Geoffrey Hinton 和 Jeff Dean,后者有时被戏称为 “谷歌的 Chuck Norris”) 将这一概念应用于 137B 的 LSTM (当时被广泛应用于 NLP 的架构,由 Schmidhuber 提出)。通过引入稀疏性,这项工作在保持极高规模的同时实现了快速的推理速度。这项工作主要集中在翻译领域,但面临着如高通信成本和训练不稳定性等多种挑战。

混合专家模型 (MoE) 的引入使得训练具有数千亿甚至万亿参数的模型成为可能,如开源的 1.6 万亿参数的 Switch Transformers 等。这种技术不仅在自然语言处理 (NLP) 领域得到了广泛应用,也开始在计算机视觉领域进行探索。然而,本篇博客文章将主要聚焦于自然语言处理领域的应用和探讨。

什么是稀疏性?

稀疏性的概念采用了条件计算的思想。在传统的稠密模型中,所有的参数都会对所有输入数据进行处理。相比之下,稀疏性允许我们仅针对整个系统的某些特定部分执行计算。这意味着并非所有参数都会在处理每个输入时被激活或使用,而是根据输入的特定特征或需求,只有部分参数集合被调用和运行。

让我们深入分析 Shazeer 对混合专家模型 (MoE) 在翻译应用中的贡献。条件计算的概念 (即仅在每个样本的基础上激活网络的不同部分) 使得在不增加额外计算负担的情况下扩展模型规模成为可能。这一策略在每个 MoE 层中实现了数以千计甚至更多的专家的有效利用。

这种稀疏性设置确实带来了一些挑战。例如,在混合专家模型 (MoE) 中,尽管较大的批量大小通常有利于提高性能,但当数据通过激活的专家时,实际的批量大小可能会减少。比如,假设我们的输入批量包含 10 个令牌, 可能会有五个令牌被路由到同一个专家,而剩下的五个令牌分别被路由到不同的专家。这导致了批量大小的不均匀分配和资源利用效率不高的问题。在接下来的部分中,将会讨论 让 MoE 高效运行 的其他挑战以及相应的解决方案。

那我们应该如何解决这个问题呢?一个可学习的门控网络 (G) 决定将输入的哪一部分发送给哪些专家 (E):

在这种设置下,虽然所有专家都会对所有输入进行运算,但通过门控网络的输出进行加权乘法操作。但是,如果 G (门控网络的输出) 为 0 会发生什么呢?如果是这种情况,就没有必要计算相应的专家操作,因此我们可以节省计算资源。那么一个典型的门控函数是什么呢?一个典型的门控函数通常是一个带有 softmax 函数的简单的网络。这个网络将学习将输入发送给哪个专家。

Shazeer 等人的工作还探索了其他的门控机制,其中包括带噪声的 TopK 门控 (Noisy Top-K Gating)。这种门控方法引入了一些可调整的噪声,然后保留前 k 个值。具体来说:

  • 添加一些噪声
  • 选择保留前 K 个值
  • 应用 Softmax 函数

这种稀疏性引入了一些有趣的特性。通过使用较低的 k 值 (例如 1 或 2),我们可以比激活多个专家时更快地进行训练和推理。为什么不仅选择最顶尖的专家呢?最初的假设是,需要将输入路由到不止一个专家,以便门控学会如何进行有效的路由选择,因此至少需要选择两个专家。Switch Transformers 就这点进行了更多的研究。

我们为什么要添加噪声呢?这是为了专家间的负载均衡

混合专家模型中令牌的负载均衡

正如之前讨论的,如果所有的令牌都被发送到只有少数几个受欢迎的专家,那么训练效率将会降低。在通常的混合专家模型 (MoE) 训练中,门控网络往往倾向于主要激活相同的几个专家。这种情况可能会自我加强,因为受欢迎的专家训练得更快,因此它们更容易被选择。为了缓解这个问题,引入了一个 辅助损失,旨在鼓励给予所有专家相同的重要性。这个损失确保所有专家接收到大致相等数量的训练样本,从而平衡了专家之间的选择。接下来的部分还将探讨专家容量的概念,它引入了一个关于专家可以处理多少令牌的阈值。在 transformers 库中,可以通过 aux_loss 参数来控制辅助损失。

MoEs and Transformers

Transformer 类模型明确表明,增加参数数量可以提高性能,因此谷歌使用 GShard 尝试将 Transformer 模型的参数量扩展到超过 6000 亿并不令人惊讶。

GShard 将在编码器和解码器中的每个前馈网络 (FFN) 层中的替换为使用 Top-2 门控的混合专家模型 (MoE) 层。下图展示了编码器部分的结构。这种架构对于大规模计算非常有效: 当扩展到多个设备时,MoE 层在不同设备间共享,而其他所有层则在每个设备上复制。我们将在 “让 MoE 起飞” 部分对这一点进行更详细的讨论。

GShard 论文中的 MoE Transformer Encoder

为了保持负载平衡和训练效率,GShard 的作者除了引入了上一节中讨论的类似辅助损失外,还引入了一些关键变化:

  • 随机路由: 在 Top-2 设置中,我们始终选择排名最高的专家,但第二个专家是根据其权重比例随机选择的。
  • 专家容量: 我们可以设定一个阈值,定义一个专家能处理多少令牌。如果两个专家的容量都达到上限,令牌就会溢出,并通过残差连接传递到下一层,或在某些情况下被完全丢弃。专家容量是 MoE 中最重要的概念之一。为什么需要专家容量呢?因为所有张量的形状在编译时是静态确定的,我们无法提前知道多少令牌会分配给每个专家,因此需要一个固定的容量因子。

GShard 的工作对适用于 MoE 的并行计算模式也做出了重要贡献,但这些内容的讨论超出了这篇博客的范围。

注意: 在推理过程中,只有部分专家被激活。同时,有些计算过程是共享的,例如自注意力 (self-attention) 机制,它适用于所有令牌。这就解释了为什么我们可以使用相当于 12B 稠密模型的计算资源来运行一个包含 8 个专家的 47B 模型。如果我们采用 Top-2 门控,模型会使用高达 14B 的参数。但是,由于自注意力操作 (专家间共享) 的存在,实际上模型运行时使用的参数数量是 12B。

Switch Transformers

尽管混合专家模型 (MoE) 显示出了很大的潜力,但它们在训练和微调过程中存在稳定性问题。Switch Transformers 是一项非常激动人心的工作,它深入研究了这些话题。作者甚至在 Hugging Face 上发布了一个 1.6 万亿参数的 MoE,拥有 2048 个专家,你可以使用 transformers 库来运行它。Switch Transformers 实现了与 T5-XXL 相比 4 倍的预训练速度提升。

[Switch Transformers paper](https://arxiv.org/abs/2101.03961) 论文中的 MoE layer

就像在 GShard 中一样,作者用混合专家模型 (MoE) 层替换了前馈网络 (FFN) 层。Switch Transformers 提出了一个 Switch Transformer 层,它接收两个输入 (两个不同的令牌) 并拥有四个专家。

与最初使用至少两个专家的想法相反,Switch Transformers 采用了简化的单专家策略。这种方法的效果包括:

  • 减少门控网络 (路由) 计算负担
  • 每个专家的批量大小至少可以减半
  • 降低通信成本
  • 保持模型质量

Switch Transformers 也对 专家容量 这个概念进行了研究。

上述建议的容量是将批次中的令牌数量均匀分配到各个专家。如果我们使用大于 1 的容量因子,我们为令牌分配不完全平衡时提供了一个缓冲。增加容量因子会导致更高的设备间通信成本,因此这是一个需要考虑的权衡。特别值得注意的是,Switch Transformers 在低容量因子 (例如 1 至 1.25) 下表现出色。

Switch Transformer 的作者还重新审视并简化了前面章节中提到的负载均衡损失。在训练期间,对于每个 Switch 层的辅助损失被添加到总模型损失中。这种损失鼓励均匀路由,并可以使用超参数进行加权。

作者还尝试了混合精度的方法,例如用 bfloat16 精度训练专家,同时对其余计算使用全精度进行。较低的精度可以减少处理器间的通信成本、计算成本以及存储张量的内存。然而,在最初的实验中,当专家和门控网络都使用 bfloat16 精度训练时,出现了不稳定的训练现象。这种不稳定性特别是由路由计算引起的,因为路由涉及指数函数等操作,这些操作对精度要求较高。因此,为了保持计算的稳定性和精确性,保持更高的精度是重要的。为了减轻不稳定性,路由过程也使用了全精度。

这个 Jupyter Notebook 展示了如何对 Switch Transformers 进行微调以进行摘要生成的详细指南。然而,在开始微调 Switch Transformers 之前,强烈建议您先阅读关于 微调混合专家模型 部分的内容。

Switch Transformers 采用了编码器 – 解码器的架构,实现了与 T5 类似的混合专家模型 (MoE) 版本。GLaM 这篇工作探索了如何使用仅为原来 1/3 的计算资源 (因为 MoE 模型在训练时需要的计算量较少,从而能够显著降低碳足迹) 来训练与 GPT-3 质量相匹配的模型来提高这些模型的规模。作者专注于仅解码器 (decoder-only) 的模型以及少样本和单样本评估,而不是微调。他们使用了 Top-2 路由和更大的容量因子。此外,他们探讨了将容量因子作为一个动态度量,根据训练和评估期间所使用的计算量进行调整。

DeepSeek-MoE:共享专家

在 huggingface 上开源的模型包含164亿参数,共 64个路由专家、2个共享专家,每个令牌会匹配6个专家。(引用自 DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models, 模型 deepseek-ai/deepseek-moe-16b-base , 微调代码 github.com/deepseek-ai…)

DeepSeek-MoE 引入了“细粒度/垂类专家”和“共享专家”的概念。

细粒度/垂类专家” 是通过细粒度专家切分 (Fine-Grained Expert Segmentation) 将一个 FFN 切分成 m 份。尽管每个专家的参数量小了,但是能够提高专家的专业水平。

共享专家”是掌握更加泛化或公共知识的专家,从而减少每个细粒度专家中的知识冗余,共享专家的数量是固定的且总是处于被激活的状态。

用 Router z-loss 稳定模型训练

之前讨论的平衡损失可能会导致稳定性问题。我们可以使用许多方法来稳定稀疏模型的训练,但这可能会牺牲模型质量。例如,引入 dropout 可以提高稳定性,但会导致模型质量下降。另一方面,增加更多的乘法分量可以提高质量,但会降低模型稳定性。

ST-MoE 引入的 Router z-loss 在保持了模型性能的同时显著提升了训练的稳定性。这种损失机制通过惩罚门控网络输入的较大 logits 来起作用,目的是促使数值的绝对大小保持较小,这样可以有效减少计算中的舍入误差。这一点对于那些依赖指数函数进行计算的门控网络尤其重要。为了深入了解这一机制,建议参考原始论文以获得更全面的细节。

专家如何学习?

ST-MoE 的研究者们发现,编码器中不同的专家倾向于专注于特定类型的令牌或浅层概念。例如,某些专家可能专门处理标点符号,而其他专家则专注于专有名词等。与此相反,解码器中的专家通常具有较低的专业化程度。此外,研究者们还对这一模型进行了多语言训练。尽管人们可能会预期每个专家处理一种特定语言,但实际上并非如此。由于令牌路由和负载均衡的机制,没有任何专家被特定配置以专门处理某一特定语言。

专家的数量对预训练有何影响?

增加更多专家可以提升处理样本的效率和加速模型的运算速度,但这些优势随着专家数量的增加而递减 (尤其是当专家数量达到 256 或 512 之后更为明显)。同时,这也意味着在推理过程中,需要更多的显存来加载整个模型。值得注意的是,Switch Transformers 的研究表明,其在大规模模型中的特性在小规模模型下也同样适用,即便是每层仅包含 2、4 或 8 个专家。

微调混合专家模型

4.36.0 版本的 transformers 库支持 Mixtral 模型。你可以用以下命令进行安装: pip install "transformers==4.36.0 --upgrade

稠密模型和稀疏模型在过拟合的动态表现上存在显著差异。稀疏模型更易于出现过拟合现象,因此在处理这些模型时,尝试更强的内部正则化措施是有益的,比如使用更高比例的 dropout。例如,我们可以为稠密层设定一个较低的 dropout 率,而为稀疏层设置一个更高的 dropout 率,以此来优化模型性能。

在微调过程中是否使用辅助损失是一个需要决策的问题。ST-MoE 的作者尝试关闭辅助损失,发现即使高达 11% 的令牌被丢弃,模型的质量也没有显著受到影响。令牌丢弃可能是一种正则化形式,有助于防止过拟合。

Switch Transformers 的作者观察到,在相同的预训练困惑度下,稀疏模型在下游任务中的表现不如对应的稠密模型,特别是在重理解任务 (如 SuperGLUE) 上。另一方面,对于知识密集型任务 (如 TriviaQA),稀疏模型的表现异常出色。作者还观察到,在微调过程中,较少的专家的数量有助于改善性能。另一个关于泛化问题确认的发现是,模型在小型任务上表现较差,但在大型任务上表现良好。

一种可行的微调策略是尝试冻结所有非专家层的权重。实践中,这会导致性能大幅下降,但这符合我们的预期,因为混合专家模型 (MoE) 层占据了网络的主要部分。我们可以尝试相反的方法: 仅冻结 MoE 层的参数。实验结果显示,这种方法几乎与更新所有参数的效果相当。这种做法可以加速微调过程,并降低显存需求。

在微调稀疏混合专家模型 (MoE) 时需要考虑的最后一个问题是,它们有特别的微调超参数设置——例如,稀疏模型往往更适合使用较小的批量大小和较高的学习率,这样可以获得更好的训练效果。

此时,您可能会对人们微调 MoE 中遇到的这些挑战而感到沮丧,但最近的一篇论文 《MoEs Meets Instruction Tuning》 (2023 年 7 月) 带来了令人兴奋的发现。这篇论文进行了以下实验:

  • 单任务微调
  • 多任务指令微调
  • 多任务指令微调后接单任务微调

当研究者们对 MoE 和对应性能相当的 T5 模型进行微调时,他们发现 T5 的对应模型表现更为出色。然而,当研究者们对 Flan T5 (一种 T5 的指令优化版本) 的 MoE 版本进行微调时,MoE 的性能显著提升。更值得注意的是,Flan-MoE 相比原始 MoE 的性能提升幅度超过了 Flan T5 相对于原始 T5 的提升,这意味着 MoE 模型可能从指令式微调中获益更多,甚至超过了稠密模型。此外,MoE 在多任务学习中表现更佳。与之前关闭 辅助损失 函数的做法相反,实际上这种损失函数可以帮助防止过拟合。

稀疏 VS 稠密,如何选择?

稀疏混合专家模型 (MoE) 适用于拥有多台机器且要求高吞吐量的场景。在固定的预训练计算资源下,稀疏模型往往能够实现更优的效果。相反,在显存较少且吞吐量要求不高的场景,稠密模型则是更合适的选择。

注意: 直接比较稀疏模型和稠密模型的参数数量是不恰当的,因为这两类模型基于的概念和参数量的计算方法完全不同。

让 MoE 起飞

最初的混合专家模型 (MoE) 设计采用了分支结构,这导致了计算效率低下。这种低效主要是因为 GPU 并不是为处理这种结构而设计的,而且由于设备间需要传递数据,网络带宽常常成为性能瓶颈。在接下来的讨论中,我们会讨论一些现有的研究成果,旨在使这些模型在预训练和推理阶段更加高效和实用。我们来看看如何优化 MoE 模型,让 MoE 起飞。

并行计算

让我们简要回顾一下并行计算的几种形式:

  • 数据并行: 相同的权重在所有节点上复制,数据在节点之间分割。
  • 模型并行: 模型在节点之间分割,相同的数据在所有节点上复制。
  • 模型和数据并行: 我们可以在节点之间同时分割模型和数据。注意,不同的节点处理不同批次的数据。
  • 专家并行: 专家被放置在不同的节点上。如果与数据并行结合,每个节点拥有不同的专家,数据在所有节点之间分割。

在专家并行中,专家被放置在不同的节点上,每个节点处理不同批次的训练样本。对于非 MoE 层,专家并行的行为与数据并行相同。对于 MoE 层,序列中的令牌被发送到拥有所需专家的节点。

容量因子和通信开销

提高容量因子 (Capacity Factor, CF) 可以增强模型的性能,但这也意味着更高的通信成本和对保存激活值的显存的需求。在设备通信带宽有限的情况下,选择较小的容量因子可能是更佳的策略。一个合理的初始设置是采用 Top-2 路由、1.25 的容量因子,同时每个节点配置一个专家。在评估性能时,应根据需要调整容量因子,以在设备间的通信成本和计算成本之间找到一个平衡点。

部署技术

您可以在 Inference Endpoints 部署 mistralai/Mixtral-8x7B-Instruct-v0.1

部署混合专家模型 (MoE) 的一个关键挑战是其庞大的参数规模。对于本地使用情况,我们可能希望使用更小的模型。为了使模型更适合部署,下面是几种有用的技术:

  • 预先蒸馏实验: Switch Transformers 的研究者们进行了预先蒸馏的实验。他们通过将 MoE 模型蒸馏回其对应的稠密模型,成功保留了 30-40%的由稀疏性带来的性能提升。预先蒸馏不仅加快了预训练速度,还使得在推理中使用更小型的模型成为可能。
  • 任务级别路由: 最新的方法中,路由器被修改为将整个句子或任务直接路由到一个专家。这样做可以提取出一个用于服务的子网络,有助于简化模型的结构。
  • 专家网络聚合: 这项技术通过合并各个专家的权重,在推理时减少了所需的参数数量。这样可以在不显著牺牲性能的情况下降低模型的复杂度。

高效训练

FasterMoE (2022 年 3 月) 深入分析了 MoE 在不同并行策略下的理论性能极限,并且探索了一系列创新技术,包括用于专家权重调整的方法、减少延迟的细粒度通信调度技术,以及一个基于最低延迟进行专家选择的拓扑感知门控机制。这些技术的结合使得 MoE 运行速度提升高达 17 倍。

Megablocks (2022 年 11 月) 则专注于通过开发新的 GPU kernel 来处理 MoE 模型中的动态性,以实现更高效的稀疏预训练。其核心优势在于,它不会丢弃任何令牌,并能高效地适应现代硬件架构 (支持块稀疏矩阵乘),从而达到显著的加速效果。Megablocks 的创新之处在于,它不像传统 MoE 那样使用批量矩阵乘法 (这通常假设所有专家形状相同且处理相同数量的令牌),而是将 MoE 层表示为块稀疏操作,可以灵活适应不均衡的令牌分配。

开源混合专家模型

目前,下面这些开源项目可以用于训练混合专家模型 (MoE):

对于开源的混合专家模型 (MoE),你可以关注下面这些:

  • Switch Transformers (Google): 基于 T5 的 MoE 集合,专家数量从 8 名到 2048 名。最大的模型有 1.6 万亿个参数。
  • NLLB MoE (Meta): NLLB 翻译模型的一个 MoE 变体。
  • OpenMoE: 社区对基于 Llama 的模型的 MoE 尝试。
  • Mixtral 8x7B (Mistral): 一个性能超越了 Llama 2 70B 的高质量混合专家模型,并且具有更快的推理速度。此外,还发布了一个经过指令微调的模型。有关更多信息,可以在 Mistral 的 公告博客文章 中了解。

一些有趣的研究方向

首先是尝试将稀疏混合专家模型 (SMoE) 蒸馏 回到具有更少实际参数但相似等价参数量的稠密模型。

MoE 的 量化 也是一个有趣的研究领域。例如,QMoE (2023 年 10 月) 通过将 MoE 量化到每个参数不到 1 位,将 1.6 万亿参数的 Switch Transformer 所需的存储从 3.2TB 压缩到仅 160GB。

简而言之,一些值得探索的有趣领域包括:

  • 将 Mixtral 蒸馏成一个稠密模型。
  • 探索合并专家模型的技术及其对推理时间的影响。
  • 尝试对 Mixtral 进行极端量化的实验。

MOE网络pytorch构建:

import torch
import torch.nn as nn
import torch.nn.functional as F

class Expert(nn.Module):
    """简单的专家模型,这可以是任何神经网络架构"""
    def __init__(self, input_size, output_size):
        super(Expert, self).__init__()
        self.fc = nn.Linear(input_size, output_size)
    def forward(self, x):
        return self.fc(x)

class MoE(nn.Module):
    """简单的MOE模型,包含多个专家和一个门控网络"""
    def __init__(self, num_experts, input_size, output_size):
        super(MoE, self).__init__()
        self.num_experts = num_experts
        self.experts = nn.ModuleList([Expert(input_size, output_size) for _ in range(num_experts)])
        self.gating_network = nn.Linear(input_size, num_experts)

    def forward(self, x):
        # 门控网络决定权重
        gating_scores = F.softmax(self.gating_network(x), dim=1)
        # 专家网络输出
        expert_outputs = torch.stack([expert(x) for expert in self.experts], dim=1)
        # 加权组合专家输出
        moe_output = torch.bmm(gating_scores.unsqueeze(1), expert_outputs).squeeze(1)
        return moe_output

前向推理:


# 示例使用
input_size = 10  # 假设输入特征是大小为10的向量
output_size = 5  # 假设我们想要的输出大小为5的向量
num_experts = 3  # 假设我们有3个专家

# 初始化MOE模型
moe_model = MoE(num_experts, input_size, output_size)

# 创建一个输入向量
input_vector = torch.randn(1, input_size)

# 前向传递
output_vector = moe_model(input_vector)

# 打印输出
print(output_vector)

相关资源

Citation

@misc {sanseviero2023moe,
    author       = { Omar Sanseviero and
                     Lewis Tunstall and
                     Philipp Schmid and
                     Sourab Mangrulkar and
                     Younes Belkada and
                     Pedro Cuenca
                   },
    title        = { Mixture of Experts Explained },
    year         = 2023,
    url          = { https://huggingface.co/blog/moe },
    publisher    = { Hugging Face Blog }
}
Sanseviero, et al., "Mixture of Experts Explained", Hugging Face Blog, 2023.

InternLM-XComposer2.5-OmniLive:用于长期流媒体视频和音频交互的综合多模态人工智能系统

随着人工智能的发展,构建能够实时感知环境、进行复杂推理并记忆的系统,已成为研究者们追求的目标。这不仅要求 AI 系统能处理音频、视频和文本等多模态数据,还需在动态环境中模拟人类感知、推理与记忆的协同能力。然而,现有多模态大语言模型(MLLMs)在这方面仍存在诸多限制,尤其是在同时处理任务时的效率和可扩展性。

为解决这些问题,来自上海人工智能实验室、中国香港中文大学、复旦大学、中国科技大学、清华大学、北京航空航天大学和商汤集团的研究团队推出了一款创新框架——InternLM-XComposer2.5-OmniLive (IXC2.5-OL)。通过模块化设计,该系统将感知、记忆与推理功能解耦,实现了高效的实时多模态交互,为模拟人类认知提供了全新范式。

1.输入:流式的视频数据、流式的音频数据。
2.流式感知:感知模块对输入进行感知理解。
3.记忆:将感知到的数据作为记忆,写入到记忆池。
4.检索生成:从记忆池里检索到相关记忆,进行推理,得到输出。

(1) 一个流式感知模块支持流式视频和音频输入;(2) 一个多模态长时记忆模块,将短期记忆压缩成长期记忆;以及 (3) 一个推理模块,根据检索到的记忆回答查询。

现有系统的局限性

1) 感知与推理的割裂 大部分主流模型采用序列到序列的架构,这种设计导致系统在处理多模态数据时,需要在感知和推理间频繁切换。例如,模型在分析视频流时可能会停顿以处理文本任务,类似于“人在观察时无法思考”的状态。

2) 数据存储的低效 当前模型依赖扩展上下文窗口存储历史数据,但多模态数据(如视频流和音频流)会在短时间内生成海量信息,这种方法难以支撑长时间的数据积累。例如,一个小时的视频可能转化为数百万个标记,这对存储和检索都是巨大的挑战。

3) 模型架构的单一性 现有方法如 Mini-Omni 和 VideoLLM-Online,虽然尝试填补文本与视频理解之间的鸿沟,但因过度依赖顺序处理和有限的记忆整合能力,难以达到人类级别的认知效果。

InternLM-XComposer2.5-OmniLive 的创新设计

IXC2.5-OL 通过模块化架构模拟人脑,将感知、记忆和推理分解为三个独立但协同工作的模块:

  • 流式感知模块(Streaming Perception Module)
  • 多模态长时记忆模块(Multimodal Long Memory Module)
  • 推理模块(Reasoning Module)

1) 流式感知模块:实时数据捕获与编码

该模块处理实时音频和视频流,使用先进模型如 Whisper(音频编码)和 OpenAI CLIP-L/14(视频感知)提取高维特征。负责处理视频和音频数据,因此包含了对应的视频感知模块和音频转换模块。

视频感知模块:使用的OpenAI的CLIP-L/14,用于将每一帧视频,也就是图片,编码为语义特征。向多模态长时记忆模块提供粗粒度的视觉信息。 它处理实时视频输入流,并将每一帧编码成语义特征。 为了提高效率,我们在实践中使用了 OpenAI CLIP-L/14
然后直接将语义特征送给记忆模块。

音频感知模块:万物都能token。类似VLM的处理,包含音频编码器(Whisper)、音频投影器、小型语言模型(Qwen2-1.8B)

语言模型的输出有两个:音频类别;音频转文本。

  • 任务:捕获并编码关键信息,如语音内容、环境音等,直接存入记忆模块。
  • 应用:音视频会议的实时字幕生成、智能监控中异常事件识别。

包含一个音频编码器、一个音频投影器和一个小语言模型 (SLM)。 音频编码器将输入音频样本编码成高维特征,音频投影器进一步将特征映射到 SLM 的输入空间。 SLM 输出音频的类别(例如,笑声、鼓掌声或雨声)以及音频中的自然语言(即自动语音识别结果)。 在实践中,我们使用 Whisper模型作为音频编码器,并使用 Qwen2-1.8B  作为 SLM。

2) 多模态长时记忆模块:高效存储与检索

多模态长时记忆模块是处理极长视频输入的核心设计,它帮助推理模块摆脱其上下文窗口中数百万个符元。 它与 VideoStreaming 的思想类似,即将视频片段编码成短期记忆,并将其整合到长期记忆中。 给定问题后,它会为推理模块检索最相关的视频片段。

此模块的核心功能是将短期记忆压缩为高效的长期表示。

  • 方法:通过算法优化,能够将数百万帧视频浓缩成紧凑的记忆单元,有效减少存储成本并提升检索准确性。
  • 优势:大幅降低计算资源的占用,为实时交互提供支持。

多模态推理所占用的token是非常多的,因为要对一张图片进行动态切分。所以必须考虑记忆的存储。依赖长上下文来存储历史信息对于长期使用而言是不切实际的。这里采用了类似Mem0的方法,压缩-检索方法。能够仅保留与查询相关的token,去掉冗余的token

方法:将视频片段编码为短期记忆,整合为长期记忆。检索到最相关的视频片段作为上下文。

1.视频片段压缩对视频片段做空间下采样编码为短期记忆和全局记忆。
2.记忆整合:短期记忆是视频片段的详细信息。为了得到长期记忆,对短期和全局记忆整合。
3.视频片段检索:接收到query后,将其编码到记忆的特征空间,具体编码过程是将长期记忆和query作为压缩器的输入,取最后的token的隐藏状态作为query特征。使用query特征计算与每个视频片段的全局特征的相似性,得到最相关的视频片段和记忆信息。

视频片段检索。 当用户提出问题时,多模态长期记忆模块检索与问题相关的视频片段,并将视频片段及其短期记忆提供给推理模块。 在实践中,我们首先将问题编码到记忆的特征空间。 我们将长期记忆与标记化的提问连接起来作为压缩器的输入,并将输出特征的最后一个符元视为与记忆空间对齐的问题特征。 然后,我们计算问题特征与每个视频的全局记忆之间的相似度,并为推理模块选择最相关的片段。

3) 推理模块:信息检索与复杂任务执行

推理模块通过检索记忆模块中的相关信息,快速完成复杂任务,如回答用户问题或执行指令。

  • 特点:实现感知、推理与记忆的同步协作,避免传统系统中各模块割裂运行的效率低下问题。
  • 应用:智能问答系统、实时决策支持。

系统流程

系统包括前端、SRS服务器和后端服务器。

前端。 前端应用程序使用JavaScript开发,能够启用摄像头和麦克风来捕获视频和音频流输入,然后将其推送到SRS服务器。 同时,它与后端建立WebSocket连接,以监听音频输出和中断信号。 接收到音频数据后,前端会播放音频。 接收到中断信号后,前端会暂停音频播放并丢弃待处理的音频。

SRS 服务器。 SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,能够支持多种实时流协议,例如RTMP、WebRTC、HLS、HTTP-FLV、SRT等。 它以其可靠接收和传输音频和视频流的能力而闻名。

后端服务器。 与前端建立WebSocket连接后,后端将从SRS服务器拉取流,并启动单独的线程来读取音频和视频。

音频读取线程将音频流分割成4096位的块,并将它们放入音频队列中。 语音活动检测(VAD)[40]线程持续从音频队列读取数据,并检测语音活动的开始和结束。 检测到语音活动开始时,后端会向前端发送中断信号以暂停当前正在播放的音频,同时向视频处理过程发送备份信号,指示其保存当前内存状态。 检测到语音活动结束时,整个语音片段将被放入ASR待处理队列中。 自动语音识别 (ASR) 线程持续从ASR 任务队列读取音频片段,对其进行背景噪声分类和语音识别,然后将结果入队到大语言模型 (LLM) 任务队列供 LLM 使用。

视频读取线程以每秒 1 帧的速度读取视频帧,并将它们入队到帧队列。 压缩器进程从队列中读取视频帧,识别它们,提取相关内存并存储。 接收到来自语音活动检测 (VAD) 线程的备份信号后,压缩器进程将保存当前内存状态以备将来检索。

LLM 进程从LLM 任务队列读取文本,并确定它是否是需要模型响应的指令。 对于识别为指令的文本,压缩器进程将使用当前指令和备份的内存执行内存接地,以检索与指令相关的内存。 然后,LLM 进程将根据检索到的内存和指令生成响应,并将生成的输出入队到文本转语音 (TTS) 任务队列。 一个额外的 TTS 线程(例如,F5-TTS [20],MeloTTS [154])将把来自TTS 任务队列的文本转换成音频并发送到前端。

未来的改进点:
1.编码器优化
:选择垂直领域的编码器,提升视频和音频理解能力。
2.多模态的长期记忆模块:这方面是核心。可以参考mem0将视频和音频记忆存储到多模态知识图谱中,还有针对每个用户的键值数据库,向量数据库,图形数据库等。这样才能更为个性化,增强可用性。

性能测试与研究成果

1) 卓越的基准测试成绩IXC2.5-OL 在多项国际权威测试中表现出色:

  • 音频处理
    • 在 Wenetspeech 中文测试集上,语音识别的词错误率(WER)为 7.8%,远超 VITA 和 Mini-Omni。
    • 在 LibriSpeech 英文基准上,“清晰”环境下的 WER 为 2.5%,而在噪声环境中也达到了 9.2% 的优秀成绩。
  • 视频处理
    • 在 MLVU 和 StreamingBench 的视频推理与异常识别测试中,分别取得了 66.2% 和 73.79% 的评分,创下行业新高。

2) 高效的多模态处理能力流式感知模块通过压缩和记忆机制,实现了对多模态数据的实时处理。系统能够同时处理数百万标记,检索速度快且数据损失率低,适合需要长期交互的动态环境。

3) 开放性与易用性研究团队已将全部代码、模型及推理框架公开,开发者可以快速集成并根据实际需求进行优化。

实际应用场景

1) 智能监控与异常检测 IXC2.5-OL 的实时视频处理能力,适用于智能监控系统中异常事件的自动识别,如公共场所的行为异常分析。

2) 智能会议助手 通过实时感知音频与视频流,该框架可为企业提供智能会议助手服务,包括实时记录、摘要生成以及任务提醒。

3) 教育与学习 在在线教育中,IXC2.5-OL 可作为虚拟导师,实时分析学习者的行为反馈并调整教学策略,同时记录学习数据以优化课程内容。

4) 医疗辅助诊断 长时记忆模块能够存储并快速检索患者的历史病历数据,结合实时感知与推理功能,辅助医生做出准确诊断。

结语

IXC2.5-OL 的模块化设计从本质上解决了传统系统的诸多局限:

  • 感知、记忆与推理的分工协作:模拟人脑的处理方式,确保了系统的高效性与可扩展性。
  • 实时多模态交互:实现了音频、视频和文本的同步处理,为动态环境中的复杂应用提供了解决方案。
  • 高效存储与检索:通过记忆压缩机制,将长期多模态交互的计算与存储成本降至最低。

随着 AI 技术的进一步发展,IXC2.5-OL 不仅将继续推动人机交互的革新,还为构建更接近人类认知的 AI 系统提供了重要参考。

CosyVoice-2.0 语音生成大模型升级

CosyVoice 2: Scalable Streaming Speech Synthesis with Large Language Models

[Paper] [Code] [Studio] [HuggingFace] [ModelScope]

CosyVoice是阿里巴巴通义实验室语音团队于今年7月份开源的语音生成大模型,依托大模型技术,实现自然流畅的语音生成体验。与传统语音生成技术相比,CosyVoice具有韵律自然、音色逼真等特点。自开源以来,CosyVoice凭借高品质的多语言语音生成、零样本语音生成、跨语言语音生成、富文本和自然语言的细粒度控制能力获得了广大社区开发者们的喜爱和支持。

CosyVoice迎来全面升级2.0版本,提供更准、更稳、更快、 更好的语音生成能力。

超低延迟:CosyVoice 2.0提出了离线和流式一体化建模的语音生成大模型技术支持双向流式语音合成,在基本不损失效果的情况下首包合成延迟可以达到150ms

高准确度:CosyVoice 2.0合成音频的发音错误相比于CosyVoice 1.0相对下降30%~50%,在Seed-TTS测试集的hard测试集上取得当前最低的字错误率合成绕口令、多音字、生僻字上具有明显的提升。

强稳定性:CosyVoice 2.0在零样本语音生成和跨语言语音合成上能够出色地保证音色一致性,特别是跨语言语音合成相比于1.0版本具有明显提升

自然体验:CosyVoice 2.0合成音频的韵律、音质、情感匹配相比于1.0具有明显提升。MOS评测分从5.4提升到5.53(相同评测某商业化语音合成大模型为5.52)。同时, CosyVoice 2.0对于指令可控的音频生成也进行了升级,支持更多细粒度的情感控制,以及方言口音控制

▎核心模型与算法亮点

CosyVoice 2.0采用和CosyVoice 1一致的LLM+FM的建模框架,但是在具体实现上进行了如下几个要点的算法优化:

1)LLM backbone:CosyVoice 2.0采用预训练好的文本基座大模型(Qwen2.5-0.5B)替换了原来的Text Encoder + random Transformer的结构。采用LLM进行初始化能够更好的进行文本的语义建模,使得在可控生成,音频和文本的情感匹配,多音字发音上会有明显的收益。

2)FSQ Speech Tokenizer:CosyVoice 1.0采用VQ来提取Supervised semantic codec,码本大小为4096,但是有效码本只有963。CosyVoice 2.0采用了FSQ替换VQ,训练了6561的码本,并且码本100%激活。FSQ-Speech Tokenizer的使用使得CosyVoice 2.0在发音准确性上有明显提升。

3)离线和流式一体化建模方案:目前主流的语音生成大模型(CosyVoice, F5-TTS,MaskGCT,GPT-SoViTs等)均不支持流式语音生成。CosyVoice 2.0提出了如图2所示的离线和流式一体化建模方案,使得LLM和FM均支持流式推理,接收5个文字就可以合成首包音频,延迟大致在150ms。同时合成音质相比于离线合成基本无损。

4)指令可控的音频生成能力升级:优化后的 CosyVoice 2.0 在基模型和指令模型的整合上取得了重要进展,不仅延续了对情感、说话风格和细粒度控制指令的支持,还新增了中文指令的处理能力。其指令控制功能的扩展尤为显著,现已支持多种主要方言,包括粤语、四川话、郑州话、天津话和长沙话等,为用户提供了更丰富的语言选择。此外,CosyVoice 2.0 也引入了角色扮演的功能,如能够模仿机器人、小猪佩奇的风格讲话等。这些功能的提升还伴随着发音准确性和音色一致性的显著改善,为用户带来了更自然和生动的语音体验。

▎支持的功能:

🎧 音色复刻:语音克隆/Zero-shot In-context Generation(语音续写)

🎧 多语言合成一个文本,分别用中文,英文,日语,韩语多个语言来说

🎧 混合语种合成:支持 文本中同时出现 中文/英文/日语/韩语等。

🎧 多情感合成:#厌恶# 今天又是打工人的一天;#恐惧#啊已经9点了,怎么办,我要迟到了!#愤怒#都怪昨晚他非要拉我看电影,害我睡晚了!#平静#今年的年假都用光了,#开心#不过没关系,马上要放假啦!

🎧 不同指令合成

(神秘<|endofprompt|>古老城堡笼罩在神秘的雾气中,吸引着无数冒险者前去探索奥秘。

小猪佩奇<|endofprompt|>在忙碌之余,我和朋友像小猪佩奇一样,常去公园享受简单的快乐。

四川话<|endofprompt|>而这些幽默的瞬间仿佛让我置身于四川的宽窄巷子,享受那份安逸。

用伤心的语气说<|endofprompt|>收到拒信的那一刻,我感到无比伤心。虽然知道失败是成长的一部分,但仍然难以掩饰心中的失落。

慢速<|endofprompt|>听着轻柔的音乐,我在画布上慢慢地涂抹色彩,让每一笔都充满灵感和思考。

追求卓越不是终点,它需要你每天都<strong>付出</strong>和<strong>精进</strong>,最终才能达到巅峰。)

🎧 绕口令:黑化肥发灰,灰化肥发黑,黑化肥挥发会发黑,灰化肥挥发会发灰。

🎧 生僻字:煢煢孑立 沆瀣一氣 踽踽獨行 醍醐灌頂 綿綿瓜瓞 奉為圭臬 龍行龘龘

🎧 多音字:天气暖,小王在家泥抹墙;

Demo体验:

>>>创空间地址:https://www.modelscope.cn/studios/iic/CosyVoice2-0.5B

可以支持用户上传音频文件或录音方式进行语音复刻。同时支持流式推理,用户无需等待全部音频合成完毕即可体验效果。

CosyVoice 2支持音色克隆以及自然语言控制的音频生成,可以选择相应的推理模式。

1)3s极速复刻

  • 输入待合成文案
  • 选择是否流式推理,流式推理具有更低的延迟,离线推理具有更好的上限效果
  • 上传prompt音频,或者录制prompt音频
  • 点击生成音频,等待一会儿就会听到合成的音频。

2)自然语言控制

  • 输入待合成文案
  • 上传prompt音频,或者录制prompt音频
  • 输入instruct文本:例如“用粤语说这句话”,“用开心的语气说”,“模仿机器人的声音”等
  • 点击生成音频,等待一会儿就会听到合成的音频。

补充v1版本

CosyVoice: A Scalable Multilingual Zero-shot Text-to-speech Synthesizer based on Supervised Semantic Tokens

CosyVoice 1.0DemosPaperModelscope

V1版本cosyvoice

论文解读:

摘要

 CosyVoice,这是一种基于监督离散语音标记的多语言语音合成模型。通过使用两种流行的生成模型:语言模型 (LM) 和流匹配进行渐进式语义解码,CosyVoice 在语音上下文学习中实现了高韵律自然度、内容一致性和说话人相似性。最近,多模态大型语言模型 (LLMs,其中响应延迟和语音合成的实时因子在交互体验中起着至关重要的作用。因此,在这项工作中,我们引入了一种改进的流式语音合成模型 CosyVoice 2,并进行了全面和系统的优化。首先,我们引入有限标量量化来提高语音标记的码本利用率。其次,我们简化了文本-语音 LM 的模型架构,以便可以直接使用预训练的 LLMs 作为主干。此外,我们还设计了一个 chunk-aware 【数据块感知】因果流匹配模型,以适应不同的 synthesis 场景。因此,我们可以在单个模型中执行 streaming 和非 streaming 合成。通过在大规模多语言数据集上进行训练,CosyVoice 2 实现了与人类相当的合成质量,具有非常低的响应延迟和实时系数。

CosyVoice 2,这是一种流式零样本 TTS 模型,具有改进的韵律自然度、内容一致性和说话人相似性。我们的贡献包括:

  • 将流式和非流式合成统一在一个框架中,并提出统一的文本语音语言模型和块感知因果流匹配模型,与离线模式相比,实现了无损流式合成
  • 通过移除文本编码器和说话人嵌入来简化 LM 架构,允许预先训练的文本大型语言模型 (LLMs) 作为主干,增强上下文理解。
  • 用有限标量量化 (FSQ) 替换语音分词器中的矢量量化 (VQ),提高码本利用率并捕获更多语音信息。
  • 升级指示式 TTS 容量以支持更多指令,包括情感、口音、角色风格和精细控制。在 CosyVoice 2 中,指令和零镜头容量集成到一个模型中,实现更通用、更生动的合成。

通过以上系统性的修改和优化,CosyVoice 2 实现了人偶校验的合成质量,并且在 streaming 模式下几乎无损。统一框架放宽了部署要求,使单个模型能够同时支持流式和非流式合成。升级后的 instructed TTS 容量为用户生成各种语音提供了更强大、更轻松的方法。此外,块感知流匹配设计也可以应用于 NAR TTS 模型,这表明了流式 NAR 模型的潜力。

CosyVoice 2

图 1:CosyVoice 2 概述。(a) 演示了监督式语音分词器,其中虚线模块仅在训练阶段使用。(b) 是用于流式处理和非流式处理合成的统一文本-语音语言模型。虚线表示推理阶段的自回归解码。(c) 说明了在概率密度路径上时间步t对说话人嵌入 𝐯、语义标记 μ、掩蔽语音特征 X~和中间状态 Xt的因果流匹配模型条件。

CosyVoice 2 建立在与前代 类似的设计理念之上,将语音信号的语义和声学信息分离出来,并独立建模。语音生成过程被重新定义为一个渐进的语义解码过程,其中条件信息逐渐被纳入。具体来说,文本-语音语言模型 (LM) 只关注语义信息,将高级文本标记解码为监督式语义语音标记。在 Flow Matching 模型中,通过说话人嵌入和参考语音引入声学细节(例如音色),将语音令牌转换为给定说话人的 Mel 频谱。最后,预先训练的声码器模型恢复了相位,将 Mel 频谱转换回原始音频信号。下面将从文本分词器、监督语义语音分词器、流式/非流式合成的统一文本语音 LM 和分块感知流式匹配模型五个方面介绍 CosyVoice 2 的细节和流式合成的修改。

Text Tokenizer

CosyVoice 2 直接使用原始文本作为输入,并使用基于 BPE 的文本分词器进行分词。这消除了对通过字素到音素 (g2p) 转换获取音素的前端模型的需求。这种方法不仅简化了数据预处理工作流程,还使模型能够以端到端的方式学习各种上下文中单词的发音。与文本 LLMs,CosyVoice 2 屏蔽了一对多的分词。这可以防止令牌的发音变得过长,并减少由数据稀疏引起的极端情况。具体来说,如果 BPE 令牌编码多个中文字符,它将被屏蔽掉,并且每个字符将在分词化过程中单独编码。其他语言(如英语、日语和韩语)不受特殊处理。

Supervised Semantic Speech Tokenizer

将有限标量量化 (FSQ) 模块插入 SenseVoice-Large ASR 模型的编码器中。在训练阶段,输入语音 X 通过 获得 Encoder1 中间表示,其中 Encoder1 由六个带有旋转位置嵌入 的 Transformer 块组成。然后,将中间表示馈送到 FSQ 模块进行量化,并将量化表示传递给 SenseVoice-Large 模块的其余部分,包括 Encoder2 和 ASR⁢Decoder ,以预测相应文本标记的后验概率。

补充FSQ:FINITE SCALAR QUANTIZATION: VQ-VAE MADE SIMPLE

2023 年 google 发表的文章,可以用于文本、视频生成领域中。提出一种称为有限标量量化(FSQ)的简单方案来替换 VQ-VAEs 中的向量量化(VQ)。解决传统 VQ 中的两个主要问题:需要避免 codebook collapse (码码本坍塌:就是大部分codebook elements都没有被用到,多个码字可能会变得非常相似,甚至完全相同。)的辅助损失【在损失函数中添加一个辅助损失项,迫使码字之间保持一定的距离,或者保持其多样性】、大 codebook size 情况下码本利用率低。FSQ 作用:消除辅助损失、提高码本利用率、作为 VQ 的可替换组件

传统的编码器所得到的表征向量z中的每一个元素(标量)的值并没有一个明确的边界,也就是说z在特征空间中不受任何约束。那么,作者就想到了为z中的每个标量都设定好取值的范围和能够取值的个数。假设有一个d维特征向量z,将每个标量zi​都限制只能取L个值,将zi​→⌊L/2⌋tanh(zi​)然后四舍五入为一个整数值。例如图中所示,取d=3,L=3,代表C={(−1,−1,−1),(−1,−1,0),…,(1,1,1)},一共有27种组合,即一个3维向量的每个标量都有三种值的取法。值得一提的是,FSQ中的codebook不像VQ-VAE那样是显式存在的,而是隐式的,编码器直接输出量化后的特征向量z^。因此,FSQ也就没有了VQ-VAE损失的后两项了。

FSQ 的优点是不会遭受码本坍塌(codebook collapse),并且不需要 VQ 中为了避免码本坍塌而使用的复杂机制(承诺损失、码本重新播种、码分割、熵惩罚等)

在 FSQ 模块中,首先 H 将中间表示投影到 D 维低秩空间中,并且每个维度的值通过有界四舍五入操作ROUND 量化到区间[−K,K]。然后,量化后的低秩表示 Hˉ 被投影回原始维度 H~,以供后续模块使用。

在训练阶段, straight-through estimation用于近似 FSQ 模块 和 Encoder1 的梯度。 语音标记 μi 可以通过计算 (2⁢K+1) -ary 系统中量化的低秩表示 h¯i 的索引来获得:

语音分词器以 25 Hz 的令牌速率工作,即每秒 25 个语音令牌。

Unified Text-Speech Language Model

CosyVoice 2 中,使用预训练的文本Qwen2.5-0.5B 作为文本-语音语言模型,以输入文本作为提示自动回归生成语音标记。与其他 LM 类似,文本语音 LM 也采用下一个标记预测方案进行训练,如图 1(b) 所示。与之前的 CosyVoice 不同,我们去除了说话人嵌入,以避免信息泄漏。更重要的是,我们发现这种话语级别的向量不仅包含说话人身份信息,还包含语言和副语言信息,这会影响文本-语音语言模型的韵律自然性和跨语言能力。此外,我们还放弃了之前 CosyVoice 的文本编码器,因为我们发现 Qwen2.5-0.5B 模型已经足够强大,可以对齐文本和语音标记,因此不再需要文本编码器。

受益于文本语音 LM 的简单性,我们可以为流式和非流式合成构建一个统一的模型。在这里,“流模式”意味着输入文本以连续流的形式接收,而不是提前被称为完整的句子。在 CosyVoice 2 中,推流模式和非推流模式的区别只是 LM 的序列构建方式

  • 对于非流模式,“序列开始”S、所有文本标记、“语音转换”T标记、所有语音标记和“序列结束”E按顺序连接,如图 2 底部所示。Ignore 标记表示忽略它们的损失,同时最小化交叉熵目标函数。
  • 流式模式下,我们将文本和语音标记按预定义的比例 N:M 混合,即每 N 个文本标记后跟着 M 个语音标记,如图 2 的顶部所示。如果下一个标记是文本标记,模型会预测一个填充标记(而不是文本标记),该填充标记表示接下来的 N个文本标记应该在推理阶段进行连接。【方便推理时候获取输出的语义token】,当文本标记用尽时,“语音轮次”标记 T和剩余的语音标记会被顺序连接,形成流式模式下的混合文本-语音标记序列。

通过同时在上述两个序列上训练文本-语音 LM,我们可以在单个统一模型中执行流式和非流式语音生成。在实际场景中,例如说话人微调 (SFT) 和上下文学习 (ICL),推理序列有所不同,如下所示:

 ICL,非流式:在 ICL 中,LM 需要来自参考音频的提示文本和语音标记以模仿重音、韵律、情感和风格。在非流式处理模式下,提示和要合成的文本标记连接为整个实体,提示语音标记被视为预先生成的结果并固定:“S 、 prompt_text、 text 、T、 prompt_speech”。LM 的自回归生成从此类序列开始,直到检测到 “End of sequence” 标记。

 ICL,流式处理:在此方案中,我们假设要生成的文本是已知的,并且语音令牌应以流式处理方式生成。同样,我们将 prompt 和 to-generate 文本视为一个整体。然后,我们将其与提示语音标记混合,比例为 N : M : “S, mixed_text_speech,T,remaining_speech”。如果文本长度大于提示语音 Token 的长度,LM 将生成 “filling token”。在这种情况下,我们手动填充 N个文本标记。如果文本令牌用完,将添加“Turn of speech” T 令牌。在流式处理模式下,我们为每个 M 令牌返回生成结果,直到检测到 E为止。

SFT,非流式:在 SFT 场景中,LM 针对特定说话人进行微调,不再需要提示文本和语音。因此,初始序列非常简单:“ S, 文本 ,T ”。从此开始,文本-语音 LM 可以自动回归生成语音标记,直到 E结束。

SFT, Streaming: 在 SFT 的流模式下,我们从以下序列开始语音生成:“ S,first_N_text”。然后,LM 将生成 M 语音令牌,我们手动填充下一N个 文本令牌。我们重复上述过程,直到所有文本标记都用完,然后添加 T 。注意,speech-to-speech多模态大语言模型也可以采用这种模式,以获得极低的延迟。

Chunk-aware Flow Matching

采用梅尔频谱图作为声学特征,帧率为 50 Hz采样率为 24000。由于语音令牌和 Mel 特征之间的帧速率不匹配,我们以 2 的比率对语音令牌进行上采样以匹配 Mel 频谱图的帧速率。在上采样操作之前,我们添加了一个额外的前瞻卷积层,以便为以下因果模块提供未来信息。前瞻层由右填充的一维卷积实现,其填充大小为  P, 卷积核大小为 P+1 。在此之后,几个chunk-aware causal Transformer blocks来对齐语音标记的表示空间以匹配声学特征。

随后,我们的目标是将语音标记进一步解码为由说话人嵌入和参考语音指定的 Mel 频谱图。 为了实现这一目标,我们采用条件流匹配 (CFM) 模型对 Mel 频谱图进行采样,给定语音标记、参考语音和说话人嵌入作为条件。 在 CFM 模型中,目标 Mel 三维频谱图的分布由来自先验分布 p0⁢(X) 和数据分布 q⁢(X) 的概率密度路径 来描述。概率密度路径可以由瞬态向量场定义。 为了提高采样效率,我们采用最佳传输 (OT) 流来匹配矢量场 。

在训练阶段,掩码 Mel 频谱图是通过随机掩码 70% 到 100% 的最终帧来获得的 X1 。至于推论,它由从参考语音中提取的 Mel 频谱图提供。 通过最小化预测 ODE 和真实 ODE 之间的 L1 损失,我们可以按如下方式优化 UNet 参数 θ :

因果流匹配模型:当前的流匹配模型总是以离线模式工作,即只有在生成所有语音标记后,Mel谱图才能被采样,这对于流式合成并不友好。为了解决这个问题,我们将多步流估计视为一个堆叠的深度神经网络,该网络重复使用 UNet 十次。因此,通过使展开的神经网络具有因果性,我们可以将其应用于流式合成。我们构造了四个掩码,以满足不同的应用情况:

Non-causal Mask 

非因果掩码 (Non-causal Mask) 用于离线模式,通过满足所有条件帧来实现最佳性能。非因果掩码适用于对延迟不敏感的情况。

Full-causal Mask

 全因果掩码 (Full-causal Mask) 适用于需要极低延迟的场景,其中只能观看过去的帧。

Chunk-M Mask

可以通过牺牲更多延迟来实现离线模式的近似性能,这可用于级联生成 Chunk 以获得更好的性能。

Chunk-2⁢M Mask

可以通过牺牲更多延迟来实现离线模式的近似性能,这可用于级联生成 Chunk 以获得更好的性能。

对于小批量中的每个训练案例,我们从均匀分布下的上述四个掩码中随机采样一个掩码。这样,一个流匹配模型可以兼容不同的场景,降低部署复杂度。这种块感知训练的另一个优点是,具有更多上下文的掩码可以作为具有较少上下文的掩码的教师,受益于隐含的自我蒸馏方案。

流式处理模式的延迟分析

首包延迟是流式合成模型的一个重要指标,它显着影响用户体验,尤其是在基于 LLM 的语音聊天应用程序中,例如 GPT-4o 。 在 TTS 的上下文中,要合成的文本是事先已知的,延迟来自语音令牌生成、梅尔频谱图重建和波形合成等方面。 因此,CosyVoice 2 的首包延迟 LT⁢T⁢S 可以得到如下:

其中 dl⁢m ,表示 LM 生成一个语音词元的计算时间, df⁢m 表示 Flow Matching 模型生成一个语音词元的梅尔频谱图帧的计算时间, dv⁢o⁢c 表示声码器合成一个语音词元对应的波形的计算时间。 在基于 LLM 的语音聊天上下文中,还应考虑 first-package-required 文本的长度,first-package 延迟 LC⁢h⁢a⁢t 如下

其中 dl⁢l⁢m 表示 LLM 生成一个文本 Token 的计算时间。请注意,由于多字符标记在 CosyVoice 2 的文本分词器中被屏蔽,因此文本 LLMs总是比 CosyVoice 2 使用的文本标记编码更长的原始文本。因此,第一个包的延迟 LC⁢h⁢a⁢t 必须低于 N⋅dl⁢l⁢m 和  LT⁢T⁢S的和。

Instructed Generation

为了增强 CosyVoice 2 的可控性,我们将 indirected 数据集集成到基础训练集中。我们收集了 1500 小时的定向训练数据,其中包括自然语言指令和细粒度指令,如表所示。对于自然语言指令,我们在要合成的输入文本之前预置自然语言描述和特殊结束标记“<|endofprompt|>”。这些描述涵盖情感、语速、角色扮演和方言等方面。对于细粒度的指令,我们在文本标记之间插入人声爆发,使用“[laughter]”和“[breath]”等标记。此外,我们将 vocal feature 标签应用于短语;例如,“<strong>XXX</strong>”表示强调某些词,而“<laughter>XXX</laughter>”表示笑声说话。

Multi-Speaker Fine-tuning

在特定说话人 (SFT) 上微调预训练模型可以进一步提高生成质量和说话人相似度。在本报告中,我们介绍了多扬声器微调 (mSFT),其中预训练模型同时在多扬声器上进行微调,而不是在单个扬声器上进行微调。这种方法可确保跨多个说话人的全面韵律和发音覆盖,并减少预训练模型可能出现的灾难性遗忘。为避免不同说话人之间的音色混淆,我们在特定说话人的输入文本前加上说话人提示标记“Speaker A<|endofprompt|>”。如果训练样本未标记为说话人,则使用特殊标签“unknown<|endofprompt|>”。在整个多说话人微调过程中,学习率设置为 1e-5。

Reinforcement Learning for SFT

强化学习是大型语言模型训练中常用的方法,它可以使 LM 输出与人类偏好保持一致。 在 CosyVoice 2 中,我们采用 ASR 系统的说话人相似度 (SS) 和识别词错误率 (WER) 作为奖励函数,以提高微调阶段的说话人相似度和发音准确性。我们使用 WER 和 SS 来区分首选样品 xw 和不合格样品 xl ,并通过直接偏好优化 (DPO)  优化 TTS 系统,如下所示:

Experimental

Training Data for Speech Tokenizer

一个 200000 小时的数据集用于训练语音分词器,并将规范化转录作为标签。详细的数据信息如表所示。训练数据来自三种不同的资源:开源 ASR 数据集、内部工业数据集和 TTS 生成数据集。虽然我们在训练语音分词器时只使用了中英文数据,如表 所示,但随后的实验表明,语音分词器对其他语言具有零镜头能力。它还可用于日语和韩语等语言的语音合成

Training Data for CosyVoice 2

CosyVoice 2 与之前的版本共享相同的训练数据。我们首先使用内部语音处理工具收集纯语音数据。随后,Paraformer 和 SenseVoice分别用于生成中文和其他语言的伪文本标签。我们还采用内部力对齐模型来过滤掉低质量的数据并提高标点符号的准确性。表 3 提供了数据详细信息:

Experimental Results

Evaluations on Speech Tokenizer

理想的语音分词器应该有效地利用码本,以高保真度保留信息,并展示说话人的独立性。在这部分,我们从四个方面评估我们的监督语音分词器:1) 码本利用率;2) 整个编码器内的 ASR 错误率;3) 不同说话人的令牌可视化;4) 说话人识别培训。表 4 显示了码簿利用率和 ASR 错误率。事实证明,基于 FSQ 的分词器充分利用了码本,从 ASR 方面维护了更有效的信息,表明 FSQ 维护的语义信息更多。

Comparison Results with Baselines:

我们首先在有限的英语文本域上评估了我们的 CosyVoice 2 模型,并将其与几个开源模型进行了比较,例如 ChatTTS、GPT-SoVITs 、OpenVoice、ParlerTTS、EmotiVoice 及其前身 CosyVoice。客观结果如表 5 所示,包括内容一致性 (WER)、语音质量 (NMOS) 和说话人相似度 (SS)。从表中我们可以看到,CosyVoice 2 在 Librispeech 测试清理集上实现了最先进的性能,超越了所有基线模型和所有评估指标。值得注意的是,CosyVoice 2 甚至表现出比人类话语更高的内容一致性、语音质量和说话人相似度,这表明其人类奇偶校验的合成质量。

表 5:LibriSpeech 测试清理基线子集和 CosyVoice 2 上的内容一致性 (WER)、说话人相似度 (SS) 和语音质量 (NMOS) 结果。Whisper-Large V3 用作 ASR 模型,并且在 WER 计算之前排除标点符号。

Modular Ablation Study

我们对文本语音语言模型进行了模块化消融研究,以评估我们的修改的影响,包括 LLM 初始化、删除说话人嵌入和利用 FSQ。表 7 展示了 CosyVoice 2 在前代产品的基础上的逐步发展。通过将随机初始化的语言模型替换为预训练的 LLM),我们在 test-zh 和 test-hard 集上的内容一致性分别实现了 18.46% 和 15.40% 的相对改进 。接下来,我们从文本转语音语言模型中删除了说话人嵌入,这有助于防止上下文学习中的信息泄露和干扰。这一变化导致内容错误显著减少,同时保持说话人相似性,表明内容信息主要由 LM 建模,说话人信息主要由流匹配模型恢复。最后,通过将 VQ 替换为 FSQ,我们实现了 CosyVoice 2 模型,注意到更高的内容一致性和不变的说话人相似度。通过充分利用码本,FSQ 可以捕获更多的内容信息和上下文变化,从而更好地协调文本和语音令牌。此外,我们通过在基于 FSQ 的语音标记器的训练过程中将音高损失作为约束条件进行了比较实验。我们发现这种方法可以提高下游 TTS 任务的性能,如表 7 的最后一行所示。在 CosyVoice 的未来版本中,我们计划进行更详细的实验和分析。

Results on Japanese and Korean Benchmarks

除了中文和英文,CosyVoice 2 还支持日语和韩语。我们在构建的日语和韩语测试集上评估了内容一致性、说话人相似度和语音质量。如表 9 所示,在所有评估指标中,CosyVoice 2 在韩语上的表现明显优于日语。这种差异主要是由于日语和中文之间的字符集重叠,这导致日语上下文中的中文发音。在未来的工作中,我们计划探索增强多语言合成的语言上下文的方法。由于韩语与其他语言没有字符重叠,因此其语音合成性能要好得多。另一个问题是数据不平衡。我们相信,增加训练数据量可以进一步提高日语和韩语的综合性能。

Results on Instructed Generation

为了评估 instructed generation 的性能,我们创建了一个包含 290 个样本的中文测试集。这组指令包括 29 种类型的指令,如表 2.6 所示,每种指令都有 10 种不同的输入文本。我们使用来自 5 个说话人(3 个女性和 2 个男性)的 5 个音频提示和说话人嵌入作为 flow matching 模型的条件。我们的测试以离线模式进行。我们客观地评估了内容一致性 (CER)、说话人相似度 (SS) 和语音质量 (NMOS)。主观上,我们使用教学平均意见分数 (MOS-I) 评估教学的准确性和自然性,范围从 1 到 5。每个样本由 10 名以中文为母语的人进行评估,分数以 0.5 为增量分配。评估标准侧重于语音是否遵守所有指定的指令,例如情感表达、语速调整、方言使用和角色扮演。精细的控制(包括插入笑声、笑声说话、呼吸控制和强调)将评估其自然性和准确性。如表 10 所示,CosyVoice 2 表现出卓越的内容一致性 (CER)、说话人相似性 (SS) 以及指令控制 (MOS-I) 的准确性和自然性,同时保持了与 CosyVoice-Inspire 相当的语音质量。当从 CosyVoice 2 中删除输入指令时,MOS-I 明显下降;然而,在内容一致性 (CER) 、说话人相似度 (SS) 和语音质量 (NMOS) 方面观察到改善。这表明指令可控性很难从内容文本中隐式出现。

Results on Speaker Fine-tuned Models

在微调阶段,我们对同一扬声器的扬声器嵌入采用无监督聚类,以确保扬声器音色的稳定性。我们已经证明,只有 400 个音频记录的目标说话人可以实现相当好的语音合成性能,在不同说话人之间观察到的客观指标仅存在轻微差异,如图 6 所示。我们的实验表明,大多数说话人可以继承零镜头 TTS 模型的稳健上下文理解和感知,从而自然地表达各种情绪和情绪以响应输入文本。

LLM Fine-tuning with Reinforcement Learning

尽管 SFT 可以提高大多数扬声器的性能,但 Spk E 的结果仍然比基本模型差,尤其是在英语上。因为 Spk E 的声音更复杂,说话速度更快。此外,只有 Chinese 录音可用于 Spk E。因此,我们在 Spk E 上应用强化学习以进一步改进。对于 DPO,我们通过 SFT 模型合成了 10,000 个样本对,以改变 ASR 和 SS 奖励对 LM 的偏好偏差。我们还使用可微分的 ASR 奖励来优化 LM 参数。在 RL 之后,我们在 Spk E 测试集上用内容一致性 (WER)、说话人相似度 (SS) 和语音质量 (NMOS) 评估模型,并进一步评估 SeedTTS 测试集上的 WER,以探索模型是否可以保持对域外或跨语言输入文本的鲁棒性。结果如表 11 所示

与预先训练的基础模型相比,SFT 模型显示出更高的说话人相似度和语音质量,但是,WER 可能比基础模型差。我们发现,基本模型合成的音频总是比 SFT 和真实值慢,这对 ASR 系统更友好。对于目标说话人数据集,偏好偏差和可微分奖励都可以降低 WER,而对其他两个指标的有害影响很小。但对于 SEED 测试集,基于 DPO 的强化仅对中文和英文子集有益,而硬样本会更差。原因可能是硬样本包含许多重复的单词或短语,在 DPO 训练期间可以被视为被拒绝的样本。但是,可微分的 ASR 奖励不会遇到这个问题,因为它可以直接通过 ASR 后验优化 TTS 系统。这意味着可微分的 ASR 奖励在域外情况下具有更好的泛化能力。最后,我们可以将它们相互组合以进行进一步改进。

Conclusion 

在 CosyVoice 成功的基础上,本报告介绍了 CosyVoice 2,这是一种改进的流式语音合成模型,它利用了大型语言模型。通过将流式和非流式合成统一在一个框架中,CosyVoice 2 实现了人类奇偶校验的自然性、最小的响应延迟和流式模式下几乎无损的合成质量。关键创新包括用于充分利用码本的有限标量量化、包含预训练文本LLMs,以及开发块感知因果流匹配模型以支持不同的合成场景。此外,指令 TTS 能力的改进允许通过对情感、口音、角色风格和人声爆发的精细控制,生成多功能和生动的语音。通过系统的修改和优化,CosyVoice 2 不仅提供了卓越的合成质量,而且放宽了部署要求,使其适用于流式和非流式应用。我们相信 CosyVoice 2 代表了可扩展、高质量和交互式文本转语音合成的重大进步。

The flow matching model:流匹配模型

论文:https://arxiv.org/abs/2210.02747

博客:https://lilianweng.github.io/posts/2018-10-13-flow-models/

最近, Flux.ai的 Flux 系列模型因各种原因而受到科技界和非科技界的广泛关注,模型速度快、易于使用(这要归功于扩散器(diffusers))并且易于调整(再次感谢扩散器)。但是,Flux 出色的图像文本对齐和高质量生成背后的原因是一种超越标准扩散过程的新方法,称为“流匹配(Flow matching)”。

每个生成模型(generative model)理想情况下都是密度估计(density estimaor);因此模拟概率密度,最终是 JPD,具有两个预期特征,即采样和压缩,压缩基本上是将数据推送到信息空间,这似乎是较低维的,而采样是从任何特征分布(z)开始生成 P(x|z) 的能力,可以是正态分布(如 VAE 的情况),因此,在非常高的层次上,我们试图找到将 z 映射到 x 以及将 x 映射到 z(采样和压缩)的映射/函数。

什么是 Flow Matching?

Flow Matching 是一种用于训练生成模型的方法,它基于对流(flow)的概念。在生成模型中,“flow”通常指的是通过可逆的变换(reversible transformation)逐步将复杂的分布映射为简单的分布(如高斯分布),从而使生成模型能够更容易地对复杂数据进行建模。Flow Matching 的目标是通过最小化模型生成的流与真实数据分布的流之间的差异,来学习一个能够生成高质量样本的模型。

在 Flow Matching 中,通过对训练过程中每一步的匹配进行建模,模型逐渐学习如何从简单的噪声分布中生成复杂的目标数据。这种方法可以用于解决传统生成模型中一些难以处理的问题,如模式崩溃(mode collapse)等。

假设两个 Normalizing Flows,一个表示为 z(潜在或可处理分布),另一个表示为 X(数据分布),因为我们想要找到一个可以将 z 映射到 x 的函数,我们会得到 X 和 Z 密度之间的关系,这必然指出假设 X 和 Z 是共轭分布(变换前后同一家族 z 的分布),X 和 Z 的变化应该是相对的,因此,X 的变化是 Z 的某个函数,反之亦然。但是,按某个量缩放。这个量由雅可比矩阵给出的 z 和 x 之间每个维度的变化表示,在非常简单的尺度上,它基本上是 Z 和 X 之间变量的变化。但是,它不是那么简单,因为 X 和 Z 实际上并不共轭,因此,我们只剩下迭代采样和近似方法,比如最佳传输或吉布斯采样(用于 RBM)。鉴于这些限制,大多数方法都绕道去模拟分布并近似非精确映射,而像 Normalizing flow 这样的方法则做出简化假设,使计算和公式易于处理,形式为 p(x)dx = p(z)dz,可以将其重新表述为两个项,第一个是 MLE 项,第二个是雅可比行列式。

(标准化是因为变量的变化总是给出一个标准化的密度函数,流动是因为它迭代地模拟从源到目标的轨迹/流动)

问题从这里开始,这样的函数存在需要两个条件,

1. p(x,z) 的 MLE 公式必须是双射的。

2. 雅可比矩阵的行列式是可有效计算的。

要解决这个问题,我们需要假设 z 和 X 之间的状态依赖性,使得它是双射的并且行列式可以有效计算,有三种主要方法

1. 耦合块:基本上你将 z 分成两块,只有最后 k 值预测 X 的最后 k 值(通过基于均值/方差的采样),X 的其他部分基本上是 z 的直接复制,这有何帮助?由于这种方法,雅可比矩阵变成了对角矩阵,左上角(<k)部分是恒等矩阵,右下角(>=k)变成元素乘积,右上角变成 0,因为 z(<k)和 x(>=k)之间没有依赖关系,因此,雅可比行列式的计算是有效的。

2. AR 流或自回归流是下一个合乎逻辑的扩展,与其制作大 k 块,为什么不将每个状态/特征视为马尔可夫链的一部分,从而消除额外的依赖关系,这会导致雅可比矩阵的下三角矩阵,这也很容易计算。但是,这种方法保留了更多的特征,并且不易受到我们在耦合层中为保留特征而进行的置换操作的影响。

图 MAF 和 IAF 的比较。具有已知密度的变量为绿色,而未知的变量为红色。

3. 最后,残差流,我们保留整个特征空间,而不牺牲计算。这个想法很简单,但却有非常复杂的数学支持。公式是残差形式 x = z + f(z),但这不是双射,因为 f 是一个神经网络。有趣的是,多亏了 Banach 和他的收缩映射,在理想情况下,存在一个唯一的 z*,它总是映射到相同的 x(稳定状态 z),因此,它也变成了双射,形式为 x = z* + f(z*),其中 f 是一个收缩映射(函数受 Lipschitz 小于 1 的限制,因此,z 的变化受 X 的变化的限制),该形式还为我们提供了一种在给定先前 z(k) 的情况下表示 z(k+1) 的方法,这有助于迭代近似 X,而不是单次框架。我们可以通过相同的公式从 z(0) 转到 z(t),也可以恢复回来,听起来很熟悉,这大致就是扩散。那么行列式呢,迭代变换导致雅可比矩阵迹的无穷项之和,这对于满秩雅可比矩阵来说是可怕的,但可以通过类似的矩阵公式使用哈钦森方法进行迹估计来简单地计算。

Fig. 4. Three substeps in one step of flow in Glow.

到目前为止,我们讨论的所有内容都对样本和轨迹状态(z=>x)做出了离散假设,为什么不使其连续或基本上成为连续的残差流呢?

残差形式 x(k+1) = x(k) + af(x(k)) 可以写成一个微分,其中 k 趋向于无穷大,这看起来很熟悉吗?是的,这现在是一个神经 ODE,但是,我们正在尝试对概率密度在 t 时的状态进行建模,该状态保持不变。密度的状态变化通过连续性或传输方程建模。具体而言,从密度函数的一部分移动到另一部分的质量可以看作是原始质量与当前/移动后质量之间的发散。这种发散是整个轨迹上的连续函数,必须进行积分,因此必须通过数值 ODE 求解,这使得它不可扩展。

这就像状态的比较,为什么不比较路径呢?

这引出了 Flux 背后的方法,即流匹配。想法是这样的……我们从一个非常简单的分布开始,并将其移向预期的分布,但是,由于我们不知道预期的分布,我们通过迭代扰动来调节它,并估计已知的附加噪声,最终模拟底层分布,这个过程简称为条件流匹配,理论上已经证明,在理想条件下,条件目标和无条件目标是完全相同的,因此,通过优化 CFM【条件流匹配】,我们倾向于优化流匹配背后的主要目标。

这正是扩散过程,但是,主要区别在于边界条件或初始和最终状态的定义,扩散过程假设纯噪声为 z(t),数据为 z(0),但是,这是在 t 趋向于无穷大时的假设。但是,这在经验上是不可行的,相反,我们会在足够的时间戳内执行此操作,因此,我们保持在更浅的流形中并且速度也更慢(稍后由 LCM 处理),这就像在低分辨率地图中寻找方式/方向,而在流匹配中,纯噪声和数据空间被建模为 lerp(线性插值),形式为 x(t) = t*x(t-1) + (1-t)*x(0),因此,在 t=0 时我们是纯数据样本,而在 t=t 时我们是纯噪声,这为模型提供了更精细的状态/流形,因此,更具代表性的高分辨率地图,也称为条件流匹配(通过噪声分布进行条件调节)。

Flow Matching 在语音生成中的应用

在语音生成任务中,Flow Matching 可以用于建模从语音特征(如梅尔频谱图、F0等)到波形的生成过程。由于语音信号是高度复杂且具有非线性的时序数据,Flow Matching 可以有效地捕捉语音数据中的复杂分布,并生成高质量的语音样本。

步骤概述:

  1. 输入特征提取:首先,将语音数据转换为特征表示,如梅尔频谱图或其它声学特征。
  2. Flow Model 构建:建立一个基于流的生成模型,通过一系列可逆变换将简单的分布(如标准高斯分布)映射到语音数据的分布。
  3. Flow Matching 训练:通过 Flow Matching 技术,最小化模型生成的语音分布与真实语音数据分布之间的差异,逐步学习生成高质量语音信号的能力。
  4. 语音生成:训练完成后,使用模型生成语音信号,从输入特征映射到语音波形。

优点

  • 高质量生成:由于 Flow Matching 能够精确地建模复杂的分布,生成的语音往往更自然、更接近真实语音。
  • 稳定性:相比一些其他生成方法(如 GANs),Flow Matching 更加稳定,避免了模式崩溃等问题。
  • 可逆性:Flow 模型的可逆性使得对生成过程的控制更加灵活和精确。

应用场景

Flow Matching for Speech Generation 在文本到语音(TTS)系统、语音转换(Voice Conversion)、语音增强(Speech Enhancement)等领域有着广泛的应用前景。

通过 Flow Matching,语音生成模型可以更有效地处理复杂的语音信号,提供更高质量的输出。这种方法正逐步成为语音生成技术发展的重要方向之一。

https://blog.csdn.net/weixin_44966641/article/details/139842872

条件流匹配(Conditional Flow Matching, CFM)

条件流匹配是一种生成模型方法,旨在将条件信息(如标签、特征等)和生成的数据分布匹配起来。它通过条件信息来指导生成过程,使得生成模型能够生成与给定条件一致的数据。

最优传输条件流匹配模型(OT-CFM)

OT-CFM 结合了最优传输和条件流匹配的优势,通过最优传输理论提供的距离度量(如 Wasserstein 距离),以指导生成模型在复杂条件下匹配目标分布。具体来说,OT-CFM 的工作方式如下:

  1. 建模目标:OT-CFM 的目标是学习一个生成模型,使得在给定条件下,生成的数据分布与目标分布之间的最优传输距离最小化。这样可以保证生成的数据不仅真实,而且满足条件要求。
  2. 流匹配:模型通过条件流匹配技术,确保生成过程受条件信息的控制,逐步调整生成过程,使其更贴近目标分布。
  3. 优化过程:通过最优传输的距离度量(如 Wasserstein 距离)来优化生成模型,使得模型生成的数据分布与目标数据分布之间的传输成本最小化。