作者:岳元浩(顾城)、汪诚愚(熊兮)、严俊冰(玖烛)、黄俊(临在)
1.背景
在人工智能快速发展的今天,大语言模型已经成为了人工智能的研究热点。其中,通义千问(Qwen)大模型系列凭借其强大的语言理解和生成能力,吸引了开源社区越来越多的关注。随着这些模型的应用场景不断扩大,如何提高它们的运算效率,降低部署成本,成为了一项重要的课题。知识蒸馏作为一种有效的模型压缩技术,通过将大型模型的知识转移到较小的模型中,实现了在确保性能的前提下,显著降低了所需的计算资源和推理时长,从而使得模型在实际应用中变得更加灵活和高效。
为应对这一难题,我们提出了 DistilQwen2,DistilQwen2 是基于 Qwen2大模型,通过知识蒸馏进行指令遵循效果增强的、参数较小的语言模型。通过对 Qwen 大模型的深度剖析,指令数据的增强和优化,以及多种知识蒸馏算法的探索,我们将大语言模型的复杂知识以更简洁的形式传递给轻量级模型,实现了指令遵循效果的提升。此外,随着应用需求的多样化,轻量级模型在移动设备、边缘计算等资源受限的环境中显得尤为重要。DistilQwen2 的研究旨在为开发更智能、更高效的自然语言处理应用提供技术支持,赋能更多开发者和企业通过技术创新实现商业价值。为了便于开发者和企业在实际应用中使用 DistilQwen2 蒸馏模型,我们在 HuggingFace 和 ModelScope 开源社区中将这一模型的 Checkpoint 进行开源。本文将介绍DistilQwen2 的技术原理、效果评测,以及DistilQwen2 在阿里云人工智能平台 PAI 上的使用方法,和在各开源社区的下载使用教程。
2. 大模型知识蒸馏技术
本节中,我们主要描述 DistilQwen2 模型训练中使用的全流程知识蒸馏技术。其中,DistilQwen2 模型蒸馏的算法框架如下图所示。
原始数据搜集
为了进行大模型蒸馏训练,我们搜集了 Magpie、Openhermes、Mammoth 2 等知名开源数据集,以及私有的合成数据集初始化来我们的蒸馏过程。指令数据以中英文为主,并且进行了难度打分和任务相关的重采样,实现指令数据的多样性。
在难度打分方面,我们使用 LLM-as-a-Judge 范式使用教师模型,从模型回答的准确性、相关性、帮助性、详细程度给出评分。我们使用学生模型的分数减去教师模型回答分数,获得分数差,我们命名为模型拟合难度分数(MFD Score)。模型拟合难度分数越高,该指令对于蒸馏训练的价值越大。因此,拟合难度过低的指令数据可以在训练集中删除。在我们的实践中,英文教师模型采用了 GPT4,中文教师模型采用了 Qwen-max。参考的打分模板如下所示:
在数据多样性方面,我们考虑了三种多样性,分别为任务多样性、长度多样性和语种多样性:
任务多样性:我们参考 WizardLM 中对 LLM 的能力评估维度,定义了33种任务类型,收集标注了一个3万条的任务分类数据集,基于 Deberta v3 训练了一个任务分类器,该任务分类器与 ChatGPT 在测试集上分类结果相同的概率为86%,人类评估的任务分类准确率为93%。我们使用专有的任务分类器给数据打上显式的任务类型标签。
语种多样性:很多场景我们需要训练模型在多个语言上的能力,例如中文和英文,但是我们缺少分布足够广泛中文数据,我们使用 Qwen-max 做数据语种扩展,例如我们使用 Prompt 让 Qwen-max 生成和相同任务类型但内容不同,语言不同,包含更多中国常识的数据,直到两种语言数据量大致相等。
指令数据优化
在指令数据优化上,我们首先使用 Prompt 模板让教师模型扩展数据。在实际应用中,比如扩展中文数据、生成多轮对话数据,需要修改相应的 Prompt 要求。参考扩展模板如下:
对于多轮对话数据的构造,我们要求教师模型严格基于上一轮包含的回答信息进行追问。实验发现这一类数据格式还会有利于 IFEval 评测能力的提升。
蒸馏教师大模型需要获得教师模型的回答。教师模型合成回答的格式、风格、长度影响学生模型学到的风格,以及学生模型收敛泛化速度。在获得教师模型的回答时,我们采用了如下三种策略:
任务格式优化:在标注教师模型的回答时,我们根据任务特点,优化不同任务教师模型回答风格。例如,推理任务要分步推理,代码类任务要有详细注释和解释,写作类任务要详细等。
教师模型标注回复精简:我们在使用教师模型标注数据集回答时,会要求教师模型标注的回答要 “精确但是完整”,这样风格的回答可以让小模型学到风格更精简的回答,减少输出难度和幻觉比例,同时保留了回答的完整性。
- 模型自我蒸馏:我们额外使用了自蒸馏方法。由于这一步骤需要模型改写能力和学生模型能力差异较小,我们额外使用 Qwen2-7B-Instruct 改写教师模型标注的回答,缩短教师模型和学生模型输出的分布差异,以此能有效减少分布差异带来的灾难性遗忘问题。此外,必须注意的是,数据集中的问答对不能有一些固定的模版文本,不能让模型学到一些固定的规律模板文本。
当优化上述指令数据后,我们进一步使用大模型进行质量的校验,以排除数据质量较低的指令数据,保证蒸馏数据源的精度。
模型蒸馏训练
获得高质量指令数据后,我们采用两种方式训练学生模型。第一种方式即 SFT(Supervised Fine-Tuning),即直接微调学生模型的参数。然而,对于一些较难的指令任务,直接进行SFT训练很难获得效果比较好的学生模型,我们进一步使用 DPO(Direct Preference Optimization)进行更细粒度的继续微调。
3.效果评测
在本节中,我们从多个角度评测 DistilQwen2 蒸馏小模型的实际效果,验证大模型知识蒸馏技术的有效性。
指令遵循能力评测
我们在多个权威指令遵循评测基准上测试了 DistilQwen2 蒸馏小模型的能力。其中,AlpacaEval 2.0 是权威的指令遵循评测基准,使用 GPT4 作为裁判员评估回复生成质量。特别地,AlpacaEval 2.0 引入了长度控制的胜率(Length-controlled Win Rates),避免 GPT4 偏向于更长的回复,从而减小评估偏差。MT-Bench 是另一个评测基准,它包含了来自8个类别的80个任务,同样使用 GPT4 作为评判标准,具有两种不同模式:多轮对话和单轮对话。IFEval专注于使用“可验证的指令”进行模型效果的评估,从而使结果更加客观,例如“写一篇超过400个单词的短文”、“模型输出必须严格符合 JSON 格式”,根据使用的 Prompt 不同,包括instruction-loose和strict-prompt两种评估模式。DistilQwen2 在1.5B和7B两个参数量级的模型和原始 Qwen2 模型的效果对比如下表所示,可以看出本文描述的知识大模型蒸馏算法能进一步提升现有大语言模型的指令遵循能力,在多个评测基准上取得明显的、一致性的效果提升。
为了横向比较同期发布的不同参数规模的模型效果,下表展示了这些模型在 AlpacaEval 2.0 的评测结果,从低到高进行排序。特别地,由于 Qwen2 系列模型不包括 4B 和 14B 规模的模型,我们将 Qwen1.5 系列模型纳入排序。对于英文模型,我们也横向对比 Llama3 系列模型。模型效果排序如下所示。可以看出,DistilQwen2 系列模型具有很高的性价比,在指令遵循能力方面,甚至超过了参数量接近或大于其参数量两倍的模型。例如 DistilQwen2-1.5B-Instruct 和 DistilQwen2-7B-Instruct 效果分别明显超越了参数量为其两倍或以上的 Qwen1.5-4B-Chat 和 Qwen1.5-14B-Chat,并且这些提升在小模型上更加明显。DistilQwen2-7B-Instruct 在指令遵循能力上也大幅超越 Llama3 系列 8B 参数模型,包括 Llama3-8B-Instruct 和 Llama3.1-8B-Instruct。
模型通用能力评测
为了评测 DistilQwen2 蒸馏小模型的通用能力在蒸馏过程中是否存在灾难性遗忘,我们进一步评测了模型的通用能力。其中,MMLU、CEval、CMMLU 是权威的中英文模型知识评测数据集,为选择题格式;GSM8K、HumanEval、MBPP 评测模型推理推理能力,分别评测模型解答数学问题和编程问题的能力。DistilQwen2 系列模型和原始 QWen2 模型的评测效果对比如下所示。从实验结果可以看出,DistilQwen2 蒸馏小模型在所有评测任务中取得了与 QWen2 模型相似甚至更高的效果,说明这一模型在最大程度上提升了指令遵循的能力,同时在 NLP 基础任务上保持了较好的性能。
模型输出案例
以下给出数个不同模型输出比较,对于同一指令,我们对比了 DistilQwen2-7B-Instruct 和 GPT-4o、Qwen2-7B-Instruct 回复结果,特别是知识性和逻辑推理类问题。从输出结果可以看出,DistilQwen2-7B-Instruct 的输出具有良好的事实正确性和逻辑推理能力,对于某些问题,其输出比原始的 Qwen2-7B-Instruct 模型更优。
4.模型下载和使用
DistilQwen2 在阿里云人工智能平台 PAI 上的实践
以下 HuggingFace transformers 库为例,简要介绍如何在 PAI-DSW 上使用 DistilQwen2 模型。首先需要保证 PAI-DSW 镜像内 transformers 版本大于等于4.37.0,否则会在加载模型时报错:
KeyError: 'qwen2'
以 DistilQwen2-1.5B-Instruct 为例,我们可以使用如下代码调用模型:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "alibaba-pai/DistilQwen2-1.5B-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 在开源社区的下载
我们在 HuggingFace 和 ModelScope 上开源了我们蒸馏后的模型,分别为 alibaba-pai/DistilQwen2-7B-Instruct 和 alibaba-pai/DistilQwen2-1.5B-Instruct。以 HuggingFace 为例,用户可以使用如下代码下载这两个模型:
from huggingface_hub import snapshot_download
model_name = "alibaba-pai/DistilQwen2-1.5B-Instruct"
snapshot_download(repo_id=model_name, cache_dir="./DistilQwen2-1.5B/")
model_name = "alibaba-pai/DistilQwen2-7B-Instruct"
snapshot_download(repo_id=model_name, cache_dir="./DistilQwen2-7B/")
此外,我们在先前的工作中开源了用于指令增强和扩写的专用模型,用户可以参考这些模型的使用方式进行数据层面的大模型知识蒸馏:
5. 小结与未来工作
随着人工智能领域的不断进步,特别是大语言模型的迅猛发展,如何优化这些模型的运算效率和降低其部署成本正成为研究的前沿课题。DistilQwen2 作为基于 Qwen2 大模型的轻量级语言模型,通过知识蒸馏技术,不仅成功地实现了性能与资源消耗的有效平衡,还显著提升了指令遵循效果。这一创新为在移动设备和边缘计算等资源有限的环境中应用大语言模型奠定了基础,使得AI技术更加灵活且易于推广。在未来的工作中,我们计划进一步完善 DistilQwen2 的功能,探索更多适用于不同应用场景的知识蒸馏算法。同时,针对不断变化的市场需求,我们将集中精力于优化模型的微调策略,以提升其在特定任务中的表现。此外,我们将持续更新 DistilQwen2 在阿里云人工智能平台 PAI 上的最佳实践案例,并将继续加强与开源社区的合作,通过提供更多的工具和资源,促进开发者和企业在自然语言处理应用上的创新和实践。
参考文献
- Yuanhao Yue, Chengyu Wang, Jun Huang, Peng Wang. Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning. EMNLP 2024
- Cheng-Yu Hsieh, Chun-Liang Li, Chih-Kuan Yeh, Hootan Nakhost, Yasuhisa Fujii, Alex Ratner, Ranjay Krishna, Chen-Yu Lee, Tomas Pfister. Distilling Step-by-Step! Outperforming Larger Language Models with Less Training Data and Smaller Model Sizes. ACL 2023
- Yixing Li, Yuxian Gu, Li Dong, Dequan Wang, Yu Cheng, Furu Wei. Direct Preference Knowledge Distillation for Large Language Models. arXiv
开源地址
alibaba-pai/DistilQwen2-7B-Instruct:
- https://huggingface.co/alibaba-pai/DistilQwen2-7B-Instruct
- https://modelscope.cn/models/PAI/DistilQwen2-7B-Instruct
alibaba-pai/DistilQwen2-1.5B-Instruct: