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

文章目录

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

简介

  • llama-factory SFT系列教程 (一),大模型 API 部署与使用
  • 本文为 llama-factory SFT系列教程的第二篇;

支持的模型列表

模型名模型大小默认模块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.mzph.cn/news/812428.shtml

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

相关文章

Composer安装与配置

Composer&#xff0c;作为PHP的依赖管理工具&#xff0c;极大地简化了PHP项目中第三方库的安装、更新与管理过程。本文将详细介绍Composer的安装步骤、基本配置方法&#xff0c;以及一些实用的操作示例&#xff0c;帮助读者快速上手并熟练运用Composer。 一、Composer安装 环…

C++内存分布

C代码编译过程 预处理 宏定义展开、头文件展开、条件编译&#xff0c;这里并不会检查语法编译检查语法&#xff0c;将预处理后文件编译生成汇编文件汇编将汇编文件生成目标文件(二进制文件)链接将目标文件链接为可执行程序 进程的内存分布 程序运行起来(没有结束前)就是一个…

mysql开启慢日志mysqld: File ‘xxx‘ not found (Errcode: 13 - Permission denied)

问题描述: mysql版本:5.74 开启mysql慢日志 一直报错 慢日志文件手动创建 并把慢日志文件权限给mysql:mysql 还是不行,于是找方案,找了几个都不行,后来发现是系统安全设置 解决方案 前提是日志文件存在且授权给用户mysql以及组mysql 具体如何关闭selinux&#xff1a; v…

CSS单位选择的艺术:何时何地选用何种单位

CSS单位作为网页样式设计的基石&#xff0c;直接影响着元素尺寸、间距、字体大小等视觉呈现。选择合适的单位对于构建响应式、跨设备兼容且易于维护的界面至关重要。本文将深入分析各类CSS单位&#xff0c;并探讨在不同场景下应选用何种单位&#xff0c;同时揭示各单元的优缺点…

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

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

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现&#xff1a; 甲骨文是我国目前已知的最早成熟的文字系统&#xff0c;它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值&#xff0c;不仅对中国文…

2024年MathorCup数模竞赛C题详解

C题持续更新中 问题一问题二代码混合ARIMA-LSTM模型构建完整数据与代码第一问第二问 问题一 问题一要求对未来30天每天及每小时的货量进行预测。首先&#xff0c;利用混合ARIMA-LSTM模型进行时间序列预测。ARIMA模型擅长捕捉线性特征和趋势&#xff0c;而LSTM模型处理非线性关…

elementui中el-select下拉列表偏移问题

问题截图 解决方法 在el-select中添加:popper-append-to-body"false"即可 加完后的效果

【Leetcode】正则表达式

正则表达式&#xff1a;检查字符串是否与指定模式匹配 指定模式&#xff1a;re.compile(rxxxxxxx) 符号规则规则释义^指定开头^S 匹配以S开头的字符串$指定结尾a$ 匹配以a结尾的字符串^ $严格匹配^Sa$ 只能匹配Sa[]字符簇[a-z0-9] 匹配小写字符或数字[^ ]排除[^A-…

Leetcode刷题之轮转数组

Leetcode刷题之轮转数组 一、题目描述二、题目解析方法一&#xff1a;三段逆置题目代码 方法二:利用memcpy进行拷贝运行结果 一、题目描述 轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums […

使用夜神模拟器进行android开发

1. 安装 进入 夜神模拟器官网 进行下载安装 2. 使用 找到夜神模拟器安装路径下的 bin 文件夹&#xff1a;C:\Program Files (x86)\Nox\bin 切换到 bin 目录之后&#xff0c;输入以下命令连接模拟器&#xff1a; nox_adb connect 127.0.0.1:62001 在启动 android 项目前&…

机器学习—数据集(二)

1可用数据集 公司内部 eg:百度 数据接口 花钱 数据集 学习阶段可用的数据集&#xff1a; sklearn:数据量小&#xff0c;方便学习kaggle&#xff1a;80万科学数据&#xff0c;真实数据&#xff0c;数据量大UCI&#xff1a;收录了360个数据集&#xff0c;覆盖科学、生活、经济等…

书生·浦语大模型实战营 | 第3次学习笔记

前言 书生浦语大模型应用实战营 第二期正在开营&#xff0c;欢迎大家来学习。&#xff08;参与链接&#xff1a;https://mp.weixin.qq.com/s/YYSr3re6IduLJCAh-jgZqg 第三堂课的视频链接&#xff1a;https://www.bilibili.com/video/BV1QA4m1F7t4/ 本次笔记是学习完第三堂课…

STM32使用标准版RT-Thread,移植bsp中的板文件后,想使用I/O设备模型,使用串口3或者串口4收发时,发现串口3或者串口4没反应

STM32移植RT-Thread出现的问题及解决办法 问题原因解决方法 问题 使用标准版RT-Thread,移植bsp中的板文件后&#xff0c;想使用I/O设备模型&#xff0c;使用串口3或者串口4收发时&#xff0c;发现串口3或者串口4没反应。出现问题&#xff1a;程序一直跑在 while (__HAL_UART_…

数据结构课程设计(七)---求图的中心顶点 [图]

1.7.1 题目内容 1.7.1-A [问题描述] 假设有一个公司在某个地区有n个产品销售点&#xff0c;现根据业务需要打算在其中某个销售点上建立一个中心仓库&#xff0c;负责向其它销售点提供产品。由于运输线路不同&#xff0c;运输费用也不同。假定每天需要向每个销售点运输一次产品…

[深度学习] 无人车避开赛道边的障碍物

https://developer.horizon.cc/forumDetail/146176821770230117 https://developer.horizon.cc/nodehubdetail/184587678518566921 https://developer.horizon.ai/forumDetail/185446132959372300 https://developer.horizon.ai/forumDetail/185446371330059463 用精灵标注助手…

伪装目标检测论文阅读之:《Confidence-Aware Learning for Camouflaged Object Detection》

论文地址&#xff1a;link code:link 摘要&#xff1a;   任意不确定性捕获了观测结果中的噪声。对于伪装目标检测&#xff0c;由于伪装前景和背景的外观相似&#xff0c;很难获得高精度的注释&#xff0c;特别是目标边界周围的注释。我们认为直接使用“嘈杂”的伪装图进行训…

C语言 知识点 + 笔记(2w7千字 持续更新...)

目录 前言 第 1 章 C语言的流程 计算机基础 (1) 十进制转 N 进制 例1 十进制转二进制 例2 十进制转八进制 例3 十进制十六进制 (2) N进制 转十进制 例1 二进制转十进制 例2 八进制转十进制 例3 十六进制转十进制 (3) 原码反码补码 第 2 章 数据类型、运算符和表达…

k8s-pod设置执行优先级

Pod的优先级管理是Kubernetes调度中的一个重要特性&#xff0c;通过PriorityClass&#xff08;优先级类&#xff09;的设置&#xff0c;我们可以为Pod指定不同的优先级&#xff0c;从而在资源有限的情况下更精细地调整调度顺序 什么是PriorityClass&#xff1f; PriorityClass是…

【InternLM 实战营第二期-笔记1】书生浦语大模型开源体系详细介绍InternLM2技术报告解读(附相关论文)

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营&#xff0c;我也将会通过笔记博客的方式记录学习的过程与遇到的问题&#xff0c;并为代码添加注释&#xff0c;希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) 书生浦语大模型开源体系…