Qwen2 大模型指令微调入门实战
1. 背景介绍
Qwen2 是通义千问团队开源的大语言模型,由阿里云通义实验室研发。以 Qwen2 作为基座大模型,通过指令微调(Instruction Tuning)的方式实现高准确率的文本分类任务,是学习大语言模型微调的入门实践。
指令微调是一种通过在由(指令,输出)对组成的数据集上进一步训练大语言模型的过程。其中,指令代表模型的人类指令,输出代表遵循指令的期望输出。这个过程有助于弥合大语言模型的下一个词预测目标与用户让模型遵循人类指令的目标之间的差距。
在本教程中,我们将使用 Qwen2-1.5B-Instruct 模型在 Fudan News 新闻分类数据集上进行指令微调,并使用 SwanLab 进行训练过程的监控和可视化。
2. 环境准备
本案例基于 Python>=3.8,请在您的计算机上安装好 Python,并且需要一张英伟达显卡(显存要求并不高,大概 10GB 左右就可以运行)。
我们需要安装以下 Python 库,在此之前,请确保你的环境内已安装了 PyTorch 以及 CUDA:
swanlab
modelscope
transformers
datasets
peft
accelerate
pandas
一键安装命令:
pip install swanlab modelscope transformers datasets peft pandas accelerate
注意:本案例测试于 modelscope 1.14.0、transformers 4.41.2、datasets 2.18.0、peft 0.11.1、accelerate 0.30.1、swanlab 0.3.9。
3. 数据集准备
本案例使用的是 zh_cls_fudan_news 数据集,该数据集主要被用于训练文本分类模型。
数据集包含几千条数据,每条数据包含 text、category、output 三列:
text是训练语料,内容是书籍或新闻的文本内容。category是text的多个备选类型组成的列表。output则是text唯一真实的类型。
我们的训练任务,便是希望微调后的大模型能够根据 Text 和 Category 组成的提示词,预测出正确的 Output。
我们将数据集下载到本地目录下。下载方式是前往魔搭社区,将 train.jsonl 和 test.jsonl 下载到本地根目录下即可。
数据集示例如下:
{
"PROMPT": "Text: 第四届全国大企业足球赛复赛结束新华社郑州5月3日电...",
"Category": "Sports, Politics",
"Output": "Sports"
}
4. 加载模型
这里我们使用 modelscope 下载 Qwen2-1.5B-Instruct 模型,然后把它加载到 Transformers 中进行训练。
from modelscope snapshot_download, AutoTokenizer
transformers AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForSeq2Seq
torch
model_dir = snapshot_download(, cache_dir=, revision=)
tokenizer = AutoTokenizer.from_pretrained(, use_fast=, trust_remote_code=)
model = AutoModelForCausalLM.from_pretrained(, device_map=, torch_dtype=torch.bfloat16)


