LitGPT 微调完全指南finetune_full / finetune_lora / finetune_adapter / finetune_adapter_v2 四种方法实战与原理【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgptLitGPT 通过litgpt finetune_*系列命令提供对 Alpaca、Dolly、LIMA 等指令数据集的预训练模型指令微调能力。本文以 tutorials/finetune.md 为骨架系统讲解全参数微调、LoRA/QLoRA 与 Adapter/Adapter V2 四种方法的适用场景、完整命令、核心参数与底层实现原理读者读完后可以依据自己的 GPU 显存与精度需求直接选型并跑通一条从数据准备、微调到推理验证的完整链路。一、概述LitGPT 支持的四种微调方法LitGPT 当前支持以下四种微调命令litgpt finetune_full litgpt finetune_lora litgpt finetune_adapter litgpt finetune_adapter_v2这些命令在 litgpt/main.py 的PARSER_DATA中统一注册分别对应litgpt.finetune.full、litgpt.finetune.lora、litgpt.finetune.adapter、litgpt.finetune.adapter_v2四个模块的setup入口函数。四个命令共享同一套训练管线设计基于 Lightning Fabric 构建训练环境默认数据集为 Alpaca各setup函数中data Alpaca() if data is None else data默认优化器为 AdamW默认学习率调度为「线性 warmup 余弦退火」见各文件中的get_lr_scheduler。[!TIP] 微调前先安装全部所需依赖pip install litgpt[all]。四种方法的本质区别在于哪些参数参与梯度更新这直接决定了显存占用与训练成本方法更新范围显存占用典型用途finetune_full全部模型权重最高作为对比基线、追求极致效果finetune_lora/ QLoRA仅低秩分解矩阵 A/B低单卡微调 7B 级模型的主流选择finetune_adapter可学习适配提示adaptation prompt最低显存受限场景约 500k 可训练参数finetune_adapter_v2适配提示 bias/scale 归一化层较低在 Adapter 基础上提升表达能力二、全参数微调litgpt finetune_full2.1 命令与特性litgpt finetune_full tiiuae/falcon-7b \ --data Alpaca全参数微调会训练所有模型权重参数在 litgpt/finetune/full.py 中直接以GPT(config)实例化完整模型并fabric.setup不做任何参数冻结是 LitGPT 中显存开销最大的微调方式。官方文档明确指出finetune 7B 级模型如 falcon-7b需要至少 8 块约 40GB 显存的 GPU因此该方法通常只推荐作为对比研究中的基线。2.2 常用参数litgpt finetune_full tiiuae/falcon-7b \ --data Alpaca \ --out_dir out/full/my-model-finetuned \ --precision 32-true--out_dir指定检查点与日志输出目录默认out/finetune/full--precision可选bf16-true、bf16-mixed、32-true。GPU 不支持 bfloat16 时如 MPS 的现代 Mac需传--precision 32-trueFabric 会自动识别 MPS 加速器--devices/--num_nodes多卡/多机扩展。在 full.py 中devices * num_nodes 1时自动启用 FSDP 策略并对每个Block开启激活检查点activation checkpointing以节省显存--train.micro_batch_size单卡 batch 大小可根据显存灵活调小--data默认 Alpaca可替换为 LIMA、Dolly 等内置数据集。从源码结构看finetune_full的训练循环fit函数会在每个eval.interval步验证集上计算 loss 与困惑度并用当前模型生成一条示例回答训练结束后把最终权重保存到out_dir/final/lit_model.pth见 full.py。2.3 测试微调后的模型litgpt generate tiiuae/falcon-7b \ --prompt Recommend a movie to watch on the weekend. \ --finetuned_path out/full/my-model-finetuned/lit_model_finetuned.pthGPU 支持 bfloat16 时脚本会自动使用该精度。三、LoRA 与 QLoRAlitgpt finetune_lora3.1 LoRA 原理低秩适配Low-Rank AdaptationHu et al. 2021将线性层的权重更新近似为低秩矩阵分解冻结预训练权重W (d×d)只学习两个低秩矩阵A (d×r)与B (r×d)最终更新量为BA叠加到冻结权重上。可训练参数量从d×d骤降为d×r r×d大幅降低显存并加速训练而对最终模型性能影响很小。从 litgpt/lora.py 的LoRALayer/LoRALinear实现可以看到具体机制矩阵B初始化为 0、A按高斯分布初始化更新量通过alpha/r缩放其中alpha的作用是「在改变 rank r 时减少重新调超参的需求」lora_alpha的 docstring 原话。LoRA 分支还对输入施加 dropoutlora_dropout。3.2 运行 LoRA 微调litgpt finetune_lora stabilityai/stablelm-base-alpha-3b \ --data Alpaca该示例在单块 RTX 309024GBGPU、CUDA 11.8 环境下即可完成 StableLM 3B 的 Alpaca 指令微调检查点会周期性地保存到out/目录。3.3 核心 LoRA 参数litgpt/finetune/lora.py 的setup函数定义了以下参数参数默认值说明--lora_r8LoRA 秩。需远小于原权重秩论文指出最低可为 1--lora_alpha16更新缩放系数alpha/r调整 r 时无需重调超参--lora_dropout0.05LoRA 分支输入端的 dropout--lora_queryTrue是否对注意力 query 矩阵应用 LoRA--lora_keyFalse是否对 key 矩阵应用 LoRA--lora_valueTrue是否对 value 矩阵应用 LoRA--lora_projectionFalse是否对注意力输出投影应用 LoRA--lora_mlpFalse是否对 MLP 层应用 LoRA--lora_headFalse是否对输出 head 应用 LoRA[!NOTE] LoRA 不仅可以作用于query、key、value矩阵还可以作用于projection、mlp与分类head。根据 QLoRA 论文第 4 节「在所有线性 Transformer 块层上应用 LoRA 才能匹配全参数微调的性能」。默认只作用于query和value如需扩展修改lora_*参数即可。仓库自带的 config_hub/finetune/tiny-llama/lora.yaml 示例将lora_r: 32并同时开启lora_key、lora_projection、lora_mlp、lora_head可作为追求更高性能的配置参考。3.4 QLoRA4-bit 量化微调通过--quantize参数即可启用 QLoRA 风格的量化微调。可用取值包括bnb.nf4、bnb.nf4-dq、bnb.fp4、bnb.fp4-dq、bnb.int8-training分别对应 bitsandbytes 的 4-bit NormalFloat / FP4可叠加双量化-dq与 8-bit 训练模式# 4-bit NormalFloat litgpt finetune_lora stabilityai/stablelm-base-alpha-3b \ --quantize bnb.nf4 # 带双量化 litgpt finetune_lora stabilityai/stablelm-base-alpha-3b \ --quantize bnb.nf4-dq在 lora.py 中bnb.*量化通过BitsandbytesPrecision插件实现且与混合精度不兼容--precision中含mixed会直接报错。量化模式下会使用 bitsandbytes 的StableEmbedding替换原始词嵌入层见 lora.py并使用instantiate_bnb_optimizer创建适配的优化器。需要注意量化目前不支持多 GPU 训练源码中明确raise NotImplementedError需devices1且num_nodes1。3.5 不同设置下的显存与耗时对比以下为官方教程 tutorials/finetune_lora.md 记录的实测数据StableLM 3B / Llama 2 7BAlpaca 数据集1,000 步迭代microbatch1供选型参考StableLM 3B设置训练显存训练耗时推理显存默认bf16-mixed26.92 GB1.34 min21.43 GB--precision bf16-true9.69 GB1.24 min7.30 GB--precision bf16-true --quantize bnb.nf46.35 GB1.82 min3.20 GB--precision bf16-true --quantize bnb.nf4-dq6.19 GB1.87 min3.04 GBLlama 2 7B设置训练显存训练耗时推理显存默认bf16-mixedOutOfMemoryErrorN/A40.21 GB--precision bf16-true21.30 GB2.36 min13.52 GB--precision bf16-true --quantize bnb.nf414.14 GB3.68 min4.57 GB--precision bf16-true --quantize bnb.nf4-dq13.84 GB3.83 min4.26 GB可见 QLoRA 式量化的优势在 7B 等更大模型上更加显著——它让 Llama 2 7B 的训练显存从直接 OOM 降到约 14GB推理显存更是降到 4.3GB 左右。更多资源需求对比可参考 tutorials/resource-tables.md。3.6 测试 LoRA 模型与合并权重litgpt generate out/lora/final \ --prompt Recommend a movie to watch on the weekend.LoRA 微调产出的是lit_model.pth.lora文件仅包含远小于原始模型的 LoRA 权重以节省存储空间。若在litgpt generate/litgpt chat等推理命令中使用LitGPT 会自动合并仅当需要在 LitGPT 之外使用检查点时才需要手动合并litgpt merge_lora out/lora/step-002000该命令会生成完整的lit_model.pth检查点消除推理时动态叠加 LoRA 权重的开销实现见 litgpt/scripts/merge_lora.py。事实上lora.py 在微调结束保存final检查点时也会自动调用merge_lora生成合并后的完整权重。四、Adapter 与 Adapter V2litgpt finetune_adapter/litgpt finetune_adapter_v24.1 原理从 Prefix Tuning 到 LLaMA-AdapterAdapter 方法源自 LLaMA-Adapter 论文Gao et al. 2023论文页标注 v1 为 2303.16199、v2 为 2304.15010其本质是一种前缀微调prefix-tuning形式在 LLM 的每个注意力块输入前拼接一组可学习的适应提示adaption prompt。在 StableLM 3B 上整个微调只需要更新约500k个参数显著降低显存占用并加速训练官方教程演示在单块 RTX 3060 上即可完成8 卡并行时可在 1 小时内完成微调。从 litgpt/adapter.py 的实现可以看到关键结构Config新增两个超参adapter_prompt_length: int 10适应提示长度与adapter_start_layer: int 2从第几层开始插入适配提示CausalSelfAttention在block_idx adapter_start_layer时添加可学习的adapter_wte嵌入层和初始化为全零的gating_factor零初始化门控微调仅更新这些新增参数对应论文的 zero-init attention 思想。LLaMA-Adapter v2Zhang et al. 2023在 v1 基础上扩展为 Transformer 中每个线性层新增可训练的bias 与 scale 参数StableLM 3B 约 1.5M 参数使归一化层normalization layers可训练约 300k 参数合计约2.3M可训练参数。4.2 运行 Adapter 微调litgpt finetune_adapter stabilityai/stablelm-base-alpha-3b \ --data Alpaca或使用 Adapter V2litgpt finetune_adapter_v2 stabilityai/stablelm-base-alpha-3b \ --data AlpacaAdapter 微调只需约 12GB 显存的 GPU。若要将 Adapter V2 控制在 12GB 内可设--train.micro_batch_size 2若希望 1 小时内完成官方建议--devices 4 --train.micro_batch_size 4。多卡场景下adapter.py 与 adapter_v2.py 同样启用 FSDP 策略并对 Block 开启激活检查点。两个命令同样支持--out_dir自定义输出目录、--precision 32-true适配不支持 bfloat16 的环境以及--quantize量化微调litgpt finetune_adapter stabilityai/stablelm-base-alpha-3b \ --quantize bnb.nf4 litgpt finetune_adapter_v2 stabilityai/stablelm-base-alpha-3b \ --quantize bnb.nf4-dq4.3 测试 Adapter 模型litgpt generate_adapter stabilityai/stablelm-base-alpha-3b \ --prompt Recommend a movie to watch on the weekend.或 Adapter V2litgpt generate_adapter_v2 stabilityai/stablelm-base-alpha-3b \ --prompt Recommend a movie to watch on the weekend.输出示例A good movie to watch on the weekend would be The Lion King, since its a classic family film that everyone can enjoy...4.4 Adapter 检查点与恢复训练Adapter 微调保存的是仅含适配器权重的lit_model.pth.adapter/lit_model.pth.adapter_v2文件保存时通过adapter_filter只筛选适配器相关权重见 adapter.py。与 LoRA 类似加载预训练权重时使用strictFalse因为适配器权重不在预训练 state dict 中。此外finetune_adapter_v2还额外支持--resume断点续训启动时会自动查找out_dir下最新的step-*/*.pth.adapter_v2检查点并从中恢复见 adapter_v2.py。五、使用自定义数据集微调四种方法都支持用 JSON 格式的指令数据微调。第一步创建 JSON 数据文件。每一行元素对应一条「指令-回复」对字段包含instruction、output可选input。注意input字段目前只在 Alpaca 聊天模板中使用若指令无需上下文可置为空字符串[ { instruction: Arrange the given numbers in ascending order., input: 2, 4, 0, 8, 3, output: 0, 2, 3, 4, 8 }, { instruction: What is the capital of France?, input: , output: Paris } ]第二步通过--data JSON指定数据路径litgpt finetune_lora stabilityai/stablelm-base-alpha-3b \ --data JSON \ --data.json_path data/mydata.json \ --out_dir out/mydata-finetunedtiiuae/falcon-7b等模型名可替换为任意已下载的 checkpoint 路径如checkpoints/stabilityai/stablelm-base-alpha-3b。第三步验证与使用微调结果litgpt chat out/mydata-finetuned/final或部署为服务litgpt serve out/mydata-finetuned/final六、准备工作与进阶资源四种微调方法共用的准备工作只需执行一次按 README.md 安装依赖并执行pip install litgpt[all]按 tutorials/download_model_weights.md 下载并转换权重到checkpoints/目录。LitGPT 内置了 Alpaca、LIMA、Dolly 等常用微调数据集关于支持的指令数据集清单以及如何准备更多自定义数据可参见 tutorials/prepare_dataset.md。各方法的独立教程与原始论文资源全参数微调tutorials/finetune_full.mdLoRA/QLoRAtutorials/finetune_lora.md概念入门可参考参数高效 LLM 微调教程 Parameter-Efficient LLM Finetuning With Low-Rank Adaptation (LoRA)Adapter/Adapter V2tutorials/finetune_adapter.md概念入门可参考 Understanding Parameter-Efficient Finetuning of Large Language Models: From Prefix Tuning to LLaMA-Adapters显存与资源参考tutorials/resource-tables.md七、选型总结显存充裕多卡 40GB且需要最强效果选择finetune_full作为基线单卡微调 7B 级模型、追求性价比选择finetune_lora显存紧张时叠加--quantize bnb.nf4-dq降为 QLoRA显存极度受限约 12GB选择finetune_adapter需要更强表达能力时选择finetune_adapter_v2约 2.3M 可训练参数。从源码结构看四种方法的训练循环、验证逻辑、学习率调度与检查点保存机制高度一致均由各自模块的fit/validate/get_lr_scheduler/save_*_checkpoint组成差异集中于「哪些参数被标记为可训练」与「模型结构如何插入可学习模块」。因此无论选择哪种方法其余的经验如--train.micro_batch_size的显存调节、--out_dir的组织方式、--data JSON的自定义数据流程都可以直接迁移复用。【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考