当前位置: 首页 > news >正文

【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型

1. 背景介绍  

        虽然现在大模型微调的文章很多,但纸上得来终觉浅,大模型微调的体感还是需要自己亲自上手实操过,才能有一些自己的感悟和直觉。这次我们选择使用llama_factory来微调chatglm-4-9B大模型。

        之前微调我们是用两块3090GPU显卡,但这次我们要全参微调chatglm-4-9B模型,模型大小为18G,显然两块3090卡48G显存支撑不了,因此采用A800的4张卡来训练。一般来说,全参微调的显存需求约为模型大小的20倍。按照惯例先上配置信息,方便对齐环境配置。

2. LLaMa Factory部署

      本文参考【1, 2,3】进行实践。

2.1 安装conda并创建虚拟环境

> conda create -n llama_factory python=3.10 -y

> conda activate llama_factory

安装依赖包版本推荐:

torch 2.4.0 
torchvision 0.19.0 
nvidia-cublas-cu12 12.1.3.1 
nvidia-cuda-cupti-cu12 12.1.105 
nvidia-cuda-nvrtc-cu12 12.1.105 
nvidia-cuda-runtime-cu12 12.1.105 
transformers 4.46.1 
datasets 3.1.0 
accelerate 1.1.0 
peft 0.13.2 
trl 0.12.0 
deepspeed 0.15.3

2.2 安装LLaMa Factory

下载并安装LLaMa factory

> git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git

> cd LLaMA-Factory

> pip install -e ".[torch,metrics]"

运行测试:

llamafactory-cli help

3. Chatglm-4-9B全参微调

3.1 下载chatglm-4-9B大模型参数

基于modelscope下载模型,采用命令行下载方式

pip install modelscope

下载完整模型

modelscope download --model ZhipuAI/glm-4-9b-chat

3.2 训练配置

3.2.1 full_sft配置

chatglm_full_sft.yaml

### model
model_name_or_path: path/to/models/glm-4-9b-chat  #改成你自己的路径
trust_remote_code: true### method
stage: sft
do_train: true
finetuning_type: full
freeze_vision_tower: true  # choices: [true, false]
train_mm_proj_only: false  # choices: [true, false]
deepspeed: examples/deepspeed/ds_z3_config.json  # choices: [ds_z0_config.json, ds_z2_config.json, ds_z3_config.json]### dataset
dataset: identity,alpaca_en_demo
template: glm4  #选择对应模版
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16### output
output_dir: saves/chatglm_4-9b/full/sft  #定义微调模型参数存储路径
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 2
learning_rate: 1.0e-5
num_train_epochs: 30.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

3.2.2 deepspeed配置

        主要区别在zero_optimization的配置层面。ZeRO 通过将模型的参数,梯度和 Optimizer State划分到不同进程来消除冗余的内存占用。ZeRO 有三个不同级别,分别对应对 Model States 不同程度的分割 (Paritition):- ZeRO-0:禁用所有分片;ZeRO-1:分割Optimizer States;- ZeRO-2:分割Optimizer States与Gradients;- ZeRO-3:分割Optimizer States、Gradients与Parameters【4】。

ds_z3_config.json 

{"train_batch_size": "auto","train_micro_batch_size_per_gpu": "auto","gradient_accumulation_steps": "auto","gradient_clipping": "auto","zero_allow_untested_optimizer": true,"fp16": {"enabled": "auto","loss_scale": 0,"loss_scale_window": 1000,"initial_scale_power": 16,"hysteresis": 2,"min_loss_scale": 1},"bf16": {"enabled": "auto"},"zero_optimization": {"stage": 3,"overlap_comm": true,"contiguous_gradients": true,"sub_group_size": 1e9,"reduce_bucket_size": "auto","stage3_prefetch_bucket_size": "auto","stage3_param_persistence_threshold": "auto","stage3_max_live_parameters": 1e9,"stage3_max_reuse_distance": 1e9,"stage3_gather_16bit_weights_on_model_save": true}
}

3.2.3 template配置

src/llamafactory/data/template.py

glm4

_register_template(name="glm4",format_user=StringFormatter(slots=["<|user|>\n{{content}}<|assistant|>"]),format_assistant=StringFormatter(slots=["\n{{content}}"]),format_system=StringFormatter(slots=["<|system|>\n{{content}}"]),format_function=FunctionFormatter(slots=["{{content}}"], tool_format="glm4"),format_observation=StringFormatter(slots=["<|observation|>\n{{content}}<|assistant|>"]),format_tools=ToolFormatter(tool_format="glm4"),format_prefix=EmptyFormatter(slots=["[gMASK]<sop>"]),stop_words=["<|user|>", "<|observation|>"],efficient_eos=True,
)

