模型微调方法和资源占用解析

当前大模型微调领域 LoRA 确实是应用最广泛的方法,但并非唯一选择。以下是主流方法的实际使用现状与技术趋势分析:

一、当前微调方法热度排行(2024年)

方法使用频率典型场景代表框架/论文
LoRA⭐⭐⭐⭐⭐单卡微调7B~70B模型Hugging Face PEFT库
QLoRA⭐⭐⭐⭐低显存场景(4-bit量化微调)bitsandbytes + PEFT
Full FT⭐⭐⭐算力充足的企业级训练NVIDIA Megatron、DeepSpeed
Adapter⭐⭐需要模块化扩展的多任务场景AdapterHub、MAM
Prompt Tuning⭐⭐生成式任务轻量化适配T5、FLAN

二、资源估算指导表

模型尺寸精度显存需求(GB)推荐硬件配置
7BFreeze(FP16)20RTX 4090
7BLoRA(FP16)16RTX 4090
7BQLoRA(INT8)10RTX 4080
7BQLoRA(INT4)6RTX 3060
13BFreeze(FP16)40RTX 4090/A100(40GB)
13BLoRA(FP16)32A100(40GB)
13BQLoRA(INT8)20L40(48GB)
13BQLoRA(INT4)12RTX 4090
30BFreeze(FP16)80A100(80GB)
30BLoRA(FP16)64A100(80GB)
30BQLoRA(INT8)40L40(48GB)
30BQLoRA(INT4)24RTX 4090
70BFreeze(FP16)200H100(80GB)*3
70BLoRA(FP16)160H100(80GB)*2
70BQLoRA(INT8)80H100(80GB)
70BQLoRA(INT4)48L40(48GB)

三、freeze方式显存资源占用分析

输入参数:模型大小:7B,精度:Freeze(FP16)

估算项目包括:

  • 冻结的模型参数(fp16):
  • 可训练参数的梯度(fp32):
  • 可训练参数的优化器状态(如Adam,需要fp32的动量、方差):两倍于可训练参数的数量
  • 激活值:如果冻结大部分层,可能只需要保存可训练层之前的激活值,这部分可能较小。或者,如果整个模型的前向传播需要保存激活值,则可能仍然较大,但可能因为冻结而无需保存,所以激活值显存减少。

1. 冻结参数(90%)

  • 7B × 90% × 2字节 = 12.6 GB(fp16)
2. 可训练参数(10%)
  • 参数存储:0.7B × 2字节 = 1.4 GB(fp16)
  • 梯度:0.7B × 4字节 = 2.8 GB(fp32)
  • 优化器状态(如Adam):0.7B × 8字节 = 5.6 GB(2个fp32状态)
  • 总计:1.4 + 2.8 + 5.6 = 9.8 GB
3. 激活值
  • 假设仅需保存可训练层之前的激活值(如适配器或分类头):
    • 小批量(batch_size=1):≈ 1-2 GB(fp16)
    • 大批量(batch_size=32):≈ 2-4 GB(fp16)
4. 其他开销
  • CUDA上下文、临时缓冲区等:≈ 1 GB

估算结果:

场景显存占用(估算)
小批量12.6 GB(冻结) + 9.8 GB(可训练) + 2 GB(激活) + 1 GB ≈ 25.4 GB
大批量12.6 GB + 9.8 GB + 4 GB + 1 GB ≈ 27.4 GB

四、lora(fp16)微调方式显存占用分析

需要明确7B模型的结构。通常,像GPT这样的模型参数主要集中在注意力机制和前馈网络中的权重矩阵。假设7B参数模型的结构类似于GPT-3,其中每个Transformer层包含多个大矩阵,比如查询(Q)、键(K)、值(V)以及前馈网络(FFN)的两个大矩阵。LoRA通常应用于这些矩阵,通过添加低秩分解的矩阵对(A和B),其中A的维度是d×r,B的维度是r×d,r是秩,通常很小(比如8或16)。

在采用 LoRA(Low-Rank Adaptation) 方法结合 fp16 精度对 7B参数模型 进行微调时,显存占用估算如下:

关键假设

  1. 模型结构:7B参数模型(如类GPT结构),隐藏层维度 d=4096,层数 L=32。
  2. LoRA配置
    • 秩 r=8,应用于注意力机制(Q、K、V)和前馈网络(FFN)的权重矩阵。
    • 每个可训练矩阵引入 2×d×r 参数(低秩分解矩阵A和B)。
  3. 精度与存储
    • 原始模型参数以 fp16 存储(冻结)。
    • LoRA参数以 fp16 存储,梯度和优化器状态以 fp32 存储。
  4. 批量与序列:假设批量大小 batch=1,序列长度 seq=512。

显存占用分解

1. 原始模型参数(冻结)
  • 总参数:7B(7,000,000,000)
  • 显存占用:7e9×2 bytes=14 GB(fp16)
2. LoRA可训练参数
  • 参数数量
    • 每个Transformer层应用LoRA的矩阵:Q、K、V、FFN(共4个矩阵)。
    • 每矩阵参数:2×d×r=2×4096×8=65,536。
    • 每层参数:4×65,536=262,144。
    • 总参数:32 层×262,144=8,388,608(约 8.4M)。
  • 参数存储:8.4e6×2 bytes=16.8 MB≈0.017 GB(fp16)。
3. 梯度与优化器状态
  • 梯度:8.4e6×4 bytes=33.6 MB≈0.034 GB(fp32)。
  • 优化器状态(Adam)
    8.4e6×8 bytes=67.2 MB≈0.067 GB(动量+方差,fp32)。
4. 激活值
  • 冻结层激活值无需保存,仅需存储可训练层(LoRA适配部分)的中间结果。
  • 估算显存:1−2 GB(fp16,与批量大小和序列长度相关)。
5. 其他开销
  • CUDA上下文、临时缓冲区等:≈ 1 GB。
组件显存占用(估算)
原始模型参数(fp16)14 GB
LoRA参数(fp16)0.017 GB
梯度(fp32)0.034 GB
优化器状态(fp32)0.067 GB
激活值(fp16)1-2 GB
其他开销1 GB
总计16.1-17.1 GB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值