# カーネル

PyTorch のオペレーションは汎用的です。ハードウェアベンダーやコミュニティは、特定のプラットフォーム上でより高速に実行されるよう、専用の実装を作成しています。これらの最適化されたカーネルをインストールするには、コンパイラバージョン、CUDA ツールキット、プラットフォーム固有のビルドを一致させる必要があるため、課題となります。

| プラットフォーム | 対応デバイス |
| :--- | :--- |
| NVIDIA GPU (CUDA) | 計算能力 7.0 以上の最新アーキテクチャ（Volta、Turing、Ampere、Hopper、Blackwell） |
| AMD GPU（ROCm） | ROCm対応デバイスと互換性あり |
| Apple Silicon (Metal) | Mシリーズチップ(M1、M2、M3、M4およびそれ以降) |
| Intel GPU(XPU) | Intel Data Center GPU Max Series および互換デバイス |

[Kernels](https://huggingface.co/docs/kernels/index) は、[Hub](https://huggingface.co/kernels-community) 経由で事前コンパイル済みバイナリを配布することで、この問題を解決します。実行時にプラットフォームを検出し、適切なバイナリを自動的に読み込みます。

`use_kernels=True` の場合、Transformers は最適化されたカーネル実装が利用可能なレイヤーを特定します。起動時間を短縮するため、必要に応じて Hub からカーネルをダウンロードし、[キャッシュ](../installation#cache-directory)します。カーネルは、アテンション、正規化、融合演算などの計算集約型操作を高速化します。

すべての操作にカーネル実装があるわけではありません。カーネルが利用できない場合、ライブラリは標準のPyTorchにフォールバックします。

## 決定論

一部のカーネルは、演算の順序変更や累積戦略により、PyTorch とわずかに異なる結果を生成します。これらの違いは機能的には同等ですが、再現性に影響を与えます。

決定論的な動作を得るには、以下の方法をお試しください。

- カーネルのリポジトリのドキュメントで、決定論的な保証を確認してください。例えば、[gpt-oss-metal-kernels](https://huggingface.co/kernels-community/gpt-oss-metal-kernels#4-scaled-dot-product-attention-sdpa)のSDPAカーネルは、PyTorchの実装と97%の頻度で一致します。
- ユースケースに影響を与える特定のカーネルを無効にします。
- ランダムシードとPyTorchの決定論的フラグを設定します。

## リソース

- [Loading kernels](./loading_kernels)ガイドで始めましょう
- [Kernels](https://github.com/huggingface/kernels) GitHub リポジトリ
- [Hugging Face Kernel Hubで5分以内にモデルを強化する](https://huggingface.co/blog/hello-hf-kernels)ブログ記事

