链载Ai

标题: 【大模型微调】5.调参经验总结与显存占用因素探究 [打印本页]

作者: 链载Ai    时间: 2 小时前
标题: 【大模型微调】5.调参经验总结与显存占用因素探究

引言

本文承接本系列第二篇文章,继续探究各参数应该如何进行设置,以及其对模型显存的影响。

调参参考经验总结

训练模型的过程通常被戏称为“炼丹”。参数组合和结果息息相关,但没有标准最优参数组合。

因此,在自行钻研之前,有必要先看看别人是怎么做的。

1. 北航 ACT 实验室的调参经验

北航 ACT 实验室做了一份教程[1],参数经验概括如下:

2. 核心开发者的调参经验

LLaMA-Factory 的核心开发者马勇强在知乎上写了一篇入门文档[2],其在微调时的参数选择脚本如下:

CUDA_VISIBLE_DEVICES=0llamafactory-cli train \
--stage sft \
--do_train \
--model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \
--dataset alpaca_gpt4_zh,identity,adgen_local \
--dataset_dir ./data \
--template llama3 \
--finetuning_type lora \
--output_dir ./saves/LLaMA3-8B/lora/sft \
--overwrite_cache \
--overwrite_output_dir \
--cutoff_len1024\
--preprocessing_num_workers16\
--per_device_train_batch_size2\
--per_device_eval_batch_size1\
--gradient_accumulation_steps8\
--lr_scheduler_type cosine \
--logging_steps50\
--warmup_steps20\
--save_steps100\
--eval_steps50\
--evaluation_strategy steps \
--load_best_model_at_end \
--learning_rate5e-5\
--num_train_epochs5.0\
--max_samples1000\
--val_size0.1\
--plot_loss \
--fp16

对应修改点如下:

3. 其它博主的调参经验

easy-dataset 的作者 ConardLi 的文章[3]也分享了调参经验,总结归纳如下:

训练模型显存占用组成

文章[3]还指出,训练模型时,模型的显存主要由以下几部分组成:

总结一下,训练模型和推理模型差别很大,影响显存占用的因素更多,因此无法直接去准确衡量,还是需要实验进行测试。

实验

下面来进行实验,使用DeepSeek-R1-7B作为基础模型,以秩为 8 的 LoRA 作为微调方法,进行“消融实验”。

1. 多卡开销有多大?

首先验证一下,使用多卡运行相比单卡运行,需要增加多少显存。

用单卡运行,显存占用16.64GB。

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

再用八卡运行,开启DeepSpeed stage 3,显存占用76.88GB。

该实验说明,多卡运行看上去并不是简单的做一些通信开销,而可能存在把模型复制多份的情况,具体策略和控制参数有待研究。

2. LoRA数值影响多大?

下面以上面八卡运行的显存占用情况作为基准,将LoRA的秩调到16,显存占用80.39GB。

说明调大 LoRA 数值后,显存占用约有4GB左右提升。

3. 批处理大小影响多大?

下面将批处理大小从 2 调整成 16,显存占用约181.97GB。

说明批处理大小影响很大,基本上是成倍效果的提升。

4. 计算精度影响多大?

下面将计算精度从bf16调到fp32,显存占用约183.06GB。

说明计算精度也会对显存占用产生巨大影响,混合精度机制已经省了巨量显存。

5. 量化影响多大?

下面使用 QLoRA 设置 lora量化等级为4,显存占用约48.83GB。

QLoRA确实也能剩下很多显存。

6. liger_kernel可以节省显存吗?

默认的加速方式采用的是flashattn2。

下面换成 liger_kernel进行测试,显存占用约80.62GB,并没有减少显存占用,反而略微增加。

7. 多模态模型和纯语言模型显存占用差别有多大?

如果微调多模态模型,视觉编码器和多模态投影编码默认是冻结的,只微调语言模型。

因此,是否同参数量下多模态语言和纯语言模型显存占用差不多呢?

总结一下之前做的实验(实验时batch size取1),结果如下:

总结表

结果是不确定,相同参数量下,模型架构不同,影响仍然很大。







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5