

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

# Amazon SageMaker AI에서 분산 훈련 시작
<a name="distributed-training-get-started"></a>

다음 페이지에서는 Amazon SageMaker AI에서 분산 훈련을 시작하는 데 필요한 단계에 대한 내용을 제공합니다. 이미 분산 훈련에 익숙하다면 선호하는 전략 또는 프레임워크에 맞는 다음 옵션 중 하나를 선택하여 시작하세요. 분산 훈련 전반에 대해 알아보려면 [분산 훈련 개념](distributed-training.md#distributed-training-basic-concepts)을(를) 참조하세요.

SageMaker AI 분산형 훈련 라이브러리는 SageMaker 훈련 환경에 최적화되어 있으며, 분산 훈련 작업을 SageMaker AI에 맞게 조정하고 훈련 속도 및 처리량을 개선하는 데 도움이 됩니다. 라이브러리는 데이터 병렬 및 모델 병렬 훈련 전략을 모두 제공합니다. 소프트웨어와 하드웨어 기술을 결합하여 GPU 간 및 노드 간 통신을 개선하고 훈련 스크립트에 대한 최소한의 코드 변경만 요구하는 내장 옵션을 통해 SageMaker AI의 훈련 기능을 확장합니다. 

## 시작하기 전에
<a name="distributed-training-before-getting-started"></a>

SageMaker 훈련은 단일 인스턴스뿐 아니라 여러 인스턴스에서도 분산 훈련을 지원하므로 모든 규모의 훈련을 대규모로 실행할 수 있습니다. SageMaker Python SDK에서 [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#pytorch-estimator) 및 [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)와 같은 프레임워크 예측기 클래스를 사용하는 것이 좋습니다. 이 클래스는 다양한 분산 훈련 옵션이 있는 훈련 작업 런처입니다. 예측기 객체를 생성할 때 객체는 분산 훈련 인프라를 설정하고, 백엔드에서 `CreateTrainingJob` API를 실행하고, 현재 세션이 실행 중인 리전을 찾고, AWS 딥 러닝 프레임워크, 분산 훈련 프레임워크 및 [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) 드라이버를 비롯한 여러 라이브러리로 미리 패키징된 사전 구축된 딥 러닝 컨테이너 중 하나를 가져옵니다. FSx 파일 시스템을 훈련 인스턴스에 마운트하려면 VPC 서브넷과 보안 그룹 ID를 예측기에 전달해야 합니다. SageMaker AI에서 분산 훈련 작업을 실행하기 전에 기본 인프라 설정에 대한 다음의 일반적인 설명을 읽어보세요.

### 가용 영역 및 네트워크 백플레인
<a name="availability-zones"></a>

여러 인스턴스(*노드*라고도 함)를 사용할 때는 인스턴스를 연결하는 네트워크, 인스턴스가 훈련 데이터를 읽는 방법, 인스턴스 간에 정보를 공유하는 방식을 이해하는 것이 중요합니다. 예를 들어 분산 데이터 병렬 훈련 작업을 실행할 때는 `AllReduce` 연산을 실행하기 위한 컴퓨팅 클러스터의 노드 간 통신, Amazon Simple Storage Service 또는 Amazon FSx for Lustre의 노드와 데이터 스토리지 간 데이터 전송과 같은 여러 요소가 컴퓨팅 리소스를 최적으로 사용하고 훈련 속도를 높이는 데 중요한 역할을 합니다. 통신 오버헤드를 줄이려면 동일한 AWS 리전 및 가용 영역에서 인스턴스, VPC 서브넷 및 데이터 스토리지를 구성해야 합니다.

### 더 빠른 네트워크와 높은 처리량의 스토리지를 갖춘 GPU 인스턴스
<a name="optimized-GPU"></a>

엄밀히 따지자면 어떤 인스턴스든 분산 훈련에 사용할 수 있습니다. 더 빠른 노드 간 통신이 필요한 대규모 언어 모델(LLM) 및 확산 모델과 같은 대규모 모델을 훈련하기 위해 여러 노드 분산 훈련 작업을 실행해야 하는 경우 [SageMaker AI에서 지원하는 EFA 활성 GPU 인스턴스](https://aws.amazon.com/about-aws/whats-new/2021/05/amazon-sagemaker-supports-elastic-fabric-adapter-distributed-training/)를 사용하는 것이 좋습니다. 특히 SageMaker AI에서 가장 성능이 뛰어난 분산 훈련 작업을 수행하려면 [NVIDIA A100 GPU가 장착된 P4d 및 P4de 인스턴스](https://aws.amazon.com/ec2/instance-types/p4/)를 사용하는 것이 좋습니다. 이들은 또한 처리량이 높고 지연 시간이 짧은 로컬 인스턴스 스토리지와 더 빠른 노드 내 네트워크도 갖추고 있습니다. 데이터 스토리지의 경우 훈련 데이터세트 및 모델 체크포인트를 저장하기 위한 높은 처리량을 제공하는 [Amazon FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html)를 사용하는 것이 좋습니다.

**SageMaker AI 분산형 데이터 병렬화(SMDDP) 라이브러리 사용**

SMDDP 라이브러리는 AWS 네트워크 인프라 `AllReduce` 및 Amazon SageMaker AI ML 인스턴스 토폴로지에 최적화된 및 `AllGather` 집합 통신 작업을 구현하여 노드 간 통신을 개선합니다. [SMDDP 라이브러리를 PyTorch 기반 분산 훈련 패키지](https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html)인 [PyTorch 분산 데이터 병렬(DDP)](https://pytorch.org/docs/stable/notes/ddp.html), [PyTorch 완전 샤딩 데이터 병렬(FSDP)](https://pytorch.org/docs/stable/fsdp.html), [DeepSpeed](https://github.com/microsoft/DeepSpeed) 및 [Megatron-DeepSpeed](https://github.com/microsoft/Megatron-DeepSpeed)의 백엔드로 사용할 수 있습니다. 다음 코드 예제는 두 `ml.p4d.24xlarge` 인스턴스에서 분산 훈련 작업을 시작하기 위해 `PyTorch` 추정기를 설정하는 방법을 보여줍니다.

```
from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    ...,
    instance_count=2,
    instance_type="ml.p4d.24xlarge",
    # Activate distributed training with SMDDP
    distribution={ "pytorchddp": { "enabled": True } }  # mpirun, activates SMDDP AllReduce OR AllGather
    # distribution={ "torch_distributed": { "enabled": True } }  # torchrun, activates SMDDP AllGather
    # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } }  # mpirun, activates SMDDP AllReduce OR AllGather
)
```

SageMaker AI에서 훈련 스크립트를 준비하고 분산 데이터 병렬 훈련 작업을 시작하는 방법을 알아보려면 [SageMaker AI 분산형 데이터 병렬화 라이브러리를 사용하여 분산 훈련 실행](data-parallel.md) 섹션을 참조하세요.

**SageMaker AI 모델 병렬화 라이브러리(SMP) 사용**

SageMaker AI는 SMP 라이브러리를 제공하며 샤딩된 데이터 병렬화, 파이프라인 작업, 텐서 병렬화, 옵티마이저 상태 샤딩 등과 같은 다양한 분산 훈련 기술을 지원합니다. SMP 라이브러리가 제공하는 기능에 대해 자세히 알아보려면 [SageMaker 모델 병렬화 라이브러리의 핵심 기능](model-parallel-core-features.md)을(를) 참조하세요.

SageMaker AI의 모델 병렬화 라이브러리를 사용하려면 SageMaker AI 프레임워크 예측기의 `distribution` 파라미터를 구성합니다. 지원되는 프레임워크 예측기는 [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#pytorch-estimator)와 [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)입니다. 다음 코드 예제는 두 `ml.p4d.24xlarge` 인스턴스에서 모델 병렬화 라이브러리를 사용하여 분산 훈련을 위한 프레임워크 예측기를 구성하는 방법을 보여줍니다.

```
from sagemaker.framework import Framework

distribution={
    "smdistributed": {
        "modelparallel": {
            "enabled":True,
            "parameters": {
                ...   # enter parameter key-value pairs here
            }
        },
    },
    "mpi": {
        "enabled" : True,
        ...           # enter parameter key-value pairs here
    }
}

estimator = Framework(
    ...,
    instance_count=2,
    instance_type="ml.p4d.24xlarge",
    distribution=distribution
)
```

훈련 스크립트를 조정하고, `estimator` 클래스에서 분산 파라미터를 구성하고, 분산 훈련 작업을 시작하는 방법을 알아보려면 [SageMaker AI의 모델 병렬화 라이브러리](model-parallel.md) 및 *SageMaker Python SDK 설명서*에 나와 있는 [분산 훈련 API](https://sagemaker.readthedocs.io/en/stable/api/training/distributed.html#the-sagemaker-distributed-model-parallel-library)를 참조하세요.

**오픈 소스 분산 훈련 프레임워크 사용**

또한 SageMaker AI는 백엔드에서 `mpirun` 및 `torchrun`을 작동하기 위한 다음 옵션을 지원합니다.
+ SageMaker AI의 [PyTorch DistributedDataParallel(DDP)](https://pytorch.org/docs/master/generated/torch.nn.parallel.DistributedDataParallel.html)을 `mpirun` 백엔드와 함께 사용하려면 PyTorch 예측기에 `distribution={"pytorchddp": {"enabled": True}}` 값을 추가합니다. 자세한 내용은 *SageMaker Python SDK 설명서*에 나와 있는 [PyTorch 분산 훈련](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#distributed-pytorch-training) 및 [SageMaker AI PyTorch 예측기](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#pytorch-estimator)의 `distribution` 인수를 참조하세요.
**참고**  
이 옵션은 PyTorch 1.12.0 이상에서 사용할 수 있습니다.

  ```
  from sagemaker.pytorch import PyTorch
  
  estimator = PyTorch(
      ...,
      instance_count=2,
      instance_type="ml.p4d.24xlarge",
      distribution={"pytorchddp": {"enabled": True}}  # runs mpirun in the backend
  )
  ```
+ SageMaker AI는 P3, P4 등 GPU 기반 Amazon EC2 인스턴스뿐만 아니라 [AWS Trainium](https://aws.amazon.com/machine-learning/trainium/) 디바이스로 구동되는 Trn1에서의 분산 훈련을 위한 [PyTorch `torchrun` 런처](https://pytorch.org/docs/stable/elastic/run.html)를 지원합니다.

  SageMaker AI의 [PyTorch DistributedDataParallel(DDP)](https://pytorch.org/docs/master/generated/torch.nn.parallel.DistributedDataParallel.html)을 `torchrun` 백엔드와 함께 사용하려면 PyTorch 예측기에 `distribution={"torch_distributed": {"enabled": True}}` 값을 추가합니다.
**참고**  
이 옵션은 PyTorch 1.13.0 이상에서 사용할 수 있습니다.

  다음 코드 스니펫은 두 `ml.p4d.24xlarge` 인스턴스에서 `torch_distributed` 분산 옵션을 사용하여 분산 훈련을 실행하도록 SageMaker AI PyTorch 예측기를 구성하는 예시를 보여줍니다.

  ```
  from sagemaker.pytorch import PyTorch
  
  estimator = PyTorch(
      ...,
      instance_count=2,
      instance_type="ml.p4d.24xlarge",
      distribution={"torch_distributed": {"enabled": True}}   # runs torchrun in the backend
  )
  ```

  자세한 내용은 *SageMaker Python SDK 설명서*에 나와 있는 [분산 PyTorch 훈련](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#distributed-pytorch-training) 및 [SageMaker AI PyTorch 예측기](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#pytorch-estimator)의 `distribution` 인수를 참조하세요.

  **Trn1의 분산 훈련에 대한 참고 사항**

  Trn1 인스턴스는 최대 16개의 Trainium 디바이스로 구성되며 각 Trainium 디바이스는 두 개의 [NeuronCore](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/arch/neuron-hardware/neuroncores-arch.html#neuroncores-v2-arch)로 구성됩니다. AWS Trainium 디바이스의 사양은 *AWS Neuron 설명서*의 [Trainium 아키텍처](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/arch/neuron-hardware/trn1-arch.html#id2)를 참조하세요.

  Trainium 기반 인스턴스에서 훈련시키려면 SageMaker AI PyTorch 예측기 클래스의 `instance_type` 인수에 Trn1 인스턴스 코드(`ml.trn1.*`)를 문자열로 지정하기만 하면 됩니다. 사용 가능한 Trn1 인스턴스 유형을 찾으려면 *AWS Neuron 설명서*의 [AWS Trn1 아키텍처](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/arch/neuron-hardware/trn1-arch.html#aws-trn1-arch)를 참조하세요.
**참고**  
Amazon EC2 Trn1 인스턴스에 대한 SageMaker 훈련은 현재 v1.11.0부터 PyTorch Neuron용 AWS 딥 러닝 컨테이너의 PyTorch 프레임워크에만 사용할 수 있습니다. 지원되는 PyTorch Neuron 버전의 전체 목록을 찾으려면 *AWS Deep Learning Containers GitHub 리포지토리*의 [Neuron 컨테이너](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#neuron-containers)를 참조하세요.

  SageMaker Python SDK를 사용하여 Trn1 인스턴스에서 훈련 작업을 시작하면 SageMaker AI는 AWS Deep Learning Containers에서 제공하는 [Neuron Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#neuron-containers)에서 올바른 컨테이너를 자동으로 픽업하고 실행합니다. Neuron 컨테이너는 SageMaker 훈련 플랫폼 및 Amazon EC2 Trn1 인스턴스에 훈련 작업을 보다 쉽게 적용할 수 있도록 훈련 환경 설정 및 종속성과 함께 사전 패키징됩니다.
**참고**  
SageMaker AI를 사용하여 Trn1 인스턴스에서 PyTorch 훈련 작업을 실행하려면 `xla` 백엔드로 프로세스 그룹을 초기화하고 [PyTorch/XLA](https://pytorch.org/xla/release/1.12/index.html)를 사용하도록 훈련 스크립트를 수정해야 합니다. XLA 채택 프로세스를 지원하기 위해 AWS Neuron SDK는 XLA를 사용하여 PyTorch 작업을 Trainium 지침으로 변환하는 PyTorch Neuron을 제공합니다. 훈련 스크립트를 수정하는 방법을 알아보려면 *AWS Neuron 설명서*에서 [PyTorch Neuron`torch-neuronx`()을 사용한 훈련을 위한 개발자 안내서](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/frameworks/torch/torch-neuronx/programming-guide/training/pytorch-neuron-programming-guide.html)를 참조하세요.

  자세한 내용은 *SageMaker AI Python SDK 설명서*에 나와 있는 [Trn1 인스턴스의 PyTorch Neuron을 이용한 분산 훈련](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id24) 및 [SageMaker PyTorch 예측기](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#pytorch-estimator)의 `distribution` 인수를 참조하세요.
+ SageMaker AI에서 MPI를 사용하려면 `distribution={"mpi": {"enabled": True}}` 값을 예측기에 추가합니다. MPI 배포 옵션은 MXNet, PyTorch, TensorFlow와 같은 프레임워크에서 사용할 수 있습니다.
+ SageMaker AI에서 파라미터 서버를 사용하려면 `distribution={"parameter_server": {"enabled": True}}` 값을 예측기에 추가합니다. 파라미터 서버 옵션은 MXNet, PyTorch, TensorFlow와 같은 프레임워크에서 사용할 수 있습니다.
**작은 정보**  
프레임워크별 MPI 및 파라미터 서버 옵션 사용에 대한 자세한 내용은 *SageMaker Python SDK 문서*에 대한 다음 링크를 참조하세요.  
[MXNet 분산 훈련](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#distributed-training)과 [SageMaker AI MXNet 예측기](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/sagemaker.mxnet.html#mxnet-estimator)의 `distribution` 인수
[PyTorch 분산 훈련](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#distributed-pytorch-training)과 [SageMaker AI PyTorch 예측기](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#pytorch-estimator)의 `distribution` 인수
[TensorFlow 분산 훈련](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/using_tf.html#distributed-training)과 [SageMaker AI TensorFlow 예측기](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)의 `distribution` 인수