【深度学习】LLaMA-Factory 大模型微调工具, 大模型GLM-4-9B Chat ,微调与部署 (2)

文章目录

  • 数据准备
  • chat
  • 评估模型
  • 导出模型
  • 部署
  • 总结

资料:
https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md
https://www.53ai.com/news/qianyanjishu/2015.html

代码拉取:

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory

build镜像和执行镜像:


cd /ssd/xiedong/glm-4-9b-xd/LLaMA-Factorydocker build -f ./docker/docker-cuda/Dockerfile \--build-arg INSTALL_BNB=false \--build-arg INSTALL_VLLM=false \--build-arg INSTALL_DEEPSPEED=false \--build-arg INSTALL_FLASHATTN=false \--build-arg PIP_INDEX=https://pypi.org/simple \-t llamafactory:latest .docker run -dit --gpus=all \-v ./hf_cache:/root/.cache/huggingface \-v ./ms_cache:/root/.cache/modelscope \-v ./data:/app/data \-v ./output:/app/output \-v /ssd/xiedong/glm-4-9b-xd:/ssd/xiedong/glm-4-9b-xd \-p 9998:7860 \-p 9999:8000 \--shm-size 16G \llamafactory:latestdocker exec -it  a2b34ec1 bashpip install bitsandbytes>=0.37.0

我构建好的镜像是:kevinchina/deeplearning:llamafactory-0.8.3,可以直接执行:


cd /ssd/xiedong/glm-4-9b-xd/LLaMA-Factory
docker run -dit --gpus '"device=0,1,2,3"' \-v ./hf_cache:/root/.cache/huggingface \-v ./ms_cache:/root/.cache/modelscope \-v ./data:/app/data \-v ./output:/app/output \-v /ssd/xiedong/glm-4-9b-xd:/ssd/xiedong/glm-4-9b-xd \-p 9998:7860 \-p 9999:8000 \--shm-size 16G \kevinchina/deeplearning:llamafactory-0.8.3

快速开始

下面三行命令分别对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并。

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

高级用法请参考 examples/README_zh.md(包括多 GPU 微调)。

Tip

使用 llamafactory-cli help 显示帮助信息。

LLaMA Board 可视化微调(由 Gradio 驱动)

llamafactory-cli webui

看一点资料:https://www.cnblogs.com/lm970585581/p/18140564

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据准备

数据准备的官方说明:

https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md

偏好数据集是用在奖励建模阶段的。

Alpaca 格式数据集格式:

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

在指令监督微调数据集(Alpaca 格式)中,几个主要列分别有以下作用:

  1. instruction(人类指令,必填):

    • 这一列包含了人类发出的具体指令或问题。这是模型根据指令生成回答的主要输入。
    • 例子: “请解释一下量子力学的基本概念。”
  2. input(人类输入,选填):

    • 这一列包含了与指令相关的额外输入信息,可以为空。如果填写,则与指令一起构成人类的完整输入。
    • 例子: 如果指令是"请解释以下内容:“,input 可以是"量子力学的基本概念。”
  3. output(模型回答,必填):

    • 这一列包含了模型生成的回答或反应。这个是模型在接收到指令和输入后应产生的输出。
    • 例子: “量子力学是一门研究微观粒子行为的物理学分支,其基本概念包括波粒二象性、测不准原理等。”
  4. system(系统提示词,选填):

    • 这一列提供了给模型的系统级提示词,帮助设置对话的上下文或对话的语境。如果没有特定的系统提示词,可以为空。
    • 例子: “你是一位物理学家,擅长解释复杂的科学概念。”
  5. history(历史对话,选填):

    • 这一列包含了历史对话记录,是由多个字符串二元组构成的列表,每个二元组代表一轮对话的指令和回答。这些历史记录可以帮助模型理解当前对话的上下文。
    • 例子:
      [["什么是相对论?", "相对论是由爱因斯坦提出的理论,分为狭义相对论和广义相对论。"],["狭义相对论的核心概念是什么?", "狭义相对论的核心概念是光速不变和时间空间的相对性。"]
      ]
      

综上所述,这些列在数据集中的作用是:

  • instructioninput 一起构成人类给模型的完整输入。
  • output 是模型在接收到输入后生成的回答。
  • system 为模型提供额外的上下文或提示。
  • history 提供对话的历史记录,帮助模型理解和生成更加连贯的回答。

我现在要微调一个领域任务。这个任务是这样的:会有很长一段材料,要模型给出材料分类、材料里写的负责人名字。我要如何构建数据集?下面是例子:
数据集结构可以这么给:

