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

资讯详情

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

Axolotl 微调 Llama 2 实战指南:QLoRA、LoRA 与全参数微调配置详解

Axolotl 微调 Llama 2 实战指南:QLoRA、LoRA 与全参数微调配置详解 Axolotl 微调 Llama 2 实战指南QLoRA、LoRA 与全参数微调配置详解【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl本指南基于 examples/llama-2/ 目录下的完整示例集讲解如何使用 Axolotl 对 Llama 2 7B/13B 进行三种主流微调QLoRA4-bit 量化、LoRA8-bit 基座与 16-bit 全参数微调FFT并延伸覆盖 GPTQ 基座、LISA 分层冻结、LoftQ 初始化与 ReLoRA 重启策略等进阶方案。读完本文你将能够根据自身显存预算选择正确的配置文件、理解每个关键参数的作用并直接用accelerate启动训练。概览一份配置覆盖 7B 与 13B该示例的核心思路是同一份 YAML 配置只需调整两个数值即可在 7B 与 13B 之间切换。README 明确指出目录下的 YAML 默认是 7B 变体NousResearch/Llama-2-7b-hf但同样的设置完全适用于 13B。资源基线来自 examples/llama-2/README.md7B QLoRA任意 24GB 显存 GPU 均可运行训练期间占用约17GB 显存7B LoRA训练期间占用约20GB 显存RTX 4090 实测用默认数据集mhenrichsen/alpaca_2k_test训练 3 个 epoch 约需15 分钟13B 适配把gradient_accumulation_steps改为2、micro_batch_size改为1即可装入。启动训练的命令统一为accelerate launch -m axolotl.cli.train examples/llama-2/qlora.yml或accelerate launch -m axolotl.cli.train examples/llama-2/lora.yml16-bit 全参数微调accelerate launch -m axolotl.cli.train examples/llama-2/fft_optimized.yml-m axolotl.cli.train表示以模块方式运行 CLI 入口accelerate负责初始化分布式环境单卡时同样适用。除了训练Axolotl 还提供axolotl.cli.preprocess数据预处理、axolotl.cli.inference推理与axolotl.cli.merge_lora合并 LoRA 权重等配套命令可在 src/axolotl/cli/ 下查看全部子命令。核心配置QLoRAqlora.ymlexamples/llama-2/qlora.yml 是目录中最具代表性的配置完整结构如下base_model: NousResearch/Llama-2-7b-hf # optionally might have model_type or tokenizer_type model_type: LlamaForCausalLM tokenizer_type: LlamaTokenizer # Automatically upload checkpoint and final model to HF # hub_model_id: username/custom_model_name load_in_8bit: false load_in_4bit: true datasets: - path: mhenrichsen/alpaca_2k_test type: alpaca dataset_prepared_path: val_set_size: 0.05 output_dir: ./outputs/qlora-out adapter: qlora lora_model_dir: sequence_len: 4096 sample_packing: true lora_r: 32 lora_alpha: 16 lora_dropout: 0.05 lora_target_linear: true wandb_project: wandb_entity: wandb_watch: wandb_name: wandb_log_model: gradient_accumulation_steps: 4 micro_batch_size: 2 num_epochs: 4 optimizer: paged_adamw_32bit lr_scheduler: cosine learning_rate: 0.0002 bf16: auto tf32: false gradient_checkpointing: true resume_from_checkpoint: logging_steps: 1 attn_implementation: flash_attention_2 warmup_ratio: 0.1 evals_per_epoch: 4 saves_per_epoch: 1 weight_decay: 0.0 special_tokens: # save_first_step: true # uncomment this to validate checkpoint saving works with your config关键参数解读参数值作用load_in_4bit: true布尔以 4-bit NF4 量化加载基座这是 QLoRA 显存优势的来源adapter: qlora字符串声明使用 QLoRA 适配器lora.yml中对应为adapter: loralora_r: 32/lora_alpha: 16整数LoRA 秩与缩放系数alpha通常为r的 1/2 或 1/4lora_dropout: 0.05浮点适配器 dropout抑制过拟合lora_target_linear: true布尔自动把 LoRA 挂到所有nn.Linear层免去手写target_modules列表sample_packing: true布尔把多个样本打包进一条 4096 token 序列提高训练吞吐optimizer: paged_adamw_32bit字符串bitsandbytes 的 Paged AdamW将优化器状态分页到 CPU进一步节省显存bf16: auto布尔/auto自动探测硬件 bf16 支持能力Ampere 及以上架构attn_implementation: flash_attention_2字符串使用 FlashAttention-2 内核显著降低注意力部分显存并加速evals_per_epoch: 4/saves_per_epoch: 1整数每个 epoch 内执行 4 次验证、1 次检查点保存lora_target_linear是 Axolotl 的便捷扩展它通过遍历模型结构自动收集全部线性层作为 LoRA 目标等价于手动指定q_proj/k_proj/v_proj/o_proj/gate_proj/up_proj/down_proj。在源码中适配器的解析与注入逻辑位于 src/axolotl/loaders/adapter.pyLoRA/QLoRA 配置的模式定义可参考 src/axolotl/utils/schemas/peft.py。val_set_size: 0.05表示从训练集切出 5% 作为验证集dataset_prepared_path留空时Axolotl 会即时预处理并缓存数据集若希望复用预处理产物可填入last_run_prepared如fft_optimized.yml所示。save_first_step: true被注释保留用于在训练早期快速验证检查点保存链路是否正常。LoRA8-bit 基座与 QLoRA 的差异examples/llama-2/lora.yml 与qlora.yml结构几乎一致核心差异在于基座加载精度与优化器load_in_8bit: true、load_in_4bit: false基座以 8-bit 加载不做 4-bit 量化因此显存占用更高约 20GB vs 17GBadapter: lora普通 LoRA 适配器optimizer: adamw_bnb_8bit使用 bitsandbytes 的 8-bit 优化器而非 QLoRA 常用的 Paged AdamW。其余训练参数sequence_len: 4096、sample_packing: true、lora_r: 32、learning_rate: 0.0002、bf16: auto等与 QLoRA 完全一致方便用户在两种精度策略间横向对比。16-bit 全参数微调fft_optimized.yml当显存充裕或需要完整更新全部权重时使用 examples/llama-2/fft_optimized.yml。与 PEFT 方案不同它把 LoRA 相关字段全部置空adapter: lora_model_dir: lora_r: lora_alpha: lora_dropout: lora_target_linear:注意adapter:后为空值表示不注入任何 PEFT 适配器走原生全参数训练路径。该配置的显存策略依赖更激进的 batch 设置gradient_accumulation_steps: 1、micro_batch_size: 1并启用了两个 FlashAttention 优化开关flash_attn_cross_entropy: false不替换交叉熵内核保持默认实现flash_attn_fuse_mlp: true融合 MLP 前向减少 kernel 启动开销。训练参数方面num_epochs: 1、weight_decay: 0.1、optimizer: adamw_bnb_8bit。文件末尾预留了deepspeed: #deepspeed_configs/zero2.json注释说明在多卡场景下可取消注释并指向 deepspeed_configs/ 下的 ZeRO 配置文件如zero2.json、zero3.json以进一步切分模型状态。进阶方案一GPTQ 基座 LoRAgptq-lora.ymlexamples/llama-2/gptq-lora.yml 演示了以预量化 GPTQ 模型TheBloke/Llama-2-7B-GPTQ为基座训练 LoRA 的路径base_model: TheBloke/Llama-2-7B-GPTQ model_type: AutoModelForCausalLM tokenizer_type: LlamaTokenizer gptq: true gptq_disable_exllama: true tokenizer_use_fast: true tokenizer_legacy: true与 QLoRA 的区别在于QLoRA 在加载时实时量化权重而 GPTQ 方案直接加载已量化好的模型。gptq_disable_exllama: true禁用 exllama 内核便于与 LoRA 训练兼容配合float16: truebf16: false、fp16: false。该配置使用adamw_torch_fused优化器、lr_quadratic_warmup: true二次方预热并显式声明special_tokenss、/s、unk。LoRA 超参采用了更低的秩与更高的 alphalora_r: 8、lora_alpha: 32同时通过lora_target_modules手写k_proj/o_proj/q_proj/v_proj四个注意力投影层。进阶方案二LISA 分层稀疏微调lisa.ymlexamples/llama-2/lisa.yml 实现了 LISALayerwise Importance Sampled AdamW方法——每次迭代只解冻部分 Transformer 层参与更新其余层保持冻结从而在接近全参数效果的同时大幅节省内存lisa_n_layers: 4 lisa_step_interval: 20 lisa_layers_attribute: model.layerslisa_n_layers: 4每次解冻 4 层lisa_step_interval: 20每 20 步重新采样一次解冻层集合lisa_layers_attribute: model.layers指定层级结构的属性路径用于定位 Transformer 层列表。该配置使用teknium/GPT4-LLM-Cleaned数据集学习率设为5e-5README 注释标明是 LISA 论文针对 7B 的推荐值。LISA 的调度逻辑实现在 src/axolotl/utils/callbacks/lisa.py通过训练回调在每个 step interval 切换可训练层。进阶方案三LoftQ 初始化loftq.ymlexamples/llama-2/loftq.yml 演示 LoftQLoRA-Fine-Tuning-aware Quantization初始化在 4-bit 基座之上叠加 LoRA但用更优的初始化减少量化误差adapter: lora lora_r: 32 lora_alpha: 16 lora_dropout: 0.05 lora_target_linear: true peft: loftq_config: loftq_bits: 4peft.loftq_config.loftq_bits: 4指定 LoftQ 的量化位宽。LoftQ 通过交替优化量化权重与 LoRA 初始值使量化权重 LoRA 分解尽可能逼近原始权重。该配置在 src/axolotl/utils/schemas/peft.py 中对应peft配置模式并在 src/axolotl/loaders/adapter.py 的适配器加载流程中生效。进阶方案四ReLoRA 重启式低秩训练relora.ymlexamples/llama-2/relora.yml 演示 ReLoRA训练期间周期性把 LoRA 权重合并回主权重并重置适配器restart从而用低秩训练逼近全参数效果relora: true relora_prune_ratio: 0.9 relora_cpu_offload: false jagged_restart_steps: 150 jagged_restart_warmup_steps: 10 jagged_restart_anneal_steps: falserelora_prune_ratio: 0.9合并时裁剪 90% 的适配器权重relora_cpu_offload: false合并权重保留在 GPUjagged_restart_steps: 150每 150 步触发一次 restartjagged_restart_warmup_steps: 10restart 后的学习率 warmup 步数。该配置仍走 QLoRA 基座load_in_4bit: true、adapter: qloraLoRA 秩取较小的lora_r: 8。ReLoRA 的重启与合并逻辑在 src/axolotl/monkeypatch/relora.py 中实现相关训练参数定义可见 src/axolotl/core/training_args_base.py。进阶方案五QLoRA FSDP 多卡qlora-fsdp.yml当单卡放不下或需要多卡扩展时examples/llama-2/qlora-fsdp.yml 给出 QLoRA 与 PyTorch FSDP 的组合。它把序列长度降为sequence_len: 512、关闭sample_packing并配置 FSDPfsdp: - full_shard - auto_wrap fsdp_config: fsdp_limit_all_gathers: true fsdp_sync_module_states: true fsdp_offload_params: true fsdp_use_orig_params: false fsdp_cpu_ram_efficient_loading: true fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP fsdp_transformer_layer_cls_to_wrap: LlamaDecoderLayer fsdp_state_dict_type: FULL_STATE_DICT # fsdp_cpu_offload_pin_memory: false # uncomment to enable swap memory usage when RAM is insufficient要点full_shardauto_wrap全分片策略fsdp_offload_params: true把参数卸载到 CPU配合gradient_checkpointing_kwargs.use_reentrant: truefsdp_transformer_layer_cls_to_wrap指定按LlamaDecoderLayer切分。该配置使用yahma/alpaca-cleaned数据集与adamw_torch_fused优化器学习率调低到1e-5。实战建议与调参要点综合上述配置与 README 说明落地时的核心经验如下显存选型24GB 单卡优先qlora.yml约 17GB换 13B 时把gradient_accumulation_steps调整为 2、micro_batch_size调整为 1显存再紧可调低sequence_len或关闭sample_packing如qlora-fsdp.yml所示。速度参考RTX 4090 上 QLoRA 训练alpaca_2k_test3 个 epoch 约 15 分钟可作为训练时长与参数调整的基准。先验检查点首次运行可取消save_first_step: true注释尽早确认保存链路正常避免训练数小时后才发现配置问题。数据集格式示例统一使用type: alpacaAlpaca 指令格式。Axolotl 支持chat_template、sharegpt、pretrain等多种格式详见 docs/dataset-formats/ 与 docs/dataset_loading.qmd。模型上传配置顶部注释了hub_model_id填写后可在训练过程中自动把检查点与最终模型上传至 Hugging Face Hub。多卡扩展全参数场景可参考fft_optimized.yml中注释的deepspeed字段或 deepspeed_configs/ 下的 ZeRO 配置分布式并行TP/CP/HSDP的更多示例见 examples/distributed-parallel/。所有示例配置文件均位于 examples/llama-2/训练完成后如需将 LoRA 适配器合并回基座权重可使用axolotl.cli.merge_lora参考 tests/cli/test_cli_merge_lora.py 的用法验证。【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表