3.3 数据集

数据集路径:/LLaMA-Factory/data
如果使用自己的数据集,需要更新data/dataset_info.json;
也就是首先将自己的数据集xxx.json放到data下,然后注册到data/dataset_info.json;
数据集格式可以参考data目录下的数据集,比如:alpaca_zh_demo.json

3.4 模型微调

9B模型至少需要4张卡,全参微调的显存占用会暴涨原始参数大小的20倍左右。卡的数量一般选择2的n次方。

CUDA_VISIBLE_DEVICES=0,1,4,5 HF_ENDPOINT=https://hf-mirror.com llamafactory-cli train examples/train_full/chatglm_full_sft.yaml

可以看到保存的checkpoint-500的内容

5. 参考材料

【1】https://github.com/hiyouga/LLaMA-Factory

【2】LLaMA Factory + GLM4 微调最佳实践

【3】使用llama factory对语言模型微调

【4】大模型训练方法ZeRO及其三级模式介绍

相关文章:

【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型

1. 背景介绍 虽然现在大模型微调的文章很多&#xff0c;但纸上得来终觉浅&#xff0c;大模型微调的体感还是需要自己亲自上手实操过&#xff0c;才能有一些自己的感悟和直觉。这次我们选择使用llama_factory来微调chatglm-4-9B大模型。 之前微调我们是用两块3090GPU显卡&…...

【Cesium】三、实现开场动画效果

文章目录 实现效果实现方法实现代码组件化 实现效果 实现方法 Cesium官方提供了Camera的flyTo方法实现了飞向目的地的动画效果。 官方API&#xff1a;传送门 这里只需要用到目的地&#xff08;destination&#xff09;和持续时间&#xff08;duration&#xff09;这两个参数…...

#渗透测试#红蓝攻防#红队打点web服务突破口总结01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成

适用于项目经理的跨团队协作实践&#xff1a;Atlassian Jira与Confluence集成 现代项目经理的核心职责是提供可视性、保持团队一致&#xff0c;并确保团队拥有交付出色工作所需的资源。在过去几年中&#xff0c;由于分布式团队的需求不断增加&#xff0c;项目经理这一角色已迅速…...

智能家居体验大变革 博联 AI 方案让智能不再繁琐

1. 全球AI技术发展背景及智能家居市场趋势 人工智能&#xff08;AI&#xff09;技术的飞速发展正在推动全球各行业的数字化转型。国际电信联盟与德勤联合发布《人工智能向善影响》报告指出&#xff0c;全球94%的商界领袖认为&#xff0c;人工智能技术对于其企业在未来5年内的发…...

云计算与服务是什么

云计算与服务是一个广泛而深入的话题&#xff0c;涵盖了云计算的基本概念、特点、服务类型以及应用场景等多个方面。以下是对云计算与服务的详细解析&#xff1a; ### 一、云计算的基本概念 云计算是一种基于互联网的计算方式&#xff0c;它通过动态易扩展且虚拟化的资源&…...

接口测试面试题

接口测试在软件测试中占据重要位置&#xff0c;无论是功能测试还是性能测试&#xff0c;接口的稳定性至关重要。以下总结了一些常见的接口测试面试题&#xff0c;帮助你从容应对面试挑战&#xff01; 面试官常说&#xff1a;“接口测试是测试的重头戏&#xff0c;了解接口的设计…...

【Cesium】六、实现鹰眼地图(三维)与主图联动效果

文章目录 一、前言二、效果三、实现方法2.1 思路2.2 方法2.3 使用 App.vue 一、前言 上一篇文章&#xff1a;【Cesium】五、地图实现鹰眼效果&#xff08;三维&#xff09;&#xff0c;虽然实现了3D 的鸟瞰图效果&#xff0c;但是只有鸟瞰图跟着 主地图在动&#xff0c;如果 在…...

ESLint+Prettier的配置

