当前位置: 首页 > 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;而不是直接调用其他应用程序的接口…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...

以太网PHY布局布线指南

1. 简介 对于以太网布局布线遵循以下准则很重要&#xff0c;因为这将有助于减少信号发射&#xff0c;最大程度地减少噪声&#xff0c;确保器件作用&#xff0c;最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确&#xff0c;然…...

华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手

华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...

(12)-Fiddler抓包-Fiddler设置IOS手机抓包

1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求&#xff0c;也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求&#xff0c;比如 iPhone、iPad 和 MacBook 等苹…...