012、实战:在单卡多卡上完成大模型全参数微调
012、实战:在单卡/多卡上完成大模型全参数微调一、从OOM报错说起昨天深夜,实验室的师弟跑来找我,屏幕上一行刺眼的CUDA out of memory。他试图在24G显存的3090上微调一个7B模型,加载完模型显存就爆了。“师兄,我不是只做微调吗,为什么比推理还吃显存?” 这个问题问得好,也是很多初学者第一次尝试全参数微调时会踩的坑。全参数微调(Full Parameter Fine-tuning)和推理最大的区别在于梯度计算和优化器状态。每个可训练参数都需要存储梯度,优化器(比如Adam)还要维护动量和方差两个状态。简单算笔账:7B模型用FP16加载,基础显存14GB,加上梯度14GB,Adam优化器状态28GB(每个参数需要2个FP32状态),还没算激活值就已经56GB了。这就是为什么单卡微调大模型需要技巧。二、单卡微调的生存法则先看一个能实际跑起来的单卡微调框架。我们以Hugging Face Transformers为例,但会加入一些工程上的调整:importtorchfromtransformersimportAutoModelForCausalLM,AutoTokenizer,TrainingArguments,Trainer# 关键技巧1:梯度累积# 单卡显存不够时,用时间换空间training_args=TrainingArguments(output_dir="./results",per_device_train_batch_size=2,# 调小batch sizegradient_accumulation_steps=8,# 累积8步相当于batch_size=16num_train_epochs=3,logging_dir="./logs",save_steps=500,fp16=True,# 混合精度训练,省显存还能加速gradient_checkpointing=True,# 用计算换显存,重要!)# 关键技巧2:梯度检查点# 这个功能会让前向传播中间结果不保存,反向时重新计算model=AutoModelForCausalLM.from_pretrained("model_name",use_cache=False,# 训练时必须关掉cach
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2523664.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!