【深度学习】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://xiahunao.cn/news/3267503.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Qt SQLite数据库编程学习总结

到此为止,就使用Qt进行SQLite数据库的操作,做一次总结 1. Qt中数据库操作的相关概念和类 Qt 数据库编程相关基本概念https://blog.csdn.net/castlooo/article/details/140497177 2.表的只读查询--QSqlQueryModel QSqlQueryModel单表查询的使用总结htt…

AI驱动的在线面试系统:技术革新与初步面试的新体验

一、引言 在数字化和智能化的时代背景下,人工智能(AI)技术正日益渗透到各行各业,为人们的生活和工作带来前所未有的变革。其中,AI驱动的在线面试系统,凭借其高效、便捷、公正等特性,逐渐成为企业…

示例:WPF中如何处理TabControl页面绑定ItemsSource切换TabItem时UI数据没有持久保存的问题

一、目的:在WPF开发过程中,经常用到TabControl,也会遇到类似问题,用TabControl绑定数据源ItemsSource时,切换TabItem时,UI上的数据没有持久保存,本文介绍一种处理方式,可以做到缓存页…

Elasticsearch概念及ELK安装

1、Elasticsearch是什么 它是elastic技术栈中的一部分。完整的技术栈包括: Elasticsearch:用于数据存储、计算和搜索 Logstash/Beats:用于数据收集 Kibana:用于数据可视化 整套技术栈被称为ELK,经常用来做日志收集…

海康4G摄像头接入自定义程序

1.使用【萤石云视频】APP添加摄像头,在设置中关闭视频加密 2.打开萤石云,进入控制台 3.设备管理中可以看到添加的设备 4.添加一个应用,即可获取AppKey、Secret、AccessToken 5.根据文档中的说明获取播放地址,这里是我生成的播放…

单证不一致清关难题 | 国际贸易综合服务平台 | 箱讯科技

什么是单证一致? 单证一致出口方所提供的所有单据要严格符合进口方开证银行所开信用证的要求,或者说出口方制作和提供的所有与本项货物买卖有关的单据,与进口方申请开立的信用证对单据的要求完全吻合,没有矛盾。 添加图片注释&am…

本地搭建rtmp拉流

本地搭建rtmp拉流 可按照步骤来 关注公众号:城羽海 更多有趣实用教程 下载地址: 从微信公众号发送关键词 rtmp可获取下载地址 文章目录 本地搭建rtmp拉流 可按照步骤来 关注公众号:城羽海 更多有趣实用教程 拿到之后如图所下?二、配置obs文…

构建查询洞察 UI

本文字数:2631;估计阅读时间:7 分钟 作者:Bucky Schwarz 本文在公众号【ClickHouseInc】首发 我们最近发布了 Query Insights 的初步实现,为 ClickHouse Cloud 用户提供了一种便捷的方法来查看和解释查询日志。该功能对…

Python --NumPy库基础方法(1)

NumPy Numpy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy支持向…

mysql语法介绍

MySQL 语法主要基于 SQL(Structured Query Language)标准,用于管理和操作关系型数据库。以下是一些基本的 MySQL 语句: 1.创建数据库: CREATE DATABASE database_name; 1.选择数据库: USE database_name;…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step

springcloud RocketMQ ,一个mq消息发送后,客户端是怎么一步步拿到消息去消费的?我们要从代码层面探究这个问题。 找的流程图,有待考究。 以下我们开始debug: 拉取数据的线程: PullMessageService.java 本…

云盘高速视觉检测机,如何提高螺丝件的检测效率?

螺纹螺丝钉是一种常见的螺纹结构紧固件,通常由金属制成,具有螺旋状的螺纹结构。这种螺丝钉旨在通过旋入螺纹孔或材料中,实现可靠的固定连接。 螺纹螺丝钉具有螺旋状的螺纹结构,使其能够轻松旋入金属或其他硬质材料。主要用于金属…

UDP的报文结构及其注意事项

1. 概述 UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的数据传输服务,不保证数据的可靠传输。在网络通信中,UDP通常用于一些对实时性要求较高、数据量较小、传输延迟较低的应用&#xff0c…

NLP基础知识2【各种大模型的注意力】

注意力 传统Attention存在的问题优化方向变体有哪些现在的主要变体集中在KVMulti-Query AttentionGrouped-query AttentionFlashAttention 传统Attention存在的问题 上下文约束速度慢,显存占用大(因为注意力考虑整体信息,所以每一个位置都要…

【大模型】基于LoRA微调Gemma大模型(1)

文章目录 一、LoRA工作原理1.1 基本原理1.2 实现步骤 二、LoRA 实现2.1 PEFT库:高效参数微调LoraConfig类:配置参数 2.2 TRL库SFTTrainer 类 三、代码实现3.1 核心代码3.2 完整代码 参考资料 大模型微调技术有很多,如P-Tuning、LoRA 等&#…

狗都能看懂的Actor-Critic强化学习算法讲解

Review Policy Gradient 上面的公式是Policy Gradient的更新函数,这个式子是指在 s t s_t st​时刻采取了 a t a_t at​,计算出对应发生的概率 p θ p_\theta pθ​,然后计算在采取了这个 a t a_t at​之后,所得到的reward有多大。…

table car vs. table cars:数据库命名用单数还是复数?

数据库的命名方式已经形成了许多共识,比如全部小写、下划线分隔、使用标准缩写等;其中就包括「使用单数名词」。 用户 jonr 在 reddit 网的程序员笑话(ProgrammerHumor)社区发了一篇帖子,调侃这些数据库命名方式的共识…

Hive3:基本介绍

一、概述 Apache Hive是一款分布式SQL计算的工具, 其主要功能是: 将SQL语句翻译成MapReduce程序运行 二、基本逻辑简介 主要由两大模块组成:元数据管理,SQL解析器 1、元数据管理 即:数据位置信息、数据结构信息、…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求,需要测试几个考试相关的接口。其中有一个获取试题详情的接口,和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数,添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求,这…