기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker 교육 컴파일러 문제 해결
중요
Amazon Web Services (AWS) 는 SageMaker 트레이닝 컴파일러의 새 릴리스나 버전이 없을 것이라고 발표했습니다. 기존 AWS Deep Learning Containers (DLCs) 를 통해 계속해서 SageMaker 트레이닝용 SageMaker 컴파일러를 활용할 수 있습니다. AWS Deep Learning Containers Framework 지원 정책에 따라 기존 버전은 DLCs 계속 액세스할 수 있지만 더 이상 패치나 업데이트를 받을 수 없다는 점에 유의하십시오. AWS
오류가 발생하는 경우 다음 목록을 사용하여 훈련 작업 문제를 해결할 수 있습니다. 추가 지원이 필요한 경우 Support 또는 Amazon AWS 개발자 포럼을
네이티브 프레임워크 훈련 작업과 비교했을 때 훈련 작업이 예상대로 수렴되지 않습니다.
컨버전스 문제는 SageMaker 'Training Compiler가 켜져 있을 때 모델이 학습하지 못함'부터 '모델이 학습하지만 네이티브 프레임워크보다 느리다'까지 다양합니다. 이 문제 해결 가이드에서는 네이티브 프레임워크에서 SageMaker Training Compiler를 사용하지 않아도 컨버전스가 괜찮다고 가정하고 이를 기준으로 삼습니다.
이러한 컨버전스 문제에 직면했을 때 가장 먼저 해야 할 일은 문제가 분산 학습에만 국한된 것인지 아니면 단일 GPU 학습에서 비롯된 것인지 식별하는 것입니다. 트레이닝 컴파일러를 사용한 분산 SageMaker 훈련은 추가 단계가 포함된 단일 GPU 학습의 확장입니다.
-
여러 인스턴스로 클러스터를 설정하거나GPUs.
-
입력 데이터를 모든 작업자에게 배포합니다.
-
모든 작업자의 모델 업데이트를 동기화합니다.
따라서 단일 GPU 교육에서 발생하는 모든 수렴 문제는 여러 작업자를 대상으로 하는 분산 교육으로 전파됩니다.
단일 교육에서 발생하는 수렴 문제 GPU
수렴 문제가 단일 GPU 훈련에서 비롯된 경우 하이퍼파라미터 또는 에 대한 부적절한 설정 때문일 수 있습니다. torch_xla
APIs
하이퍼파라미터 확인
트레이닝 컴파일러를 사용하여 SageMaker 훈련하면 모델의 메모리 사용량이 변경됩니다. 컴파일러는 재사용과 재계산을 지능적으로 조정하여 그에 따라 메모리 사용량을 늘리거나 줄입니다. 이를 활용하려면 훈련 작업을 Training Compiler로 마이그레이션할 때 배치 크기 및 관련 하이퍼파라미터를 다시 조정해야 합니다. SageMaker 하이퍼파라미터 설정이 올바르지 않으면 훈련 손실이 진동하고 그 결과 수렴 속도가 느려질 수 있습니다. 드문 경우이긴 하지만, 과도한 하이퍼파라미터로 인해 모델이 학습되지 않을 수 있습니다(훈련 손실 지표는 NaN
을(를) 감소하거나 반환하지 않음) 수렴 문제가 하이퍼파라미터 때문인지 확인하려면 모든 하이퍼파라미터를 동일하게 유지하면서 Training Compiler를 사용하거나 사용하지 않는 두 개의 SageMaker 훈련 작업을 side-by-side 테스트해 보십시오.
단일 훈련에 torch_xla
APIs 맞게 제대로 설정되었는지 확인하세요. GPU
기준 하이퍼파라미터를 사용해도 수렴 문제가 계속되는 경우 torch_xla
APIs, 특히 모델을 업데이트하기 위한 하이퍼파라미터의 부적절한 사용이 있는지 확인해야 합니다. 기본적으로 torch_xla
은(는) 누적된 그래프를 실행하라는 명시적인 지시가 있을 때까지 그래프 형태로 명령을 계속 누적(실행 지연)합니다. torch_xla.core.xla_model.mark_step()
함수를 사용하면 누적된 그래프를 쉽게 실행할 수 있습니다. 각 모델 업데이트 후, 변수를 인쇄 및 기록하기 전에 이 함수를 사용하여 그래프 실행을 동기화해야 합니다. 동기화 단계가 없는 경우 모델은 모든 반복 및 모델 업데이트 후 동기화해야 하는 최신 값을 사용하는 대신 인쇄, 로그 및 후속 전달 과정에 메모리의 오래된 값을 사용할 수 있습니다.
SageMaker Training Compiler를 그래디언트 스케일링 (를 사용하는 경우 가능AMP) 또는 그래디언트 클리핑 기법과 함께 사용하면 더 복잡할 수 있습니다. 그래디언트를 사용한 적절한 그래디언트 계산 순서는 AMP 다음과 같습니다.
-
스케일링을 통한 그라데이션 계산
-
그라데이션 스케일링 해제, 그라데이션 클리핑 후 스케일링
-
모델 업데이트
-
그래프 실행을
mark_step()
와(과) 동기화합니다.
목록에 언급된 작업에 APIs 적합한 연산을 찾으려면 트레이닝 스크립트를 Training Compiler로 마이그레이션하기 SageMaker 위한 가이드를 참조하십시오.
자동 모델 튜닝을 사용해 보세요.
SageMaker Training Compiler를 사용하는 동안 배치 크기 및 관련 하이퍼파라미터 (예: 학습률) 를 다시 조정할 때 수렴 문제가 발생하는 경우 자동 모델 튜닝을 사용하여 하이퍼파라미터를 조정하는 것이 좋습니다. 트레이닝 컴파일러를 사용한 하이퍼파라미터 튜닝에 대한 예제 노트북을
분산 훈련에서 발생하는 수렴 문제
분산 훈련에서 수렴 문제가 지속된다면 이는 가중치 초기화 또는 기타 설정이 잘못되었기 때문일 수 있습니다. torch_xla
APIs
작업자 전체의 가중치 초기화를 확인하세요.
여러 작업자를 사용하여 분산 훈련 작업을 실행할 때 수렴 문제가 발생하는 경우, 해당하는 경우 상수 시드를 설정하여 모든 작업자에게 일관된 결정적 동작이 적용되도록 하세요. 무작위화를 포함하는 가중치 초기화와 같은 기법에 주의하세요. 상수 시드가 없으면 각 작업자가 다른 모델을 훈련하게 될 수도 있습니다.
분산 교육을 위해 torch_xla
APIs 제대로 설정되어 있는지 확인하세요.
그래도 문제가 지속된다면 분산 교육에 를 잘못 사용했기 때문일 수 있습니다. torch_xla
APIs Training Compiler를 사용한 분산 훈련용 클러스터를 설정하려면 추정기에 다음을 추가해야 합니다. SageMaker
distribution={'torchxla': {'enabled': True}}
여기에는 작업자당 한 번씩 간접 호출되는 훈련 스크립트의 _mp_fn(index)
함수가 함께 포함되어야 합니다. mp_fn(index)
함수가 없으면 각 작업자가 모델 업데이트를 공유하지 않고 독립적으로 모델을 훈련하게 될 수 있습니다.
다음으로, 다음 예제와 같이 훈련 스크립트를 Training Compiler로 마이그레이션하는 방법에 대한 설명서의 지침에 따라 분산 데이터 샘플러와 torch_xla.distributed.parallel_loader.MpDeviceLoader
API 함께 사용해야 합니다. SageMaker
torch.utils.data.distributed.DistributedSampler()
이렇게 하면 입력 데이터가 모든 작업자에게 적절하게 배포될 수 있습니다.
마지막으로, 모든 작업자의 모델 업데이트를 동기화하려면 torch_xla.core.xla_model._fetch_gradients
을(를) 사용하여 모든 작업자로부터 그라데이션을 수집하고 torch_xla.core.xla_model.all_reduce
을(를) 사용해 수집된 모든 그라데이션을 단일 업데이트로 결합합니다.
SageMaker 트레이닝 컴파일러에 그래디언트 스케일링 (를 사용했을 수도 있음AMP) 이나 그래디언트 클리핑 기법을 함께 사용하면 더 복잡할 수 있습니다. 그래디언트를 사용한 적절한 그래디언트 계산 순서는 AMP 다음과 같습니다.
-
스케일링을 통한 그라데이션 계산
-
모든 작업자 간의 그라데이션 동기화
-
그라데이션 스케일링 해제, 그라데이션 클리핑 후 그라데이션 스케일링
-
모델 업데이트
-
그래프 실행을
mark_step()
와(과) 동기화합니다.
참고로 이 체크리스트에는 단일 교육용 체크리스트와 비교하여 모든 작업자를 동기화하기 위한 추가 항목이 있습니다. GPU
/구성 누락으로 인해 교육 작업이 실패합니다. PyTorch XLA
교육 작업이 실패하고 Missing XLA configuration
오류 메시지가 표시되는 경우 사용하는 GPUs 인스턴스당 수가 잘못 구성되었기 때문일 수 있습니다.
XLA교육 작업을 컴파일하려면 추가 환경 변수가 필요합니다. 가장 일반적으로 누락되는 환경 변수는 GPU_NUM_DEVICES
입니다. 컴파일러가 제대로 작동하려면 이 환경 변수를 GPUs 인스턴스당 개수와 동일하게 설정해야 합니다.
GPU_NUM_DEVICES
환경 변수를 설정하는 세 가지 방법이 있습니다.
-
접근법 1 — SageMaker 추정기
environment
클래스의 인수를 사용합니다. 예를 들어GPUs, 4개가 있는ml.p3.8xlarge
인스턴스를 사용하는 경우 다음을 수행하십시오.# Using the SageMaker Python SDK's HuggingFace estimator hf_estimator=HuggingFace( ... instance_type="
ml.p3.8xlarge
", hyperparameters={...}, environment={ ... "GPU_NUM_DEVICES": "4
" # corresponds to number of GPUs on the specified instance }, ) -
접근법 2 — SageMaker 추정기 클래스의
hyperparameters
인수를 사용하여 학습 스크립트에서 이를 파싱합니다.-
개수를 지정하려면 인수에 GPUs 키-값 쌍을 추가하십시오.
hyperparameters
예를 들어GPUs, 4개가 있는
ml.p3.8xlarge
인스턴스를 사용하는 경우 다음을 수행하십시오.# Using the SageMaker Python SDK's HuggingFace estimator hf_estimator=HuggingFace( ... entry_point = "
train.py
" instance_type= "ml.p3.8xlarge
", hyperparameters = { ... "n_gpus":4
# corresponds to number of GPUs on specified instance } ) hf_estimator.fit() -
훈련 스크립트에서
n_gpus
하이퍼파라미터를 파싱하고 이를GPU_NUM_DEVICES
환경 변수의 입력으로 지정합니다.# train.py import os, argparse if __name__ == "__main__": parser = argparse.ArgumentParser() ... # Data, model, and output directories parser.add_argument("--output_data_dir", type=str, default=os.environ["SM_OUTPUT_DATA_DIR"]) parser.add_argument("--model_dir", type=str, default=os.environ["SM_MODEL_DIR"]) parser.add_argument("--training_dir", type=str, default=os.environ["SM_CHANNEL_TRAIN"]) parser.add_argument("--test_dir", type=str, default=os.environ["SM_CHANNEL_TEST"]) parser.add_argument("--n_gpus", type=str, default=os.environ["SM_NUM_GPUS"]) args, _ = parser.parse_known_args() os.environ["GPU_NUM_DEVICES"] = args.n_gpus
-
-
접근법 3 - 훈련 스크립트에서
GPU_NUM_DEVICES
환경 변수를 하드 코딩합니다. 예를 들어, 4개가 있는 인스턴스를 사용하는 경우 스크립트에 다음을 추가하세요GPUs.# train.py import os os.environ["GPU_NUM_DEVICES"] =
4
작은 정보
사용할 기계 학습 인스턴스의 GPU 디바이스 수를 확인하려면 Amazon EC2 인스턴스 유형 페이지의 가속 컴퓨팅을
SageMaker 교육 컴파일러는 총 교육 시간을 줄이지 않습니다.
Training Compiler를 사용해도 총 SageMaker 훈련 시간이 줄어들지 않는다면 SageMaker 교육 컴파일러 모범 사례 및 고려 사항 페이지를 검토하여 학습 구성, 입력 텐서 셰이프에 대한 패딩 전략, 하이퍼파라미터를 확인하는 것이 좋습니다.