【深度学习】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-Factory

docker 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:latest

docker exec -it  a2b34ec1 bash

pip 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 requests

url = '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.mfbz.cn/a/870123.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32串口(串口基础)

串口整个东西可以说但凡你要碰单片机,想做点上点档次的东西的话那你就包用它的。32的串口配置并不难,哪怕是比起51其实也难不到哪去。 目录 一.通信基础 1.通信方式 2.通信速率 二.串口基础 1.串口的数据帧结构(协议) 2.ST…

【Godot4.2】GodotXML插件 - 解析和生成XML

概述 近期在研究Godot的XML和SVG解析,Godot提供了XMLParser类型,但本身只提供了低级的XML解析接口和功能,想要完成完整的XML文档解析和存储可能还需要在其基础上编写类或功能,就像我在昨天(2024年7月20日)…

Web开发:图片九宫格与非九宫格动态切换效果(HTML、CSS、JavaScript)

目录 一、业务需求 二、实现思路 三、实现过程 1、基础页面 2、图片大小调整 3、图片位置调整 4、鼠标控制切换 5、添加过渡 四、完整代码 一、业务需求 默认显示基础图片; 当鼠标移入,使用九宫格效果展示图片; 当鼠标离开&#…

基于Cobbler实现多版本系统批量部署

一、实验题目 基于Cobbler实现多版本系统批量部署 二、实验目的 通过Cobbler,实验旨在实现无需人工干预即可自动安装多个版本的操作系统。这可以大大提高机房设备或服务器集群的部署效率,减少人力成本和操作错误。 三、实验环境 centos7.9并安装Cob…

机器学习 | 回归算法原理——多重回归

Hi,大家好,我是半亩花海。接着上次的多项式回归继续更新《白话机器学习的数学》这本书的学习笔记,在此分享多重回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,欢迎大家交流学习! 目录 一…

【Django】anaconda环境变量配置及配置python虚拟环境

文章目录 配置环境变量配置python虚拟环境查看conda源并配置国内源在虚拟环境中安装django 配置环境变量 control sysdm.cpl,,3笔者anaconda安装目录为C:\ProgramData\anaconda3 那么需要加入path中的有如下三个 C:\ProgramData\anaconda3 C:\ProgramData\anaconda3\Scripts C:…

【数据结构】搜索二叉树

二叉搜索树 二叉树的博客 在之前的数据结构的文章中已经基本对二叉树有一定的了解,二叉搜索树也是一种数据结构,下面将对二叉搜索树进行讲解。 二叉搜索树的概念 二叉搜索树又称为二叉排序树,它或者是一棵空树,或者是具有下面性…

【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

HTML常见标签——超链接a标签

一、a标签简介 二、a标签属性 href属性 target属性 三、a标签的作用 利用a标签进行页面跳转 利用a标签返回页面顶部以及跳转页面指定区域 利用a标签实现文件下载 一、a标签简介 <a>标签用于做跳转、导航&#xff0c;是双标签&#xff0c;记作<a></a>&#…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动

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

MongoDB教程(十八):MongoDB MapReduce

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MapRed…

上传项目到GitHub

上传项目到GitHub 前期工作&#xff1a;创建GitHub仓库 1.使用git命令初始化文件夹 git init2.将文件夹里面所有的文件添加到本地仓库&#xff0c;如果想添加单个文件&#xff0c;将.换成文件名就好。 git add .3.给文件备注&#xff0c;双引号里面是文件备注的内容 git c…

8月开始|《660》+《880》45天带刷计划!

660880题目加起来挺多了&#xff01; 如果是一刷加上二刷错题的话&#xff0c;总共需要做2000道题左右。 如果全都吃透的话&#xff0c;按照传统的刷题方法&#xff0c;慢的话需要2个多月&#xff0c;差不多就是每天30多道题的量 快的话&#xff0c;大概就是一个月就能刷完&…

低代码如何加速数字化转型

数字化转型&#xff0c;正日益决定企业成功的关键。这里的一个关键因素是它可以以更快的速度和质量来实施技术计划。在当今瞬息万变的商业环境中&#xff0c;战略性地采用低代码平台对于旨在加快上市时间、增强业务敏捷性和促进跨团队无缝协作的首席技术官来说至关重要。日益增…

【教程】vscode添加powershell7终端

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

Linux开启coredump

在Linux系统中&#xff0c;C/C程序崩溃是常见的问题之一。Coredump是指当一个程序崩溃时&#xff0c;系统把程序运行时的内存数据以二进制文件的形式保存下来&#xff0c;以便程序开发者进行崩溃分析。本文将介绍如何开启并配置Coredump 1、查看并配置coredump 在Linux系统中…

Git仓库拆分和Merge

1. 问题背景 我们原先有一个项目叫open-api&#xff0c;后来想要做租户独立发展&#xff0c;每个租户独立成一个项目&#xff0c;比如租户akc独立部署一个akc-open-api&#xff0c;租户yhd独立部署一个yhd-open-api&#xff0c;其中大部分代码是相同的&#xff0c;少量租户定制…

昇思25天学习打卡营第20天|CV-ResNet50图像分类

打卡 目录 打卡 图像分类 ResNet网络介绍 数据集准备与加载 可视化部分数据集 残差网络构建 Building Block 结构 代码实现 Bottleneck结构 代码实现 构建ResNet50网络 代码定义 模型训练与评估 可视化模型预测 重点&#xff1a;通过网络层数加深&#xff0c;感知…

Docker-Compose配置zookeeper+KaFka+CMAK简单集群

1. 本地DNS解析管理 # 编辑hosts文件 sudo nano /etc/hosts # 添加以下三个主机IP 192.168.186.77 zoo1 k1 192.168.186.18 zoo2 k2 192.168.186.216 zoo3 k3注&#xff1a;zoo1是192.168.186.77的别名&#xff0c;zoo2是192.168.186.18的别名&#xff0c;zoo3是192.168.186.1…

【HarmonyOS】应用推送使用个推SDK如何实现?

【HarmonyOS】应用推送使用个推SDK如何实现&#xff1f; 前言 个推和极光都是市面上很成熟的推送第三方SDK了。今天讲讲个推SDK在鸿蒙中如何集成使用。 存在即合理&#xff0c;三方SDK推送给我们带来了极大的好处&#xff0c;首先在服务器后台处理一套API就可搞定&#xff0…