写点什么

DistilQwen2.5 发布:通义千问蒸馏小模型再升级

  • 2025-02-26
    浙江
  • 本文字数:7403 字

    阅读完需:约 24 分钟

引言

因高计算成本和复杂性,在例如移动设备和边缘计算场景等资源有限的环境中,限制了大语言模型的普及。如何在保留模型性能的同时提高计算效率并降低部署成本,已成为研究和工业界必须面对的关键挑战。


在此背景下,我们正式推出基于 Qwen2.5 的轻量化大模型系列 DistilQwen2.5。该模型通过创新的双层蒸馏框架实现突破,基于数据优化策略重构指令数据集强化模型理解能力,并且采用参数融合技术实现细粒度知识迁移。实验表明,DistilQwen2.5 在多项基准测试中性能超越原模型,同时显著降低计算资源消耗。



DistilQwen2.5 蒸馏模型的 Checkpoint 已在 Hugging Face 及 Model Scope 全面开源。本文将介绍 DistilQwen2.5 的蒸馏算法、效果评测,以及 DistilQwen2.5 模型在阿里云人工智能平台 PAI 上的使用方法,并提供在各开源社区的下载使用教程。

DistilQwen2.5 中的知识蒸馏技术

本节中,主要描述 DistilQwen2.5 模型训练中使用的黑盒化和白盒化的知识蒸馏技术。其中,DistilQwen2.5 模型蒸馏的算法框架如下图所示。


指令数据搜集层

DistilQwen2.5 模型蒸馏算法的首要步骤是指令数据收集层,旨在搜集大量高质量指令数据,以供后续教师模型使用。为了确保数据的多样性和高效性,整合了多个来源的数据集,包括开源数据集 Magpie、Openhermes 和 Mammoth 2 等。此外,还引入了大量私有合成数据集,以丰富指令样本的多样性。为有效整合数据源,确保指令语言主要涵盖中英文,同时对指令进行了难度打分和任务相关的重新抽样。


首先,在许多应用场景中,模型需要能够跨语言工作。为应对中文数据相对不足的挑战,利用 Qwen-max 进行了数据扩展。通过设计特定的 Prompt,让 Qwen-max 生成了内容不同但任务类型相同的中英文指令,从而平衡了中英文数据的比例。


其次,任务多样性是实现模型全面能力的关键环节。借鉴 WizardLM 中对大语言模型能力的评估维度,在 DistilQwen2 模型蒸馏中继续使用之前的方法,定义了 33 种任务类型,涵盖广泛的应用场景。我们创建了一个包含 3 万条任务的分类数据集,并基于 Deberta v3 训练了任务分类器。该分类器在测试集上的准确性与 ChatGPT 相当,使得指令数据标注具备高度的可靠性和准确性。通过如此精细的任务标签,能够更好地控制数据集中不同任务类型的分布,确保模型在训练过程中获得全面和深入的能力。


此外,在评估指令数据的难易程度时,采用了 LLM-as-a-Judge 的范式。利用教师模型对指令执行的准确性、相关性、帮助性和详细程度进行评分,这为模型提供了一种客观的指令难度评估机制。具体而言,我们引入了一种名为模型拟合难度分数(MFD Score)的指标来衡量每条指令在蒸馏训练中的价值。MFD 分数是根据学生模型得分与教师模型得分之间的差值计算得出的。如果某条指令的 MFD 分数较高,则说明该指令对蒸馏训练更具价值,而低难度的指令则可以从训练集中移除。

指令遵循优化层(黑盒化蒸馏)

