Files
LLaMA-Factory/docs/zh/feature-guide/kernel_acceleration.md
2026-09-14 16:09:48 +08:00

2.4 KiB
Raw Permalink Blame History

融合算子加速

kernel_config 统一配置模型侧的融合算子加速。它可以替换单个算子,也可以像 Liger Kernel 一样同时应用多个融合实现和训练优化。

kernel_config.name 接受一个加速实现名称,也接受逗号分隔的多个名称。未设置 kernel_config 或设为 null 时,此入口不替换算子。以下为算子配置片段,完整训练配置见 SFT。

自动配置

name: auto 根据当前设备应用默认组合。当前仅 NPU 配置了默认组合,CUDA 上不会自动启用 Liger 或 CUDA Fused MoE。

Liger Kernel

Liger Kernel 依赖 liger-kernel,并要求模型具有对应适配。

kernel_config:
  name: liger_kernel

Liger Kernel 根据模型类型调用 liger_kernel.transformers 中对应的应用函数,可融合 RMSNorm、RoPE、SwiGLU、Cross Entropy 等训练路径。具体启用项由模型支持范围和 Liger Kernel 版本决定。

CUDA Fused MoE

kernel_config:
  name: cuda_fused_moe

该方案依赖 CUDA 和 Triton,并要求模型结构匹配,使用融合实现替换 MoE 计算路径。模型架构不匹配时保留原模型。

Flash Linear Attention

flash-linear-attention 通过 FSDPTurbo 的算子注册表替换模型中已有的 FLA 实现,支持 CUDA 和 NPU。它依赖 FLA 和 FSDPTurbo,不会将普通 attention 模型转换成线性注意力模型。

kernel_config:
  name: flash-linear-attention
  include_kernels: chunk_gated_delta_rule,fused_recurrent_gated_delta_rule
  chunk_size: 64

include_kernels 可以设置为 auto 或逗号分隔的算子名称;chunk_size 支持 16、32 和 64。使用前需要安装 requirements/fsdpturbo.txt。

组合多个加速实现

多个名称以逗号分隔。以下为语法示意,first_kernel 和 second_kernel 是占位符,运行时替换为实际注册的实现名称:

kernel_config:
  name: first_kernel,second_kernel

多个实现按书写顺序应用,后一个接收前一个处理后的模型;所有实现共享同一份 kernel_config。设备与依赖检查在应用前执行,模型匹配由各实现负责。组合入口不自动处理重复替换或顺序冲突。内部调用关系见开发者指南,字段定义见模型参数。