## 커널

이 페이지는 커널 구성 유틸리티를 문서화합니다.

### kernelize[[transformers.kernelize]]

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

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

[소스](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/integrations/hub_kernels.py#L953)

`kernelize`가 hidden kernel wrappers를 발견하고 교체할 수 있도록 임시로 등록합니다.

### 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/v5.23.0/src/transformers/utils/kernel_config.py#L92)

Kernel configuration class. 이 클래스는 모델의 커널 매핑을 구성하는 데 사용됩니다.

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

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

[소스](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/utils/kernel_config.py#L250)

kernel_mapping의 간단한 형태인 { "RMSNorm": ("kernels-community/layer_norm:LlamaRMSNorm", {"version": 1, "trust_remote_code": True}), ... }을 변환합니다.

또는 로컬 경로:

{ "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 라이브러리와 호환되는

지정되지 않은 경우, device는 모델의 파라미터에서 추론됩니다. Mode는 모델의 학습 상태에서 추론됩니다.

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

```python
sanitize_kernel_mapping(model)
```

[소스](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/utils/kernel_config.py#L131)

**매개변수:**

model : 등록된 kernel_layer_name 속성을 검사할 모듈을 가진 모델 인스턴스.

**예외:** ``ValueError``

- ``ValueError`` -- layer_name이 모델에 등록되지 않았거나, device가 지원되지 않거나, 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의 각 device 키는 "cuda", "rocm", "xpu", "npu", "neuron", "tpu", "mps" 중 하나입니다.
5. 각 trust remote code 키는 bool이어야 합니다.
6. 명시적으로 전달된 경우, 각 revision 또는 version 키는 상호 배타적으로 존재해야 합니다.
7. 각 repo_name은 'org/repo:layer_name' 형식(즉, 슬래시와 콜론을 모두 포함하는 문자열)의 유효한 저장소 및 레이어 이름입니다.
8. 로컬 경로가 감지되면, 절대 경로가 커널 저장소를 가리키는 '/abs/path:layer_name' 형식이어야 합니다. 예를 들어 "/home/user/layer_norm"과 같습니다.