黑盒化蒸馏主要依赖于教师模型的输出,而非其内部表征。我们选择采用黑盒化蒸馏算法的原因有两个:首先,这种算法的训练速度比白盒化蒸馏更快,有助于节省训练时间和计算资源;其次,黑盒化蒸馏适用于开源和闭源的大型模型。在指令遵循优化层中,我们并不直接通过蒸馏微调的方法来优化学生模型,而是利用教师大模型,首先引入一种 Multi-Agent 模式,以对指令数据进行大幅度提升和优化。


  • 指令扩展:在这一过程中,教师大模型充当指令扩展的 Agent,生成与输入指令相似的新指令。在扩展指令时,我们要求该 Agent 始终保持原始任务的自然语言处理类别不变,以避免产生不必要的幻觉。例如,当输入的指令为“简要概述牛顿第一运动定律”时,输出可以是“解释开普勒第三定律的含义”,而不是“介绍爱因斯坦的生平”。

  • 指令选择:指令选择 Agent 的目标是筛选出对模型训练具有高度价值的指令,筛选标准包括信息量、实用性和泛化潜力等。这一过程不仅保证了增强数据集的质量,也有效过滤了对模型蒸馏训练帮助不大的指令数据。

  • 指令改写:在经过指令扩展和选择后,指令改写 Agent 进一步提升数据的质量和多样性,同时保持指令意图不变。例如,将“提供气候变化经济影响的总结”改写为“解释气候变化如何影响经济”。此外,对于复杂任务如逻辑推理、数学问题和编程等,我们鼓励生成链式思维(Chain-of-Thought, CoT)输出,以进一步提升小模型的推理能力和解决问题的逻辑性。


黑盒化蒸馏过程遵循监督学习范式,以增强的指令响应对作为训练样本。学生模型能够在有限的参数量下,充分吸收和理解来自大模型的知识。这种方法不仅增强了学生模型解决任务的能力,也使其能够在多任务环境中取得更好的效果。

知识融合优化层(白盒化蒸馏)

黑盒化知识蒸馏仅依赖教师模型输出的概率最高的 token,而白盒化知识蒸馏则更关注教师模型输出 logits 的分布,从而为学生模型提供更丰富的信息。通过模仿教师模型的 logits 分布,白盒化蒸馏可以更有效地传递知识,进一步提升学生模型的性能。


假设学生模型的参数为



,其输出的概率函数为



。教师模型概率函数



和学生模型的概率函数



之间的 logits 差异定义如下:



其中





分别表示输入和输出序列,



是序列长度。函数



可以是任何散度函数,例如正向 Kullback-Leibler 散度、反向 Kullback-Leibler 散度等。在模型蒸馏训练过程中,我们最小化这一散度损失,旨在最小化学生和教师 token 序列之间的差异,定义如下所示:



传统的白盒化蒸馏算法对于工业大规模数据的蒸馏场景是不可行的,原因有三个:


  1. GPU 内存消耗过高:如果在训练学生模型的同时进行教师模型的前向传播,所需的计算资源将显著增加。对于拥有 32B 或者 72B 参数的巨型教师模型,GPU 内存甚至可能无法承受。这种情况严重限制了模型的训练效率。

  2. 长时间的存储和读取:对于离线生成的教师模型 logits,其存储和读取通常需要占用大量的时间。尤其是当数据集非常庞大时,磁盘空间的消耗也变得难以忽视。这种高昂的存储和读取开销成为了系统瓶颈。

  3. 词汇表不匹配问题:教师模型和学生模型通常使用不同的词汇表,导致它们的 logits 张量无法直接匹配。这种不匹配阻碍了知识的准确传递,降低了蒸馏过程的有效性。


我们在教师模型的输出中观察到,前 10 个 token 的概率之和几乎为 1,这表明教师模型的所有知识几乎都包含在前 10 个 token 中。因此只保存教师模型每个序列位置中概率最大的 10 个 token 的概率。由此我们构建了一个对于大模型和大数据量下可扩展的白盒化知识蒸馏系统,支持以下功能:


  • 我们首先进行 token 对齐操作,以解决由于词汇表不匹配带来的 logits 张量不匹配问题。通过建立词汇映射关系,使教师模型的 logits 能够正确映射到学生模型的词汇表上,确保信息传递的准确性。

  • 离线执行分布式计算过程,生成教师模型的前

  • 个概率的 logits,其中默认

  • ,并可根据定制场景进行调整。

  • 实现

  • 的变体,其中仅计算前

  • 个元素的散度以进行最小化。






