기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker 모델 병렬 처리(SMP) 라이브러리 v2는 PyTorch FSDP 및 Transformer Engine과 같은 오픈 소스 프레임워크와 통합하여 즉시 혼합 정밀도 훈련을 지원합니다. 자세한 내용은 다음 주제를 참조하세요.
Transformer Engine을 사용하여 P5 인스턴스에서 FP8과 혼합된 정밀도 훈련
SageMaker 모델 병렬 처리(SMP) 라이브러리 v2.2.0부터 SMP 라이브러리는 Transformer EngineMixedPrecision
참고
SMP v2는 다음 Hugging Face 트랜스포머 모델에 대한 FP8 지원을 제공합니다.
-
GPT-NeoX(SMP v2.2.0 이상에서 사용 가능)
-
Llama 2(SMP v2.2.0 이상에서 사용 가능)
-
Mixtral 8x7b 및 Mixtral 8x22b(SMP v2.5.0 이상에서 사용 가능)
참고
P5 기능에 대한 이 FP8 훈련은 SageMaker 라이브러리와 PyTorch 라이브러리의 다음 조합에서 사용할 수 있습니다.
-
SageMaker Python SDK v2.212.0 이상
-
PyTorch v2.2.0 이상
FP8(8비트 부동 소수점 정밀도)은 LLM 모델의 딥 러닝 훈련을 가속화하기 위한 또 다른 패러다임으로 부상한 데이터 유형입니다. FP8 데이터 유형을 지원하는 NVIDIA H100 GPU 릴리스를 사용하면 FP8 혼합 정밀도 훈련을 통해 분산 훈련을 가속화하면서 H100 GPU가 탑재된 P5 인스턴스의 성능 개선의 이점을 누릴 수 있습니다.
FP8 데이터 유형은 E4M3 및 E5M2 형식으로 더 분기됩니다. E4M3은 더 나은 정밀도를 제공하고, 제한된 동적 범위를 가지며, 모델 훈련의 순방향 패스에 적합합니다. E5M2는 동적 범위가 더 넓지만 정밀도는 낮으며, 정밀도가 덜 중요하고 동적 범위가 더 넓어지면 역방향 패스에 더 적합합니다. 따라서 하이브리드 FP8 전략 레시피
절반 정밀도 데이터 유형(FP16 및 BF16)의 경우 정적 손실 규모 조정 또는 동적 손실 규모 조정과 같은 글로벌 손실 규모 조정 기술은 반정밀도의 반올림 기울기로 인한 정보 손실로 인해 발생하는 수렴 문제를 처리합니다. 그러나 FP8의 동적 범위는 훨씬 좁으며 글로벌 손실 조정 기법으로는 충분하지 않습니다. 이 시점에서는 더 세분화된 텐서별 조정 기법이 필요합니다. 지연된 조정은 이전 반복을 구성하는 여러 텐서에서 관찰된 최대 절대값을 기반으로 조정 인자를 선택하는 전략입니다. 이 전략에는 절충점이 있습니다. FP8 계산의 전체 성능 이점을 사용하지만 텐서의 최대 가치 기록을 유지하기 위한 메모리가 필요합니다. 일반적으로 지연 조정 전략에 대한 자세한 내용은 딥 러닝용 FP8 형식 문서를 참조하세요
실제로 FP8을 사용하면 P5 인스턴스의 모든 훈련 시나리오에서 유용합니다. 훈련 성능을 향상하려면 가능하면 항상 FP8을 활성화하는 것이 좋습니다.
SMP v2는 구입 즉시 트랜스포머 엔진을 지원합니다. 따라서 SageMaker AI(ml.p5.48xlarge
)의 P5 인스턴스에서 SMP v2로 FP8 훈련을 실행할 때 해야 할 유일한 일은 훈련 스크립트torch.sagemaker
에서를 가져오고 기본 Transformer Engine Python 패키지를 계속 사용하는 것입니다. 일반적으로 FP8 훈련에 트랜스포머 엔진을 사용하는 방법에 대한 자세한 내용은 NVIDIA 트랜스포머 엔진 설명서의 트랜스포머 엔진과 함께 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 P5 인스턴스에서 FP8을 사용한 Llama-v2(또는 GPT-NeoX)의 Accelerate SageMaker PyTorch FSDP 훈련의 예제 노트북을 참조하세요
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
정책을 전달하여 FSDP가 파라미터를 즉시 float16
또는 bfloat16
에 캐스팅하도록 허용하는 것입니다. PyTorch에서 혼합 정밀도에 대한 파라미터, 감소 또는 버퍼에 대한dtype
를 변경하는 옵션에 대한 자세한 내용은 PyTorch 설명서의 PyTorch FSDP MixedPrecision
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 트랜스포머 Llama 모델)은 버퍼를 float32
로 예상합니다. float32
를 사용하려면 dtype
객체를 정의하는 줄에서 torch.float32
를 torch.bfloat16
으로 바꿉니다.