# FP8

다음은 기본 FP8 구현과 관련된 함수 및 클래스입니다

## TERecipeKwargs[[accelerate.utils.TERecipeKwargs]]

#### accelerate.utils.TERecipeKwargs[[accelerate.utils.TERecipeKwargs]]

```python
accelerate.utils.TERecipeKwargs(use_autocast_during_eval: bool | None = None, margin: int | None = None, interval: int | None = None, fp8_format: typing.Literal['HYBRID', 'E4M3', 'E5M2'] = None, amax_history_len: int | None = None, amax_compute_algo: typing.Literal['max', 'most_recent'] = None, override_linear_precision: tuple = None, use_mxfp8_block_scaling: bool | None = None)
```

[소스](https://github.com/huggingface/accelerate/blob/main/src/accelerate/utils/dataclasses.py#L338)

**매개변수:**

use_autocast_during_eval (`bool`, *선택 사항*, 기본값 `False`) : eval 모드에서 FP8 autocast를 사용할지 여부. 일반적으로 이 값이 `False`일 때 더 나은 지표가 확인됩니다.

margin (`int`, *선택 사항*, 기본값 0) : 그라디언트 스케일링에 사용할 마진입니다.

interval (`int`, *선택 사항*, 기본값 1) : 스케일링 팩터를 다시 계산하는 간격입니다.

fp8_format (`str`, *선택 사항*, 기본값 "HYBRID") : FP8 레시피에 사용할 형식입니다. `HYBRID`, `E4M3` 또는 `E5M2` 중 하나여야 합니다. (일반적으로 학습에는 `HYBRID`, 평가에는 `E4M3` 또는 `E5M2`를 사용합니다)

amax_history_len (`int`, *선택 사항*, 기본값 1024) : 스케일링 계수 계산에 사용할 히스토리의 길이

amax_compute_algo (`str`, *선택 사항*, 기본값 "most_recent") : 스케일링 계수 계산에 사용할 알고리즘입니다. `max` 또는 `most_recent` 중 하나여야 합니다.

override_linear_precision (`tuple` of three `bool`, *optional*, 기본값 `(False, False, False)`) : `fprop`, `dgrad`, `wgrad` GEMM을 더 높은 정밀도로 실행할지 여부.

`transformer-engine`를 사용한 FP8 혼합 정밀도 학습 레시피의 초기화를 사용자 정의하려면 [Accelerator](/docs/accelerate/main/ko/package_reference/accelerator#accelerate.Accelerator)에서 이 객체를 사용하세요.

args에 대한 자세한 내용은 API [문서](https://docs.nvidia.com/deeplearning/transformer-engine/user-guide/api/common.html)를 참고하세요.

```python
from accelerate import Accelerator
from accelerate.utils import TERecipeKwargs

kwargs = TERecipeKwargs(fp8_format="HYBRID")
accelerator = Accelerator(mixed_precision="fp8", kwargs_handlers=[kwargs])
```

## AORecipeKwargs[[accelerate.utils.AORecipeKwargs]]

#### accelerate.utils.AORecipeKwargs[[accelerate.utils.AORecipeKwargs]]

```python
accelerate.utils.AORecipeKwargs(config: ForwardRef('Float8LinearConfig') | None = None, module_filter_func: typing.Callable | None = None, pad_inner_dim: bool | None = None, enable_fsdp_float8_all_gather: bool | None = None)
```

[소스](https://github.com/huggingface/accelerate/blob/main/src/accelerate/utils/dataclasses.py#L290)

**매개변수:**

config (`torchao.float8.Float8LinearConfig`, *선택 사항*, 기본값 `None`) : FP8 학습에 대한 설정입니다. `None`인 경우, 대부분의 사용 사례에 적합한 합리적인 기본값으로 구성된 기본 설정이 생성됩니다: - `pad_inner_dim=True`: `torch._scaled_mm` 연산에서 런타임 오류를 방지하기 위해 행렬 차원을 16으로 나누어 떨어지도록 패딩합니다. - `enable_fsdp_float8_all_gather=True`: FSDP2의 FP8 all-gather를 활성화합니다. 이는 all-gather 연산 전에 매개변수를 캐스팅하여 메모리 대역폭을 절약하며, BF16과 비교하여 50%의 대역폭 절감 효과를 제공합니다.  `Float8LinearConfig` 인스턴스를 직접 제공하여 이러한 기본값을 오버라이드할 수 있습니다.

module_filter_func (`Callable`, *선택 사항*, 기본값 `None`) : 모듈과 레이어 이름을 인자로 받아 해당 모듈을 FP8로 변환해야 하는지 여부를 나타내는 불리언을 반환해야 하는 선택적 함수입니다. 기본값은 `accelerate.utils.ao.filter_linear_layers`입니다. 예시를 확인해 보세요.

`torchao` FP8를 사용한 FP8 혼합 정밀도 학습 레시피의 초기화를 사용자 정의하려면 [Accelerator](/docs/accelerate/main/ko/package_reference/accelerator#accelerate.Accelerator)에서 이 객체를 사용하세요.

## convert_model[[accelerate.utils.convert_model]]

#### accelerate.utils.convert_model[[accelerate.utils.convert_model]]

```python
accelerate.utils.convert_model(model, to_transformer_engine = True, _convert_linear = True, _convert_ln = True)
```

[소스](https://github.com/huggingface/accelerate/blob/main/src/accelerate/utils/transformer_engine.py#L26)

모델의 linear 및 layernorm 레이어를 `transformers_engine`의 대응 레이어로 재귀적으로 변환합니다.

## has_transformer_engine_layers[[accelerate.utils.has_transformer_engine_layers]]

#### accelerate.utils.has_transformer_engine_layers[[accelerate.utils.has_transformer_engine_layers]]

```python
accelerate.utils.has_transformer_engine_layers(model)
```

[소스](https://github.com/huggingface/accelerate/blob/main/src/accelerate/utils/transformer_engine.py#L95)

주어진 모델에 `transformer_engine` 레이어가 있는지 여부를 반환합니다.

## contextual_fp8_autocast[[accelerate.utils.contextual_fp8_autocast]]

#### accelerate.utils.contextual_fp8_autocast[[accelerate.utils.contextual_fp8_autocast]]

```python
accelerate.utils.contextual_fp8_autocast(model_forward, fp8_recipe, use_during_eval = False)
```

[소스](https://github.com/huggingface/accelerate/blob/main/src/accelerate/utils/transformer_engine.py#L118)

모델의 forward 메서드에 FP8 autocast를 적용하기 위한 래퍼입니다. 컨텍스트를 인식하므로, 기본적으로 eval 모드에서는 FP8 autocast를 비활성화합니다. 이는 일반적으로 더 정확한 계측을 위해 권장되는 방식입니다.

## apply_fp8_autowrap[[accelerate.utils.apply_fp8_autowrap]]

#### accelerate.utils.apply_fp8_autowrap[[accelerate.utils.apply_fp8_autowrap]]

```python
accelerate.utils.apply_fp8_autowrap(model, fp8_recipe_handler)
```

[소스](https://github.com/huggingface/accelerate/blob/main/src/accelerate/utils/transformer_engine.py#L142)

forward 메서드에 FP8 컨텍스트 매니저를 적용합니다

