혼합 정밀도 훈련 - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

혼합 정밀도 훈련

SageMaker 모델 병렬 처리(SMP) 라이브러리 v2는 및 Transformer Engine과 같은 PyTorch FSDP 오픈 소스 프레임워크와 통합하여 즉시 혼합 정밀도 훈련을 지원합니다. 자세한 내용은 다음 주제를 참조하세요.

Transformer Engine을 사용하여 P5 인스턴스FP8에서 와 혼합된 정밀도 훈련

SageMaker 모델 병렬 처리(SMP) 라이브러리 v2.2.0부터 SMP 라이브러리는 Transformer Engine과 통합되며 즉시 FP8 혼합 정밀도 훈련을 지원하여 와의 호환성을 유지합니다PyTorch FSDPMixedPrecision. 즉, 혼합 정밀도 훈련에는 PyTorch FSDP를 사용하고 FP8 훈련에는 트랜스포머 엔진을 사용할 수 있습니다. Transformer Engine의 FP8 훈련 기능에서 지원하지 않는 모델 계층의 경우 해당 계층은 혼합 정밀도로 PyTorch FSDP 돌아갑니다.

참고

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 함께 사용을 참조하세요. NVIDIA 다음 코드 조각은 SMP 라이브러리를 가져오고 훈련 스크립트에서 설정하기 위한 코드 줄이 어떻게 보여야 하는지 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 는 성능 개선과 메모리 감소를 위한 혼합 정밀도를 위한 다양한 구성을 제공합니다.

참고

이 기능과 혼합 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 FSDPMixedPrecisionAPI의 섹션을 PyTorch참조하세요. PyTorch

# 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.bfloat16float32바꿉니다.