## Kernels

Esta página documenta os utilitários de configuração de kernels.

### kernelize[[transformers.kernelize]]

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

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

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

Registre temporariamente os wrappers de kernel ocultos para que `kernelize` possa descobri-los e substituí-los.

### KernelConfig[[transformers.KernelConfig]]

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

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

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

Classe de configuração de kernel. Esta classe é usada para configurar o mapeamento de kernel para um modelo.

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

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

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

Transforma um kernel_mapping simples da forma: { "RMSNorm": ("kernels-community/layer_norm:LlamaRMSNorm", {"version": 1, "trust_remote_code": True}), ... },

ou para um caminho local:

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

em um mapeamento aninhado:

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

ou para um caminho local:

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

que é compatível com a biblioteca kernels.

O dispositivo é inferido a partir dos parâmetros do modelo, caso não seja fornecido. O Mode é inferido a partir do estado de treinamento do modelo.

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

```python
sanitize_kernel_mapping(model)
```

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

**Parâmetros:**

model : A instância do modelo cujos módulos são verificados em busca de atributos kernel_layer_name registrados.

**Exceções:** ``ValueError``

- ``ValueError`` -- Se um layer_name não estiver registrado no modelo, se um device não for suportado, ou se um repo_name não for uma string válida no formato 'org/repo:layer_name'.

Valida o kernel_mapping para garantir que:
1. Cada layer_name no mapeamento é registrado no modelo (ou seja, o modelo contém um módulo com um kernel_layer_name correspondente).
2. Cada valor do kernel é
   - uma string no formato 'org/repo:layer_name' ou uma tupla com o mesmo conteúdo como string e um dicionário de {"revision"/"version/trust_remote_code": ...},
   - ou um dicionário que mapeia os tipos de dispositivo suportados para os valores acima.
3. Cada chave de dispositivo em um dict é uma de "cuda", "rocm", "xpu", "npu", "neuron", "tpu" ou "mps".
5. Cada chave trust remote code deve ser um bool.
6. Cada chave de revisão ou versão deve existir de forma mutuamente exclusiva, caso tenha sido passada explicitamente.
7. Cada repo_name é um nome de repositório e camada válido no formato 'org/repo:layer_name' (ou seja, uma string que contém tanto uma barra quanto dois-pontos).
8. Se um caminho local for detectado, ele deve estar no formato '/abs/path:layer_name', em que o caminho absoluto aponta para o repositório do kernel, como "/home/user/layer_norm".

