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

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

标签:
杂七杂八
概述

本文提供了一套详尽的指南,从环境配置到具体代码实现,带你入门使用大模型Qwen2-1.5b-Instruct进行文本分类任务的微调。通过安装所需库、准备数据集、加载模型,以及设置微调参数和策略,你将能够实现模型的训练并进行文本分类预测。本文还展示了如何利用swanlab进行训练过程监控,确保训练的透明度与高效性。无论你是机器学习初学者还是有经验的开发者,都能通过本文获取到实用的微调实践技巧。

环境安装

确保Python环境版本为3.8以上,并安装以下所需库:

pip install swanlab modelscope transformers datasets peft accelerate pandas
准备数据集

使用zh_cls_fudan-news数据集进行文本分类任务。数据集下载与格式转换如下:

from datasets import load_dataset

dataset = load_dataset("huangjintao/zh_cls_fudan-news")
train_dataset = dataset['train']
test_dataset = dataset['test']
加载模型

使用modelscope下载Qwen2-1.5b-Instruct模型,并进行加载:

from modelscope import load

model = load('qwen/Qwen2-1.5B-Instruct')
完整代码示例

训练代码

from transformers import TrainingArguments, Trainer, DataCollatorForLanguageModeling
from peft import LoraConfig, get_peft_model

# 定义训练参数
training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    evaluation_strategy='steps',
    eval_steps=500,
    save_steps=500,
    logging_steps=50,
    logging_dir='./logs',
    load_best_model_at_end=True,
    metric_for_best_model='eval_loss',
    greater_is_better=False
)

# 使用PEFT进行增量微调
peft_config = LoraConfig(
    task_type=LoraConfig.TaskType.LM,
    inference_mode=False,
    r=16,
    lora_alpha=32,
    lora_dropout=0.05
)

# 微调模型
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

# 定义数据预处理和训练
data_collator = DataCollatorForLanguageModeling(
    tokenizer=tokenizer,
    mlm=True,
    mlm_probability=0.15
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    data_collator=data_collator
)

trainer.train()

推理代码

# 加载测试数据
test_texts = [
    # 示例文本
    "这是一个测试文本",
]

# 预处理并进行预测
for text in test_texts:
    inputs = tokenizer(text, return_tensors="pt")
    generated_ids = model.generate(
        inputs['input_ids'],
        do_sample=True,
        top_p=0.95,
        max_length=50
    )
    output = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
    print(output)
训练结果演示与推理

在训练结束后,训练结果可以被可视化并评估。通过swanlab集成,可以监控训练过程并展示模型效果。

# 导入swanlab并配置回调
from swanlab.integration.huggingface import SwanLabCallback

# 创建SwanLabCallback实例并集成到Trainer中
swanlab_callback = SwanLabCallback(project="MyProject", experiment_name="MyExperiment")

# 使用SwanLabCallback进行训练
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    data_collator=data_collator,
    callbacks=[swanlab_callback]
)

trainer.train()

训练完成并评估后,可以使用模型进行文本分类预测。示例代码如下:

# 使用模型进行预测
for text in test_texts:
    inputs = tokenizer(text, return_tensors="pt")
    outputs = model(inputs['input_ids'])
    predicted_label = model.config.id2label[outputs.logits.argmax().item()]
    print(f"预测结果: {predicted_label}")
总结

通过上述步骤,我们实现了Qwen2-1.5b-Instruct模型的微调,并进行了文本分类任务的训练和推理。利用swanlab进行训练监控,可以确保训练过程的透明度和可扩展性。此外,通过完整、可运行的代码示例,你可以轻松地复制、运行并验证整个微调流程,提升你的实践能力和开发效率。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消