llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署

文章目录

    • 简介
    • 支持的模型列表
    • 2. 添加自定义数据集
    • 3. lora 微调
    • 4. 大模型 + lora 权重,部署
      • 问题
    • 参考资料

简介

文章列表:

  1. llama-factory SFT系列教程 (一),大模型 API 部署与使用
  2. llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署
  3. llama-factory SFT系列教程 (三),chatglm3-6B 命名实体识别实战

支持的模型列表

模型名模型大小默认模块Template
Baichuan27B/13BW_packbaichuan2
BLOOM560M/1.1B/1.7B/3B/7.1B/176Bquery_key_value-
BLOOMZ560M/1.1B/1.7B/3B/7.1B/176Bquery_key_value-
ChatGLM36Bquery_key_valuechatglm3
DeepSeek (MoE)7B/16B/67Bq_proj,v_projdeepseek
Falcon7B/40B/180Bquery_key_valuefalcon
Gemma2B/7Bq_proj,v_projgemma
InternLM27B/20Bwqkvintern2
LLaMA7B/13B/33B/65Bq_proj,v_proj-
LLaMA-27B/13B/70Bq_proj,v_projllama2
Mistral7Bq_proj,v_projmistral
Mixtral8x7Bq_proj,v_projmistral
OLMo1B/7Batt_projolmo
Phi-1.5/21.3B/2.7Bq_proj,v_proj-
Qwen1.8B/7B/14B/72Bc_attnqwen
Qwen1.50.5B/1.8B/4B/7B/14B/72Bq_proj,v_projqwen
StarCoder23B/7B/15Bq_proj,v_proj-
XVERSE7B/13B/65Bq_proj,v_projxverse
Yi6B/9B/34Bq_proj,v_projyi
Yuan2B/51B/102Bq_proj,v_projyuan

参考自:https://zhuanlan.zhihu.com/p/689333581

  • 默认模块 作为 --lora_target 参数的默认值,也可使用 --lora_target all 参数指定全部模块;

  • –template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Chat)模型请务必使用对应的模板。

项目所支持模型的完整列表请参阅 constants.py。

2. 添加自定义数据集

LLaMA-Factory 数据集说明,参考该文件给出的说明,在dataset_info.json 文件中添加配置信息;

参考如下数据集格式,定义自定义数据集;

[{"instruction": "用户指令(必填)","input": "用户输入(选填)","output": "模型回答(必填)","system": "系统提示词(选填)","history": [["第一轮指令(选填)", "第一轮回答(选填)"],["第二轮指令(选填)", "第二轮回答(选填)"]]}
]

新数据集内容如下:
diy.json

[{"instruction": "你是谁?","input": "","output": "我是Qwen,edit by JieShin.","history": []},{"instruction": "你能帮我干些什么?","input": "","output": "我能和你互动问答,我的其他功能正在开发中。","history": []}
]

添加自定义数据集的步骤如下:

  1. diy.json 文件保存到 LLaMA-Factory/data 文件夹下;

在这里插入图片描述

  1. 在 dataset_info.json 文件中,配置数据集
    首先计算 diy.json 文件的sha1sum, sha1sum diy.json
    在这里插入图片描述
    vim dataset_info.json 添加自定义数据集的配置信息, 把 diy.json 文件的sha1 值添加到文件中,"diy" 为该数据集名;
    在这里插入图片描述

3. lora 微调

使用配置好的 diy 数据集进行模型训练;

--model_name_or_path qwen/Qwen-7B,只写模型名,不写绝对路径可运行成功,因为配置了export USE_MODELSCOPE_HUB=1

查看 配置是否生效,输出1 即为配置成功:
echo $USE_MODELSCOPE_HUB

在这里插入图片描述

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
--stage sft \
--do_train \
--model_name_or_path qwen/Qwen-7B \
--dataset diy \
--template qwen \
--finetuning_type lora \
--lora_target c_attn \
--output_dir /mnt/workspace/llama_factory_demo/qwen/lora/sft \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_strategy epoch \
--learning_rate 5e-5 \
--num_train_epochs 50.0 \
--plot_loss \
--fp16

训练完成的lora 权重,保存在下述文件夹中;
--output_dir /mnt/workspace/llama_factory_demo/qwen/lora/sft

模型的训练结果如下:
在这里插入图片描述

lora 训练后的权重如下图所示:
在这里插入图片描述

4. 大模型 + lora 权重,部署

由于llama-factory 不支持 qwen 结合 lora 进行推理,故需要把 lora 权重融合进大模型成一个全新的大模型权重;

可查看如下链接,了解如何合并模型权重:merge_lora GitHub issue

