您当前的位置:首页 > 百宝箱

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

2024-11-05 14:42:31 作者:石家庄人才网

概述

---

Qwen2大模型微调入门实战详解(通俗易懂)

-----------------------

本文将带您全面了解并实操如何利用Qwen2大模型进行微调,包括环境安装、数据集准备、模型加载与训练等关键步骤。无论您是初学者还是资深从业者,都能通过本文轻松掌握微调技术。我们将一步步指导您如何配置Python环境、准备数据集、加载模型并设定训练参数,集成SwanLab工具实现可视化训练过程。通过本文的指引,您将收获一套完整的微调实践方案,包含示例代码和实验链接,助您有效提升模型性能并解决特定任务。

一、环境安装

------

Python环境要求

请确保您的Python环境版本在3.8及以上,并已安装CUDA驱动。以下是需要安装的Python库及其安装命令:

```bash

pip install swanlab modelscope transformers datasets peft accelerate pandas

```

请注意:本教程在以下版本中进行过测试: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数据集,您可以在魔搭社区下载train.jsonl和test.jsonl文件。为了顺利进行微调,我们需要将原始格式的数据集转换为适合微调的格式。

数据集转换步骤

从魔搭社区下载train.jsonl和test.jsonl文件。接下来,编写脚本将数据集从原始格式转换为所需的格式。转换脚本示例如下:

```python

def dataset_jsonl_transfer(origin_path, new_path):

messages = []

with open(origin_path, "r", encoding="utf-8") as file:

for line in file:

data = json.loads(line)

text = data["text"] 输入文本内容

category = data["category"] 文本所属类别

---

模型加载之旅:从Qwen2-1.5B-Instruct到SwanLab监控

在完成了环境安装这一重要步骤之后,我们即将踏上加载模型的征途。今天,我将向您介绍如何使用modelscope下载Qwen2-1.5B-Instruct模型,并将其加载到transformers库中。

一、模型下载

使用modelscope这个强大的工具来下载Qwen2-1.5B-Instruct模型:

```python

from modelscope import snapshot_download

model_dir = snapshot_download("qwen/Qwen2-1.5B-Instruct", cache_dir="./", revision="master")

```

上述代码将从modelscope中下载Qwen2-1.5B-Instruct模型,并将其保存在指定的目录下。

二、模型加载

接下来,我们将把模型加载到transformers库中,以便进行后续的操作。

```python

from transformers import AutoTokenizer, AutoModelForCausalLM

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)

model.enable_input_require_grads()

```

三、配置训练可视化工具

为了更加直观地监控训练过程,我们可以使用SwanLab进行监控和可视化。SwanLab提供了丰富的功能,帮助我们更好地了解模型的训练状态。

```python

from swanlab.integration.huggingface import SwanLabCallbacks

swanlab_callback = SwanLabCallback(...) 根据您的需求配置SwanLabCallback

```

在训练过程中,通过SwanLab,我们可以实时查看模型的训练进度、损失函数值等信息。

四、代码结构概览

在正式训练之前,我们需要确保数据集已经准备好并转换为正确的格式。以下是一个简单的数据集预处理函数的示例,用于将原始数据集转换为适合模型训练的形式。

```python

def dataset_jsonl_transfer(origin_path, new_path):

messages = []

with open(origin_path, "r", encoding="utf-8") as file:

for line in file:

data = json.loads(line) 加载每一行数据为json格式

text = data["text"] 获取输入的文本内容

category = data["category"] 获取潜在的分类选项

output = data["output"] 获取期望的输出结果(即文本的正确类型)

messages.append({ 构建新的数据结构,包含指令和文本内容等必要信息

"instruction": "请基于输入的文本和给定的分类选项,判断文本内容的正确类型。", 指令描述任务要求

雕琢训练流程:迈向卓越的函数与代码实践

训练函数概览

让我们先来深入理解一下`process_func`这个函数。它是数据处理的核心,负责将原始数据转化为模型训练所需的格式。在这个函数中,我们首先对指令、输入和输出数据进行处理,然后使用tokenizer进行编码,生成输入ID、注意力掩码和标签。这个流程就像是为模型训练准备一顿丰盛的宴席,让模型在数据的大餐中尽情享受。

训练代码精彩解读

接下来,我们进入训练代码的世界。我们从远程下载了预训练的Qwen模型及其tokenizer,并准备好了用于因果语言模型的训练设备。然后,我们对数据集进行了处理,确保数据以模型训练所需的格式存在。这个过程就像是为模型的学习之旅铺设一条平坦的道路。

接下来,我们设定了训练参数,并对模型进行了配置。这个过程就像是调整模型的“胃口”,让它能够更好地吸收数据中的营养。我们还使用了一种名为Lora的配置方法,对模型的某些部分进行了特别设置,以提高其性能。

然后,我们使用了PEFT模型,这是一种强大的模型优化技术,让模型在训练过程中更加稳定、高效。接着,我们设定了训练参数,包括批次大小、学习率等,然后开始模型的训练之旅。这个过程就像是点燃模型的“学习之火”,让它开始从数据中汲取知识。

我们还使用了一个名为SwanLab的回调机制来监控和记录模型的训练过程。这个机制就像是模型的“学习助手”,帮助我们更好地了解模型的训练状态。

这段代码是对预训练模型进行微调的一个精彩展示,涵盖了从数据准备、模型配置、训练参数设定到模型训练的整个过程。它就像是一篇关于模型训练的精彩乐章,让我们领略到深度学习领域的魅力与潜力。

---

训练启动配置已经准备就绪:

```python

config = {

"model": "qwen/Qwen2-1.5B-Instruct",

"dataset": "huangjintao/zh_cls_fudan-news",

}

```

接下来,我们将启动训练流程。为此,我们创建了一个训练器(Trainer),它将使用指定的模型、参数、训练数据集以及数据合并器(DataCollatorForSeq2Seq)。我们也加入了SwanLab的回调功能以实时监控训练过程和结果。训练器开始执行训练任务。

训练结果展示

通过SwanLab,我们可以直观地查看训练过程和结果。这包括训练损失的下降情况以及epoch的迭代进度等。

模型推理

一旦训练结束,模型将被保存,并可以用于推理任务。我们需要加载预训练好的模型和分词器(tokenizer)。然后,就可以使用模型进行推理了。下面是加载模型和分词器的代码示例:

```python

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)

```

[相关链接]

完整代码: 可以在Github仓库找到完整的代码示例。

实验日志: 通过SwanLab可以详细了解训练过程和结果。

数据集: 可以直接从魔搭社区下载所需的zh_cls_fudan-news数据集。

SwanLab介绍: 这是一个用于监控和可视化训练过程的工具。

在进行微调时,请确保遵守所有开源许可协议,尊重知识产权。让我们期待模型在训练后的出色表现!

---

以上内容保持了原文的风格特点,同时进行了适当的调整和润色,使其更加生动、流畅。

版权声明:《Qwen2大模型微调入门实战(附完整代码)(非常详细)零基础入门到精通,收藏这一篇就够了_2》来自【石家庄人才网】收集整理于网络,不代表本站立场,所有图片文章版权属于原作者,如有侵略,联系删除。
https://www.ymil.cn/baibaoxiang/27366.html