## カーネル

このページでは、カーネル設定ユーティリティについて説明します。

### kernelize[[transformers.kernelize]]

#### transformers.kernelize[[transformers.kernelize]]

```python
transformers.kernelize(model: PreTrainedModel, mode: Mode | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/hub_kernels.py#L953)

`kernelize` が検出して置き換えられるように、一時的に隠しカーネルのラッパーを登録します。

### KernelConfig[[transformers.KernelConfig]]

#### transformers.KernelConfig[[transformers.KernelConfig]]

```python
transformers.KernelConfig(kernel_mapping = None, use_local_kernel = False, inherit_mapping = True)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/kernel_config.py#L92)

カーネル設定クラス。このクラスは、モデルのカーネルマッピングを設定するために使用されます。

#### create_compatible_mapping[[transformers.KernelConfig.create_compatible_mapping]]

```python
create_compatible_mapping(model, compile = False)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/kernel_config.py#L250)

{"RMSNorm": ("kernels-community/layer_norm:LlamaRMSNorm", {"version": 1, "trust_remote_code": True}), ... } のようなシンプルな kernel_mapping を変換します。

またはローカルパスの場合:

{ "RMSNorm": "/home/user/liger_kernels:LigerRMSNorm", ... },

ネストされたマッピングに:

{ "RMSNorm": { "cuda": { Mode.INFERENCE: LayerRepository( repo_id="kernels-community/layer_norm", layer_name="LlamaRMSNorm", version=1, trust_remote_code=True, ) } } }

またはローカルパスの場合:

{ "RMSNorm": { "cuda": { Mode.INFERENCE: LocalLayerRepository( repo_path=Path("/home/user/liger_kernels"), layer_name="LigerRMSNorm", ) } } }

kernels ライブラリと互換性のある

指定されていない場合、デバイスはモデルのパラメータから推論されます。Modeはモデルの学習状態から推論されます。

#### sanitize_kernel_mapping[[transformers.KernelConfig.sanitize_kernel_mapping]]

```python
sanitize_kernel_mapping(model)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/kernel_config.py#L131)

**パラメータ:**

model : 登録された kernel_layer_name 属性がチェックされるモジュールを持つモデルインスタンス。

**例外:** ``ValueError``

- ``ValueError`` -- モデルに layer_name が登録されていない場合、デバイスがサポートされていない場合、または repo_name が有効な 'org/repo:layer_name' 文字列でない場合に発生します。

kernel_mappingを検証し、以下を満たすことを確認します:
1. マッピング内の各 layer_name はモデルに登録されています（つまり、モデルには kernel_layer_name が一致するモジュールが含まれています）。
2. 各カーネルの値は
   - 'org/repo:layer_name' 形式の文字列、または同じ文字列と {"revision"/"version/trust_remote_code": ...} という辞書からなるタプル
   - または、上記と同様にサポートされているデバイスタイプをこれらの値にマッピングする dict。
3. dict 内の各デバイスキーは、"cuda"、"rocm"、"xpu"、"npu"、"neuron"、"tpu"、"mps" のいずれかです。
5. 各 trust_remote_code キーは bool 型である必要があります。
6. 明示的に渡された場合、各リビジョンまたはバージョンキーは互いに排他的に存在する必要があります。
7. 各 repo_name は、'org/repo:layer_name' 形式（つまり、スラッシュとコロンを両方含む文字列）の、有効なリポジトリ名およびレイヤー名です。
8. ローカルパスが検出された場合、その形式は/abs/path:layer_nameである必要があります。ここで、絶対パスはカーネルリポジトリを指します。例: /home/user/layer_norm。

