LLaMA-Factory v1 怎么启用 Liger Kernel 加速全参数训练
【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory
在 LLaMA-Factory 的 v1 训练入口里跑全参数 SFT 时,可以通过 Kernels 系统启用 Liger Kernel,把模型中的关键模块替换为优化后的算子实现来加速训练。v1 通过训练 YAML 中的kernel_config字段启用该能力,仓库自带一份全参数(FSDP2)+ Liger Kernel 的完整示例配置 examples/v1/train_full/train_full_liger_kernel.yaml。本文说明如何启用它、如何验证 Liger 算子确实生效,以及它的前置条件和支持边界。
准备环境
启用 Liger Kernel 有两个硬性前置条件,都由 v1 的 kernel 插件在启动时检查(见 liger_kernel_ops.py):
- 设备:当前加速器必须是 CUDA 或 NPU,否则报错
LigerKernel requires CUDA or NPU, current accelerator is {current}. - 依赖:必须已安装
liger_kernel包,否则报错Liger kernel is not installed.
v1 入口的软件依赖要求见 快速开始:Python 至少 3.11,torch 2.7.1,transformers 5.0.0,datasets 3.2.0+,peft 0.18.1+;NVIDIA GPU 需要 CUDA(至少 11.6),或使用 torch-npu 2.7.1 的 Ascend NPU。
安装 Liger Kernel 依赖:
pip install -r requirements/liger-kernel.txt该文件(requirements/liger-kernel.txt)中的约束为liger-kernel>=0.6.3。
确认使用 v1 入口:v1 由环境变量USE_V1控制,llamafactory-cli在该环境变量启用时加载 v1 launcher(见 cli.py)。
配置 kernel_config
Kernels 系统通过替换模型中的关键模块(如 RMSNorm、SwiGLU、RoPE、MoE 等)为硬件优化的版本来提升训练性能;替换不修改模型权重,优化后的实现与原始实现保持精度一致(在浮点误差范围内),机制详见 Kernels 系统文档。
在训练 YAML 中,通过kernel_config.name指定要启用的 kernel。启用 Liger Kernel 时设置为liger_kernel。仓库示例配置全文如下:
model: Qwen/Qwen3-0.6B model_class: llm kernel_config: name: liger_kernel quant_config: null dist_config: name: fsdp2 dcp_path: null # /mnt/f/pretrain_models/Qwen3-0.6B-dcp ### data train_dataset: data/v1_sft_demo.yaml ### training output_dir: outputs/test_fsdp2 micro_batch_size: 1 cutoff_len: 2048 learning_rate: 1.0e-4 max_steps: 10 ### sample sample_backend: hf max_new_tokens: 128各字段的用途:
kernel_config.name: liger_kernel:启用 Liger Kernel 的关键配置。dist_config.name: fsdp2:使用 FSDP2 分布式策略做全参数训练;dcp_path可选,用于指定预转换的 DCP 检查点路径(示例中为null)。train_dataset: data/v1_sft_demo.yaml:使用仓库自带的 SFT 演示数据集配置。max_steps: 10:示例仅跑 10 步,属于快速冒烟验证的配置;正式训练请按需替换模型、数据集并调整训练参数。- 全参数训练意味着配置中没有 LoRA/adapter 相关项,
quant_config为null。
可选地,kernel_config下还可以传入use_kernels来指定只启用哪些 Liger 算子:传入算子名列表时仅启用列表中的算子(未知算子名会报Unknown Liger op(s) ...错误),缺省值"auto"表示沿用上游apply_liger_kernel_to_*函数的默认启用项。不指定时就是auto行为。
启动训练
export USE_V1=1 llamafactory-cli train examples/v1/train_full/train_full_liger_kernel.yamlllamafactory-cli sft与llamafactory-cli train等价(见 快速开始)。
验证 Liger 算子已生效
训练启动后观察 rank 0 的日志,按以下三种输出判断状态:
- 启用成功:日志中会出现
These Liger ops are applied to the model: [...],列表内容是本次实际应用到模型的 Liger 算子名(如fused_linear_cross_entropy等,以日志实际输出为准)。 - 模型不在支持列表:只输出警告
Current model does not support liger kernel.,kernel 不会被应用,模型原样返回,训练继续但不含 Liger 加速。 - 依赖或设备不满足:直接报
Liger kernel is not installed.或LigerKernel requires CUDA or NPU, ...,训练启动失败,回到“准备环境”一节处理。
示例配置跑满max_steps: 10步并正常收尾,即完成一次启用路径的验证。
支持范围与限制
- 模型范围:Liger Kernel 只为
qwen3、qwen3_moe、qwen3_next、qwen3_5、qwen3_5_text、qwen3_5_moe、qwen3_5_moe_text这些model_type注册了apply_liger_kernel_to_*映射(见 liger_kernel_ops.py);其他模型会命中上面的警告分支而不做任何替换。 - 训练阶段:v1 目前支持 SFT 和 DPO 两种训练方法(见 快速开始),Liger Kernel 示例走的是 SFT 全参数路径。
- 旧版本入口:非 v1 入口使用模型参数
enable_liger_kernel: true来启用 Liger Kernel(见 README 的更新记录),与本文的kernel_config配置方式不是同一个开关,不要混用。 - 更多硬件融合算子(NPU 侧的 RMSNorm/SwiGLU/RoPE/MoE 融合算子)通过
kernel_config.name: auto或apply_kernelAPI 启用,细节见 Kernels 系统 与 Fused Operators,与本文的 Liger Kernel 是相互独立的配置分支。
【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考