AI 멀티노드 활용

뉴론 시스템에서 딥러닝 학습에 필요한 계산을 멀티 노드를 이용하여 수십 개의 GPU에 나누어 동시에 처리하고, 고속 네트워크를 통한 결과를 합산하는 분산 학습을 위한 여러 방법을 소개합니다.

가. HOROVOD

Horovod는 고성능 분산 컴퓨팅 환경에서 노드간 메시지 전달 및 통신관리를 위해 일반적인 표준 MPI 모델을 사용하며, Horovod의 MPI구현은 표준 Tensorflow 분산 훈련 모델보다 간소화된 프로그래밍 모델을 제공합니다.

1. HOROVOD (Tensorflow) 설치 및 확인

1) 설치 방법

$ module load gcc/10.2.0 cuda/11.4 cudampi/openmpi-4.1.1 python/3.7.1 cmake/3.16.9

$ conda create -n my_tensorflow
$ source activate my_tensorflow

(my_tensorflow) $ conda install tensorflow-gpu=2.0.0 tensorboard=2.0.0 tensorflow-estimator=2.0.0 python=3.7 cudnn cudatoolkit=10 nccl=2.8.3

(my_tensorflow) $ HOROVOD_WITH_MPI=1 HOROVOD_GPU_OPERATIONS=NCCL \
HOROVOD_NCCL_LINK=SHARED HOROVOD_WITH_TENSORFLOW=1 \
pip install --no-cache-dir horovod==0.23.0

2) 설치 확인

2. HOROVOD (Tensorflow) 실행 예제

1) 작업제출 스크립트를 이용한 실행

2) 인터렉티브 작업제출을 이용한 실행

3. HOROVOD (Pytorch) 설치 및 확인

1) 설치 방법

2) 설치 확인

4. HOROVOD (Pytorch) 실행 예제

1) 작업제출 스크립트 예제

2) 인터렉티브 작업제출을 이용한 실행

나. GLOO

  • GLOO는 Facebook 에서 개발한 오픈 소스 집단 커뮤니케이션 라이브러리로, horovod 에 포함되어 있으며 사용자가 MPI 를 설치하지 않고도 horovod 를 이용한 멀티노드 작업 수행을 지원합니다.

  • GLOO의 설치는 horovod에 종속성을 가지며, horovod를 설치하는 과정에서 같이 설치됩니다.

※ horovod 의 설치방법은 상단의 horovod 설치 및 확인을 참고 바랍니다.

1. GLOO 실행 예제

1) 작업제출 스크립트 예제

2) 인터렉티브 작업제출을 이용한 실행

다. Ray

Ray는 멀티노드 환경에서 병렬 실행을 위한 python 기반의 워크로드를 제공합니다. 다양한 라이브러리를 사용하여 pytorch와 같은 딥러닝 모델에서 사용할 수 있습니다. 자세한 내용은 다음 홈페이지에서 확인할 수 있습니다.

https://docs.ray.io/en/latest/cluster/index.html

1. Ray 설치 및 단일 노드 실행 예제

1) 설치 방법

2) 작업제출 스크립트 예제

3) 인터렉티브 작업제출을 이용한 실행

2. Ray Cluster 설치 및 멀티 노드 실행 예제

Ray는 멀티노드 실행 시 하나의 head 노드와 다수의 worker 노드로 실행되며, 테스크를 할당된 자원에 효율적으로 스케줄링 해 줍니다.

https://docs.ray.io/en/latest/cluster/index.html

NERSC에서 작성한 예제는 GITHUB(https://github.com/NERSC/slurm-ray-cluster.git)를 통해 다운로드 할 수 있고, 다음과 같이 실행할 수 있습니다.

1) 설치 방법

2) 작업제출 스크립트 예제

3) output

3. Ray Cluster (pytorch) 설치 및 멀티 노드 실행 예제

1) 설치 방법

2) 작업제출 스크립트 예제

3) output

라. Submit it

Submitit은 Slurm 클러스터 내에서 계산을 위해 Python 함수를 제출하기 위한 경량 도구입니다. 기본적으로 스케줄러에 제출된 내용을 정리하여 결과, 로그 등에 대한 액세스를 제공합니다.

1. 예제 (1)

  • Python function stored as pickle file

2. 예제 (2)

(Submit multiple jobs in parallel, resource scan (ngpus, ntasks, etc) and capture output for postprocessing)

3. Submit: Multitask Job 예제

마. NCCL

뉴론 시스템에서 NVIDIA GPU에 최적화된 다중 GPU 및 다중 노드 집단 통신 라이브러리인 NCCL의 설치방법 및 예제 실행 방법을 소개합니다.

1. NCCL설치 및 확인

1) 설치 방법

https://developer.nvidia.com/nccl/nccl-legacy-downloads에서 설치를 원하는 버전 다운로드

2) 설치 확인

2. NCCL실행 예제

1) 실행 예제 다운로드

2) 실행 예제 컴파일

3) 실행 결과 확인

4) 위의 Example 3을 이용한 2노드 8GPU 실행 예제

4-1) 작업스크립트

4-2) 예제 코드

4-3) 실행 결과

바. Tensorflow Distribute

Tensorflow Distibute는 멀티 GPU 또는 멀티 서버를 활용하여 분산 훈련을 할 수 있는 Tensorflow API 입니다(Tensorflow 2.0 사용).

1. Conda 환경에서 tensorflow 설치 및 확인

1) 설치 방법

2) 설치 확인

2. 단일 노드, 멀티 GPU 활용(tf.distribute.MirroredStrategy() 사용)

1) 코드 예제(tf_multi_keras.py)

2) 인터렉티브 작업 제출(1노드 4개 GPU)

3) 배치 작업 제출 스크립트(1노드 4GPU)(tf_dist_run.sh)

3. 멀티 노드, 멀티 GPU 활용(tf.distribute.MultiWorkerMirroedStrategy() 사용)

멀티 노드에서 활용하기 위해 전략을 수정하고 각 노드에 환경 변수 TF_CONFIG 설정합니다.

1) 코드 예제 수정

2) 인터렉티브 작업 제출(2노드 각 4 GPU)

3) 배치 작업 제출 스크립트(2노드 각4GPU) (tf_multi_run.sh)

4. 참조

  • 케라스(Keras)를 활용한 분산 훈련(https://www.tensorflow.org/tutorials/distribute/keras)

  • [텐서플로2] MNIST 데이터를 훈련 데이터로 사용한 DNN 학습(http://www.gisdeveloper.co.kr/?p=8534)

사. PytorchDDP

아래 예제는 PytorchDDP를 slurm 스케줄러를 통한 실행 방법입니다.

1. 작업제출 스크립트 예제

1) 단일노드 예제(단일노드 2GPU)

2) 멀티노드 예제(2노드 2GPUs)

2022년 7월 7일에 마지막으로 업데이트 되었습니다.

Last updated