본문 바로가기
[MLOPs]/Slurm-admin

Slurm-admin | Deepops로 Slurm 설치하기 (작성중)

by 하우론 2024. 1. 18.
NVIDIA CI
Deepops는 NVIDIA에서 만든 slurm, k8s 및 각종 툴 설치용 레포이다. 설치는 물론 기본적인 보안 셋업까지 다 해준다.

개요

Slurm을 설치한다는 것은

  • 모든 노드에 munged(MUNGE Uid 'N' Gid Emporium Daemon; GNU 마냥 recursive 약어이다) 설치
  • 마스터 노드에 slurmctld(Slurm Controller Daemon) 설치 및 가동
  • 컴퓨팅 노드들에 slurmd(Slurm Daemon) 설치
  • [Optional] Accounting을 위해 마스터 노드(또는 별도의 노드)에 slurmdbd(Slurm DB Daemon) 설치
  • slurm.conf, gres.conf(, cgroup.conf, slurmdbd.conf)의 변수를 조정하여 자원 분배 방식 조정
  • prolog, epilog 등을 설정해 job 시작, 끝에 노드 설정 변경 자동화

를 하겠다는 것이다. 하지만 slurm만 설치하는 것으로 클러스터 구성이 끝나지 않는다. GPU를 사용하려면 추가적인 작업이 필요하다.

  • 컴퓨팅 노드들에 nvidia-driver와 cuda-toolkit 설치
  • 슬럼이 GPU 제대로 인식하는지 확인 (여기서 시간 다 뺏김)

 
모니터링도 해야 한다.

  • nhcd(Node Health Checker Daemon) 설치 및 가동
  • Node/DCGM-exporter 설치 및 가동
  • Prometheus, Grafana 등 그 외 필요한 것 설치

 
유저, 보안 관리도 해야 한다.

  • pam으로 본인 job이 없는 노드로의 ssh 차단
  • 모든 노드에 유저 및 그룹 생성; 모든 노드의 uid, gid가 동일해야 함
  • fail2ban 등 기본 보안 관리
  • Slurm accounting을 이용한 fine-grained 리소스 QoS 제한

 
위의 각 꼭지 하나하나가 처음엔 모두 태산 같은 존재이다. 하지만 deepops 하나로 웬만한 내용을 다 해결할 수 있다. 빠르고 편하게 slurm을 설치하는 방법을 알아보자.

GitHub - NVIDIA/deepops: Tools for building GPU clusters

Tools for building GPU clusters. Contribute to NVIDIA/deepops development by creating an account on GitHub.

github.com


설치 전 사전 작업

편리한 설명을 위해 우리가 설치하고자 하는 클러스터 이름을 eagle로 하겠다. 실제로 이런 부대 이름 느낌 나는 걸로 많이 짓는다. 다른 예시로 tiger, albatross, jaguar 등이 있다. 개인적으로 특수문자 없는 6자 이내 이름을 추천한다. 이유: 길면 타자 칠 때 귀찮아서.
 

  • [2024년 1월 기준] 우분투 20.04 버전으로 포맷! Deepops가 22.04를 아직 지원하지 않는다.
  • 최초 admin 계정 이름 원하는 것으로 변경
    • 그냥 admin은 보안 때문에 추천하지 않고 eagleadmin, eadmin 등 추천
  • zsh 및 zsh-autocomplete 설치
    • 없으면 너무 오래 걸린다.
  • 클러스터에 해당하는 노드들 hostname 원하는 것으로 변경
    • 마스터는 eagle-master 내지 emaster, eagle-login 등을 추천하고
    • 컴퓨팅 노드들은 eagle1, ..., eagle10과 같이 숫자를 연이어주는 게 관리하기 편하다. Ansible이 eagle[1:10]과 같이 indexing을 제공하기 때문이다.
      • 또는 eagle-gpu5, eagle-tesla27, eagle-grad1, eagle-compute33 등 노드 소속이나 목적이 분명하다면 이렇게 이름에 명시해주는 것도 좋다.
      • slurm-compute3 이렇게 짓는 곳도 있으나 개인적으로 추천하진 않는다.
    • sudo hostnamectl set-hostname [새 노드 이름]
      • 위 명령어 후 쉘 재접속
      • 이렇게 하면 재부팅 없이 노드 이름을 바꿀 수 있다.
  • 마스터의 /etc/hosts에 각 노드들의 IP 및 hostname 기록

Deepops 다운 및 config 수정

사실 deepops 독스slurm 설치법 및 각 요소 설명이 아주 잘 나와있다. 이 블로그도 블로그인데 저 독스들은 무조건 시간 내서 천천히 읽어봐야 한다. 

  • 레포 클론
  • `./scripts/setup.sh`
    • `config/`랑 `roles/galaxy/` 폴더가 자동으로 생성되고 앤서블이 설치된 파이썬 가상환경을 하나 만들어주고 쉘에 configure 해준다.
    • 설치하고 쉘 껐다 켜야 한다. 쉘 프롬프트 맨앞에 `(env)` 뜨면 성공이다.
  • `config/inventory` 파일에 slurm 클러스터에 포함될 노드들 등록
    • 파일 중간에 `[slurm-node]`라고 보이는 곳 밑에 노드 이름들을 적으면 된다.
    • IP는 어차피 앤서블이 ssh 기반이라 `/etc/hosts`를 자동으로 보기에 적을 필요 없다.

 

설치!!

TBD
 


여담

 
 
하드웨어 구성도 필요하다.

  • 예산 잡기
  • 서버실 구성하기
    • 안정적인 파워 공급이 제일 중요
    • 항온항습도 매우 중요
  • 노드 configuration 구상하기
    • 마스터 노드는 꼭 전용 CPU 노드로 구성하는 것을 추천한다
      • GPU 노드 하나를 마스터/컴퓨팅 겸용으로도 사용할 순 있지만 매우매우매우 손이 많이 간다

 
마지막으로 기술 외적인 요소들을 고려해야 한다.

  • 클러스터 정책 수립
    • 리소스가 부족할 땐 누구 먼저 줄 것인가?
    • 비정상 유저 제재는 어떻게 할 것인가?
    • 유저와 연락은 어떻게 할 것인가?
    • sudo 권한이 필요한 작업 요청 경로는 어떻게 할 것인가?
    • 문의사항은 어디로 받을 것인가?
  • 슬럼 and/or/vs 쿠버

마지막에 적어놓긴 했지만 정책 수립이 slurm 설치보다 선행되어야 할 것이다.