기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker 훈련 컴파일러 모범 사례 및 고려 사항
중요
Amazon Web Services(AWS)는 SageMaker 훈련 컴파일러의 새 릴리스 또는 버전이 없을 것이라고 발표했습니다. 기존 SageMaker AWS 훈련용 딥 러닝 컨테이너(DLCs)를 통해 SageMaker 훈련 컴파일러를 계속 활용할 수 있습니다. 기존에 DLCs 계속 액세스할 수 있지만 딥 러닝 컨테이너 프레임워크 지원 정책에 AWS따라 더 이상 패치 또는 업데이트를 받지 않는다는 점에 유의해야 합니다. AWS
SageMaker 훈련 컴파일러를 사용할 때 다음 모범 사례 및 고려 사항을 검토합니다.
모범 사례
SageMaker 훈련 컴파일러로 훈련 작업을 실행할 때 최상의 결과를 얻으려면 다음 지침을 따르십시오.
일반 모범 사례
-
반드시 지원되는 인스턴스 유형 및 테스트 완료 모델 중 하나를 사용해야 합니다.
-
훈련 스크립트에서 Hugging Face Transformers 라이브러리를 사용하여 NLP 모델의 토큰화기를 생성할 때를 지정하여 정적 입력 텐서 셰이프를 사용해야 합니다
padding='max_length'
. 배치에서 가장 긴 시퀀스에 패딩하면 각 훈련 배치의 텐서 셰이프가 변경될 수 있으므로padding='longest'
은(는) 사용하지 마세요. 동적 입력 셰이프는 모델의 리컴파일을 시작하고 총 훈련 시간을 늘릴 수 있습니다. 변환기 토크나이저의 패딩 옵션에 대한 자세한 내용은 Hugging Face Transformer 설명서의 패딩 및 잘라내기를 참조하세요. -
GPU 메모리 사용률을 측정하여 GPU 메모리에 맞는 최대 배치 크기를 사용해야 합니다. Amazon SageMaker Training Compiler는 훈련 중 모델의 메모리 공간을 줄여 일반적으로 GPU 메모리
batch_size
에 더 큰 크기를 맞출 수 있습니다. 더 큰batch_size
값을 사용하면 GPU 사용률이 향상되고 총 훈련 시간이 줄어듭니다.배치 크기를 조정할 때는
learning_rate
도 적절하게 조정해야 합니다. 예를 들어, 배치 크기를k
의 배수로 늘린 경우learning_rate
선형(k
으로 곱한 단순 곱셈) 으로 조정하거나k
의 제곱근을 곱해야 합니다. 이는 단축된 훈련 시간 내에 동일하거나 유사한 수렴 동작을 구현하기 위한 것입니다.batch_size
테스트를 거친 인기 모델에 대한 참조는 테스트 완료 모델을(를) 참조하세요. -
컴파일러 가속 훈련 작업을 디버깅하려면
compiler_config
파라미터에서debug
플래그를 활성화하세요. 이를 통해 SageMaker AI는 디버깅 로그를 SageMaker 훈련 작업 로그에 넣을 수 있습니다.huggingface_estimator=HuggingFace( ... compiler_config=TrainingCompilerConfig(debug=True) )
컴파일러 훈련 작업의 전체 디버깅을 활성화하면 오버헤드가 추가될 수 있다는 점에 유의하세요.
에 대한 모범 사례 PyTorch
-
PyTorch 모델을 가져오고 이를 체크포인트하려는 경우 PyTorchXLA의 모델 저장 함수를 사용하여 모델을 올바르게 체크포인트해야 합니다. 함수에 대한 자세한 내용은 디바이스 설명서
torch_xla.core.xla_model.save
의 섹션을 참조하세요. PyTorch XLA PyTorch 스크립트에 수정 사항을 추가하는 방법은 섹션을 참조하세요 PyTorch 직접를 사용하는 대규모 언어 모델(Huging Face Transformers Trainer 제외API).
모델 저장 함수를 사용하는 실제 적용에 대한 자세한 내용은의 Hugging Face PyTorch/XLA TPUs: 더 빠르고 저렴한 훈련 블로그의 체크포인트 쓰기 및 로드를 참조하세요
. -
분산 훈련을 위한 최적의 훈련 시간을 확보하려면 다음 사항을 고려해 보세요.
-
단일 GPU 인스턴스를 사용하는 GPUs 대신 여러가 있는 인스턴스를 사용합니다. 예를 들어 단일
ml.p3dn.24xlarge
인스턴스는 8xml.p3.2xlarge
인스턴스보다 훈련 시간이 더 빠릅니다. -
ml.p3dn.24xlarge
및와 같은 EFA 지원이 있는 인스턴스를 사용합니다ml.p4d.24xlarge
. 이러한 인스턴스 유형은 네트워킹 속도를 높이고 훈련 시간을 단축합니다. -
느린 사전 처리로 인해 모델 훈련이 지연되지 않도록 데이터세트의
preprocessing_num_workers
파라미터를 조정하세요.
-
고려 사항
SageMaker 훈련 컴파일러를 사용할 때는 다음 사항을 고려하세요.
로깅, 체크포인팅 및 프로파일링으로 인한 성능 저하
-
명시적인 평가로 이어지는 로깅, 체크포인팅, 프로파일링 모델 텐서를 피하세요. 명시적 평가가 무엇인지 이해하려면 다음 코드 컴파일 예제를 고려해 보세요.
a = b+c e = a+d
컴파일러는 코드를 다음과 같이 해석하여 변수
a
의 메모리 사용량을 줄입니다.e = b+c+d
이제 변수
a
에 인쇄 함수를 추가하기 위해 코드를 변경하는 다음과 같은 경우를 생각해 보세요.a = b+c e = a+d print(a)
컴파일러는 다음과 같이 변수
a
을(를) 명시적으로 평가합니다.e = b+c+d a = b+c # Explicit evaluation print(a)
예를 들어 PyTorch에서는 명시적 평가를 도입할 수 있는 torch.tensor.items()
를 사용하지 마십시오. 딥 러닝에서 이러한 명시적 평가는 모델의 컴파일 그래프에서 융합 연산을 중단시키고 텐서를 다시 계산하게 되므로 오버헤드가 발생할 수 있습니다. 훈련 컴파일러를 사용하는 동안 SageMaker 훈련 중에도 모델을 정기적으로 평가하려면 명시적 평가로 인한 오버헤드를 줄이려면 로깅 및 체크포인트를 더 낮은 빈도로 수행하는 것이 좋습니다. 예를 들어 모든 에포크 대신 10 에포크마다 로깅하세요.
-
그래프 컴파일은 훈련의 처음 몇 단계에서 실행됩니다. 따라서 처음 몇 단계는 매우 느릴 것으로 예상됩니다. 그러나 이는 한 번의 컴파일 비용이며 컴파일을 통해 향후 단계가 훨씬 빨라지므로 더 오랜 기간 동안 훈련하면 상각될 수 있습니다. 초기 컴파일 오버헤드는 모델 크기, 입력 텐서 크기, 입력 텐서 셰이프 분포에 따라 달라집니다.
PyTorch 직접 사용 APIs 시 PyTorch/XLA의 잘못된 사용
PyTorch/XLA는의 집합을 정의APIs하여 기존 PyTorch 훈련 중 일부를 대체합니다APIs. 제대로 사용하지 않으면 PyTorch 훈련이 실패합니다.
-
PyTorch 모델을 컴파일할 때 가장 일반적인 오류 중 하나는 연산자와 텐서의 디바이스 유형이 잘못되었기 때문입니다. PyTorch 모델을 올바르게 컴파일하려면 XLA 디바이스와 디바이스를 사용하거나 CUDA 혼합하는 대신 CUDA 디바이스(
xm.xla_device()
)를 사용해야 합니다XLA. -
mark_step()
는에 대한 장벽입니다XLA. 올바르게 설정하지 않으면 훈련 작업이 지연됩니다. -
PyTorch/XLA는 추가 분산 훈련을 제공합니다APIs. 를 APIs 올바르게 프로그래밍하지 않으면 그라데이션이 잘못 수집되어 훈련 수렴 실패가 발생합니다.
PyTorch 스크립트를 올바르게 설정하고 앞서 언급한 잘못된 API 사용을 방지하려면 섹션을 참조하세요 PyTorch 직접를 사용하는 대규모 언어 모델(Huging Face Transformers Trainer 제외API).