为了账号安全,请及时绑定邮箱和手机立即绑定

Qwen2大模型微调入门实战(附完整代码)(非常详细)零基础入门到精通,收藏这一篇就够了

标签:
杂七杂八
概述

大模型微调入门实战,本文旨在为零基础读者提供从入门到精通的指南,覆盖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

准备数据集

使用复旦中文新闻(https://modelscope.cn/datasets/huangjintao/zh_cls_fudan-news/summary)数据集,该数据集包括几千条文本分类数据,每条数据具有text、category和output三个字段

加载模型

使用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实践。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消