2단계: SageMaker Python SDK를 사용하여 교육 작업 시작 - 아마존 SageMaker

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

2단계: SageMaker Python SDK를 사용하여 교육 작업 시작

SageMaker Python SDK는 및 와 같은 TensorFlow ML 프레임워크를 사용하여 모델의 관리형 교육을 지원합니다. PyTorch 이러한 프레임워크 중 하나를 사용하여 학습 작업을 시작하려면 수정된 교육 스크립트와 모델 병렬 구성을 사용하도록 SageMaker TensorFlow 추정기, SageMaker PyTorch 추정기 또는 SageMaker 일반 추정기를 정의해야 합니다.

및 에스티메이터 사용 SageMaker TensorFlow PyTorch

TensorFlow 및 PyTorch 추정기 클래스에는 분산 훈련 프레임워크를 사용하기 위한 구성 distribution 파라미터를 지정하는 데 사용할 수 있는 파라미터가 포함되어 있습니다. SageMaker 모델 병렬 라이브러리는 하이브리드 데이터 및 모델 병렬화에 내부적으로 MPI를 사용하므로 라이브러리와 함께 MPI 옵션을 사용해야 합니다.

TensorFlow PyTorch or 추정기의 다음 템플릿은 MPI와 함께 모델 SageMaker 병렬 라이브러리를 사용하기 위한 distribution 매개변수를 구성하는 방법을 보여줍니다.

