三条路线,显存差十倍
绝大多数「微调 Qwen」的需求是第一种,很多人却按第三种去租卡。
LoRA / QLoRA
底座冻结,只训练插入的低秩矩阵,可训练参数占 0.1%–1%,显存只剩「装下底座」这一项。QLoRA 把底座量化到 4-bit,7B 权重压到 4 GB 左右,24 GB 消费卡够用。
全参微调
每参数要同时留住 bf16 权重、bf16 梯度、fp32 主权重与 AdamW 两个动量,合计 16 字节。7B 就要 70–112 GB,卡在 80 GB 单卡的下限,14B 以上必须多卡分片。
继续预训练
显存账和全参一样,但时间尺度是周和月,瓶颈变成数据吞吐与卡间通信。单节点 8 卡起步,跨节点还要加 400G InfiniBand,₮600 / 节点 / 月,仅 DFW-1 与 ORD-1 提供。
LoRA / QLoRA:按模型规模选卡
按序列 2048、micro-batch 1、开梯度检查点与 FlashAttention-2 估的峰值显存,已含碎片余量;拉长上下文再留 20%–40%。
| 模型规模 | QLoRA(4-bit 底座) | LoRA(bf16 底座) | 够用的卡型 | 月租 | 周租 |
|---|---|---|---|---|---|
| 7B / 8B 级 | 8–12 GB | 20–26 GB | QLoRA:RTX 4090 24GB bf16:RTX 5090 32GB | ₮369 / ₮499 | ₮109 / ₮149 |
| 14B 级 | 14–18 GB | 34–42 GB | QLoRA:RTX 4090 / 5090 bf16:L40S 48GB | ₮369 / ₮649 | ₮109 / ₮189 |
| 32B 级 | 24–32 GB | 72–86 GB | QLoRA:RTX A6000 48GB bf16:A100 80GB | ₮389 / ₮899 | ₮115 / ₮269 |
| 72B 级 | 46–58 GB | 155–175 GB | QLoRA:A100 PCIe 80GB bf16:MI300X 192GB 单卡 | ₮899 / ₮1,699 | ₮269 / ₮489 |
72B 的 bf16 LoRA 是少数值得考虑 AMD MI300X 的场景:192 GB 单卡装得下整个底座,省掉分片通信;代价是 ROCm 下部分算子要自己验证,依赖自定义 CUDA kernel 的还是选 A100 80GB 或 H100。
全参微调:显存到底怎么算
混合精度 AdamW 下每参数的常驻开销是固定的四笔账,加起来就是「参数量 × 系数」。
| 常驻项 | bf16 + AdamW | + 8-bit 优化器 |
|---|---|---|
| bf16 权重 | 2 字节 | 2 字节 |
| bf16 梯度 | 2 字节 | 2 字节 |
| fp32 主权重 | 4 字节 | 4 字节 |
| 动量 m + 方差 v | 8 字节 | 2 字节 |
| 合计(每参数) | 16 字节 | 10 字节 |
激活值另算,再留 15%–30%。「12–16 倍参数量」这个经验系数说的就是上表加激活余量后的占用。
| 模型规模 | 状态显存 | 最小可行配置 | 月租 |
|---|---|---|---|
| 7B / 8B 级 | 70–112 GB | 1 × A100 / H100 80GB(须 8-bit 优化器) 宽裕:1 × H200 141GB | ₮899 起 / ₮2,599 |
| 14B 级 | 140–224 GB | 4 × A100 SXM(ZeRO-3) 宽裕:4 × H100 SXM | ₮4,308 / ₮7,444 |
| 32B 级 | 320–512 GB | 8 × A100 SXM 640GB(ZeRO-3) 宽裕:8 × H100 SXM | ₮8,352 / ₮14,432 |
| 72B 级 | 720–1,152 GB | 8 × H100 SXM + 优化器 offload 宽裕:8 × H200 + 8-bit 优化器 | ₮14,432 / ₮19,752 |
四个省显存的开关,省的不是同一样东西
它们常被一起打开,搞混了就会得出「开了 bf16 怎么还 OOM」这种结论。
- 混合精度(bf16)不省优化器。上一节那 12 字节的 fp32 主权重与动量原封不动,减半的只有激活值与算子中间量,整体约省 25%–35%。它真正的收益是算得快、动态范围够大不必 loss scaling。
- 梯度检查点省的是激活值。反向时重算而不保存中间激活,激活显存从随层数线性增长降到约平方根级别,实测省 60%–80%,代价是吞吐降 20%–30%。长上下文必开:2K 拉到 32K,激活是主要增量。
- 8-bit 优化器省的是动量。AdamW 的 m 与 v 从 fp32 压到 int8,每参数由 16 字节降到 10 字节,7B 全参从 112 GB 降到 70 GB,正好卡进 80 GB 单卡。长周期预训练还是 fp32 动量保险。
- 梯度累积不省显存,只换等效 batch。micro-batch 设 1、累积 16 步,等效 batch 就是 16,峰值显存仍按 micro-batch 1 算。真正吃穷显存的是 micro-batch 和序列长度。
多卡怎么配:ZeRO 分级与互联方式
DeepSpeed 的 ZeRO(以及 PyTorch 原生 FSDP)按「分片什么」分三级,N 为卡数。
| 阶段 | 分片对象 | 每卡字节 / 参数 | 8 卡时 32B 每卡占用 | 通信量 | 适用 |
|---|---|---|---|---|---|
| ZeRO-1 | 优化器状态 | 4 + 12 / N | 176 GB | 与 DDP 相同 | 只差一点显存时最省事 |
| ZeRO-2 | + 梯度 | 2 + 14 / N | 120 GB | 与 DDP 相同 | 单机 8 卡的默认档 |
| ZeRO-3 | + 参数本身 | 16 / N | 64 GB | 约 DDP 的 1.5 倍 | 模型放不下一张卡时 |
| ZeRO-Offload | 状态移到主机内存 | 4 / N 起 | 16 GB | 额外走 PCIe 与 CPU | 卡不够、时间够 |
这张表点出一件常被忽略的事:8 卡跑 32B 全参,ZeRO-1 与 ZeRO-2 每卡还要 176 GB 和 120 GB,都塞不进 80 GB 的 H100,必须上 ZeRO-3 才落到 64 GB。而 ZeRO-3 每步都要 all-gather 参数分片,卡间互联就成了决定因素。
checkpoint 直接写本地 NVMe
训练被拖慢,十次里有三次不是卡的问题,是 checkpoint 写错了地方。
| 要保存的东西 | 32B 级体积 | 写到哪里 | 价格 |
|---|---|---|---|
| 全参 checkpoint(含优化器状态) | 约 512 GB | 本地 NVMe,只留最近 2–3 份 | 已含 |
| 仅 bf16 权重(推理用) | 约 64 GB | 本地 NVMe,训完再上传 | 已含 |
| LoRA adapter | 几十 MB 至 1 GB | 随手 rsync 回本地都行 | 已含 |
| 数据集与长期归档 | 按实际 | 持久化存储卷 / S3 兼容对象存储 | ₮0.08 / ₮0.015 每 GB 月 |
# 单卡 QLoRA:7B 级 Qwen,一张 24GB 的 RTX 4090 就够 $ gpuli create --gpu 4090 --region LAS-1 --image pytorch-2.5-cu124 --cycle week # 输出目录指向实例本地 NVMe,不要指向挂载的网络存储卷 $ export OUTPUT=/data/ckpt/qwen-lora $ torchrun --nproc_per_node 1 train.py \ --load_in_4bit --lora_rank 64 --gradient_checkpointing true \ --bf16 --per_device_train_batch_size 1 --gradient_accumulation_steps 16 \ --max_seq_length 2048 --save_steps 500 --save_total_limit 3 --output_dir $OUTPUT # 8 卡 H100 全参:ZeRO-3,优化器状态 offload 到 1,600 GB 主机内存 $ deepspeed --num_gpus 8 train.py --deepspeed ds_zero3_offload.json --bf16 # 训完再一次性归档到对象存储,用所在机房的内网端点,不占公网出口 $ aws --endpoint-url https://s3-internal.dfw1.gpuli.com s3 sync /data/ckpt s3://qwen-runs/
save_steps 设 500 又往网络存储卷写,训练进程就要在写盘上干等几十分钟,8 张 H100 跟着空转。成本示例:8 卡 H100 跑一个月
32B 级全参微调的典型配置,一整月的完整账单,没有隐藏项。
| 项目 | 规格 | 30 天费用 |
|---|---|---|
| 8 × NVIDIA H100 SXM 月租 | 640 GB 显存 · NVLink 全互联 · 160 vCPU / 1,600 GB 内存 | ₮14,432 |
| 持久化存储卷 | 2,000 GB · ₮0.08 / GB / 月,放数据集 | ₮160 |
| 对象存储 | 1,000 GB · ₮0.015 / GB / 月,归档 checkpoint | ₮15 |
| 出口流量 | 25 Gbps 共享,不限量 | ₮0 |
| 公网 IPv4 与快照 | 1 个 IPv4 + 1 份快照,额度内 | ₮0 |
| 合计 | 含存储折合每卡每小时 ₮2.54,纯卡租金 ₮2.51;双节点另加 InfiniBand ₮600 / 节点 / 月 | ₮14,607 |
这 720 小时够跑多少轮
32B 全参、2,000 万 token 跑 3 个 epoch,按 6ND 约 1.15×1019 FLOPs,8 卡 H100 取 30% 有效算力,单次约 1.5 小时。量级估算差两三倍很正常,就算按 5 小时算,一个月也够跑上百轮。
为什么按月租更适合微调
吃掉时间的不是那一次训练,而是反复调参的循环。价格锁死之后卡闲着还是转着都一样,你才敢把学习率、rank 和数据配比扫一遍。细账见平台对比。
这四种情况,别在我们这儿开月租
微调选卡常见问题
微调 Qwen 7B,一张 RTX 4090 真的够吗?
LoRA 和全参微调,效果到底差多少?
你们的卡之间有 NVLink 吗?4090 多卡能训练吗?
训练跑到一半实例出问题,checkpoint 会丢吗?
save_steps 一定要设,save_total_limit 设 2–3 自动淘汰旧档。能按小时租吗?我的任务两天就跑完了。
从国内往实例传 200 GB 训练数据要多久?
先用一张周租 4090 把 LoRA 跑通。
₮109 / 7 天起,邮箱注册,USDT 充值,约 3 分钟拿到 SSH。确认要上全参再换 8 卡 H100。
本页最后更新: · 价格与库存以 GPU 租用价格 页为准