[{"instruction": "请对以下材料进行分类,并找出材料中的负责人名字。","input": "材料内容","output": "分类: 材料分类; 负责人: 负责人名字","system": "你是一位文本分类和信息提取专家。",}
]

样例数据:

[{"instruction": "请对以下材料进行分类,并找出材料中的负责人名字。","input": "本公司2024年第一季度财报显示,收入增长了20%。财务负责人是张三。","output": "分类: 财务报告; 负责人: 张三","system": "你是一位文本分类和信息提取专家。",},{"instruction": "请对以下材料进行分类,并找出材料中的负责人名字。","input": "根据最新的市场调研报告,本季度市场份额有显著提升。市场部负责人李四表示,对未来市场充满信心。","output": "分类: 市场调研报告; 负责人: 李四","system": "你是一位文本分类和信息提取专家。",}
]

dataset_info.json这么加:

 "数据集名称": {"file_name": "data.json","columns": {"prompt": "instruction","query": "input","response": "output","system": "system",}}

本次微调选择了开源项目数据集,地址如下:
https://github.com/KMnO4-zx/huanhuan-chat/blob/master/dataset/train/lora/huanhuan.json
下载后,将json文件存放到LLaMA-Factory的data目录下。

修改data目录下dataset_info.json 文件。

直接增加以下内容即可:

 "huanhuan": {"file_name": "huanhuan.json"}

如图:
在这里插入图片描述

进入容器打开webui:

llamafactory-cli webui

网页打开页面:
http://10.136.19.26:9998/

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
webui训练老报错,可以把指令弄下来去容器里执行:

llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /ssd/xiedong/glm-4-9b-xd/glm-4-9b-chat \--preprocessing_num_workers 16 \--finetuning_type lora \--quantization_method bitsandbytes \--template glm4 \--flash_attn auto \--dataset_dir data \--dataset huanhuan \--cutoff_len 1024 \--learning_rate 5e-05 \--num_train_epochs 3.0 \--max_samples 100000 \--per_device_train_batch_size 2 \--gradient_accumulation_steps 8 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 100 \--warmup_steps 0 \--optim adamw_torch \--packing False \--report_to none \--output_dir saves/GLM-4-9B-Chat/lora/train_2024-07-23-04-22-25 \--bf16 True \--plot_loss True \--ddp_timeout 180000000 \--include_num_input_tokens_seen True \--lora_rank 8 \--lora_alpha 32 \--lora_dropout 0.1 \--lora_target all 

在这里插入图片描述
训练完:

***** train metrics *****
epoch = 2.9807
num_input_tokens_seen = 741088
total_flos = 36443671GF
train_loss = 2.5584
train_runtime = 0:09:24.59
train_samples_per_second = 19.814
train_steps_per_second = 0.308

chat

在这里插入图片描述

在这里插入图片描述

评估模型

40G显存空余才行,这模型太大。

类似,看指令 ,然后命令行执行:

CUDA_VISIBLE_DEVICES=1,2,3 llamafactory-cli train \--stage sft \--model_name_or_path /ssd/xiedong/glm-4-9b-xd/glm-4-9b-chat \--preprocessing_num_workers 16 \--finetuning_type lora \--quantization_method bitsandbytes \--template glm4 \--flash_attn auto \--dataset_dir data \--eval_dataset huanhuan \--cutoff_len 1024 \--max_samples 100000 \--per_device_eval_batch_size 2 \--predict_with_generate True \--max_new_tokens 512 \--top_p 0.7 \--temperature 0.95 \--output_dir saves/GLM-4-9B-Chat/lora/eval_2024-07-23-04-22-25 \--do_predict True \--adapter_name_or_path saves/GLM-4-9B-Chat/lora/train_2024-07-23-04-22-25 

数据集有点大,没执行完我就停止了,结果可能是存这里:/app/saves/GLM-4-9B-Chat/lora/eval_2024-07-23-04-22-25

在这里插入图片描述

导出模型

填导出路径进行导出/ssd/xiedong/glm-4-9b-xd/export_test0723。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

部署

LLaMA-Factory可以直接部署模型,给参数就可以。

https://github.com/hiyouga/LLaMA-Factory/blob/main/src/api.py

比如:


llamafactory-cli api  --model_name_or_path /ssd/xiedong/glm-4-9b-xd/export_0725_yingyong --template glm4 --finetuning_type lora --adapter_name_or_path saves/GLM-4-9B-Chat/lora/train_2024-07-26-02-14-58 

