大模型微调入门实战,本文旨在为零基础读者提供从入门到精通的指南,覆盖Qwen2大语言模型的微调过程。首先,确保环境已安装必要的Python库,包括swanlab、modelscope、transformers、datasets、peft和pandas等,并完成Qwen2-1.5B-Instruct模型的下载。接下来,准备复旦中文新闻数据集,用于训练文本分类任务。通过配置训练可视化工具SwanLab,监控训练过程。完整代码示例展示了数据集转换、预处理、模型微调以及推理的流程。附带的GitHub仓库链接提供详细的代码实现和实验日志,帮助读者深入理解微调步骤。本文概述大模型微调的关键知识点,包括指令微调、Qwen2模型应用、微调步骤等,并提供学习路线和免费学习资源指引,旨在激发读者对AI领域的探索热情。掌握大模型微调技术,对AI领域从业者而言至关重要,它不仅有助于提升专业技能,还能在实践中推动AI技术的发展。
环境安装首先,确保您的环境已安装 Python(>=3.8),并准备好英伟达显存至少10GB的显卡。接下来,根据以下命令安装必要的库:
pip install swanlab modelscope transformers datasets peft pandas accelerate
测试版本:modelscope1.14.0、transformers4.41.2、datasets2.18.0、peft0.11.1、accelerate0.30.1、swanlab0.3.9
准备数据集 加载模型使用modelscope下载Qwen2-1.5B-Instruct模型:
from modelscope import snapshot_download
model_dir = snapshot_download("qwen/Qwen2-1.5B-Instruct", cache_dir="./", revision="master")
tokenizer = AutoTokenizer.from_pretrained("./qwen/Qwen2-1___5B-Instruct/", use_fast=False, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("./qwen/Qwen2-1___5B-Instruct/", device_map="auto", torch_dtype=torch.bfloat16)
配置训练可视化工具
使用SwanLab监控训练过程,配置如下:
from swanlab.integration.huggingface import SwanLabCallback
swanlab_callback = SwanLabCallback(...) # 配置SwanLab回调
确保您在SwanLab上注册了账号并获取API Key。
完整代码训练的主要目录结构如下:
|--- train.py
|--- train.jsonl (训练数据)
|--- test.jsonl (测试数据)
在train.py
文件中,代码分为几个关键部分:
数据转换
数据转换代码如下,它将原始数据集转换成适合训练的JSONL格式:
def dataset_jsonl_transfer(origin_path, new_path):
messages = []
with open(origin_path, "r") as file:
for line in file:
data = json.loads(line)
# 转换数据格式
messages.append({"instruction": "文本分类", "input": data["text"], "output": data["category"]})
with open(new_path, "w", encoding="utf-8") as file:
for message in messages:
file.write(json.dumps(message, ensure_ascii=False) + "\n")
数据预处理
数据预处理代码如下,它填充并格式化输入和标签:
MAX_LENGTH = 384
def process_func(example):
input_ids, attention_mask, labels = [], [],
# 填充格式化输入和标签
return {"input_ids": input_ids, "attention_mask": attention_mask, "labels": labels}
模型训练
模型训练代码如下,包括数据加载、模型微调、训练参数配置、训练、以及使用SwanLab监控训练过程:
from transformers import TrainingArguments, Trainer
from peft import LoraConfig
train_dataset_path = "train.jsonl"
test_dataset_path = "test.jsonl"
# 数据转换和预处理
# ...
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_alpha=32,
lora_dropout=0.1,
)
model = get_peft_model(model, config)
args = TrainingArguments(
output_dir="./output/Qwen1.5",
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
logging_steps=10,
num_train_epochs=2,
save_steps=100,
learning_rate=1e-4,
save_on_each_node=True,
gradient_checkpointing=True,
report_to="none",
)
trainer = Trainer(
model=model,
args=args,
train_dataset=train_dataset,
data_collator=DataCollatorForSeq2Seq(tokenizer=tokenizer, padding=True),
callbacks=[swanlab_callback],
)
trainer.train()
推理训练好的模型
推理代码如下,用于使用训练好的模型进行推理:
def predict(messages, model, tokenizer):
device = "cuda"
# 预测处理逻辑
相关链接
完整代码和实验日志: Github仓库链接 。实验日志可查看:SwanLab监控页面。
知识点概览
- 指令微调:通过训练模型执行特定指令来提升模型的特定任务性能。
- Qwen2模型:通义千问团队研发的开源大语言模型,适用于多种NLP任务。
- 微调步骤:选择任务、数据准备、模型选择、训练与评估。
学习路线
免费学习资料
结尾
大模型微调是通往AI前沿的钥匙,掌握这一技能能为您的职业生涯打开新的大门。持续学习与实践将使您在这一领域中保持竞争力。加入社区,持续关注最新动态,推动AI技术的发展,同时确保负责任的AI实践。
共同学习,写下你的评论
评论加载中...
作者其他优质文章