DistilQwen2:通义千问大模型的知识蒸馏实践
02
大模型知识蒸馏技术本节中,我们主要描述 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 要求。参考扩展模板如下:- 任务格式优化:在标注教师模型的回答时,我们根据任务特点,优化不同任务教师模型回答风格。例如,推理任务要分步推理,代码类任务要有详细注释和解释,写作类任务要详细等。
- 教师模型标注回复精简:我们在使用教师模型标注数据集回答时,会要求教师模型标注的回答要 “精确但是完整”,这样风格的回答可以让小模型学到风格更精简的回答,减少输出难度和幻觉比例,同时保留了回答的完整性。
- 模型自我蒸馏:我们额外使用了自蒸馏方法。由于这一步骤需要模型改写能力和学生模型能力差异较小,我们额外使用 Qwen2-7B-Instruct 改写教师模型标注的回答,缩短教师模型和学生模型输出的分布差异,以此能有效减少分布差异带来的灾难性遗忘问题。此外,必须注意的是,数据集中的问答对不能有一些固定的模版文本,不能让模型学到一些固定的规律模板文本。
模型蒸馏训练
获得高质量指令数据后,我们采用两种方式训练学生模型。第一种方式即 SFT(Supervised Fine-Tuning),即直接微调学生模型的参数。然而,对于一些较难的指令任务,直接进行SFT训练很难获得效果比较好的学生模型,我们进一步使用 DPO(Direct Preference Optimization)进行更细粒度的继续微调。在 DPO 算法中,给定学生和教师输出,比较它们被选择概率的常用模型是 Bradley-Terry 模型。给定相同的提示 ,教师输出和学生输出分别定义为 和 。此外,我们用 表示衡量选择一个输出收益的奖励函数。BT模型可以用来衡量我们选择 而不是 的概率: 其中 是函数 。基于 DPO 的知识蒸馏的目标让学生模型拟合教师模型的分布,这也可以被理解为期望学生模型有更大的概率输出与教师模型相似的结果。根据前述偏好模型,我们可以得到以下概率公式: 省略提示 ,DPO 蒸馏训练的优化目标为: 并且,我们在蒸馏损失中添加了长度归一化因子,以防止模型出现过短的回复,如下所示: 经过多个 SFT 和 DPO 的蒸馏训练,最终我们得到了蒸馏后的学生模型。03
效果评测在本节中,我们从多个角度评测 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 (length-controlled) |
MT-Bench |
MT-Bench (single) |
IFEval (instruction-loose) |
IFEval (strict-prompt) |
1.5B量级 | |||||
Qwen2-1.5B-Instruct |
5.22 |
5.85 |
6.45 |
41.37 |
28.10 |
DistilQwen2-1.5B-Instruct |
8.28 |
6.42 |
7.12 |
49.76 |
36.04 |
7B量级 | |||||
Qwen2-7B-Instruct |
24.33 |
8.27 |
8.68 |
66.67 |
52.31 |
DistilQwen2-7B-Instruct |
25.35 |
8.40 |
9.03 |
71.46 |
60.26 |
模型 | 参数量 | AlpacaEval 2.0 (length-controlled) |
Qwen1.5-1.8B-Chat |
1.8B |
2.6 |
Qwen2-1.5B-Instruct |
1.5B |
5.22 |
Qwen1.5-4B-Chat |
4B |
5.44 |
DistilQwen2-1.5B-Instruct |
1.5B |
8.28 |
Qwen1.5-7B-Chat |
7B |
14.7 |
Llama3.1-8B-Instruct |
8B |
20.9 |
Llama3-8B-Instruct |
8B |
22.9 |
Qwen1.5-14B-Chat |
14B |
23.9 |
Qwen2-7B-Instruct |
7B |
24.33 |
DistilQwen2-7B-Instruct |
7B |
25.35 |
模型通用能力评测
为了评测 DistilQwen2 蒸馏小模型的通用能力在蒸馏过程中是否存在灾难性遗忘,我们进一步评测了模型的通用能力。其中,MMLU、CEval、CMMLU 是权威的中英文模型知识评测数据集,为选择题格式;GSM8K、HumanEval、MBPP 评测模型推理推理能力,分别评测模型解答数学问题和编程问题的能力。DistilQwen2 系列模型和原始 QWen2 模型的评测效果对比如下所示。从实验结果可以看出,DistilQwen2 蒸馏小模型在所有评测任务中取得了与 QWen2 模型相似甚至更高的效果,说明这一模型在最大程度上提升了指令遵循的能力,同时在 NLP 基础任务上保持了较好的性能。
模型 |
选择题格式(模型知识评测) |
生成式(基础推理能力评测) | 平均分 | ||||
MMLU |
CEval |
CMMLU |
GSM8K |
HumanEval |
MBPP |
||
1.5B量级 |
|||||||
Qwen2-1.5B-Instruct |
55.58 |
68.87 |
69.70 |
59.06 |
46.34 |
30.40 |
54.99 |
DistilQwen2-1.5B-Instruct |
56.07 |
69.24 |
69.78 |
60.27 |
51.83 |
32.80 |
56.66 |
7B量级 |
|||||||
Qwen2-7B-Instruct |
69.77 |
81.51 |
80.29 |
86.66 |
78.05 |
53.04 |
74.89 |
DistilQwen2-7B-Instruct |
69.80 |
81.28 |
81.20 |
86.66 |
84.15 |
56.00 |
76.52 |
模型输出案例
以下给出数个不同模型输出比较,对于同一指令,我们对比了 DistilQwen2-7B-Instruct 和 GPT-4o、Qwen2-7B-Instruct 回复结果,特别是知识性和逻辑推理类问题。从输出结果可以看出,DistilQwen2-7B-Instruct 的输出具有良好的事实正确性和逻辑推理能力,对于某些问题,其输出比原始的 Qwen2-7B-Instruct 模型更优。示例一:知识性问题输入指令 | 麦哲伦航队在全球旅行时使用了六分仪测量经纬度么? |
GPT-4o回复 |
麦哲伦航队进行全球航行的时间是在1519年至1522年,而六分仪的发明是在18世纪,这意味着他们不可能使用六分仪来测量经纬度。在麦哲伦的时代,航海家主要依赖于简单的工具如星盘、烈角仪(艾斯特罗拉比)和四分仪来测量纬度,通过观测太阳或北极星的高度来完成。他们测量经度的能力非常有限,多依赖于推算和估算。经度的精确测量直到18世纪末制作用于航海的精确时计(如航海钟)发明后才成为可能。 |
Qwen2-7B-Instruct回复 |
是的,麦哲伦船队在环球航行的过程中确实使用了六分仪来测量经纬度。六分仪是一种测量天体与地平线角度的仪器,通过这种测量,航海家可以确定自己的纬度位置。对于确定经度,则需要依赖于精确的时间测量,这在当时是一个挑战。尽管麦哲伦船队在环球航行时面对了许多困难和未知,但他们的探索精神和对科技工具的应用,如六分仪,对于后来的航海和地理发现有着深远的影响。 |
DistilQwen2-7B-Instruct回复 |
麦哲伦船队在进行环球航行时,并没有使用六分仪来测量经纬度。六分仪的发明是在16世纪末,而麦哲伦的环球航行则是在1519年至1522年期间完成的。麦哲伦船队在航海过程中主要依靠传统的导航方法,包括观察太阳和星星的位置来确定航线和位置。直到17世纪,随着航海技术的进一步发展,六分仪才开始被广泛应用于航海中,用于更精确地测量纬度。 |
输入指令 | 请解释成语“逢人说项”中的“项”字的意思。 |
GPT-4o 回复 |
成语“逢人说项”中的“项”,是指唐代诗人项斯。这个成语源自于项斯的朋友李翱,因项斯为人谦虚、才情出众,所以李翱总是向他人称赞项斯的才华和品德。“逢人说项”因此用来形容到处称赞或推荐某人。 |
Qwen2-7B-Instruct输出回复 |
“逢人说项”这个成语中的“项”字,指的是宋朝诗人项斯。这个成语原本的意思是指项斯的诗作受到了广泛的好评和推崇,以至于人们在遇到别人时,都会推荐或称赞他的诗作。后来,“逢人说项”这个成语被引申为形容一个人或事物受到普遍的赞誉和推荐,人们在遇到相关话题时,都会不自觉地提到或赞扬它。 |
DistilQwen2-7B-Instruct输出回复 |
成语“逢人说项”中的“项”字指的是“项斯”,这是一个典故的来源。该成语用来形容一个人非常热衷于向别人推荐或赞扬某个人或事物。典故出自唐代诗人杨敬之对项斯的推崇,杨敬之多次在诗文中赞扬项斯的才华,以至于人们一提到项斯的名字,就会想到杨敬之的赞誉。因此,“逢人说项”就演变为了现在的成语,用来形容那种不厌其烦地向他人推荐或赞扬某人或某事的行为。 |
输入指令 | 电源36伏发光二极管一个需要串多大电阻? |
GPT-4o回复 |
计算串联电阻需要知道发光二极管(LED)的正向电压(通常在2V到3.6V之间)和正向电流(通常在10mA到20mA之间)。假设LED的正向电压为3V,电流为20mA,计算方法如下:1. 计算电阻两端的电压: 电阻电压 电源 2. 计算电阻值: 因此,需要串联一个1650欧姆的电阻。如果使用不同的LED,请根据具体参数进行调整。 |
Qwen2-7B-Instruct输出回复 |
要确定串联电阻的大小,我们需要知道几个关键参数:电源电压(V)、发光二极管(LED)的正向电压(Vf)和额定电流(If)。发光二极管的正向电压通常在数据表中给出,而额定电流则取决于LED的功率和使用条件。假设你有一个36伏的电源和一个额定电压为3伏(典型的红色LED电压)的LED,你希望LED以10毫安(mA)的电流工作。计算串联电阻(R)的公式如下: 电源 电源
将已知值代入公式: 所以,你需要一个3300欧姆的电阻来串联在电源和LED之间。请注意,实际应用中,电阻的值可能会因为实际的电源电压波动、LED的实际电压和电流特性、以及温度等因素而有所不同。在实际操作中,建议使用稍微大一些的电阻值以确保安全,并且在可能的情况下,使用具有合适功率的电阻以防止过热。 |
DistilQwen2-7B-Instruct输出回复 |
为了确保发光二极管(LED)安全且正常工作,我们需要计算串联电阻的阻值。计算公式为: 电源 其中, 电源 是电源电压, 是LED的额定电压, 是LED的额定电流。假设LED的额定电压为3V,额定电流为20mA(0.02A),并且电源电压为36V,我们可以进行如下计算: 因此,需要串联一个1650欧姆的电阻。确保所选电阻的功率足够大以防止过热。 |
04
模型下载和使用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/")
模型 |
功能 |
链接 |
Qwen2-1.5B-Instruct-Exp |
指令扩展 |
https://huggingface.co/alibaba-pai/Qwen2-1.5B-Instruct-Exp |
Qwen2-7B-Instruct-Exp |
指令扩展 |
https://huggingface.co/alibaba-pai/Qwen2-7B-Instruct-Exp |
Qwen2-1.5B-Instruct-Refine |
指令优化 |
https://huggingface.co/alibaba-pai/Qwen2-1.5B-Instruct-Refine |
Qwen2-7B-Instruct-Refine |
指令优化 |
https://huggingface.co/alibaba-pai/Qwen2-7B-Instruct-Refine |
Qwen2-7B-Instruct-Response-Exp | 指令回复扩展 |
https://huggingface.co/alibaba-pai/Qwen2-7B-Instruct-Response-Exp |
05
小结与未来工作随着人工智能领域的不断进步,特别是大语言模型的迅猛发展,如何优化这些模型的运算效率和降低其部署成本正成为研究的前沿课题。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
- https://huggingface.co/alibaba-pai/DistilQwen2-7B-Instruct
-
https://modelscope.cn/models/PAI/DistilQwen2-7B-Instruct
- https://huggingface.co/alibaba-pai/DistilQwen2-1.5B-Instruct
-
https://modelscope.cn/models/PAI/DistilQwen2-1.5B-Instruct
- 转:https://mp.weixin.qq.com/s/cnTUlGOw3F-ytsgWje509g
posted on 2025-02-21 17:49 ExplorerMan 阅读(153) 评论(0) 收藏 举报