본문 바로가기 대메뉴 바로가기

테크니컬 스토리

아이티마야의 새로운 기술 뉴스를 만나보세요.
손쉬운 GPU 클러스터 자동 배포화 도구 Nvidia DeepOps
등록일
2022.12.08
첨부파일
손쉬운 GPU 클러스터 자동 배포화 도구 Nvidia DeepOps
점점 숫자가 늘어나는 GPU 서버 관리 어떻게 하시나요? - 오픈소스 편
DeepOps
  • DeepOps는 Nvidia에서 제공하는 GPU 클러스터 배포 자동화 도구입니다.

    Ansible을 이용하여 클러스터를 구성하고, Nvidia에서 제공하는 예제를 통해 구동테스트를 할 수 있습니다.

    DeepOps에서 제공하는 클러스터는 두 가지입니다. 둘 중 하나를 선택하여 구성할 수 있습니다.


     Slurm : 병렬 연산 잡 스케쥴러
     Kubernetes : 컨테이너 오케스트레이션 도구
  • Slurm? Kubernetes? 어떤 클러스터를 사용해야 하나요?

    Architecture      MULTINODE AI AS A SERVICE STACK WITH KUBERNETES & SLURM

    두 클러스터는 “클러스터”라는 이름은 공유하지만, 다른 색을 띠고 있는 서비스입니다. 저는 클러스터 제안 시 아래 기준으로 제안합니다.

  •  Slurm은
    여러 서버의 리소스를 합쳐서 사용하는데 적합합니다.

  •  Kubernetes는
    여러 서버의 리소스를 나누어 사용하는데 적합합니다.

  • 저는 두 클러스터를 위 기준으로 정리했지만, 상황에 따라 더 적합한 클러스터는 달라질 수 있습니다.

     Slurm은 병렬 연산을 위해 사용할 수 있습니다.

    1. 사용자가 일을 전달합니다.
    2. 리소스를 확보합니다.
    3. 일을 각 서버에 분배합니다.
    4. 일을 완료합니다.
    5. 다음 예정된 일을 시작합니다.


     Kubernetes를 활용하면 보다 많은 작업을 할 수 있습니다.

    1. 컨테이너 배포를 자동화합니다.
    2. 컨테이너 상태를 관리합니다.

    물론, 컨테이너를 용도에 맞게 구성하여 Slurm과 같이 병렬 작업을 실행할 수 도 있으리라 생각됩니다. 하지만 많은 노력이 필요하겠네요. kubernetes는 보통 MLOps에서 프로젝트나 사용자 별로 리소스를 배정하거나, 배치 잡을 실행하는데 사용됩니다.

    DeepOps에 포함된 패키지

    DeepOps에는 클러스터 패키지 외에도 관리를 위한 패키지도 다수 포함되어 있습니다.
    대표적으로 DCGM을 활용하여 Grafana로 출력이 가능합니다. 배포 자동화를 위한 패키지도 포함되어 있습니다.

    이런 패키지들을 통해 매우 쉽게 서버를 관리할 수 있고, 매우 쉽게 클러스터를 배포할 수 있습니다.

    배포 전 구성 (공통)
    • 테스트 환경
  • VM1 : hostname:chun1 / 192.168.1.34 (4core / 16gb / 100GB Disk) - Ubuntu 20.04 → bootstrap
    VM2 : hostname:chun2 / 192.168.1.35 (4core / 16gb / 100GB Disk) - Ubuntu 20.04 → master
    VM3 : hostname:chun3 / 192.168.1.36 (4core / 16gb / 100GB Disk) - Ubuntu 20.04 → worker1
    VM4 : hostname:chun4 / 192.168.1.37 (4core / 16gb / 100GB Disk) - Ubuntu 20.04 → worker2
  • - bootstrap 서버를 따로 사용하지 않고, master에 구성하거나, 클라이언트에 VM으로 구성해도 상관없습니다. bootstrap 서버는 초기 구성시에만 사용하고, 클러스터 구동에 영향을 주지 않습니다. 하지만 추가 패키지 업데이트 등을 진행하려면 bootstrap 이 계속 필요합니다.

    - 테스트 환경은 GPU 없이 테스트하였습니다. CPU잡 구동은 문제없이 진행됩니다.

    • 사용자 생성 및 sudoers에 계정 추가 및 apt 업데이트
  • (node chun1, chun2, chun3, chun4)
    $ sudo vi /etc/sudoers
    (추가) chun ALL=(ALL) NOPASSWD:ALL
    (수정) %sudo ALL=(ALL:ALL) NOPASSWD:ALL
    $ sudo apt update
    • 노드 간 SSH RSA Key 교환
  • (node chun1) - chun 계정으로 실행
    $ ssh-Keygen (enter-enter-enter)
    $ ssh-copy-id -i .ssh/id_rsa.pub chun@192.168.1.35
    $ ssh-copy-id -i .ssh/id_rsa.pub chun@192.168.1.36
    $ ssh-copy-id -i .ssh/id_rsa.pub chun@192.168.1.37
    • bootstrap 구성 패키지 설치
  • (node chun1) - chun 계정으로 실행
    $ sudo apt -y install git
    $ git clone https://github.com/NVIDIA/deepops.git
    $ cd deepops
    $ ./scripts/setup.sh
  • Slurm 구성
    • ansible 구성
  • (node chun1)
    $ vi config/inventory

    [all]
    login01 ansible_host=192.168.1.35
    gpu01 ansible_host=192.168.1.36
    gpu02 ansible_host=192.168.1.37

    [slurm-master]
    login01

    [slurm-nfs]
    login01

    [slurm-node]
    gpu01
    gpu02

    [slurm-cache:children]
    slurm-master

    [slurm-nfs-client:children]
    slurm-node

    [slurm-metric:children]
    slurm-master

    [slurm-login:children]
    slurm-master

    [slurm-cluster:children]
    slurm-master
    slurm-node
    slurm-cache
    slurm-nfs
    slurm-metric
    slurm-login
    • 구성 설치
  • $ ansible-playbook -l slurm-cluster playbooks/slurm-cluster.yml
  • Kubernetes 구성
    • ansible 구성
  • (node chun1)
    $ vi config/inventory

    [all]
    mgmt01 ansible_host=192.168.1.35
    gpu01 ansible_host=192.168.1.36
    gpu02 ansible_host=192.168.1.37

    [kube-master]
    mgmt01

    [etcd]
    mgmt01

    [kube-node]
    gpu01
    gpu02

    [k8s-cluster:childred]
    kube-master
    kube-node

    • 구성 설치
  • $ ansible-playbook -l k8s-cluster playbooks/k8s-cluster.yml
  • 마치며

    너무 간단하게 slurm 클러스터와 kubernetes 구성을 해보았습니다.
    deepops에서 제공하는 설치 패키지는 온프레미스 환경에서 클러스터 구성시 매우 유용하게 사용될 수 있습니다.
    클러스터 구성후, 사용 환경에 맞춰 몇 가지 커스텀 후에 바로 사용할 수 있는 매우 좋은 배포 도구입니다.

    PLEASE WAIT WHILE LOADING...