首页 > 其他分享 >【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型

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

时间:2024-12-31 19:28:50浏览次数:3  
标签:实战篇 format auto 模型 9B json train true

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及其三级模式介绍

标签:实战篇,format,auto,模型,9B,json,train,true
From: https://blog.csdn.net/weixin_65514978/article/details/144832965

相关文章

  • WOFOST作物模型(3):敏感性分析
    目录一、定义参数范围二、采样生成参数样本三、运行不同参数组下的WOFOST四、计算敏感度与可视化1.敏感度2.二阶交互敏感度五、敏感变量对产量的影响结果可视化一、定义参数范围使用TAGP(TotalAboveGroundProduction),地上总产量TSUM1,temperatures......
  • 使用few-shot Prompt template让大模型更懂你
    在本教程中,我们将学习如何创建一个使用少量示例的提示模板(Prompttemplate)。少量示例的提示模板可以从一组示例(examples)或一个示例选择器(Exampleselector)对象构建。 使用示例集首先,创建一个少量示例的列表。每个示例应该是一个字典,键是输入变量,值是这些输入变量的值。......
  • QVQ-72B 多模态大模型实践
    QVQ-72B多模态大模型实践flyfish文末有完整源码QVQ-72B-Preview是由Qwen团队开发的实验性研究模型,专注于增强视觉推理能力。想象一下,如果我们的大脑里的语言和看东西的能力结合在一起,我们就能更好地理解周围的世界。我们用语言来思考问题,用眼睛记住画面,这样我们就能......
  • 团队小规模本地大模型服务平台搭建 - Ubuntu
    实现目标和考虑因素部署一个支持多用户同时使用、多模型运行的离线局域网大模型服务器需要考虑以下几个关键因素:大模型的加载和管理。使用一个基础大模型,根据实战需要创建多个专用模型,模型管理方便可靠。并发用户和请求管理。设置管理员、用户角色,用户管理方便可靠,支持多名用......
  • 2024年回顾:AI大模型在科学研究中的十大应用案例
    大语言模型(LLM)已迅速成为科学研究的变革力量,彻底改变了科学家处理复杂问题、分析数据和产生新见解的方式。本文重点介绍 2024年在科学研究中十个案例,展示了LLM在各个科学领域的多样化和有影响力的应用。 1.药物研发牛津大学与瑞士联邦理工学院(EPFL)、剑桥大学、康......
  • 51c大模型~合集99
    我自己的原文哦~   https://blog.51cto.com/whaosoft/12973297#GLM-Zero-Preview 考研数学得126分、还能编写小游戏,智谱首个推理模型来了,人人免费用2024年的最后一天,智谱GLM模型家族迎来了一位新成员——GLM-Zero的初代版本GLM-Zero-Preview,主打深度思考与推理。......
  • 浅谈大模型私有化+精调:面向垂直行业与特定场景之需
    今天探讨大模型的私有化和精调,以便让预训练的通用模型更好地适应特定的任务或行业需求。当然,从产品经理的视角出发,我们不会非常深入(鄙人能力也有限),而是建立相关的基本认知。个人观点仅供参考,欢迎评论区补充、斧正~预警:全文约1万字,且比较偏技术&理论。如果你只是想了解下......
  • 通用与垂直大模型:应用、挑战与未来发展
    本文全面探讨了通用大模型和垂直大模型在人工智能、互联网行业以及教育领域的应用、优势、挑战和未来发展趋势。大模型的发展正经历分化,通用大模型和垂直大模型各有侧重,共同推动AI技术进步和商业智能变革。1.1通用大模型的定义与特点通用大模型是人工智能领域中的重要......
  • 从技术的角度来看大模型产业链
    “分工合作才是社会进步的根本,而大模型也是如此,每个人都应该在大模型领域找到自己的位置”大模型技术虽然指的是以机器学习和神经网络模型为主的机器学习模型,但大模型并不只是一个独立的技术,由于其复杂度和对算力和能源的需求,因此大模型整个体系由多层功能组成,而这些层就......
  • Agent:大模型落地的新前沿,你可以不懂大模型,但一定要知道agent
    大家好!今天我要为大家详细介绍一个在大模型应用中逐渐崭露头角的重要领域——Agent。尽管很多人对Agent还不是很了解,但事实上,Agent已经在各行各业中得到了广泛应用,例如数据分析助手和自然语言转关系型数据库(Text-to-SQL)等场景。什么是Agent?Agent是一种能够自主感知环境、......