分别表示教师模型的前



个 logits 和学生模型中词汇表匹配的相应 logits。计算



时使用概率计算如下所示:




其中



是温度超参数。通过这种方式,不仅加速了 logits 的生成速度,还提高了存储和读取 logits 的速度,缓解了存储压力。

DistilQwen2.5 模型效果评测

在本节中,从多个角度评测 DistilQwen2.5 蒸馏小模型的实际效果;同时,我们对使用不同规模的教师大模型进行模型融合训练的效果进行评测。

模型综合能力评测

我们在多个权威指令遵循评测基准上测试了 DistilQwen2.5 蒸馏小模型的能力。AlpacaEval 2.0 使用 GPT-4 作为评判员来评估生成回复的质量。特别地,AlpacaEval 2.0 引入了长度控制的胜率(Length-controlled Win Rates),以避免 GPT-4 偏向于较长回复,从而减少评估偏差。MT-Bench 是包括来自 8 个类别的 80 个任务,同样使用 GPT-4 作为评判标准,并提供两种不同的评估模式:多轮对话和单轮对话。IFEval 专注于使用“可验证的指令”进行模型效果的评估,这使得结果更加客观。根据所使用的 Prompt 不同,IFEval 提供了 instruction-loose 和 strict-prompt 两种评估模式。如下表所示,DistilQwen2.5 在 0.5B、1.5B、3B 和 7B 四个参数量级的模型中,与原始 Qwen2.5 模型的效果进行了对比。可以看出,本文描述的知识蒸馏算法显著提升了现有大语言模型的指令遵循能力,并在多个评测基准上取得了一致而明显的效果提升。


模型细粒度能力评测

我们进一步使用 MT-bench 基准测试对 DistilQwen2.5 模型的各项细粒度能力进行评测,例如文本生成、代码生成、数学问题、角色扮演等,每个任务都旨在从不同的角度测试模型的能力。通过对 DistilQwen2.5 模型模型在 MT-bench 基准测试中的表现进行分析,我们可以准确量化 DistilQwen2.5 模型在各个方面的细粒度能力,并将其与原始模型进行比较。从实验结果可以看出,在绝大部分细粒度能力层面,DistilQwen2.5 模型比原始 Qwen2.5 模型有明显的提升。下图给出 0.5B 和 1.5B 模型在各个细粒度能力的对比。


与其他模型能力对比

为了横向比较同期发布的不同参数规模的模型效果,下表展示了这些模型在 AlpacaEval 2.0 的评测结果,对于每个参数量级,从低到高进行排序。我们重点对比了 Qwen2、Qwen2.5 以及先前发布的 DistilQwen2 模型。对于英文模型,我们也横向对比 Llama、Phi3、Mistral 等系列模型。模型效果排序如下所示。可以看出,DistilQwen2.5 系列模型对比其他各类模型,具有很高的性价比,其效果接近了参数量接近或大于其参数量两倍的模型。


模型融合实验评测

经过对大模型 logtis 生成速度的优化,我们对 logits 的推理速度提升了至少 4 倍,节省存储空间为原本的 1/1000。使用 5 万条数据时,时间具体耗时如下:



针对不同训练数据量级(1K/10K/100K/200K)下和不同教师模型(7B/14B/32B/72B)大小的蒸馏效果,我们也进行了探索,效果如下图所示,从中可以得到一些关于蒸馏数据量和教师模型参数量大小的结论:


  1. 数据量和模型大小都存在边际效应,随着数据量的成倍提升,效果提升减缓;随着模型规模的上升(32B/72B)并没有对比 14b 模型带来更明显的提升。这表明,学生模型和教师模型在参数量差距过大的情况下,对教师模型的学习能力有限。

  2. 在小数据量(~1K)或充分数据量(>200K)的情况下,提升教师模型规模带来的效果提升不明显。在 10K-100K 条数据量下,不同规模的教师模型提升较为明显。这可能是由于在小数据的场景下,学生模型对教师模型的能力还没有充分学习;而在大数据场景下随着数据量大饱和,学生模型已经能从数据中学习到充分的知识。


