mirror of
https://github.com/hiyouga/LLaMA-Factory.git
synced 2026-09-27 01:45:42 +08:00
54 lines
2.4 KiB
Markdown
54 lines
2.4 KiB
Markdown
# 融合算子加速
|
||
|
||
`kernel_config` 统一配置模型侧的融合算子加速。它可以替换单个算子,也可以像 Liger Kernel 一样同时应用多个融合实现和训练优化。
|
||
|
||
`kernel_config.name` 接受一个加速实现名称,也接受逗号分隔的多个名称。未设置 `kernel_config` 或设为 `null` 时,此入口不替换算子。以下为算子配置片段,完整训练配置见 [SFT](sft.md)。
|
||
|
||
## 自动配置
|
||
|
||
`name: auto` 根据当前设备应用默认组合。当前仅 [NPU](../multi-backend/npu/index.md) 配置了默认组合,CUDA 上不会自动启用 Liger 或 CUDA Fused MoE。
|
||
|
||
## Liger Kernel
|
||
|
||
Liger Kernel 依赖 `liger-kernel`,并要求模型具有对应适配。
|
||
|
||
```yaml
|
||
kernel_config:
|
||
name: liger_kernel
|
||
```
|
||
|
||
Liger Kernel 根据模型类型调用 `liger_kernel.transformers` 中对应的应用函数,可融合 RMSNorm、RoPE、SwiGLU、Cross Entropy 等训练路径。具体启用项由模型支持范围和 Liger Kernel 版本决定。
|
||
|
||
## CUDA Fused MoE
|
||
|
||
```yaml
|
||
kernel_config:
|
||
name: cuda_fused_moe
|
||
```
|
||
|
||
该方案依赖 CUDA 和 Triton,并要求模型结构匹配,使用融合实现替换 MoE 计算路径。模型架构不匹配时保留原模型。
|
||
|
||
## Flash Linear Attention
|
||
|
||
`flash-linear-attention` 通过 FSDPTurbo 的算子注册表替换模型中已有的 FLA 实现,支持 CUDA 和 NPU。它依赖 FLA 和 FSDPTurbo,不会将普通 attention 模型转换成线性注意力模型。
|
||
|
||
```yaml
|
||
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` 是占位符,运行时替换为实际注册的实现名称:
|
||
|
||
```yaml
|
||
kernel_config:
|
||
name: first_kernel,second_kernel
|
||
```
|
||
|
||
多个实现按书写顺序应用,后一个接收前一个处理后的模型;所有实现共享同一份 `kernel_config`。设备与依赖检查在应用前执行,模型匹配由各实现负责。组合入口不自动处理重复替换或顺序冲突。内部调用关系见[开发者指南](../developer-guide/plugins/kernel-acceleration/overview.md),字段定义见[模型参数](../configuration/model.md#kernel_config)。
|