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

Qwen2大模型微调入门实战(完整代码)

标签:
杂七杂八
概述

微调教程:如何高效入门使用Qwen2大模型进行微调训练。本文详细指导了环境准备、数据集准备与处理、模型加载与训练过程,以及训练可视化与结果演示实现。通过步骤清晰的代码示例,覆盖了从环境安装、数据集下载与预处理、模型加载与微调、训练可视化与监控,再到模型推理的关键步骤,旨在帮助开发者快速上手并优化模型性能。本教程以Qwen2大语言模型为例,展示了使用modelscope、transformers、datasets、peft和accelerate等库进行微调训练的全过程,同时集成SwanLab进行训练过程监控与可视化,确保开发者能够高效地进行模型训练与优化。


Qwen2大模型微调入门实战(完整代码)

环境安装

为了进行Qwen2大模型的微调训练,首先需要确保Python版本在3.8以上。接下来,安装必要的库,这些库包括swanlab、modelscope、transformers、datasets、peft和accelerate。使用pip进行安装命令如下:

pip install swanlab modelscope transformers datasets peft 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

准备数据集

我们将使用来自魔搭社区的zh_cls_fudan-news数据集。该数据集包含文本、类别和输出,适用于文本分类任务。数据集可以分为如下三列:

  • text: 训练语料
  • category: 文本的多个备选类型
  • output: 唯一真实类型的输出

数据集的示例:

[PROMPT]Text: 第四届全国大企业足球赛复赛结束新华社郑州5月3日电(实习生田兆运)上海大隆机器厂队昨天在洛阳进行的第四届牡丹杯全国大企业足球赛复赛中,以5:4力克成都冶金实验厂队,进入前四名。沪蓉之战,双方势均力敌,90分钟不分胜负。最后,双方互射点球,沪队才以一球优势取胜。复赛的其它3场比赛,青海山川机床铸造厂队3:0击败东道主洛阳矿山机器厂队,青岛铸造机械厂队3:1战胜石家庄第一印染厂队,武汉肉联厂队1:0险胜天津市第二冶金机械厂队。在今天进行的决定九至十二名的两场比赛中,包钢无缝钢管厂队和河南平顶山矿务局一矿队分别击败河南平顶山锦纶帘子布厂队和江苏盐城无线电总厂队。4日将进行两场半决赛,由青海山川机床铸造厂队和青岛铸造机械厂队分别与武汉肉联厂队和上海大隆机器厂队交锋。本届比赛将于6日结束。(完)

Category: Sports, Politics

Output: [OUTPUT]Sports

数据集文件应下载至本地目录。


加载模型

使用modelscope下载大语言模型Qwen2-1.5B-Instruct,并加载到transformers中进行训练。以下是模型加载代码:

from modelscope import snapshot_download
from transformers import AutoModelForCausalLM

model_dir = snapshot_download("qwen/Qwen2-1.5B-Instruct", cache_dir="./", revision="master")
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", torch_dtype=torch.bfloat16)

配置训练可视化工具

引入SwanLab进行训练过程的监控和可视化。需要注册SwanLab账号并复制API Key,用于集成到模型训练中:

from swanlab.integration.huggingface import SwanLabCallback
swanlab_callback = SwanLabCallback(api_key="your-api-key")

完整代码

代码组织结构包括train.pytrain.jsonltest.jsonl,下面提供一个简化的代码示例:

train.py

import json
import pandas as pd
from datasets import Dataset
from modelscope import snapshot_download
from swanlab.integration.huggingface import SwanLabCallback
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForSeq2Seq

def dataset_jsonl_transfer(origin_path, new_path):
    messages = []
    with open(origin_path, 'r') as f:
        for line in f:
            data = json.loads(line)
            messages.append(data)
    dataset = Dataset.from_list(messages)
    dataset.save_to_disk(new_path)

def process_func(example):
    # 数据预处理逻辑
    text = example['text']
    inputs = tokenizer(text, return_tensors="pt")
    return inputs

def predict(messages, model, tokenizer):
    # 预测函数实现
    # ...

# 定义数据路径和文件名
train_path = 'train.jsonl'
test_path = 'test.jsonl'

# 数据集文件路径
dataset_jsonl_transfer('zh_cls_fudan-news/train.jsonl', train_path)
dataset_jsonl_transfer('zh_cls_fudan-news/test.jsonl', test_path)

# ... 数据处理逻辑...

def main():
    # 主函数实现,集成数据处理、模型加载、训练逻辑...

if __name__ == '__main__':
    main()

训练结果演示

训练完成后,可以在SwanLab上查看训练结果,监视训练过程和评估模型效果。SwanLab允许查看训练曲线、损失变化等关键指标,帮助理解模型训练的过程。

在SwanLab界面中,可以通过以下步骤查看训练结果:

  1. 登录SwanLab并创建新项目。
  2. 选择创建新实验,并输入相关信息,包括模型信息和数据集描述。
  3. 集成SwanLab回调函数到训练循环中。
  4. 开始训练后,SwanLab将自动记录训练指标,如损失、准确率等。
  5. 通过SwanLab界面查看训练结果,包括图表、metric报告等。

推理训练好的模型

训练完成的模型会保存在指定路径下,如./output/Qwen2。推理模型时,可以使用以下代码示例:

# 加载训练完成的模型...
# ...

def predict_with_finetuned_model(messages, model, tokenizer):
    predictions = []
    for text in messages:
        inputs = tokenizer(text, return_tensors="pt")
        outputs = model.generate(**inputs)
        predicted_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
        predictions.append(predicted_text)
    return predictions

# 使用测试数据进行推理...
# ...

通过以上各个部分的代码示例和说明,你可以逐步实现Qwen2大模型的微调训练,并在SwanLab上监控训练效果。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消