下述是合并 lora 权重的脚本,全新大模型的权重保存到 export_dir 文件夹;

CUDA_VISIBLE_DEVICES=0 python src/export_model.py \--model_name_or_path qwen/Qwen-7B \--adapter_name_or_path /mnt/workspace/llama_factory_demo/qwen/lora/sft/checkpoint-50 \--template qwen \--finetuning_type lora \--export_dir /mnt/workspace/merge_w/qwen \--export_size 2 \--export_legacy_format False

使用融合后到大模型进行推理,model_name_or_path 为融合后的新大模型路径

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python src/api_demo.py \--model_name_or_path /mnt/workspace/merge_w/qwen \--template qwen \--infer_backend vllm \--vllm_enforce_eager \
~                             

模型请求脚本

curl -X 'POST' \'http://0.0.0.0:8000/v1/chat/completions' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"model": "string","messages": [{"role": "user","content": "你能帮我做一些什么事情?","tool_calls": [{"id": "call_default","type": "function","function": {"name": "string","arguments": "string"}}]}],"tools": [{"type": "function","function": {"name": "string","description": "string","parameters": {}}}],"do_sample": true,"temperature": 0,"top_p": 0,"n": 1,"max_tokens": 128,"stream": false
}'

模型推理得到了和数据集中一样的结果,这说明 lora 微调生效了;
在这里插入图片描述

以为设置了 "stop": "<|endoftext|>",模型会在遇到结束符自动结束,但模型依然推理到了最长的长度后结束,设置的 stop 并没有生效;

在这里插入图片描述

llama-factory的作者表示还没有支持stop,万一未来支持了stop功能,大家可以关注这个issue support “stop” in api chat/completions #3114

问题

虽然设置了 "temperature": 0 , 但是模型的输出结果依然变动很大,运行3-4次后,才出现训练数据集中的结果;

参考资料

  • api 参数列表
  • 使用LLaMa-Factory简单高效微调大模型
    展示了支持的大模型列表;

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

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

相关文章

Day01——NestJS学习之了解、安装、运行

什么是 Nest.js&#xff1f; NestJs 官方简介: Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力&#xff0c;使用并完全支持 TypeScript &#xff08;仍然允许开发者使用纯 JavaScript 进行开发&#x…

leetcode:739.每日温度/496.下一个更大元素

单调栈的应用&#xff1a; 求解当前元素右边比该元素大的第一个元素&#xff08;左右、大小都可以&#xff09;。 单调栈的构成&#xff1a; 单调栈里存储数组的下标&#xff1b; 单调栈里的元素递增&#xff0c;求解当前元素右边比该元素大的第一个元素&#xff1b;元素递…

【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 成员变量&#xff08;实例变量&#xff09;类变量&#xff08;静态变量&#xff09;定义方式静态变量的使用场景 成员变量&#xff08;实例变量&#xff09; 成员变量声明在一个类中&#xff0c;但在方法、构造…

【opencv】示例-videocapture_openni.cpp 深度数据获取和处理的示例

该代码是一个与使用OpenCV进行深度传感器捕获和处理相关的程序的一部分。主要功能包括处理Kinect或XtionPRO等深度传感器数据&#xff0c;解析命令行参数&#xff0c;打开视频捕获设备&#xff0c;以及在GUI上显示深度图&#xff0c;彩色图像&#xff0c;和红外图像等。代码中使…

