快速对QWen2.5大模型进行微调

server/2025/2/8 10:56:23/

先看看训练结果:
在这里插入图片描述

目录

前言

在当今人工智能领域,大模型(如LLaMA、GPT等)的微调已成为提升模型性能和适应特定任务的关键技术。LLaMA-Factory是一个强大的工具,可以帮助开发者高效地进行大模型微调。本文将详细介绍如何使用LLaMA-Factory快速进行大模型微调

什么是LLaMA-Factory

LLaMA-Factory是一个开源的工具集,旨在简化大模型微调过程。它提供了丰富的功能和灵活的配置选项,使得即使是初学者也能轻松地进行模型微调LLaMA-Factory支持多种大模型架构,并且集成了数据预处理、模型训练、评估和部署等功能。

安装LLaMA-Factory

首先,你需要安装LLaMA-Factory。你可以通过以下命令使用pip进行安装:

pip install llama-factory

确保你的环境中已经安装了必要的依赖项,如PyTorch和Transformers。

准备数据集

微调大模型的第一步是准备数据集。数据集应该包含输入和输出的配对,格式可以是JSON或CSV。以下是一个简单的JSON数据集示例:

[{"input": "你好,最近过的好吗?", "output": "我最近过得还好,谢谢关心。"},{"input": "你有几个孩子?", "output": "我有三个儿子和一个女儿。"}
]

将你的数据集保存为data.json文件。

配置微调参数

接下来,你需要配置微调参数。LLaMA-Factory提供了一个配置文件模板,你可以根据需要进行修改。以下是一个示例配置文件config.yaml:

model:name: "meta-llama/Llama-2-7b-hf"tokenizer: "meta-llama/Llama-2-7b-hf"data:train_file: "data.json"validation_file: "data.json"max_length: 512training:output_dir: "./results"learning_rate: 2e-5per_device_train_batch_size: 4per_device_eval_batch_size: 4num_train_epochs: 3weight_decay: 0.01evaluation_strategy: "epoch"

运行微调脚本

使用LLaMA-Factory提供的脚本进行微调。以下是一个示例脚本finetune.py:

python">from llama_factory import LLaMAFactory# 加载配置文件
config_path = "config.yaml"# 创建LLaMAFactory实例
factory = LLaMAFactory(config_path)# 进行微调
factory.finetune()

将上述脚本保存为finetune.py,然后运行它:

python finetune.py

评估和保存模型

微调完成后,你可以评估模型的性能,并保存微调后的模型。以下是一个示例脚本evaluate_and_save.py:

python">from llama_factory import LLaMAFactory# 加载配置文件
config_path = "config.yaml"# 创建LLaMAFactory实例
factory = LLaMAFactory(config_path)# 评估模型
factory.evaluate()# 保存模型
factory.save_model("./fine_tuned_llama")

将上述脚本保存为evaluate_and_save.py,然后运行它:

python evaluate_and_save.py

使用微调后的模型

加载并使用微调后的模型进行推理。以下是一个示例脚本inference.py:

python">from transformers import AutoModelForCausalLM, AutoTokenizermodel_name = "./fine_tuned_llama"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)prompt = "你好,最近过的好吗?"
messages = [{"role": "system", "content": "你是一个年过七旬的男性老人,性格内向,有三个儿子,一个女儿,他们经常不在身边"},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)generated_ids = model.generate(**model_inputs,max_new_tokens=512
)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)

将上述脚本保存为inference.py,然后运行它:

python inference.py

可视化微调大模型

运行下面命令,启动webui可视化页面:

 llamafactory-cli webui

会自动打开如下界面
在这里插入图片描述
选择需要微调大模型和相应文件路径:
在这里插入图片描述
选择预先准备的数据集:
在这里插入图片描述
设置训练参数:
在这里插入图片描述
点击开始按钮,开始训练模型:
在这里插入图片描述
正在训练
在这里插入图片描述
训练完成:
在这里插入图片描述
测试训练好的模型,选择之前训练好的模型,选择chat,提问一些测试问题:
在这里插入图片描述
在这里插入图片描述
可以看到大模型的生成的内容已经发生改变。

总结

通过本文的介绍,可以快速使用LLaMA-Factory进行大模型微调LLaMA-Factory提供了一套完整的工具和流程,使得微调过程更加简单和高效。希望这篇文章对你有所帮助,让你在大模型微调的道路上更加顺利!


http://www.ppmy.cn/server/165927.html

相关文章

OpenCV4.8 开发实战系列专栏之 30 - OpenCV中的自定义滤波器

欢迎大家学习OpenCV4.8 开发实战专栏,长期更新,不断分享源码。 专栏代码全部基于C 与Python双语演示。 送相关学习资料, V: OpenCVXueTang_Asst 本文关键知识点:OpenCV中的自定义滤波器 图像卷积最主要功能有图像模糊、锐化、梯…

c++ 面试题

C 面试题通常涵盖基础知识、面向对象编程、内存管理、模板、STL(标准模板库)等方面。以下是一些常见的 C 面试题及其简要解答,供你参考: 1. C 基础知识 1.1 C 和 C 的区别是什么? C 是 C 的超集,支持面向…

【HarmonyOS NEXT】设备显示白屏 syswarning happended in XXX

【HarmonyOS NEXT】设备显示白屏 syswarning happended in XXX 一、问题背景: 运行启动鸿蒙应用项目,设备显示白屏,IDE左下角提示syswarning happended in XXX设备名。 点击Jump to Log提示如下: Device info:HUAWEI Mate 60 …

基于keepalived+GTID半同步主从复制的高可用MySQL集群

文章目录 项目架构图项目名称项目环境项目描述ip地址规划项目步骤一.安装好8台全新的centos7.9的系统,关闭firewalld和selinux,配置每台主机的静态ip地址,设置每台主机对应的主机名。1、关闭firewalld2.关闭seLinux3.配置每台主机静态ip地址4…

使用 Three.js 实现火焰效果

大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…

美团Leaf分布式ID生成算法深度解析与源码实现

美团Leaf分布式ID生成算法深度解析与源码实现 前言 在分布式系统中,全局唯一ID的生成是核心基础服务。美团点评(现美团)针对Snowflake算法在运维场景中的痛点,研发了Leaf分布式ID生成系统。本文将从设计原理、源码实现、优化策略…

ASP.NET Core对JWT的封装

目录 JWT封装 [Authorize]的注意事项 JWT封装 NuGet 库 |Microsoft.AspNetCore.Authentication.JwtBearer 9.0.1https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearer 配置JWT节点,节点下创建SigningKey、ExpireSeconds两个配置项&am…

4-kafka消费端之分区分配策略

文章目录 概述分区分配策略RangeAssignor分配策略RoundRobinAssignor分配策略StickyAssignor自定义分区分配策略 总结 概述 我们知道kafka的topic可以被分成多个分区,消费者在集群模式下消费时一个消费组内的每个消费者实例只能消费到一个分区的消息,那…