手记

大模型微调入门:从基础到实践 - Qwen2大模型微调实战指南

概述

大模型微调入门:基于通义千问Qwen2-1.5B-Instruct模型对zh_cls_fudan_news数据集进行文本分类任务微调。本文详细介绍了环境与库安装、数据集准备、模型加载与配置、训练可视化工具集成、完整代码流程与训练以及训练结果展示与模型评估。此过程不仅能够帮助开发者了解如何进行大模型微调,还能应用于实际文本分类任务中。

环境与库安装

在进行大模型微调前,确保你的开发环境已经安装了必要的库。下面,我们首先安装几个关键的Python库:

pip install swanlab modelscope transformers datasets peft pandas accelerate

数据集准备

对于本次微调任务,我们使用zh_cls_fudan_news数据集。数据集旨在用于文本分类任务,包含数千条训练数据,每条数据包含文本内容、类别列表以及真实类标签。数据集可以分为训练和测试集,训练集用于模型微调,测试集用于评估模型性能。

下载与格式转换

首先,下载数据集:

wget https://github.com/xxx/zh_cls_fudan_news/raw/main/train.jsonl -O train.jsonl
wget https://github.com/xxx/zh_cls_fudan_news/raw/main/test.jsonl -O test.jsonl

接下来,使用datasets库读取并准备数据:

import datasets

train_dataset = datasets.load_from_disk('train.jsonl')
test_dataset = datasets.load_from_disk('test.jsonl')

模型加载与配置

我们将使用modelscope下载预训练的Qwen2-1.5B-Instruct模型,并利用transformers库进行微调。

from modelscope import snapshot_download
from transformers import AutoTokenizer, AutoModelForCausalLM

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

训练可视化工具集成

我们将使用swanlabtransformers集成,以便实时监控训练过程。

from swanlab.integration.huggingface import SwanLabCallback

swanlab_callback = SwanLabCallback(
    project="Qwen2-fintune",
    experiment_name="Qwen2-1.5B-Instruct",
    description="使用通义千问Qwen2-1.5B-Instruct模型在zh_cls_fudan-news数据集上微调。",
    config={
        "model": "qwen/Qwen2-1.5B-Instruct",
        "dataset": "huangjintao/zh_cls_fudan-news",
    },
)

完整代码流程与训练

接下来,定义数据预处理逻辑,设置训练参数,启动训练:

def process_func(example):
    # 数据预处理逻辑
    ...

def train():
    accelerator = Accelerator()
    model = accelerator.prepare(model)
    data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer)

    train_dataset = train_dataset.map(
        process_func,
        remove_columns=train_dataset.column_names,
        batched=True,
    )

    test_dataset = test_dataset.map(
        process_func,
        remove_columns=test_dataset.column_names,
        batched=True,
    )

    training_args = TrainingArguments(
        output_dir="./output/Qwen2",
        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=training_args,
        train_dataset=train_dataset,
        eval_dataset=test_dataset,
        data_collator=data_collator,
        callbacks=[swanlab_callback],
    )

    trainer.train()
    accelerator.print("Training completed.")

if __name__ == "__main__":
    train()

训练结果展示与模型评估

训练完成后,我们可以使用测试集评估模型性能,并将结果可视化:

predictions = trainer.predict(test_dataset)

推理与应用

保存训练好的模型以便日后加载和使用:

trainer.save_model("./output/Qwen2/checkpoint-best")

通过上述流程,你已经完成了使用Qwen2-1.5B-Instruct模型在zh_cls_fudan_news数据集上的微调任务,并能够进行模型的推理与应用。

0人推荐
随时随地看视频
慕课网APP