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

Qwen2大模型微调入门实战

标签:
杂七杂八

概述

大模型微调教程:从入门到实战

在本文中,我们围绕Qwen2大模型进行微调,旨在提供一个全面、直接且实用的入门指南。从环境配置到模型加载,从数据准备到训练过程监控,直至推理结果演示,我们将详细介绍微调过程的关键步骤,并通过完整代码示例辅助理解。

环境安装与数据集准备

确保系统满足如下要求,安装必要的库并从ModelScope下载所需的训练数据集:

pip install swanlab modelscope transformers datasets peft pandas accelerate

数据集准备:

  1. 数据集来源:复旦中文新闻 (ModelScope)
  2. 数据集结构
    • text(文本内容)
    • category(文本类别)
    • output(分类结果)

从 ModelScope 下载 train.jsonltest.jsonl 文件至本地目录。

加载模型与配置训练可视化工具

使用ModelScope下载 Qwen2-1.5B-Instruct 模型,并通过Transformers加载模型权重,同时集成SwanLab进行训练过程监控与效果评估:

from modelscope import snapshot_download
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForSeq2Seq

model_dir = snapshot_download("qwen/Qwen2-1.5B-Instruct")
tokenizer = AutoTokenizer.from_pretrained(model_dir, use_fast=False, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", torch_dtype=torch.bfloat16)
swanlab_callback = SwanLabCallback(project="Qwen2-fintune", experiment_name="Qwen2-1.5B-Instruct")

完整代码逻辑与训练流程

构建训练逻辑,包括数据预处理、训练模型以及SwanLab回调集成:

import json
from datasets import Dataset

def dataset_transfer(file_path, new_path):
    messages = []
    with open(file_path, "r") as file:
        for line in file:
            data = json.loads(line)
            instruction = "你是一个文本分类领域的专家,你会接收到一段文本和几个潜在的分类选项,请输出文本内容的正确类型"
            input_data = f"文本:{data['text]},类型选型:{data['category']}"
            label = data['output']
            messages.append({"instruction": instruction, "input": input_data, "output": label})
    with open(new_path, "w") as file:
        for message in messages:
            json.dump(message, file)
            file.write("\n")

def preprocess_data(file_path):
    dataset = Dataset.from_pandas(pd.read_json(file_path, lines=True))
    return dataset

# 数据预处理
train_path = "train.jsonl"
test_path = "test.jsonl"
new_train_path = "new_train.jsonl"
new_test_path = "new_test.jsonl"

dataset_transfer(train_path, new_train_path)
dataset_transfer(test_path, new_test_path)

# 数据加载与预处理
train_dataset = preprocess_data(new_train_path)
test_dataset = preprocess_data(new_test_path)

# 训练参数与模型调优
lora_config = LoraConfig(task_type=TaskType.CAUSAL_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1)
model = get_peft_model(model, lora_config)

training_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,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    data_collator=DataCollatorForSeq2Seq(tokenizer=tokenizer, padding=True),
    callbacks=[swanlab_callback],
)

trainer.train()

推理与结果演示

训练完成后,使用模型进行推理,展示模型在特定任务上的表现,并通过SwanLab项目页面查看训练结果:

def inference(model, tokenizer, data_path):
    dataset = Dataset.from_pandas(pd.read_json(data_path, lines=True))
    predictions = dataset.map(lambda example: {"input": example["input"]}, batched=True)
    model.eval()
    with torch.no_grad():
        generated_ids = model.generate(
            torch.tensor([tokenizer.encode(pred["input"], add_special_tokens=True) for pred in predictions]).to(model.device),
            max_length=100,
        )
        predictions = [{"input": pred["input"], "output": tokenizer.decode(ids)} for pred, ids in zip(predictions, generated_ids)]
    return predictions

# 使用训练好的模型进行推理
predictions = inference(model, tokenizer, "new_test_path")

推荐资源与学习路径

  • 代码实现代码:已包含在上述训练脚本中。
  • 实验日志:通过SwanLab在Qwen2-fintune项目页面监控训练过程和效果。
  • 获取完整代码GitHub仓库链接
  • 查看训练结果:在SwanLab项目页面上查看训练结果。

结语

本文提供了一个从零开始了解和实践微调Qwen2大模型的全面指南,从环境准备、模型加载到数据处理、训练设置直至推理结果展示,涵盖关键步骤和代码示例。通过遵循此教程,开发者将能够掌握微调技术的核心技巧,并在实际应用中提升模型性能。建议在实践过程中根据项目需求调整参数与策略,以实现最佳效果。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消