# 学習用カーネル

カスタムカーネルは、行列積、アテンション、正規化などの特定のオペレーションに特化して、それらを高速に実行することを目的としています。複数のオペレーションを単一のカーネルに融合（フュージョン）することで、GPU メモリへの読み書き回数を減らし、メモリ帯域幅の消費を低減するとともに、オペレーションごとの起動オーバーヘッドを削減できます。

## Hubカーネル

[Hub](https://huggingface.co/kernels-community)には、[KernelConfig](/docs/transformers/main/ja/main_classes/kernels#transformers.KernelConfig)で読み込めるコミュニティ製カーネルがホストされています。設定を[from_pretrained()](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel.from_pretrained)の`kernel_config`に渡します。カーネルの読み込みが完了すると、トレーニングで有効になります。利用可能なすべてのオプションについては、[カーネルの読み込み](./kernel_doc/loading_kernels#kernelconfig)ガイドを参照してください。

```py
from transformers import AutoModelForCausalLM, KernelConfig

kernel_config = KernelConfig(
    kernel_mapping={
        "RMSNorm": "kernels-community/liger-kernels:LigerRMSNorm",
    }
)
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-0.6B",
    use_kernels=True,
    kernel_config=kernel_config,
)
```

## Liger

[Liger Kernel](https://github.com/linkedin/Liger-Kernel)は、RMSNorm、RoPE、SwiGLU、CrossEntropy、FusedLinearCrossEntropyなどのレイヤーを単一のTritonカーネルに融合します。FlashAttention、FSDP、DeepSpeedと互換性があり、メモリ使用量を削減しながらマルチGPUトレーニングのスループットを向上させるため、より大きな語彙数、バッチサイズ、コンテキスト長の実現を可能にします。

```bash
pip install liger-kernel
```

`use_liger_kernel=True` を [TrainingArguments](/docs/transformers/main/ja/main_classes/trainer#transformers.TrainingArguments) に設定すると、Liger のカーネルで対応するモデルのレイヤーがパッチされます。

> [!TIP]
> サポートされているモデルの完全なリストについては、[パッチング](https://github.com/linkedin/Liger-Kernel#patching)ページを参照してください。

```py
from transformers import TrainingArguments

training_args = TrainingArguments(
    ...,
    use_liger_kernel=True
)
```

パッチを適用するレイヤーを制御するには、`liger_kernel_config` を dict として渡します。利用可能なオプションはモデルによって異なり、`rope`、`swiglu`、`cross_entropy`、`fused_linear_cross_entropy`、`rms_norm` などがあります。

```py
from transformers import TrainingArguments

training_args = TrainingArguments(
    ...,
    use_liger_kernel=True,
    liger_kernel_config={
        "rope": True,
        "cross_entropy": True,
        "rms_norm": False,
        "swiglu": True,
    }
)
```

## 次のステップ

- FlashAttention などのカーネルによるメモリ使用量の削減について詳しくは、[Attention backends](./attention_interface)ガイドを参照してください。
- [torch.compile](./torch_compile)のガイドを参照し、トレーニングステップ全体のフォワードパスとバックワードパスをコンパイルする方法を学習してください。