模型输出案例

对于同一指令,我们对比了 DistilQwen2.5-7B-Instruct 和 GPT-4o、DeepSeek-V3、Qwen2.5-Max、Qwen2-7B-Instruct 回复对比结果,特别是知识性和逻辑推理类问题。从输出结果可以看出,DistilQwen2.5-7B-Instruct 的输出在一些场景上具有更好的事实正确性和逻辑推理能力。


示例一:知识性问题



示例二:知识性问题



示例三:逻辑推理类问题


模型下载和使用

DistilQwen2.5 在阿里云人工智能平台 PAI 上的实践

以下 HuggingFace transformers 库为例,简要介绍如何在 PAI-DSW 上使用 DistilQwen2.5 模型。首先需要保证 PAI-DSW 镜像内 transformers 版本大于等于 4.37.0,否则会在加载模型时报错:


KeyError: 'qwen2'
复制代码


以 DistilQwen2.5-7B-Instruct 为例,我们可以使用如下代码调用模型:


from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "alibaba-pai/DistilQwen2.5-7B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name)tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "请给我简单介绍一下杭州西湖。"messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt}]text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate( **model_inputs, 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)
复制代码

DistilQwen2.5 在开源社区的下载

我们在 HuggingFace 和 ModelScope 上开源了我们蒸馏后的模型,分别为alibaba-pai/DistilQwen2.5-0.5B-Instructalibaba-pai/DistilQwen2.5-1.5B-Instructalibaba-pai/DistilQwen2.5-3B-Instructalibaba-pai/DistilQwen2.5-7B-Instruct。以 HuggingFace 为例,用户可以使用如下代码下载这两个模型:


from huggingface_hub import snapshot_download
model_name = "alibaba-pai/DistilQwen2.5-0.5B-Instruct"snapshot_download(repo_id=model_name, cache_dir="./DistilQwen2.5-0.5B/")
model_name = "alibaba-pai/DistilQwen2.5-1.5B-Instruct"snapshot_download(repo_id=model_name, cache_dir="./DistilQwen2.5-1.5B/")
model_name = "alibaba-pai/DistilQwen2.5-3B-Instruct"snapshot_download(repo_id=model_name, cache_dir="./DistilQwen2.5-3B/")
model_name = "alibaba-pai/DistilQwen2.5-7B-Instruct"snapshot_download(repo_id=model_name, cache_dir="./DistilQwen2.5-7B/")
复制代码

数据集下载和使用

为了支持社区开发者在微调 DistilQwen2.5 模型时避免“灾难性遗忘”(catastrophic forgetting)现象,我们开源了部分用于模型训练的数据集。这一数据集旨在为模型微调提供坚实的基础,有助于提升模型在新任务上的适应性的同时,保持在之前任务上的性能。此外,在微调其他类似大语言模型时,也可以利用这一数据集进行指令遵循能力的增强。以下是关于数据集的信息和下载使用说明。

数据格式等相关信息

该部分数据包含了数学、代码、知识问答、指令遵循、创意生成等内容,总数据量为 100K。用户可以在用自己的数据对模型微调时加入 DistilQwen_100K,或者其子集,从而使其在下游任务表现良好的同时不至于丧失其通用能力,保证模型的泛化性。数据格式为 JSON 格式,示例数据如下:


