尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LitGPT Adapter 微调实战:用 LLaMA-Adapter / Adapter V2 在单卡上高效完成指令微调

LitGPT Adapter 微调实战:用 LLaMA-Adapter / Adapter V2 在单卡上高效完成指令微调 LitGPT Adapter 微调实战用 LLaMA-Adapter / Adapter V2 在单卡上高效完成指令微调【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt本篇技术指南以 tutorials/finetune_adapter.md 为核心系统讲解在 LitGPT 中如何使用 AdapterLLaMA-Adapter与 Adapter V2 两种参数高效微调方法在仅更新百万级参数的前提下完成 Alpaca 指令微调并给出从环境准备、训练命令、显存与速度调优、量化、生成验证到自有数据集微调的完整实操方案。读完本文你将掌握 Adapter 系列微调的完整命令行工作流并理解其零初始化门控 可学习前缀的底层实现原理。Adapter 与 Adapter V2 核心原理AdapterLLaMA-Adapter最初为 LLaMA 模型提出论文《LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention》是一种前缀微调prefix-tuning方法它在 LLM 各注意力模块的输入前拼接一个可学习的适应提示adaption-prompt微调时只更新这部分新增参数。以 StableLM 3B 为例Adapter 需要更新的参数总量仅约50 万~500k大幅降低了显存占用并加速了训练。在 litgpt/adapter.py 中可以看到这一设计对应的模型结构改动新增Config字段adapter_prompt_length: int 10适应提示的长度与adapter_start_layer: int 2从第几个 Transformer 层开始插入 adapter在CausalSelfAttention中当block_idx adapter_start_layer时加入adapter_wte嵌入层和gating_factor门控因子两个新参数其中gating_factor初始化为全零零初始化门控保证训练初期不扰动预训练模型的输出前向计算时把适配前缀经qkv投影后作为额外的 K/V 参与注意力计算再用gating_factor缩放后叠加到原始注意力输出上y self.gating_factor * ay。LLaMA-Adapter V2在 v1 基础上进一步扩展论文《LLaMA-Adapter V2: Parameter-Efficient Visual Instruction Model》为 Transformer 中每个线性层添加可训练的偏置bias与缩放scale参数将**归一化层normalization layers**改为可训练。文档给出的参数规模对比StableLM 3B 上 v1 可训练参数约 50 万V2 额外增加约 150 万bias scale和约 30 万归一化层总计约230 万~2.3M可训练参数。这些参数在 litgpt/adapter_v2.py 中由adapter_filter列出除 v1 的adapter_wte、gating_factor外还包含adapter_scale、adapter_bias、norm_1、norm_2、ln_f。正是由于只训练这些轻量参数文档作者演示了在单张 RTX 3060 GPU上对 LitGPT StableLM 3B 完成 Alpaca 指令微调若使用 8 张 GPU微调可在1 小时内完成。环境准备只需一次开始微调前完成两步一次性准备按 README 中的说明安装依赖按照 权重下载与转换指南 下载并转换模型权重。LitGPT 内置了常用微调数据集Alpaca、LIMA、Dolly 等开箱即用也可以按 prepare_dataset.md 教程自行准备数据集并在微调时通过--data切换。运行微调基础命令Adapter v1litgpt finetune_adapter stabilityai/stablelm-base-alpha-3b \ --data Alpaca基础命令Adapter V2litgpt finetune_adapter_v2 stabilityai/stablelm-base-alpha-3b \ --data Alpaca注意finetune_adapter与finetune_adapter_v2是 CLI 注册的子命令见 litgpt/main.py 中的命令映射两者分别对应 litgpt/finetune/adapter.py 与 litgpt/finetune/adapter_v2.py 的setup入口。显存与速度调节微调至少需要约 12 GB 显存的单张 GPU通过--devices传入更多 GPU 可加速训练通过--train.micro_batch_size调节单次微批大小以充分利用显存。例如在 12 GB 显存上跑 Adapter V2可设置--train.micro_batch_size 2。以下配置可让微调在 1 小时内完成--devices 4 --train.micro_batch_size 4从源码看训练循环在 litgpt/finetune/adapter.py 的fit中实现global_batch_size与micro_batch_size结合devices、num_nodes自动计算梯度累积步数gradient_accumulation_itersTrainArgs的默认值为save_interval1000、log_interval1、global_batch_size16、micro_batch_size1、lr_warmup_steps100、epochs5。学习率调度采用线性预热 余弦退火get_lr_scheduler。训练脚本还会校验参数Adapter 系列不支持max_tokens、max_norm、tie_embeddings、lr_warmup_fraction且必须设置epochs或max_steps与eval.max_new_tokens。指定输出目录脚本会周期性把检查点保存到out_dir目录。为不同模型或自有数据集指定独立输出目录litgpt finetune_adapter stabilityai/stablelm-base-alpha-3b \ --data Alpaca \ --out_dir out/adapter/my-model-finetunedlitgpt finetune_adapter_v2 stabilityai/stablelm-base-alpha-3b \ --data Alpaca \ --out_dir out/adapter_v2/my-model-finetuned默认输出目录分别为out/finetune/adapter与out/finetune/adapter-v2见两个setup函数的out_dir默认值。精度与 MacMPS支持若 GPU 不支持bfloat16可传入--precision 32-true。例如在 MPS现代 Mac 的 GPU上微调litgpt finetune_adapter stabilityai/stablelm-base-alpha-3b \ --data Alpaca \ --out_dir out/adapter/my-model-finetuned \ --precision 32-true在 Mac 上运行时Fabric 会自动选择mps作为加速器。此外setup支持bf16-true、bf16-mixed、32-true等精度选项未指定时会通过get_default_supported_precision(trainingTrue)自动选择硬件支持的默认精度。量化微调可通过--quantize开启量化微调例如使用 bitsandbytes 的 4-bit NormalFloatlitgpt finetune_adapter stabilityai/stablelm-base-alpha-3b \ --quantize bnb.nf4Adapter V2 使用双重量化double-quantizationlitgpt finetune_adapter_v2 stabilityai/stablelm-base-alpha-3b \ --quantize bnb.nf4-dq源码层面的说明量化通过 Fabric 的BitsandbytesPrecision插件实现litgpt/finetune/adapter.py 的setup支持bnb.nf4、bnb.nf4-dq、bnb.fp4、bnb.fp4-dq、bnb.int8-training但量化目前不支持多 GPU 训练devices1, num_nodes1时使用--quantize且 LitGPT 仅支持 bitsandbytes v0.42.0。更多细节见 量化教程。关于显存与资源的更多基准数据可查阅 资源开销表。测试微调后的模型用自定义指令测试微调结果litgpt generate_adapter stabilityai/stablelm-base-alpha-3b \ --prompt Recommend a movie to watch on the weekend.Adapter V2 对应litgpt 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...若 GPU 支持bfloat16脚本会自动使用。生成入口见 litgpt/generate/adapter.py默认采样参数为top_k50、top_p1.0、temperature0.8、max_new_tokens100并会按adapter v1 权重 预训练权重合并加载checkpoint.update(adapter_checkpoint...)。默认从out/finetune/adapter/final/lit_model.pth.adapter加载微调产物也可用--adapter_path指定。在自有数据集上微调LitGPT 支持直接用 JSON 格式的指令数据微调创建 JSON 文件每行每个元素保存一条指令-回答对。字段包含instruction与output可选input。注意目前input字段仅在 Alpaca chat 模板中使用若指令无需上下文在 Alpaca 模板下input可置为空字符串。示例[ { instruction: Arrange the given numbers in ascending order., input: 2, 4, 0, 8, 3, // Optional: only used in Alpaca chat template output: 0, 2, 3, 4, 8 }, ... ]传入数据位置可附加其他参数运行微调litgpt finetune_adapter tiiuae/falcon-7b \ --data JSON \ --data.json_path data/mydata.json \ --out_dir data/mydata-finetuned--data JSON对应 LitGPT 内置的 JSON 数据模块--data.json_path指向上面创建的 JSON 文件。数据预处理tokenize、按micro_batch_size组装、计算每个样本的最长序列以节省显存在get_dataloaders/get_longest_seq_length中完成。训练产物与断点续训微调过程会周期性保存检查点Adapter v1检查点保存在out_dir/step-{step:06d}/lit_model.pth.adapter训练结束写入out_dir/final/lit_model.pth.adapterlitgpt/finetune/adapter.py 的fit与mainAdapter V2扩展名为.pth.adapter_v2且setup额外提供--resume参数可自动查找最新的step-*检查点并恢复训练litgpt/finetune/adapter_v2.py。保存时只写入 adapter 相关权重adapter_filter并以strictFalse加载预训练权重——因为基础检查点中本就不包含 adapter 新增参数。每个检查点目录还会附带模型配置、超参数与提示模板等文件便于后续直接加载生成。源码级实现深入模型层adapter 如何嵌入注意力litgpt/adapter.py 中GPT、Block、CausalSelfAttention分别继承自 litgpt/model.py 的对应类仅做最小侵入式改造CausalSelfAttention.__init__在block_idx adapter_start_layer时新增adapter_wte可学习前缀的嵌入表与零初始化的gating_factorscaled_dot_product_attention先算原始注意力再对前缀 K/V 计算额外注意力并用门控叠加。mark_only_adapter_as_trainable依据adapter_filter匹配adapter_wte或gating_factor冻结其余全部参数。模型层V2 的线性层改造litgpt/adapter_v2.py 定义AdapterV2Linear内部是一个普通nn.Linear外加adapter_bias零初始化与adapter_scale单位初始化两个参数前向为adapter_scale * (linear(x) adapter_bias)。模型的lm_head、注意力qkv/proj、各 MLP 变体GptNeoxMLP、LLaMAMLP、GemmaMLP、LLaMAMoE都换成了AdapterV2Linear从而让每个线性层都获得可学习的偏置与缩放同时归一化层参数被纳入可训练集合。为兼容基础检查点_load_from_state_dict做了lm_head.weight → lm_head.linear.weight等键名映射。训练与测试验证端到端的训练流程、验证循环chunked_cross_entropy计算 loss以及多卡 FSDP 策略devices * num_nodes 1时启用FSDPStrategy按Block自动包裹并开启激活检查点都可在 litgpt/finetune/adapter.py 中追踪。测试侧tests/test_adapter.py 与 tests/test_adapter_v2.py 验证了adapter_filter只保存 adapter 权重如transformer.h.2.attn.adapter_wte.weight、gating_factor、小模型端到端训练脚本可运行、bitsandbytes 量化路径可用等关键行为。注意事项小结显存不足优先降低--train.micro_batch_size或使用--quantize bnb.nf4量化多卡 量化互斥--quantize只能配合单卡使用V1 vs V2 选择V1 参数最少StableLM 3B 约 50 万V2 精度潜力更高但可训练参数约 230 万额外 bias/scale 与可训练归一化层检查点扩展名不同v1 为.pth.adapterv2 为.pth.adapter_v2生成命令也必须对应generate_adapter/generate_adapter_v2数据格式自定义 JSON 数据集的input字段目前仅在 Alpaca 模板中使用。Adapter 系列微调与 LoRA 微调、完整微调 共同构成 LitGPT 由浅入深的微调方案矩阵本文聚焦 Adapter 一脉足够支撑你在 12 GB 显存级别的单卡环境下快速产出可用的指令微调模型。【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表