基于LLama_factory的Qwen2.5大模型的微调笔记

Qwen2.5大模型微调记录

  • LLama-facroty
  • Qwen2.5 模型下载。
    • huggingface 下载方式
    • Modelscope 下载方式
  • 数据集准备
  • 模型微调
    • 模型训练
    • 模型验证及推理
    • 模型导出
  • 部署推理
    • vllm 推理
    • Sglang 推理

LLama-facroty

  1. 根据git上步骤安装即可,要求的软硬件都装上。
    llama-factory
  2. 运行llama-factory:
    export GRADIO_SERVER_PORT=6006    # 可以修改端口号。
    export GRADIO_SERVER_NAME=*.*.*.* # 可以修改服务地址
    或者可以通过修改interface.py文件的run_web_ui()函数
    llamafactory-cli webui  # 运行llama-factory
    运行成功可以看到一个URL,点击即可跳转到页面端
    

Qwen2.5 模型下载。

huggingface 下载方式

qwen2.5模型地址
huggingface地址
modelscope地址

  1. 安装依赖
    pip install -U huggingface_hub
  2. 模型下载
    export HF_HUB_ENABLE_HF_TRANSFER=0
    export HF_ENDPOINT=https://hf-mirror.com
    huggingface-cli download --resume-download --local-dir-use-symlinks False Qwen/Qwen2.5-7B-Instruct --local-dir /your_model_save_path

Modelscope 下载方式

  1. 安装依赖
    pip install modelscope
  2. 使用Python脚本
from modelscope import snapshot_downloadcache_directory = '/your_model_save_path'
model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct', cache_dir=cache_directory)

执行脚本即可

数据集准备

  • llama-factory 支持 alpaca 格式和 sharegpt
    格式的数据集,具体要求可以看llama-factory数据集格式要求
  • 我这里采用的是sharegpt格式的数据集,比如我做一个信息抽取。
[	{"conversations": [{"from": "human","value": "(这里替换成你的prompt)"},{"from": "gpt","value": "(这里是你的标注的输出)"}],"system": "你是一个信息抽取助手。你的任务是从给定的文本中提取特定的信息,并以结构化的格式呈现。提取的信息应准确、简洁且与查询相关。","tools": ""},{...}
]
  • 在你的数据集存放位置的同级目录下,一定要有一个dataset_info.json,这个里面是你自定义数据集的描述,可以包括你的多个数据集,供llama-factory识别。如果你采用的是sharegpt格式,dataset_info.json 格式如下。file_name字段填写你的数据路径。
{"my_dataset1": {"file_name": "/data/llama_factory/info_extract.json","formatting": "sharegpt","columns": {"messages": "conversations","system": "system","tools": "tools"},"tags": {"role_tag": "from","content_tag": "value","user_tag": "human","assistant_tag": "gpt"}},"my_dataset2": {"file_name":"/data/llama_factory/info_extract2.json","formatting": "sharegpt","columns": {"messages": "conversations","system": "system","tools": "tools"},"tags": {"role_tag": "from","content_tag": "value","user_tag": "human","assistant_tag": "gpt"}}}

模型微调

模型训练

  1. 我这里选择的LORA-SFT
    图中模型名称选择你微调的模型类别
    模型路径填写你下载的离线模型路径。
    微调方法选择 lora
    训练阶段 设置train 里面参数即可。
    训练方式选择SFT
    数据路径选择你数据集路径,选择之后,在数据集里面就可以选择你训练的数据集了。
    其它参数根据自己需求和资源进行调整。
    微调的时候 检查点路径不填写

在这里插入图片描述
点击开始训练,模型就开始训练,可以观察损失变化。
模型的输出目录在你的 llama-factory 项目下的saves文件夹中。
在这里插入图片描述

模型验证及推理

模型验证 - 点击evaluate&predict。
首先在 检查点路径选择你保存的某个checkpoint
然后添加你的验证集路径,选择验证集,点击开始。
到输出目录即可查看结果。
在这里插入图片描述
模型推理 - 点击chat。
首先在 检查点路径选择你保存的某个checkpoint。
然后选择推理引擎、数据类型,点击加载模型即可对话。
在这里插入图片描述

模型导出

模型导出-点击export
选择你验证过的最好的checkpoint.
设置相应的参数,
导出量化模型,需要填写一个量化数据集路径(验证集)。
导出设备如果是GPU 选择auto
导出的模型是已经merge后的模型。直接加载使用即可。

部署推理

vllm 推理