请求:

curl -X 'POST' \'http://10.136.19.26:9999/v1/chat/completions' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"model": "gpt-4","messages": [{"role": "user","content": "你是谁?"}],"do_sample": true,"temperature": 0.7,"top_p": 0.9,"n": 1,"max_tokens": 150,"stop": null,"stream": false
}
'

python请求:

import requestsurl = 'http://10.136.19.26:9999/v1/chat/completions'
headers = {'accept': 'application/json','Content-Type': 'application/json'
}
data = {"model": "gpt-4","messages": [{"role": "system","content": "你是一位文本分析专家,现在需要分析文本的所属应用类别。"},{"role": "user",# user_input+ocr_ret"content": "贷款"}],"do_sample": True,"temperature": 0.7,"top_p": 0.9,"n": 1,"max_tokens": 150,"stop": None,"stream": False
}response = requests.post(url, headers=headers, json=data)print(response.json()['choices'][0]['message']['content'].replace('\n', ''))

webUi:

llamafactory-cli webchat  --model_name_or_path /ssd/xiedong/glm-4-9b-xd/export_0725_yingyong --template glm4 --finetuning_type lora --adapter_name_or_path saves/GLM-4-9B-Chat/lora/train_2024-07-26-02-14-58 llamafactory-cli webchat  --model_name_or_path /ssd/xiedong/glm-4-9b-xd/glm-4-9b-chat --template glm4 --finetuning_type lora

总结

这么看下来,这个文档的含金量很高:
https://github.com/hiyouga/LLaMA-Factory/tree/main/examples

为了方便使用,推送了这个镜像:

docker push kevinchina/deeplearning:llamafactory-0.8.3

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

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

相关文章

万物互联,触手可及“2024南京智慧城市,物联网,大数据展会”

在金秋送爽的11月,南京这座历史悠久而又充满活力的城市,即将迎来一场科技盛宴——2024南京智慧城市、物联网、大数据展会。这不仅是一场技术的集会,更是未来生活蓝图的预览,它汇聚了全球顶尖的科技企业、创新者及行业精英&#xf…

【C++】循环结构-while语句

while 语句的语法格式&#xff1a; while (循环条件) {在满足循环条件下执行的操作} 注意要留有跳出循环的方式&#xff0c;避免死循环 1、不写 whlie (1)&#xff0c;写具体的循环条件 2、写while(1)&#xff0c;用 break 跳出循环 下面是一个实例 #include<iostream…

邮件攻击案例系列三:动态 IP 池爆破员工邮箱钓鱼重要客户

案例描述 2023 年 11 月&#xff0c;某制造业企业员工 Emily 接到海外客户电话&#xff0c;向其核实一封电子邮件的真实性&#xff0c;因为客户认为&#xff0c;该邮件所给出的链接不像是该公司的官网网址。Emily 查看自己的邮箱&#xff0c;并未发现客户所说的邮件。但从客户…

数据结构-----对列

前言 Hello, 小伙伴们&#xff0c;你们的作者菌又来了&#xff0c;前不久&#xff0c;我们学习了一种数据结构----栈&#xff0c;他特殊的性质使得他在一些数据管理的问题上被广泛的使用&#xff0c;那今天&#xff0c;我们就来学习另一种十分重要的数据结构--对列。 在开始之…

Linux字符设备驱动基本框架

本章我们从 Linux 驱动开发中最基础的字符设备驱动开始&#xff0c;重点学习 Linux 下字符设备驱动开发框架。本章会以一个虚拟的设备为例&#xff0c;讲解如何进行字符设备驱动开发&#xff0c;以及如何编写测试 APP 来测试驱动工作是否正常&#xff0c;为以后的学习打下坚实的…

3. 系统上电启动流程

1. 概述 上电启动&#xff0c;可参考恒玄sdk的指导手册。 注&#xff1a;可以在sdk这里加载自己的入口函数 STEP1&#xff1a; STEP2&#xff1a; STEP3&#xff1a; STEP4&#xff1a;

【日常记录】【插件】多媒体文本化: text-image 可以将文字、图片、视频进行「文本化」

文章目录 1. html基本结构2. 画文字3. 画图片4. 画视频参考地址 1. html基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-s…

ctfshow web入门 中期测评 web492--web502

web492 <?php include(render/render_class.php); include(render/db_class.php);$action$_GET[action]; if(!isset($action)){header(location:index.php?actionlogin);die(); }if($actioncheck){extract($_GET);if(preg_match(/^[A-Za-z0-9]$/, $username)){$sql &qu…

如何设置postgresql数据库的账户密码

说明&#xff1a;在我的云服务器上&#xff0c;postgres是使用yum的方式安装的&#xff0c;不需要设置postgres账户的密码&#xff0c;本文介绍安装后如何手动设置postgres账户的密码&#xff1b; postgres数据库安装&#xff0c;参考下面这篇文章&#xff1a; PostgreSQL安装…

SpringBoot整合SSE技术详解

Hi &#x1f44b;, Im shy SpringBoot整合SSE技术详解 1. 引言 在现代Web应用中,实时通信变得越来越重要。Server-Sent Events (SSE)是一种允许服务器向客户端推送数据的技术,为实现实时更新提供了一种简单而有效的方法。本文将详细介绍如何在SpringBoot中整合SSE,并探讨S…

python-学生排序(赛氪OJ)

[题目描述] 已有 a、b 两个链表&#xff0c;每个链表中的结点包括学号、成绩。要求把两个链表合并&#xff0c;按学号升序排列。输入格式&#xff1a; 输入共 NM1 行。 第一行&#xff0c;输入 a、b 两个链表元素的数量 N、M&#xff0c;中间用空格隔开。下来 N 行&#xff0c;…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十章 Linux用户层和内核层

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

找工作准备刷题Day10 回溯算法 (卡尔41期训练营 7.24)

回溯算法今天这几个题目做过&#xff0c;晚上有面试&#xff0c;今天水一水。 第一题&#xff1a;Leetcode77. 组合 题目描述 解题思路 从题目示例来看&#xff0c;k个数是不能重合的&#xff0c;但是题目没有明确说明这一点。 使用回溯算法解决此问题&#xff0c;利用树形…

ElasticSearch搜索

ES搜索 elastic search 一套搜索引擎技术,主要技术栈包括 Elasticsearch&#xff1a;用于数据存储、计算和搜索 Kibana&#xff1a;用于数据可视化 在数据库模糊查询中,因为不走索引,所以效率很低,而在搜索引擎中,不仅效率高,而且即使出现个别错字,或者用拼音搜索,甚至用同…

docker安装sql server容器

安装 docker pull mcr.microsoft.com/mssql/server:2017-latest启动 docker run -e "ACCEPT_EULAY" -e "SA_PASSWORDwjl135246" -p 1433:1433 -m 4000M --memory 4000M --name sqlserver -d mcr.microsoft.com/mssql/server:2017-latest远程链接即可 参…

用户登录安全是如何保证的?如何保证用户账号、密码安全?

1.HTTP协议直接传输密码&#xff08;无加密&#xff09; 前端 直接发送HTTP请求&#xff08;无加密&#xff09;&#xff0c;攻击者可直接捕获网络包&#xff0c;看到下面的明文信息 因此&#xff0c;使用HTTP协议传输会直接暴露用户敏感信息。 2.HTTPS协议直接传输密码&…

Postgresql 16开启SELINUX

平时我们习惯了&#xff0c;安装数据库&#xff0c;就关闭SELINUX&#xff0c;不关闭SELINUX&#xff0c;就不会安装数据库了&#xff0c;那么不关闭SELINUX&#xff0c;就不能安装数据库了吗&#xff1f; 答案是否定的。 不过&#xff0c;如果我们在开启SELINUX情况下安装PG…

Matlab类阿克曼车机器人运动学演示

v1是后驱动轮轮速&#xff0c; v2是转向角变化速度&#xff0c; 实际上我们只需要关注XQ&#xff0c; YQ和Phi的变化率。 通过这三项和时间步长&#xff0c; 我们就可以计算出变化量&#xff0c; 再结合初始值就能推断出每个时刻的值。 % 清理当前运行环境 % 清除所有变量 cle…

opencv使用KCF算法跟踪目标,给出目标中心位置

效果图 代码 import cv2class VideoTracker:def __init__(self, video_path: str):self.video_path video_pathself.cap cv2.VideoCapture(video_path)self.tracker cv2.legacy.TrackerKCF_create()self.initBB Noneself.tracker_initialized Falseself.selecting Fals…

【教程】vscode添加powershell7终端

win10自带的 powershell 是1.0版本的&#xff0c;太老了&#xff0c;更换为powershell7后&#xff0c;在 vscode 的集成终端中没有显示本篇教程记录在vscode添加powershell7终端的过程 打开vscode终端配置 然后来到这个页面进行设置 查看 powershell7 的安装位置&#xff…