## Kernels

Esta página documenta las utilidades de configuración de kernels.

### kernelize[[transformers.kernelize]]

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

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

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

Registra temporalmente los envoltorios de kernel ocultos para que `kernelize` pueda descubrirlos y reemplazarlos.

### KernelConfig[[transformers.KernelConfig]]

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

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

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

Clase de configuración de kernel. Esta clase se utiliza para configurar el mapeo de kernel de un modelo.

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

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

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

Transforma un simple kernel_mapping de la forma: { "RMSNorm": ("kernels-community/layer_norm:LlamaRMSNorm", {"version": 1, "trust_remote_code": True}), ... },

o para una ruta local:

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

en un mapeo anidado:

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

o para una ruta local:

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

que es compatible con la biblioteca kernels.

El dispositivo se infiere a partir de los parámetros del modelo si no se proporciona. El modo se infiere a partir del estado de entrenamiento del modelo.

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

```python
sanitize_kernel_mapping(model)
```

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

**Parámetros:**

model : La instancia del modelo cuyos módulos se comprueban para verificar los atributos kernel_layer_name registrados.

**Excepciones:** ``ValueError``

- ``ValueError`` -- Si un layer_name no está registrado en el modelo, si un device no es compatible, o si un repo_name no es una cadena 'org/repo:layer_name' válida.

Valida el kernel_mapping para asegurarse de que:
1. Cada layer_name en el mapeo se registra en el modelo (es decir, el modelo contiene un módulo con un kernel_layer_name coincidente).
2. Cada valor del kernel es
   - ya sea una cadena de la forma 'org/repo:layer_name' o una tupla con el mismo contenido que la cadena y un diccionario de {"revision"/"version/trust_remote_code": ...},
   - o un diccionario que mapea los tipos de dispositivos admitidos a dichos valores, como se muestra arriba.
3. Cada clave de dispositivo en un dict es una de las siguientes: "cuda", "rocm", "xpu", "npu", "neuron", "tpu" o "mps".
5. Cada clave trust remote code debe ser un bool.
6. Cada clave de revisión o versión debe existir de forma mutuamente exclusiva si se ha pasado explícitamente.
7. Cada repo_name es un nombre de repositorio y capa válido en el formato 'org/repo:layer_name' (es decir, una cadena que contiene tanto una barra diagonal como dos puntos).
8. Si se detecta una ruta local, debe estar en el formato '/abs/path:layer_name', donde la ruta absoluta apunta al repositorio del kernel, como "/home/user/layer_norm".