[    {        "instruction": "The ratio of the number of molar teeth in the human upper jaw at the age of 6 is 2:1 compared to number of incisors teeth. There are total 8 incisors in the human mouth. What is the number of molar teeth in the human upper jaw for this age group?",        "output": "## Step 1: Determine the total number of incisors in the upper jaw.\nSince there are a total of 8 incisors in the human mouth and the incisors are evenly distributed between the upper and lower jaw, we divide the total number of incisors by 2 to find the number in the upper jaw. So, 8 incisors / 2 = 4 incisors in the upper jaw.\n\n## Step 2: Use the given ratio to find the number of molar teeth in the upper jaw.\nThe ratio of molar teeth to incisors in the upper jaw at the age of 6 is given as 2:1. This means for every 1 incisor, there are 2 molar teeth. Since we determined there are 4 incisors in the upper jaw, we multiply this number by 2 to find the number of molar teeth. So, 4 incisors * 2 = 8 molar teeth.\n\nThe final answer is: $\\boxed{8}$"    },    {        "instruction": "This is the text of a lecture I am giving tomorrow. Can you go over it and make recommendations to improve clarity and flow?",        "output": "I'd be happy to help you review your lecture text and provide suggestions for improvement. Please go ahead and share the text with me, and I'll get started.\n\nAdditionally, it would be helpful to know a bit more about the context of your lecture. Could you tell me:\n\n* What is the topic of your lecture?\n* Who is your audience (e.g. students, professionals, general public)?\n* What is the purpose of the lecture (e.g. to inform, to persuade, to educate)?\n* How long is the lecture supposed to be?\n\nThis information will help me provide more targeted and relevant feedback."    }]
复制代码

数据集在开源社区的下载

该数据集已上传至 ModelScope,用户可以使用 ModelScope 提供的脚本和命令行工具自行下载使用该数据集。



#验证SDK tokenfrom modelscope.hub.api import HubApiapi = HubApi()api.login('your_token_id')
#数据集下载from modelscope.msdatasets import MsDatasetds = MsDataset.load('PAI/DistilQwen_100k')
复制代码

小结与未来工作

在当前人工智能领域的快速发展中,大语言模型(LLMs)凭借其出色的自然语言理解和生成能力,已在多个应用场景中得到广泛应用。然而,随着这些应用的扩展,其高计算成本和复杂性在资源有限的环境下的接受度逐渐降低,成为行业普及的一大瓶颈。为了解决这一问题,我们提出了 DistilQwen2.5 轻量化模型系列,依托 Qwen2.5 大模型,通过一系列创新的知识蒸馏技术,使得模型在保留原有优越性能的同时显著降低了计算资源需求。为了进一步促进技术的推广与应用,我们将 DistilQwen2.5 模型的 Checkpoint 以及部分训练数据集开源至 Hugging Face 和 Model Scope 等社区,力图为开发者和企业提供更为便捷的操作环境,助力他们在实际项目中迅速实现技术落地。在未来,我们将继续致力于优化并发布 DistilQwen 系列模型,并且针对特定领域(如深度推理等)进行模型的定制化优化,使得 DistilQwen 系列模型在多样化需求下展现出更强的专业能力。

参考资料

相关发表论文


  1. Yuanhao Yue, Chengyu Wang, Jun Huang, Peng Wang. Building a Family of Data Augmentation Models for Low-cost LLM Fine-tuning on the Cloud. COLING 2025

  2. Yuanhao Yue, Chengyu Wang, Jun Huang, Peng Wang. Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning. EMNLP 2024


技术文章


  1. DistilQwen2:通义千问大模型的知识蒸馏实践:https://developer.aliyun.com/article/1633882

  2. DistilQwen2 蒸馏小模型的训练、评测、压缩与部署实践:https://help.aliyun.com/zh/pai/user-guide/training-evaluation-compression-and-deployment-of-distilqwen2

  3. 大语言模型数据增强与模型蒸馏解决方案:https://help.aliyun.com/zh/pai/user-guide/llm-data-enhancement-and-model-distillation-solution


用户头像

还未添加个人签名 2020-10-15 加入

分享阿里云计算平台的大数据和AI方向的技术创新和趋势、实战案例、经验总结。

评论

发布
暂无评论
DistilQwen2.5发布:通义千问蒸馏小模型再升级_人工智能_阿里云大数据AI技术_InfoQ写作社区