linux 自定义快捷指令(docker

vi /root/.bashrc alias disdocker images alias dpsdocker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 保存退出后使用sourece /root/.bashrc 让其立即生效 sourece /root/.bashrc

byobu

byobu 终端多路复用器 一、byobu 安装二、byobu 使用三、其他终端多路复用器四、ssh byobu 远程协作 系统环境: linux(ubuntu,debian,kali) 一、byobu 安装 byobu 是包装过的tmux #sudo apt install tmux sudo apt install byobubyobu二、byobu 使用 创建窗口: Ctrl a c…

HashMap的扩容看这一篇足够

在Java中&#xff0c;对于HashMap这样的实现&#xff0c;put方法是用来将一个键值对插入到Map中的核心方法。以下是HashMap类中put方法的大致执行流程&#xff1a; 计算Hash值&#xff1a; 首先&#xff0c;put方法会接收一个键&#xff08;Key&#xff09;和一个值&#xff0…

攻防世界13-simple_php

13-simple_php <?php show_source(*__FILE__*);//高亮文件 include("config.php");//文件包含在内 $a$_GET[a];//获得a $b$_GET[b];//获得b if($a0 and $a){ //判断a是否满足条件echo $flag1; //满足就输出flag1 } if(is_numeric($b)){ //判断b的条件&#x…

Python | Leetcode Python题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; class Solution:def removeDuplicates(self, nums: List[int]) -> int:if not nums:return 0n len(nums)fast slow 1while fast < n:if nums[fast] ! nums[fast - 1]:nums[slow] nums[fast]slow 1fast 1return slow

Git可视化工具 - 推荐

概述 Git版本管理工具是我们日常开发中常用的工具&#xff0c;熟练使用它可以提高我们的工作效率。 当然老司机基本使用命令行的方式进行操作&#xff0c;新手可借助可视化工具来进行过渡&#xff0c;命令行与可视化工具结合使用来加深对Git的熟悉程度。 下面推荐两个较受欢迎…

MySQL 试图

视图功能在 5.0 以后的版本启用 视图是一张虚表。数据表确实包含了具体数据并且保存到硬盘中的实表。视图使用数据检索语句动态生 成的一张虚表。每一次数据服务重启或者系统重启之后&#xff0c;在数据库服务启动期间&#xff0c;会使用创建视图的语 句重新生成视图中的数据&…

BERT论文解读及情感分类实战

文章目录 简介BERT文章主要贡献BERT模型架构技术细节任务1 Masked LM&#xff08;MLM&#xff09;任务2 Next Sentence Prediction (NSP)模型输入 下游任务微调GLUE数据集SQuAD v1.1 和 v2.0NER 情感分类实战IMDB影评情感数据集数据集构建模型构建超参数设置训练结果注意事项 简…

学习Rust的第三天:猜谜游戏

基于Steve Klabnik的《The Rust Programming Language》一书。今天我们在rust中建立一个猜谜游戏。 Introduction 介绍 We will build a game that will pick a random number between 1 to 100 and the user has to guess the number on a correct guess the user wins. 我们将…

Nginx内存池相关源码剖析(六)外部资源释放和内存池销毁

ngx_destroy_pool函数 先执行回调函数释放所有的外部资源&#xff0c;然后free释放所有的大块内存和小块内存。 // 释放外部资源&#xff0c;销毁内存池 void ngx_destroy_pool(ngx_pool_t *pool) {ngx_pool_t *p, *n;ngx_pool_large_t *l;ngx_pool_cleanup_t *…

用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本

在实际项目中&#xff0c;从Kafka到HDFS的数据是每天自动生成一个文件&#xff0c;按日期区分。而且Kafka在不断生产数据&#xff0c;因此看看kettle是不是需要时刻运行&#xff1f;能不能按照每日自动生成数据文件&#xff1f; 为了测试实际项目中的海豚定时调度从Kafka到HDF…

【计算机网络】常用编码方式+例题(曼彻斯特编码、差分曼彻斯特编码...)

常用编码方式例题 常用编码方式练习画出四种编码20221题342015题342013题34 常用编码方式 练习 画出四种编码 20221题34 这个题目的考察是差分曼彻斯特编码。 差分曼彻斯特编码在每个码元的中间时刻电平都会发生跳变。与曼彻斯特编码不同的是&#xff1a;电平的跳变仅代表时钟…

C++ ─── 操作符重载和赋值重载

目录 赋值运算符重载 运算符重载 赋值运算符重载&#xff08;赋值重载operator&#xff09; 前置和后置重载 赋值运算符重载 运算符重载 C为了增强代码的可读性引入了运算符重载 &#xff0c; 运算符重载是具有特殊函数名的函数 &#xff0c;也具有其返回值类型&#xff0c…

SQL Server 存储函数(funGetId):唯一ID

系统测试时批量生成模拟数据&#xff0c;通过存储函数生成唯一ID。 根据当前时间生成唯一ID&#xff08;17位&#xff09; --自定义函数&#xff1a;根据当前时间组合成一个唯一ID字符串:yearmonthdayhourminutesecondmillisecond drop function funGetId;go--自定义函数&…

PHP Storm 2024.1使用

本文讲的是phpstorm 2024.1最新版本激活使用教程&#xff0c;本教程适用于windows操作系统。 1.先去idea官网下载phpstorm包&#xff0c;我这里以2023.2最新版本为例 官网地址&#xff1a;https://www.jetbrains.com/zh-cn/phpstorm/ 2.下载下来后安装&#xff0c;点下一步 …

RAG 如何消除大模型幻觉

什么是大模型幻觉 假设我们有一个基于大型生成模型&#xff08;如GPT-3&#xff09;的问答系统&#xff0c;该系统用于回答药企内部知识库中的问题。我们向其提出一个问题&#xff1a;“阿司匹林的主要药理作用是什么&#xff1f;” 正确的答案应该是&#xff1a;“阿司匹林主…