SageMaker 교육 컴파일러 모범 사례 및 고려 사항 - 아마존 SageMaker

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

SageMaker 교육 컴파일러 모범 사례 및 고려 사항

중요

Amazon Web Services (AWS) 는 SageMaker 트레이닝 컴파일러의 새 릴리스나 버전이 없을 것이라고 발표했습니다. 기존 AWS Deep Learning Containers (DLCs) 를 통해 계속해서 SageMaker 트레이닝용 SageMaker 컴파일러를 활용할 수 있습니다. AWS Deep Learning Containers Framework 지원 정책에 따라 기존 버전은 DLCs 계속 액세스할 수 있지만 더 이상 패치나 업데이트를 받을 수 없다는 점에 유의하십시오. AWS

SageMaker 트레이닝 컴파일러를 사용할 때는 다음 모범 사례 및 고려 사항을 검토하십시오.

모범 사례

트레이닝 컴파일러로 훈련 작업을 실행할 때 다음 지침을 사용하여 최상의 결과를 SageMaker 얻으십시오.

일반 모범 사례
  • 반드시 지원되는 인스턴스 유형테스트 완료 모델 중 하나를 사용해야 합니다.

  • 교육 스크립트에서 Hugging Face Transformer 라이브러리를 사용하여 NLP 모델용 토크나이저를 만들 때는 다음을 지정하여 정적 입력 텐서 셰이프를 사용해야 합니다. padding='max_length' 배치에서 가장 긴 시퀀스에 패딩하면 각 훈련 배치의 텐서 셰이프가 변경될 수 있으므로 padding='longest'은(는) 사용하지 마세요. 동적 입력 셰이프는 모델의 리컴파일을 시작하고 총 훈련 시간을 늘릴 수 있습니다. 변환기 토크나이저의 패딩 옵션에 대한 자세한 내용은 Hugging Face Transformer 설명서패딩 및 잘라내기를 참고하세요.

  • GPU메모리 사용량을 측정하여 메모리에 들어갈 수 있는 최대 배치 크기를 사용하는지 확인하세요. GPU Amazon SageMaker Training Compiler는 학습 중에 모델의 메모리 사용량을 줄여 주므로 일반적으로 batch_size 메모리에 더 큰 용량을 넣을 수 있습니다. GPU 더 큰 용량을 batch_size 사용하면 GPU 활용도가 향상되고 총 교육 시간이 줄어듭니다.

    배치 크기를 조정할 때는 learning_rate도 적절하게 조정해야 합니다. 예를 들어, 배치 크기를 k의 배수로 늘린 경우 learning_rate 선형(k으로 곱한 단순 곱셈) 으로 조정하거나 k의 제곱근을 곱해야 합니다. 이는 단축된 훈련 시간 내에 동일하거나 유사한 수렴 동작을 구현하기 위한 것입니다. batch_size 테스트를 거친 인기 모델에 대한 참조는 테스트 완료 모델을(를) 참조하세요.

  • 컴파일러 가속 훈련 작업을 디버깅하려면 compiler_config 파라미터에서 debug 플래그를 활성화하세요. 이렇게 하면 디버깅 로그를 SageMaker 교육 작업 SageMaker 로그에 넣을 수 있습니다.

    huggingface_estimator=HuggingFace( ... compiler_config=TrainingCompilerConfig(debug=True) )

    컴파일러 훈련 작업의 전체 디버깅을 활성화하면 오버헤드가 추가될 수 있다는 점에 유의하세요.

에 대한 모범 사례 PyTorch
  • PyTorch 모델을 가져와서 체크포인트를 지정하려는 경우 PyTorch XLA /의 model save 기능을 사용하여 모델을 올바르게 체크포인팅해야 합니다. 함수에 대한 자세한 내용은 PyTorch on XLA Devices torch_xla.core.xla_model.save설명서를 참조하십시오.

    PyTorch 스크립트에 수정 사항을 추가하는 방법을 알아보려면 을 참조하십시오 PyTorch 직접 사용하는 대형 언어 모델 (Hugging Face 트랜스포머 트레이너 API 제외).

    모델 저장 기능 사용의 실제 적용에 대한 자세한 내용은 Hugging Face on PyTorch/XLATPUs: 더 빠르고 저렴한 교육 블로그에서 체크포인트 작성 및 로딩을 참조하십시오.

  • 분산 훈련을 위한 최적의 훈련 시간을 확보하려면 다음 사항을 고려해 보세요.

    • 단일 GPU 인스턴스를 사용하는 GPUs 대신 여러 개의 인스턴스를 사용하십시오. 예를 들어 단일 ml.p3dn.24xlarge 인스턴스는 8x ml.p3.2xlarge 인스턴스보다 훈련 시간이 더 빠릅니다.

    • 및 와 같은 EFA ml.p3dn.24xlarge 지원이 있는 인스턴스를 사용하세요. 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 Training Compiler를 사용하는 동안 여전히 모델을 정기적으로 평가하려는 경우 명시적 평가로 인한 오버헤드를 줄이기 위해 더 낮은 빈도로 로깅 및 체크포인트를 지정하는 것이 좋습니다. 예를 들어 모든 에포크 대신 10 에포크마다 로깅하세요.

  • 그래프 컴파일은 훈련의 처음 몇 단계에서 실행됩니다. 따라서 처음 몇 단계는 매우 느릴 것으로 예상됩니다. 그러나 이는 한 번의 컴파일 비용이며 컴파일을 통해 향후 단계가 훨씬 빨라지므로 더 오랜 기간 동안 훈련하면 상각될 수 있습니다. 초기 컴파일 오버헤드는 모델 크기, 입력 텐서 크기, 입력 텐서 셰이프 분포에 따라 달라집니다.

/를 직접 사용할 때 잘못 사용된/ PyTorchXLAAPIs PyTorch

PyTorch/는 기존 PyTorch 교육 중 APIs 일부를 대체할 세트를 XLA 정의합니다APIs. 제대로 사용하지 않으면 PyTorch 훈련이 실패하게 됩니다.

  • PyTorch 모델을 컴파일할 때 발생하는 가장 일반적인 오류 중 하나는 연산자와 텐서의 장치 유형이 잘못되었기 때문입니다. PyTorch 모델을 제대로 컴파일하려면 기기와 장치를 CUDA 사용하거나 CUDA 혼합하는 대신 XLA devices (xm.xla_device()) 를 사용해야 합니다. XLA

  • mark_step()어디까지나 장벽이 될 수 XLA 있습니다. 올바르게 설정하지 않으면 훈련 작업이 지연됩니다.

  • PyTorchXLA/는 추가 분산 교육을 제공합니다APIs. APIs제대로 프로그래밍하지 않으면 그래디언트가 잘못 수집되어 훈련 수렴 오류가 발생합니다.

PyTorch 스크립트를 올바르게 설정하고 앞서 언급한 잘못된 사용을 방지하려면 을 참조하십시오. API PyTorch 직접 사용하는 대형 언어 모델 (Hugging Face 트랜스포머 트레이너 API 제외)