기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
혼합 정밀도 훈련
SageMaker 모델 병렬 처리(SMP) 라이브러리 v2는 및 Transformer Engine과 같은 PyTorch FSDP 오픈 소스 프레임워크와 통합하여 즉시 혼합 정밀도 훈련을 지원합니다. 자세한 내용은 다음 주제를 참조하세요.
주제
Transformer Engine을 사용하여 P5 인스턴스FP8에서 와 혼합된 정밀도 훈련
SageMaker 모델 병렬 처리(SMP) 라이브러리 v2.2.0부터 SMP 라이브러리는 Transformer EngineMixedPrecision
참고
SMP v2는 다음 Hugging Face Transformer 모델에 대한 FP8 지원을 제공합니다.
-
GPT-NeoX(SMPv2.2.0 이상에서 사용 가능)
-
Llama 2(SMPv2.2.0 이상에서 사용 가능)
-
Mixtral 8x7b 및 Mixtral 8x22b(SMPv2.5.0 이상에서 사용 가능)
참고
P5 기능에 대한 이 FP8 훈련은 SageMaker 와 라이브러리의 다음 조합에서 사용할 수 PyTorch 있습니다.
-
SageMaker Python SDK v2.212.0 이상
-
PyTorch v2.2.0 이상
FP8 (8비트 부동 소수점 정밀도)는 LLM 모델의 딥 러닝 훈련을 가속화하는 또 다른 패러다임으로 부상한 데이터 유형입니다. NVIDIA H100 GPUs 지원 FP8 데이터 유형을 릴리스하면 FP8 혼합 정밀도 훈련을 통해 분산 훈련을 가속화GPUs하면서 H100이 탑재된 P5 인스턴스의 성능 개선의 이점을 누릴 수 있습니다.
FP8 데이터 유형은 E4M3 및 E5M2 형식으로 더 분기됩니다. E4M3은 더 나은 정밀도를 제공하고, 제한된 동적 범위를 가지며, 모델 훈련의 순방향 패스에 적합합니다. E5M2는 동적 범위가 더 넓지만 정밀도는 낮으며, 정밀도가 덜 중요하고 동적 범위가 더 넓어지면 역방향 패스에 더 적합합니다. 따라서 하이브리드 FP8 전략 레시피
절반 정밀도 데이터 유형(FP16 및 BF16)의 경우 정적 손실 규모 조정 또는 동적 손실 규모 조정과 같은 글로벌 손실 규모 조정 기술은 절반 정밀도의 반올림 기울기로 인한 정보 손실로 인해 발생하는 수렴 문제를 처리합니다. 그러나 의 동적 범위는 FP8 훨씬 좁으며 글로벌 손실 조정 기법으로는 충분하지 않습니다. 이 시점에서는 더 세분화된 텐서별 조정 기법이 필요합니다. 지연 조정은 이전 반복의 여러 텐서에서 관찰된 최대 절대값을 기반으로 조정 인자를 선택하는 전략입니다. 이 전략에는 절충점이 있습니다. FP8 계산의 전체 성능 이점을 사용하지만 텐서의 최대 가치 기록을 유지하기 위한 메모리가 필요합니다. 일반적으로 지연 조정 전략에 대해 자세히 알아보려면 FP8 딥 러닝용 형식 문서를 참조하세요
실제로 FP8 를 사용하면 P5 인스턴스의 모든 훈련 시나리오에서 유용합니다. 훈련 성능을 향상하려면 가능하면 FP8 항상 활성화하는 것이 좋습니다.
SMP v2는 구입 즉시 트랜스포머 엔진을 지원합니다. 따라서 SageMaker (ml.p5.48xlarge
)의 P5 인스턴스에서 SMP v2로 FP8 훈련을 실행할 때 해야 할 유일한 일은 훈련 스크립트torch.sagemaker
에서 를 가져오고 기본 Transformer Engine Python 패키지를 계속 사용하는 것입니다. 일반적인 FP8 훈련을 위해 트랜스포머 엔진을 사용하는 방법에 대한 자세한 내용은 트랜스포머 엔진 설명서의 트랜스포머 엔진과 FP8 함께 사용을
import torch.sagemaker as tsm import transformer_engine.pytorch as te from transformer_engine.common.recipe import DelayedScaling, Format # Initialize the SMP torch.sagemaker API. tsm.init() # Define a transformer model and wrap it with the torch.sagemaker.transform API. from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_config(
ModelConfig
) model = tsm.transform(model) # Enable E4M3 during forward pass, E5M2 during backward pass. fp8_format = Format.HYBRID # Create an FP8 recipe. fp8_recipe = DelayedScaling(fp8_format=fp8_format, amax_history_len=32, amax_compute_algo="max") # Enable FP8 autocasting. with te.fp8_autocast(enabled=True, fp8_recipe=fp8_recipe, fp8_group=tsm.state.world_process_group): out = model(inp) loss = out.sum() loss.backward()
P5 인스턴스에서 SMP v2를 사용한 FP8 훈련의 실제 예를 찾으려면 P5 인스턴스에서 를 사용한 Llama-v2(또는 GPT-NeoX)의 훈련 가속화 SageMaker PyTorch FSDP의 예제 노트북FP8을 참조하세요
를 사용하여 절반 정밀도 데이터 유형을 사용한 혼합 정밀도 훈련 PyTorch FSDP
SMP v2는 P4 및 P5 인스턴스에서 훈련 작업을 PyTorch FSDP MixedPrecision
참고
이 기능과 혼합 PyTorch FSDP된 정밀도 훈련은 SageMaker 와 라이브러리의 다음 조합에서 사용할 수 PyTorch 있습니다.
-
SMP v2.0.0 이상
-
SageMaker Python SDK v2.200.0 이상
-
PyTorch v2.0.1 이상
혼합 정밀도에 맞게 모델을 구성하는 표준 방법은 에서 모델을 생성한 float32
다음 다음 다음 코드 코드 조각과 같이 MixedPrecision
정책을 전달하여 파라미터를 float16
bfloat16
즉시 FSDP 캐스팅할 수 있도록 허용하는 것입니다. 의 혼합 정밀도를 위한 파라미터, 감소 또는 버퍼dtype
에 대한 변경 옵션에 대한 자세한 내용은 설명서PyTorch FSDPMixedPrecision
API
# Native PyTorch API from torch.distributed.fsdp import MixedPrecision dtype = torch.bfloat16 mixed_precision_policy = MixedPrecision( param_dtype=dtype, reduce_dtype=dtype, buffer_dtype=dtype ) model = FSDP( model, ..., mixed_precision=mixed_precision_policy )
특정 모델(예: Hugging Face Transformers Llama 모델)은 버퍼를 로 예상합니다float32
. 를 사용하려면 dtype
객체를 정의하는 줄torch.float32
에서 를 torch.bfloat16
로 float32
바꿉니다.