

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

# 2단계: SageMaker Python SDK를 사용하여 훈련 작업 시작
<a name="model-parallel-sm-sdk"></a>

SageMaker Python SDK는 TensorFlow 및 PyTorch와 같은 ML 프레임워크를 사용하여 모델의 관리형 훈련을 지원합니다. 이러한 프레임워크 중 하나를 사용하여 훈련 작업을 시작하려면 수정된 훈련 스크립트와 모델 병렬 처리 구성을 사용하도록 SageMaker [TensorFlow 예측기](https://sagemaker.readthedocs.io/en/v2.199.0/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator), SageMaker [PyTorch 예측기](https://sagemaker.readthedocs.io/en/v2.199.0/frameworks/pytorch/sagemaker.pytorch.html#pytorch-estimator) 또는 SageMaker 일반 [예측기](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/estimators.html#sagemaker.estimator.Estimator)를 정의합니다.

**Topics**
+ [SageMaker TensorFlow 및 PyTorch 예측기 사용](#model-parallel-using-sagemaker-pysdk)
+ [SageMaker의 분산 모델 병렬 라이브러리가 포함된 사전 빌드된 Docker 컨테이너 확장](#model-parallel-customize-container)
+ [SageMaker 분산 모델 병렬 라이브러리로 자체 Docker 컨테이너 생성](#model-parallel-bring-your-own-container)

## SageMaker TensorFlow 및 PyTorch 예측기 사용
<a name="model-parallel-using-sagemaker-pysdk"></a>

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

TensorFlow 또는 PyTorch 예측기의 다음 템플릿은 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/')
```

------

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

**SageMaker 모델 병렬 처리를 위한 구성 파라미터**
+ `"smdistributed"` 키의 경우 `"modelparallel"` 키와 다음 내부 사전이 포함된 사전을 전달하세요.
**참고**  
하나의 훈련 작업에서 `"modelparallel"`와 `"dataparallel"`를 사용하는 것은 지원되지 않습니다.
  + `"enabled"` - 필수입니다. 모델 병렬 처리를 활성화하려면 `"enabled": True`를 설정하세요.
  + `"parameters"` - 필수입니다. SageMaker 모델 병렬 처리를 위한 파마리터 세트를 지정합니다.
    + 공통 파라미터의 전체 목록은 *SageMaker Python SDK 설명서에서* [`smdistributed`에 대한 파라미터](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#smdistributed-parameters)를 참조하세요.

      [TensorFlow에 대해서는 TensorFlow 전용 파라미터](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#tensorflow-specific-parameters)를 참조하세요.

      PyTorch의 경우 [PyTorch 전용 파라미터](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#pytorch-specific-parameters)를 참조하세요.
    + `"pipeline_parallel_degree"`(또는 `smdistributed-modelparallel<v1.6.0`의 `"partitions"`) - 필수. [`smdistributed`에 대한 파라미터](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#smdistributed-parameters) 중에서, 이 파라미터는 분할하려는 모델 파티션 수를 지정하는 데 필요합니다.
**중요**  
파라미터 이름에 주요 변경 사항이 있습니다. 이 `"pipeline_parallel_degree"` 파라미터는 `smdistributed-modelparallel` v1.6.0 이후 `"partitions"`을(를) 대체합니다. 자세한 내용은 *SageMaker Python SDK 설명서*에서 SageMaker 모델 병렬 처리 구성을 위한 [공통 파라미터](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#common-parameters) 및 [SageMaker 분산 모델 병렬 릴리스 노트](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_release_notes/smd_model_parallel_change_log.html)를 참조하세요.
+ `"mpi"` 키의 경우 다음을 포함하는 사전을 전달하세요.
  + `"enabled"` - 필수입니다. MPI를 사용하여 분산 훈련 작업을 시작하도록 `True`를 설정합니다.
  + `"processes_per_host"` - 필수입니다. MPI가 각 호스트에서 시작해야 하는 프로세스 수를 지정합니다. SageMaker AI에서 호스트는 단일 Amazon EC2 ML 인스턴스입니다. SageMaker Python SDK는 모델 및 데이터 병렬 처리 전반에 걸쳐 프로세스와 GPU 간의 일대일 매핑을 유지합니다. 즉, SageMaker AI는 별도의 단일 GPU에서 각 프로세스의 일정을 예약하며 각 GPU에는 1개를 초과하는 프로세스가 포함되어 있지 않습니다. PyTorch를 사용하는 경우 `torch.cuda.set_device(smp.local_rank())`을(를) 통해 각 프로세스를 자체 장치로 제한해야 합니다. 자세한 내용은 [PyTorch를 사용한 자동 분할](model-parallel-customize-training-script-pt.md#model-parallel-customize-training-script-pt-16) 섹션을 참조하세요.
**중요**  
 `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.24xlarge` 및 `ml.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 Python SDK에서 TensorFlow 사용](https://sagemaker.readthedocs.io/en/v2.199.0/frameworks/tensorflow/using_tf.html)
+ [SageMaker Python SDK에서 PyTorch 사용](https://sagemaker.readthedocs.io/en/v2.199.0/frameworks/pytorch/using_pytorch.html)
+ 신규 사용자인 경우 SageMaker 노트북 인스턴스를 사용하는 것이 좋습니다. SageMaker 노트북 인스턴스를 사용하여 훈련 작업을 시작하는 방법의 예를 보려면 [Amazon SageMaker AI 모델 병렬화 라이브러리 v2 예시](distributed-model-parallel-v2-examples.md) 섹션을 참조하세요.
+  AWS CLI를 사용하여 컴퓨터에서 분산 훈련 작업을 제출할 수도 있습니다. 시스템에 AWS CLI 를 설정하려면 [개발을 위한 자격 AWS 증명 및 리전 설정을 참조하세요](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html).

## SageMaker의 분산 모델 병렬 라이브러리가 포함된 사전 빌드된 Docker 컨테이너 확장
<a name="model-parallel-customize-container"></a>

사전 구축된 컨테이너를 확장하고 SageMaker의 모델 병렬 처리 라이브러리를 사용하려면 PyTorch 또는 TensorFlow에 사용 가능한 AWS 딥 러닝 컨테이너(DLC) 이미지 중 하나를 사용해야 합니다. SageMaker 모델 병렬 처리 라이브러리는 CUDA(`cuxyz`)가 포함된 TensorFlow(2.3.0 이상) 및 PyTorch(1.6.0 이상) DLC 이미지에 포함되어 있습니다. DLC 이미지의 전체 목록은 *AWS Deep Learning Containers GitHub 리포지토리*에서 [사용 가능한 딥 러닝 컨테이너 이미지](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)를 참조하세요.

**작은 정보**  
최신 버전의 SageMaker 모델 병렬 처리 라이브러리에 액세스하려면 최신 버전의 TensorFlow 또는 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 AI container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code
```

또한 PyTorch 또는 TensorFlow 예측기를 정의할 때는 훈련 스크립트를 위한 `entry_point`을(를) 지정해야 합니다. 이는 Dockerfile에서 `ENV SAGEMAKER_SUBMIT_DIRECTORY`와(과) 함께 식별되는 경로와 동일해야 합니다.

**작은 정보**  
이 Docker 컨테이너를 Amazon Elastic Container Registry(Amazon ECR)에 푸시하고 이미지 URI(`image_uri`)를 사용하여 훈련용 SageMaker 예측기를 정의해야 합니다. 자세한 내용은 [사전 빌드 컨테이너 확장](prebuilt-containers-extend.md) 섹션을 참조하세요.

Docker 컨테이너 호스팅을 완료하고 컨테이너의 이미지 URI를 검색한 후, 다음과 같이 SageMaker `PyTorch` 예측기 객체를 생성합니다. 이 예제에서는 `smp_options` 및 `mpi_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/')
```

## SageMaker 분산 모델 병렬 라이브러리로 자체 Docker 컨테이너 생성
<a name="model-parallel-bring-your-own-container"></a>

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

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

**SageMaker 훈련 툴킷과 모델 병렬 라이브러리를 사용하여 Dockerfile을 생성하려면**

1. [NVIDIA CUDA 기본 이미지](https://hub.docker.com/r/nvidia/cuda) 중 하나로 시작하세요.

   ```
   FROM <cuda-cudnn-base-image>
   ```
**작은 정보**  
공식 AWS 딥 러닝 컨테이너(DLC) 이미지는 [NVIDIA CUDA 기본 이미지](https://hub.docker.com/r/nvidia/cuda)로 빌드됩니다. [PyTorch용 AWS 딥 러닝 컨테이너의 공식 Dockerfiles](https://github.com/aws/deep-learning-containers/tree/master/pytorch/training/docker)를 살펴보고 설치해야 하는 라이브러리 버전과 이를 구성하는 방법을 찾는 것이 좋습니다. 공식 Dockerfile은 완전하고 벤치마크 테스트를 거쳤으며, SageMaker 및 딥 러닝 컨테이너 서비스 팀에서 관리합니다. 제공된 링크에서 사용하는 PyTorch 버전을 선택하고 CUDA(`cuxyz`) 폴더를 선택한 다음, `.gpu` 또는 `.sagemaker.gpu`로 끝나는 Dockerfile을 선택합니다.

1. 분산 훈련 환경을 설정하려면 [Elastic Fabric Adapter(EFA)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html), [NVIDIA Collective Communications Library(NCCL)](https://developer.nvidia.com/nccl) 및 [Open MPI](https://www.open-mpi.org/)와 같은 통신 및 네트워크 장치용 소프트웨어를 설치해야 합니다. 선택한 PyTorch 및 CUDA 버전에 따라 호환 가능한 버전의 라이브러리를 설치해야 합니다.
**중요**  
SageMaker 모델 병렬 라이브러리에는 후속 단계에서 SageMaker 데이터 병렬 라이브러리가 필요하므로 [SageMaker AI 분산 데이터 병렬 라이브러리로 자체 Docker 컨테이너 만들기](data-parallel-bring-your-own-container.md)의 지침에 따라 분산 훈련을 위한 SageMaker 훈련 환경을 올바르게 설정하는 것이 좋습니다.

   NCCL 및 Open MPI를 사용하여 EFA를 설정하는 방법에 대한 자세한 내용은 [EFA 및 MPI로 시작하기](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html) 및 [EFA 및 NCCL로 시작하기](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start-nccl.html) 참조하세요.

1. 다음 인수를 추가하여 PyTorch용 SageMaker 분산 훈련 패키지의 URL을 지정합니다. SageMaker 모델 병렬 라이브러리는 노드 간 Remote Direct Memory Access(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
   ```

1. SageMaker 모델 병렬 라이브러리에 필요한 종속 항목을 설치합니다.

   1. [METIS](http://glaros.dtc.umn.edu/gkhome/metis/metis/overview) 라이브러리를 설치합니다.

      ```
      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
      ```

   1. [RAPIDS 메모리 관리자 라이브러리](https://github.com/rapidsai/rmm#rmm-rapids-memory-manager)를 설치합니다. 이를 위해서는 [CMake](https://cmake.org/) 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}
      ```

1. SageMaker 모델 병렬 라이브러리를 설치합니다.

   ```
   RUN pip install --no-cache-dir -U ${SMD_MODEL_PARALLEL_URL}
   ```

1. SageMaker 데이터 병렬 라이브러리를 설치합니다.

   ```
   RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
   ```

1. [Sagemaker 훈련 툴킷](https://github.com/aws/sagemaker-training-toolkit)을 설치합니다. 이 툴킷에는 SageMaker 훈련 플랫폼 및 SageMaker Python SDK와 호환되는 컨테이너를 만드는 데 필요한 공통 기능이 포함되어 있습니다.

   ```
   RUN pip install sagemaker-training
   ```

1. Dockerfile 생성을 완료한 후에는 [자체 훈련 컨테이너 조정](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)을 참조하여 Docker 컨테이너를 빌드하고 Amazon ECR에서 호스팅하는 방법을 알아보세요.

**작은 정보**  
SageMaker AI에서 훈련용 사용자 지정 Dockerfile을 만드는 방법에 대한 일반적인 내용은 [자체 훈련 알고리즘 사용](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo.html)을 참조하세요.