Using the SageMaker TensorFlow estimator
import sagemaker from sagemaker.tensorflow import TensorFlow smp_options = { "enabled":True, # Required "parameters": { "partitions": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "horovod": True, # Use this for hybrid model and data parallelism } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = TensorFlow( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='2.6.3', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')
Using the SageMaker PyTorch estimator
import sagemaker from sagemaker.pytorch import PyTorch smp_options = { "enabled":True, "parameters": { # Required "pipeline_parallel_degree": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "ddp": True, } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = PyTorch( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='1.13.1', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

라이브러리를 활성화하려면 추정기 생성자의 distribution 인수를 통해 구성 사전을 "smdistributed""mpi" 키에 전달해야 합니다. SageMaker

모델 병렬성을 위한 구성 파라미터 SageMaker
  • "smdistributed" 키의 경우 "modelparallel" 키와 다음 내부 사전이 포함된 사전을 전달하세요.

    참고

    하나의 훈련 작업에서 "modelparallel""dataparallel"를 사용하는 것은 지원되지 않습니다.

    • "enabled" - 필수입니다. 모델 병렬 처리를 활성화하려면 "enabled": True를 설정하세요.

    • "parameters" - 필수입니다. SageMaker 모델 병렬화를 위한 매개변수 세트를 지정합니다.

  • "mpi" 키의 경우 다음을 포함하는 사전을 전달하세요.

    • "enabled" - 필수입니다. MPI를 사용하여 분산 훈련 작업을 시작하도록 True를 설정합니다.

    • "processes_per_host" - 필수입니다. MPI가 각 호스트에서 시작해야 하는 프로세스 수를 지정합니다. 에서 SageMaker 호스트는 단일 Amazon EC2 ML 인스턴스입니다. SageMaker Python SDK는 모델 및 데이터 병렬성 전반에 걸쳐 프로세스와 GPU 간의 one-to-one 매핑을 유지합니다. 즉, 별도의 단일 GPU에서 각 프로세스를 SageMaker 스케줄링하고 GPU에는 프로세스가 두 개 이상 포함되지 않습니다. 를 사용하는 PyTorch 경우 를 통해 각 프로세스를 자체 장치로 제한해야 합니다. torch.cuda.set_device(smp.local_rank()) 자세한 내용은 다음과 같은 자동 분할 PyTorch 단원을 참조하세요.

      중요

      process_per_host은(는) 인스턴스당 GPU 수보다 커서는 안되며, 일반적으로 인스턴스당 GPU 수와 같습니다.

    • "custom_mpi_options"(선택 사항) - 이 키를 사용하여 필요한 사용자 지정 MPI 옵션을 전달할 수 있습니다. MPI 사용자 지정 옵션을 키에 전달하지 않는 경우 MPI 옵션은 기본적으로 다음 플래그로 설정됩니다.

      --mca btl_vader_single_copy_mechanism none
      참고

      이 기본 플래그를 키에 명시적으로 지정할 필요가 없습니다. 명시적으로 지정하는 경우 분산 모델 병렬 훈련 작업이 실패하고 다음 오류가 발생할 수 있습니다.

      The following MCA parameter has been listed multiple times on the command line: MCA param: btl_vader_single_copy_mechanism MCA parameters can only be listed once on a command line to ensure there is no ambiguity as to its value. Please correct the situation and try again.
      작은 정보

      EFA 지원 인스턴스 유형(예: ml.p4d.24xlargeml.p3dn.24xlarge)을 사용하여 훈련 작업을 시작하는 경우, 최상의 성능을 위해 다음 플래그를 사용하세요.

      -x FI_EFA_USE_DEVICE_RDMA=1 -x FI_PROVIDER=efa -x RDMAV_FORK_SAFE=1

추정기와 모델 SageMaker 병렬로 구성된 훈련 스크립트를 사용하여 훈련 작업을 시작하려면 함수를 실행하십시오. estimator.fit()

다음 리소스를 사용하여 SageMaker Python SDK의 모델 병렬 처리 기능을 사용하는 방법에 대해 자세히 알아보세요.

SageMaker의 분산 모델 병렬 라이브러리가 포함된 사전 빌드된 Docker 컨테이너를 확장하세요.

사전 빌드된 컨테이너를 확장하고 SageMaker 의 모델 병렬화 라이브러리를 사용하려면 또는 에서 사용 가능한 DLC ( AWS Deep Learning Containers) 이미지 중 하나를 사용해야 합니다. PyTorch TensorFlow SageMaker 모델 병렬 처리 라이브러리는 CUDA () 가 포함된 TensorFlow (2.3.0 이상) 및 PyTorch (1.6.0 이상) DLC 이미지에 포함되어 있습니다. cuxyz DLC 이미지의 전체 목록은 Deep Learning Containers GitHub 리포지토리에서 사용 가능한 Deep Learning AWS Containers 이미지를 참조하십시오.

작은 정보

모델 병렬화 라이브러리의 최신 버전이 포함된 이미지를 TensorFlow 사용하거나 SageMaker 모델 병렬화 라이브러리의 최신 up-to-date 버전에 액세스하는 PyTorch 것이 좋습니다.

예를 들어 Dockerfile에는 다음과 같은 FROM 문이 포함되어야 합니다.

# Use the SageMaker DLC image URI for TensorFlow or PyTorch FROM aws-dlc-account-id.dkr.ecr.aws-region.amazonaws.com/framework-training:{framework-version-tag} # Add your dependencies here RUN ... ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

또한 PyTorch TensorFlow or 추정기를 정의할 때는 훈련 entry_point 스크립트에 사용하도록 지정해야 합니다. 이는 Dockerfile에서 ENV SAGEMAKER_SUBMIT_DIRECTORY와(과) 함께 식별되는 경로와 동일해야 합니다.

작은 정보

이 Docker 컨테이너를 Amazon Elastic Container Registry (Amazon ECR) 로 푸시하고 이미지 URI (image_uri) 를 사용하여 학습용 추정기를 정의해야 합니다. SageMaker 자세한 정보는 사전 빌드 컨테이너 확장을 참조하세요.

Docker 컨테이너를 호스팅하고 컨테이너의 이미지 URI를 검색한 후 다음과 같이 추정기 객체를 생성합니다. SageMaker PyTorch 이 예제에서는 smp_optionsmpi_options을(를) 이미 정의했다고 가정합니다.

smd_mp_estimator = Estimator( entry_point="your_training_script.py", role=sagemaker.get_execution_role(), instance_type='ml.p3.16xlarge', sagemaker_session=sagemaker_session, image_uri='your_aws_account_id.dkr.ecr.region.amazonaws.com/name:tag' instance_count=1, distribution={ "smdistributed": smp_options, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

분산 모델 병렬 라이브러리를 사용하여 자체 Docker 컨테이너를 만드세요. SageMaker

학습용 Docker 컨테이너를 직접 빌드하고 SageMaker 모델 병렬 라이브러리를 사용하려면 Dockerfile에 분산 SageMaker 병렬 라이브러리의 올바른 종속성 및 바이너리 파일을 포함해야 합니다. 이 섹션에서는 자체 Docker 컨테이너에서 SageMaker 교육 환경 및 모델 병렬 라이브러리를 적절하게 준비하기 위해 포함해야 하는 최소 코드 블록 세트를 제공합니다.

참고

SageMaker 모델 병렬 라이브러리를 바이너리로 사용하는 이 사용자 지정 Docker 옵션은 에서만 사용할 PyTorch 수 있습니다.

SageMaker 교육 툴킷과 모델 병렬 라이브러리를 사용하여 Dockerfile을 만들려면
  1. NVIDIA CUDA 기본 이미지 중 하나로 시작하세요.

    FROM <cuda-cudnn-base-image>
    작은 정보

    공식 AWS 딥 러닝 컨테이너 (DLC) 이미지는 NVIDIA CUDA 기본 이미지를 기반으로 구축됩니다. 설치해야 하는 라이브러리 버전과 구성 방법을 PyTorch찾으려면 AWS 딥 러닝 컨테이너의 공식 Dockerfile을 살펴보는 것이 좋습니다. 공식 Dockerfile은 완전하고 벤치마크 테스트를 거쳤으며 및 딥 러닝 컨테이너 서비스 팀에서 관리합니다. SageMaker 제공된 링크에서 사용할 PyTorch 버전을 선택하고 CUDA (cuxyz) 폴더를 선택한 다음 또는 로 끝나는 Dockerfile을 선택합니다. .gpu .sagemaker.gpu

  2. 분산 훈련 환경을 설정하려면 Elastic Fabric Adapter(EFA), NVIDIA Collective Communications Library(NCCL)Open MPI와 같은 통신 및 네트워크 장치용 소프트웨어를 설치해야 합니다. 선택한 PyTorch 버전과 CUDA 버전에 따라 호환되는 라이브러리 버전을 설치해야 합니다.

    중요

    SageMaker 모델 병렬 라이브러리에는 후속 단계에서 SageMaker 데이터 병렬 라이브러리가 필요하므로 의 지침에 따라 분산 학습을 위한 SageMaker 훈련 환경을 올바르게 설정하는 것이 좋습니다. SageMaker 분산 데이터 병렬 라이브러리를 사용하여 자체 Docker 컨테이너를 만드세요.

    NCCL 및 Open MPI를 사용하여 EFA를 설정하는 방법에 대한 자세한 내용은 EFA 및 MPI로 시작하기EFA 및 NCCL로 시작하기 참조하세요.

  3. 다음 인수를 추가하여 SageMaker 분산 교육 패키지의 URL을 지정하십시오. PyTorch SageMaker 모델 병렬 라이브러리에는 노드 간 원격 직접 메모리 액세스 (RDMA) 를 사용하기 위한 SageMaker 데이터 병렬 라이브러리가 필요합니다.

    ARG SMD_MODEL_PARALLEL_URL=https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/pytorch-1.10.0/build-artifacts/2022-02-21-19-26/smdistributed_modelparallel-1.7.0-cp38-cp38-linux_x86_64.whl ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.10.2/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
  4. SageMaker 모델 병렬 라이브러리에 필요한 종속성을 설치합니다.

    1. METIS 라이브러리를 설치합니다.

      ARG METIS=metis-5.1.0 RUN rm /etc/apt/sources.list.d/* \ && wget -nv http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/${METIS}.tar.gz \ && gunzip -f ${METIS}.tar.gz \ && tar -xvf ${METIS}.tar \ && cd ${METIS} \ && apt-get update \ && make config shared=1 \ && make install \ && cd .. \ && rm -rf ${METIS}.tar* \ && rm -rf ${METIS} \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean
    2. RAPIDS 메모리 관리자 라이브러리를 설치합니다. 이를 위해서는 CMake 3.14 이상이 필요합니다.

      ARG RMM_VERSION=0.15.0 RUN wget -nv https://github.com/rapidsai/rmm/archive/v${RMM_VERSION}.tar.gz \ && tar -xvf v${RMM_VERSION}.tar.gz \ && cd rmm-${RMM_VERSION} \ && INSTALL_PREFIX=/usr/local ./build.sh librmm \ && cd .. \ && rm -rf v${RMM_VERSION}.tar* \ && rm -rf rmm-${RMM_VERSION}
  5. SageMaker 모델 병렬 라이브러리를 설치합니다.

    RUN pip install --no-cache-dir -U ${SMD_MODEL_PARALLEL_URL}
  6. SageMaker 데이터 병렬 라이브러리를 설치합니다.

    RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  7. Sagemaker 훈련 툴킷을 설치합니다. 이 툴킷에는 SageMaker 교육 플랫폼 및 SageMaker Python SDK와 호환되는 컨테이너를 만드는 데 필요한 공통 기능이 포함되어 있습니다.

    RUN pip install sagemaker-training
  8. Dockerfile 생성을 완료한 후에는 자체 훈련 컨테이너 조정을 참조하여 Docker 컨테이너를 빌드하고 Amazon ECR에서 호스팅하는 방법을 알아보세요.

작은 정보

에서 학습할 사용자 지정 Dockerfile을 만드는 방법에 대한 자세한 내용은 자체 학습 알고리즘 SageMaker 사용을 참조하십시오.