from transformers import AutoTokenizer
from vllm import LLM, SamplingParamsclass VLLMInfer:def __init__(self, model_path):self.model_path = model_pathself.llm, self.tokenizer = self.vllm_load_model()def vllm_load_model(self):tokenizer = AutoTokenizer.from_pretrained(self.model_path)llm = LLM(model=model_path,gpu_memory_utilization=0.9,trust_remote_code=True,tensor_parallel_size=2  # GPU数量)return llm, tokenizer# 批次def inference(self, prompts, system):texts = []for prompt in prompts:messages = [{"role": "system", "content": system},{"role": "user", "content": prompt}]text = self.tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)texts.append(text)sampling_params = SamplingParams(temperature=0.1,top_p=0.7,repetition_penalty=1.0,max_tokens=200,)outputs = self.llm.generate(texts, sampling_params)result_list = []for output in outputs:generated_text = output.outputs[0].textresult_list.append(generated_text.replace("\n", "").replace("<|im_end|>", '').replace("json", ""))return result_listif __name__ == '__main__':model_path = "your_model_path"qwen_chat = VLLMInfer(model_path)system = "你是一个智能的助手."test_texts = ['', '']result = qwen_chat.inference(test_texts, system)print(result)

Sglang 推理

from transformers import AutoTokenizer
import sglang as sgl
import timeclass SgLangInfer:def __init__(self, model_path):self.model_path = model_pathself.llm, self.tokenizer = self.load_model()def load_model(self):tokenizer = AutoTokenizer.from_pretrained(self.model_path,trust_remote_code=True,clean_up_tokenization_spaces=False)llm = sgl.Engine(model_path=self.model_path,mem_fraction_static=0.85,tp_size=2,max_total_tokens=9000,enable_p2p_check=True  # 解决4090 p2p之间通信传输问题)return llm, tokenizerdef inference(self, prompts, system):texts = []for prompt in prompts:messages = [{"role": "system", "content": system},{"role": "user", "content": prompt}]text = self.tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)texts.append(text)sampling_params = {"temperature": 0,"top_p": 1,"repetition_penalty": 1.0, "max_new_tokens": 200}result_list = []response = self.llm.generate(texts, sampling_params)# print(f"response:{response}")for res in response:result_list.append(res['text'])return result_list

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程

目录 ⛳️推荐 前言 1. 安装docker与docker-compose 2. 启动容器运行镜像 3. 本地访问测试 4.安装内网穿透 5. 创建公网地址 6. 创建固定公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

Spark——安装步骤详细教程

1、安装步骤 1、上传 cd /opt/modules 2、解压 tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs 3、重命名 cd /opt/installs mv spark-3.1.2-bin-hadoop3.2 spark-local 4、创建软链接 ln -s spark-local spark 5、配置环境变量&#xff1a; vi /etc/prof…

Vue第一篇:组件模板总结

前言 本文希望读者有一定的Vue开发经验&#xff0c;样例采用vue中的单文件组件&#xff0c;也是我的个人笔记&#xff0c;欢迎一起进步 必须有根元素 这是一个最简单的vue单文件组件&#xff0c;<template></template>被称为模板&#xff0c;模板中必须有一个根元素…

MacOS通过X11转发远程运行virt-manager进行虚机分配

今天需要通过本地macbook机器连接远程物理机&#xff0c;执行虚机分配&#xff0c;现有文档仅提供window环境安装&#xff0c;如下整理Mac环境下的安装步骤 操作篇 前提条件 支持x11转发的terminal&#xff0c;我本地使用iTerm2&#xff1b;本地安装XQuartz&#xff0c;作为…

flowable流程图详细绘制教程

文章目录 前言一、flowable是什么&#xff1f;回答下之前的问题 二、flowable-modeler使用1. 使用步骤2.开始绘制弄一个请假的流程 三 加载该流程总结 前言 flowable有些晦涩难懂的东西&#xff1a; 我最开始接触的时候,还是用的activity,当时觉得好复杂,那么这次经过我自己在…

C/C++链接数据库(MySQL)(超级详细)

目录 1.进入MySQL后&#xff0c;用mysql数据库 1.1查看一看user表 ​编辑1.2从user拿出来User和Host 1.3创建一个用户表&#xff0c;只允许本地&#xff08;想要远端链接就把localhost改成%&#xff09; 1.4再查一下用户就有了&#xff08;connector&#xff09; 1.5测试…

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…

msvcr100.dll丢失的解决方法,六种解决msvcr100.dll丢失的方法

在使用Windows操作系统的过程中&#xff0c;用户可能会遇到各种各样的问题&#xff0c;其中之一就是“msvcr100.dll丢失”的错误提示。这个问题通常出现在尝试运行某些软件或游戏时&#xff0c;由于缺少这个重要的动态链接库文件&#xff0c;导致程序无法正常启动。本文将详细介…

排序(Java数据结构)

1. 排序的概念及引用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。(所有的排序都是默认从小到大排序) 稳定性&#xff1a;假定在待排序的记录序列中&#xff…

VH6501国产替代同星TH7011干扰仪?

文章目录 同星TH7011干扰仪VH6501有使用过TH7011的么,可以在评论区讨论一下~ 同星TH7011干扰仪 干货分享 | 一文详解同星CAN总线干扰仪的使用方法 VH6501

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

目录遍历漏洞-CVE-2021-41773

目录 简介 原理 例子 Apache路径穿越漏洞 环境搭建 漏洞原理 漏洞利用 简介 目录遍历漏洞&#xff08;也称为路径遍历漏洞&#xff09;是一种由于Web服务器或Web应用程序对用户输入的文件名称的安全性验证不足而导致的安全漏洞。 原理 目录遍历漏洞允许攻击者在未授权…

.NET9 - 新功能体验(三)

书接上回&#xff0c;我们继续来聊聊.NET9和C#13带来的新变化。 01、Linq新方法 CountBy 和 AggregateBy 引入了新的方法 CountBy 和 AggregateBy后&#xff0c;可以在不经过GroupBy 分配中间分组的情况下快速完成复杂的聚合操作&#xff0c;同时方法命名也非常直观&#xff0…

Android蓝牙架构,源文件目录/编译方式学习

Android 版本 发布时间 代号&#xff08;Codename&#xff09; Android 1.0 2008年9月23日 无 Android 1.1 2009年2月9日 Petit Four Android 1.5 2009年4月27日 Cupcake Android 1.6 2009年9月15日 Donut Android 2.0 2009年10月26日 Eclair Android 2.1 2…

YOLO-World解读:零基础学习开放世界模型

文章目录 一、摘要二、引言相关工作方法预训练公式模型架构可重新参数化的视觉-语言路径聚合网络&#xff08;RepVL-PAN&#xff09; 3.4 预训练方案 实验YOLO-World: 利用多样化数据集进行开放词汇对象检测的预训练方法YOLO-World: LVIS数据集上的零样本性能评估YOLO-World: 预…

信创改造 - TongRDS 安装方式之控制台安装【Window】

安装前准备 安装 jdk1.8 即可&#xff0c;并配上 环境变量 安装 1&#xff09;解压缩 2&#xff09;启动 进入安装路径的console\bin目录&#xff0c;在cmd命令行窗口运行console.bat 输入序号 1 如果想查看运行状态&#xff0c;可以重新执行 console.bat&#xff0c;然后输…

志愿者小程序源码社区网格志愿者服务小程序php

志愿者服务小程序源码开发方案&#xff1a;开发语言后端php&#xff0c;tp框架&#xff0c;前端是uniapp。 一 志愿者端-小程序&#xff1a; 申请成为志愿者&#xff0c;志愿者组织端进行审核。成为志愿者后&#xff0c;可以报名参加志愿者活动。 志愿者地图&#xff1a;可以…

Node.js的下载与安装(支持各种新旧版本)

目录 1、node官网 2、node软件下载 3、软件安装&#xff08;完整版&#xff09; 1、node官网 Node.js — Download Node.jshttps://nodejs.org/en/download/package-manager 2、node软件下载 按照下图进行选择node版本&#xff08;真心推荐16/18&#xff0c;而是尽量是LTS…

对于相对速度的重新理解 - 2

回到先前说的&#xff0c;先令真空光速为标准光速&#xff0c; 光子的绝对速度 范围&#xff0c; 物质粒子的 范围&#xff0c; 这样的话&#xff0c;我们就可以根据 和 &#xff0c;把速度分成3个段&#xff0c; 这样就可以出现速度和它的负值&#xff0c;也就是速度的矢量具…

大模型系列11-ray

大模型系列11-ray PlasmaPlasmaStore启动监听处理请求 ProcessMessagePlasmaCreateRequest请求PlasmaCreateRetryRequest请求PlasmaGetRequest请求PlasmaReleaseRequestPlasmaDeleteRequestPlasmaSealRequest ObjectLifecycleManagerGetObjectSealObject ObjectStoreRunnerPlas…