ESLintPrettier的配置 安装插件 ​​​​​​ 在settings.json中写下配置 {// tab自动转换标签"emmet.triggerExpansionOnTab": true,"workbench.colorTheme": "Default Dark","editor.tabSize": 2,"editor.fontSize": …...

4.微服务灰度发布落地实践(消息队列增强)

文章目录 前言问题分析消息队列特性分析kafkarocketmqrabbitmq 发布订阅公共抽象发送端订阅端 前言 消息队列是一种用于在应用程序的不同组件或系统之间传递消息的通信机制。它通过将消息存储在一个队列中&#xff0c;确保消息能够可靠地从发送方传递到接收方&#xff0c;即使…...

【从零开始入门unity游戏开发之——C#篇35】C#自定义类实现Sort自定义排序

文章目录 一、List<T>自带的排序方法1、List<T>调用Sort()排序2、 能够使用 Sort() 方法进行排序的本质 二、自定义类的排序1、通过实现泛型IComparable<T> 接口&#xff08;1&#xff09;示例&#xff08;2&#xff09;直接调用 int 类型的 CompareTo 方法进…...

音频进阶学习九——离散时间傅里叶变换DTFT

文章目录 前言一、DTFT的解释1.DTFT公式2.DTFT右边释义1&#xff09; 复指数 e − j ω n e^{-j\omega n} e−jωn2&#xff09;序列与复指数相乘 x [ n ] ∗ e − j ω n x[n]*e^{-j\omega n} x[n]∗e−jωn复指数序列复数的共轭正交正交集 3&#xff09;复指数序列求和 3.DTF…...

连接github和ai的桥梁:GitIngest

Git ingest GitIngest - 将任何 Github 仓库转变为适合 LLM 的友好型提示文本 (https://github.com/cyclotruc/gitingest) 输入 Github 地址或者名称&#xff0c;GitIngest 就会提供该仓库的总结、目录结构、仓库内容的文本内容 你可以复制这些文本与 AI 大模型更好地对话...

Pytorch使用手册-DCGAN 指南(专题十四)

1. Introduction 本教程将通过一个示例介绍 DCGANs(深度卷积生成对抗网络)。我们将训练一个生成对抗网络(GAN),在给它展示大量真实名人照片后,它能够生成新的“名人”图片。这里的大部分代码来源于 PyTorch 官方示例中的 DCGAN 实现,而本文档将对该实现进行详细解释,并…...

Flume的安装和使用

一、安装Flume 1. 下载flume-1.7.0 http://mirrors.shu.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz 2. 解压改名 tar xvf apache-flume-1.7.0-bin.tar.gz mv apache-flume-1.7.0-bin flume 二、配置Flume 1. 配置sh文件 cp conf/flume-env.sh.template …...

[Hive]七 Hive 内核

1. Hive架构 Hive架构主要包括&#xff1a; 用户界面&#xff1a;命令行&#xff08;CLI&#xff09;和web UIThrift Server&#xff1a;公开了一个非常简单的客户端执行HiveQL语句的API&#xff0c;包括JDBC&#xff08;Java&#xff09;和ODBC&#xff08;C&#xff09;&…...

Druid密码错误重试导致数据库超慢

文章目录 密码错误重试导致数据库超慢如何避免呢&#xff1f; 密码错误重试导致数据库超慢 有同事把项目的数据库密码配错了&#xff0c;导致其他所有连接该数据库的项目全部连接都获取缓慢了&#xff0c;一个页面加载要花费十几秒。排查mysql连接发现很多connect命令的连接 …...

Ubuntu 24.04安装和使用WPS 2019

为Ubuntu找一款免费、功能丰富的 Microsoft Office 替代品&#xff1f;WPS Office是理想选择&#xff01;在本文中&#xff0c;包含在Ubuntu上安装 WPS Office&#xff0c;修复初次使用出现问题的修复。 安装WPS&#xff0c;参考链接>>How to Install WPS Office on Ubu…...

week05_nlp大模型训练·词向量文本向量

1、词向量训练 1.1 CBOW&#xff08;两边预测中间&#xff09; 一、CBOW 基本概念 CBOW 是一种用于生成词向量的方法&#xff0c;属于神经网络语言模型的一种。其核心思想是根据上下文来预测中心词。在 CBOW 中&#xff0c;输入是目标词的上下文词汇&#xff0c;输出是该目标…...

【RabbitMQ消息队列原理与应用】

RabbitMQ消息队列原理与应用 一、消息队列概述 &#xff08;一&#xff09;概念 消息队列&#xff08;Message Queue&#xff0c;简称MQ&#xff09;是一种应用程序间的通信方式&#xff0c;它允许应用程序通过将消息放入队列中&#xff0c;而不是直接调用其他应用程序的接口…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...