RTX 3060 12G 微调 7B 大模型总爆显存?我拿 QLoRA 踩了 6 个坑,LoRA rank、批量、AMP 参数这样设

🔑 关键词:深度学习,显存优化,QLoRA微调,RTX3060,LoRA参数

📖 摘要:RTX 3060 12G 微调 7B 大模型总爆显存?这篇从显存账本、QLoRA 参数、PyTorch 安装版本到 OOM 排查顺序,给你一套能跑通的土办法。

先说结论:RTX 3060 12G 能微调 7B,但别碰全量,QLoRA 4bit 是主路。我的机器是 i5-12400、32GB DDR4、RTX 3060 12GB、Ubuntu 22.04、CUDA 12.1、PyTorch 2.1.2。第一次跑 7B 全量微调,还没到 backward 就 CUDA OOM,nvidia-smi 显示 11.8GB 被吃满。后来换成 QLoRA,seq len 512、batch 1、grad accum 16,才稳下来。速度不快,约 1.3-1.8 step/s,但能出活。

图片

我后来不先看模型结构,先算四本账:权重、梯度、优化器状态、激活。7B FP16 权重约 14GB。全量 AdamW 还要 fp16 梯度 14GB,fp32 m/v 各 28GB,master weights 28GB,合计 112GB 左右,这还没算激活。QLoRA 4bit 权重约 3.5-4GB,LoRA 可训练参数 1700 万左右,fp16 约 34MB,paged_adamw_8bit 状态约 100MB 级别。12GB 卡能不能跑,基本由激活和 seq len 决定,不是由 7B 这个名字决定。 | 方案 | 权重 | 优化器/梯度 | 12GB 卡 | | 全量 FP16 | 14GB | 约 98GB+ | 基本别想 | | LoRA FP16 | 14GB | 较小 | 难 | | QLoRA 4bit | 3.5-4GB | 约 0.1GB | 有希望 |

图片

如果你也遇到 OOM,按这个顺序试,别一上来换卡。1 先看 nvidia-smi,确认是训练还是 tokenizer 或推理占着。2 max_seq_length 从 1024 降到 512 再到 256,通常最先见效。3 per_device_train_batch_size=1,gradient_accumulation_steps=16,等效 batch 16。4 开 gradient_checkpointing=True,用 optim=paged_adamw_8bit。5 关掉 evaluation_strategy,训练中评估会多占一截。6 DataLoader 的 num_workers=2 或 4,pin_memory=True,persistent_workers=True,但 Windows 下 num_workers 大了反而卡。

图片

LoRA 参数我最常用这组:r=16,lora_alpha=32,lora_dropout=0.05,target_modules=['q_proj','k_proj','v_proj','o_proj'],bias='none'。学习率 2e-4,cosine,warmup_ratio=0.03,weight_decay=0.001。如果你只有几百条数据,r=8 就够,r=64 容易过拟合。alpha 一般设 r 的 1-2 倍,r=8 配 alpha=16,r=16 配 alpha=32。别把 gate/up/down 全加上,3060 上会慢很多,显存也多一截。

图片

环境我踩过最大的坑是 bitsandbytes 和 CUDA 版本对不上。Ubuntu 22.04 + CUDA 12.1 下,我用 Python 3.10、torch 2.1.2+cu121、transformers 4.41.2、peft 0.11.1、trl 0.9.6、accelerate 0.31.0、bitsandbytes 0.43.1。Windows 原生跑 bitsandbytes 经常报错,WSL2 好一些,但显存共享会少几百 MB。数据用 jsonl,一行一个样本,字段 instruction/input/output,tokenizer 开 truncation=True,max_length=512,packing=False。不要手动 padding 到 max_length,交给 DataCollator 动态 padding。

图片

我的独立观点:小显存微调不是训练,是适配器工程。你的目标不是让 7B 记住新知识,而是让它学会你的格式、语气和任务映射。数据清洗 200 条,比把 r 从 16 拉到 64 更有用。训练完别直接用 fp16 合并权重推理,7B fp16 约 14GB,3060 12G 会爆。推理我转 GGUF Q4_K_M,约 4GB,或者继续 4bit 加载加 LoRA。对比下来,训练用 QLoRA,推理用 llama.cpp,是我在 12GB 卡上最省心的组合。慢是慢,但比云卡账单便宜。

图片

🏷️ 标签: