상세 컨텐츠

본문 제목

Slurm 설치 및 세팅 정리

자료나 생각들/IT 정보

by 엘빌스 2023. 10. 19. 19:17

본문

슬럼이 서버 관리하는데 좋다고 사용하려고 자료를 찾아봤는데,

공식 문서는 이해하기 어렵고, 너무 방대하고

한국어 문서도 적고 설명이 충분하지 않다고 느꼈다.

 

deepops를 이용해서 설치하는 방법도 있지만 커스텀해서 수정하려면

Ansible을 다룰 줄 알아야 해서 직접 설치하기로 했다.

(물론 결국 서버 클러스터를 관리하려면 Ansible을 알긴 알아야 한다는 결론이긴 한데,

사용자 계정, 비밀번호 정도만 다루는 것과 수준 차이가 많이 나는 것 같다

- 덧붙임: 결국 현 시점-2024년 3월-에서는 클러스터를 다루기 위해서 Ansible 기본 사용법을 공부했고

Slurm 설치도 ansible 기반으로 하도록 설정도 마쳤다.

기본적으로 아래 내용들을 적당히 분절해서 ansible 플레이북으로 작성하고

순차적으로 실행하면 설치 및 세팅이 완료되도록 했다.

깊게 공부하지 않아도 기본 문법 공부하고 GPT의 도움을 받으면 충분히 가능하다.)

 

그래서 가능한 공식 문서를 기반으로 우분투 환경에서 Slurm을 설치하는 과정에 대해서

왜 이걸 이렇게 하는지 최대한 쓰면서 가이드라인을 작성해둔다.

Slurm을 설치만 하면 되는게 아니라서, 설치 자체도 쉽지 않다.

하지만 차근차근 따라하면 무조건 할 수 있도록 작성했다.

 

과정이 길고 옵션도 많다보니,

바로 실행하면서 따라하기 보다 먼저 읽어보고 전체 과정을 파악하고 진행하는 것을 권장한다.

 

 

최종 수정: 2024. 02. 17

 

* Master Node는 Compute Nodes를 통제하는 노드

* Master Node가 Compute Node를 겸하면, 둘 다 세팅해야 함

* gedit은 GUI 환경을 전제한 것으로 CLI 환경이면 vi, vim, nano로 대체

 

Slurm 설치 방법

* Ubuntu 20.04 기준

@ MUNGE 설치

1. [Master Node] munge 그룹 및 사용자 설정

* 밑줄친 부분은 500미만 시스템용 UID, GID 사용 가능

sudo groupadd -g 300 munge
sudo useradd munge -m -d /var/lib/munge -u 300 -g munge -s /usr/sbin/nologin -c "non-privileged user for munged daemon"

 

 

2. [Master Node] munge 설치

sudo apt-get install munge

* 1번 그룹 및 사용자 설정을 먼저하지 않으면 시스템에 따라 munge 계정의 UID, GID가 정해지므로, 추후 각 노드 별로 munge 설치할 때 UID, GID를 확인하고 일치시켜줘야 하므로, 1번에서 먼저 계정을 만들어두는 것을 권장함

 

 

3. [Compute Nodes] 위의 1, 2번을 각 노드에서 반복

 

 

4. [Master Node] munge key 설치

- 1. sudo dd if=/dev/urandom of=/etc/munge/munge.key bs=1c count=4M

- 2. 권한 및 소유자 확인

sudo ls -l /etc/munge/munge.key

다음과 같이 나오면 됨 -r-------- 1 munge munge

(위와 다르면

sudo chown munge:munge /etc/munge/munge.key

sudo chmod 400 /etc/munge/munge.key

위 명령어 수행)

 

 

5. [Master Node] munge.key를 Compute Nodes로 복사

밑줄친 SSH 포트 번호와 유저, IP는 노드 설정에 맞추어 변경

sudo scp -P 22 /etc/munge/munge.key root@192.168.0.2:/etc/munge/munge.key

* 각 노드에서 SSH로 root 접속 권한을 부여하지 않은 경우 아래와 같이 진행

sudo scp -P 22 /etc/munge/munge.key user@192.168.0.2:/home/user/munge.key

sudo mv /home/user/munge.key /etc/munge/munge.key

모든 계산 노드에 복사하도록 반복

 

 

6. [Compute Nodes] 파일을 전송하면서 소유자가 munge에서 유저 계정으로 변경되었으므로 아래 명령어 실행

* 모든 계산 노드에서 반복

sudo chown munge:munge /etc/munge/munge.key

sudo chmod 400 /etc/munge/munge.key

 

- munge daemon 서비스 활성화 및 (재)시작

* apt로 설치한 경우 이미 enable, start 되었을 것이나, 확인차 다시 진행

sudo systemctl enable munge.service

sudo systemctl start munge.service

sudo systemctl restart munge.service

 

 

7. [Master Node] munge daemon 서비스 활성화 및 (재)시작

* apt로 설치한 경우 이미 enable, start 되었을 것이나, 확인차 다시 진행

sudo systemctl enable munge.service

sudo systemctl start munge.service

sudo systemctl restart munge.service

 

 

8. [Master Node] munge 작동 확인

밑줄친 SSH 포트 번호와 유저, IP는 노드 설정에 맞추어 변경

munge -n
munge -n | unmunge
munge -n | ssh -p 22 user@192.168.0.2 unmunge
STATUS: Success 확인

 

 

@ Slurm 설치

9.[All Nodes] slurm 설치

sudo apt-get install slurm-wlm slurm-wlm-doc

* 위 방법으로 설치시 slurm 이라는 유저가 UID, GID 64030으로 생성됨

 

10. [Master Node] slurm.conf 파일 생성 및 수정

firefox /usr/share/doc/slurm-wlm/html/configurator.html

또는

firefox /usr/share/doc/slurm-wlm/html/configurator.easy.html

* 웹 브라우저 사용이 불가하면 위 파일을 복사하여 GUI 환경에서 진행

* Slurm 홈페이지의 생성기는 버전이 맞지 않을 수 있으로 가급적 로컬의 파일로 진행

* 아래는 Slurm Version 19.05 기준

- SlurmctldHost: 마스터노드의 Hostname 입력

* Hostname은 sudo gedit /etc/hostname 로 확인하고, 변경을 원하면 여기서 변경하고 재부팅

* Hostname에 alias를 안 한 경우 sudo gedit /etc/hosts 로 추가하고 진행
Compute Machines는 계산 노드들을 설정하는 것이나, 페이지에서는 하나 샘플로 작성 (아래에서 복사해서 진행)
- NodeName: 계산노드의 Hostname 입력
- PartitionName: p1 (아무거나 가능)
- CPUs 이하는 설명 보고 작성, 작성할 정보를 확인하려면 slurmd -C 로 확인

* 인텔 12세대 이상 P+E 하이브리드 구조는 어떻게 할당하는지 불분명, 일단 문제를 피하려면 P코어 기준으로만 입력

- StateSaveLocation: /var/spool/slurmctld
- Process Tracking는 Pgid 선택

- SlurmctldLogFile: /var/log/slurmctld.log
- SlurmdLogFile: /var/log/slurmd.log

 

sudo gedit /etc/slurm-llnl/slurm.conf

붙여 넣고 (SlurmDBD 설정할 예정이면 아래쪽 먼저 보고 미리 설정해둘 수 있음)

 

[방화벽을 사용하는 경우 진행]

- slurm port 변경 방법

#SlurmctldPort=6817

#SlurmdPort=6818

#이 붙어 주석처리되어 있으면, 적혀 있는 그대로 기본 포트 사용

보안을 위해 변경을 원하면 #을 없애고 포트 번호 변경

SRUN Communication Port를 따로 지정하지 않으면 랜덤하게 사용하며

SrunPortRange=50001-52000

윗줄을 slurm.conf의 적당한 위치에 붙여 넣고, 밑줄친 부분은 원하는 포트 구간으로 변경하면

SRUN Communication Port는 해당 구간 포트를 사용함

저장했으면

sudo ufw allow 6817

sudo ufw allow 6818

sudo ufw allow 50001-52000/tcp

작성한 포트 번호에 맞추어 slurm 통신에 사용할 포트 개방

- (참고) torchrun을 이용하여 multi-node gpu training을 할 예정이면,

torchrun 사용시에도 통신을 위해 포트가 랜덤하게 개방되므로,

특정 포트를 개방하는 대신

sudo ufw allow from 192.168.0.0/16

등 위와 같이 통신할 서버 또는 PC의 아이피 (구간)에 대해서 모든 포트를 허용해서 사용 (강력 권장)

 

[공통으로 진행]

# COMPUTE NODE 아래의 NodeName ~ State 한 줄을 복사하고,

추가할 계산 노드만큼 붙여 넣고 노드에 맞게 수정하고,

아래 파티션에도 컴마 등으로 노드를 추가하고 저장

 

[GPU를 사용할 경우 진행]

# COMPUTE NODE 아래에 GresTypes=gpu 추가하고

노드 정보에서 State 전에 아래와 같은 정보를 추가한다.

* 밑줄 순서대로 이름, 종류(Type), 개수

* 이름과 종류는 아무거나 가능하지만, 이름은 gpu, 종류는 gpu 모델에 맞추는 것을 권장

Gres=gpu:rtx3090:2

예시) NodeName=node1 CPUs=32 RealMemory=128725 Sockets=1 CoresPerSocket=16 ThreadsPerCore=2 Gres=gpu:rtx3090:2 State=UNKNOWN

 

저장하고,

sudo gedit /etc/slurm-llnl/gres.conf

아래 양식에 따라 slurm.conf 에서 작성한 계산 노드 정보에 맞추어 추가하고 저장 (여러 개면 여러 줄로 작성)

Nodename=node1 Name=gpu Type=rtx3090 File=/dev/nvidia[0-1]

 

sudo chown slurm: /etc/slurm-llnl/slurm.conf

sudo chown slurm: /etc/slurm-llnl/gres.conf

 

[cgroup을 사용할 경우 진행]

* 작성자도 명확히 알고 있는 것은 아니지만, cpu, ram에 대해서 slurm상 자원 제한 정도가 아니라

실제 시스템에서 자원을 엄격히 통제 하려면 cgroup 세팅을 해야 하는 것으로 보임

 

본 문서의 기준인 Ubuntu 20.04는 cgroup v2를 사용하므로

(grep cgroup /proc/filesystems 로 확인 가능)

리눅스(우분투) 시스템 설정이 불필요한 것으로 보이고,

만약 cgroup v1 시스템(20.04 이전)이라면 메모리 스왑 관련하여 다음과 같은 설정 진행

(공식 설명: Debian and derivatives (e.g. Ubuntu) usually exclude the memory and memsw (swap) cgroups by default. To include them, add the following parameters to the kernel command line)

 

sudo gedit /etc/default/grub

 

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

로 변경 후

sudo update-grub

 

Ubuntu 20.04는 여기부터 진행

sudo cp /usr/share/doc/slurmd/examples/cgroup.conf /etc/slurm-llnl/

sudo chown slurm: /etc/slurm-llnl/cgroup.conf

sudo gedit /etc/slurm-llnl/cgroup.conf

다음 내용 아래에 붙여넣기

-----------------

ConstrainDevices=yes
ConstrainRAMSpace=yes
ConstrainSwapSpace=yes

-----------------

최종 형태는 아래와 같으며,

샘플 파일을 복사하지 않아도 아래 내용을 붙여 넣어서 cgroup.conf를 생성해도 됨

-----------------

###
# Slurm cgroup support configuration file.
###
ConstrainCores=yes
ConstrainDevices=yes
ConstrainRAMSpace=yes
ConstrainSwapSpace=yes

#

-----------------

sudo gedit /etc/slurm-llnl/slurm.conf

다음과 같이 찾아서 변경

ProctrackType=proctrack/cgroup

TaskPlugin=task/cgroup,task/affinity

JobAcctGatherType=jobacct_gather/cgroup #optional for gathering metrics

 

TaskPlugin 아래에 추가 (사실 아무 곳이나 상관없음)

PrologFlags=Contain #X11 flag is also suggested

 

여기서 TaskPlugin이 자원 제한에 관련한 핵심적인 옵션으로 보이며,

나머지는 공식 문서에서 제안하는 옵션들

 

 

11. [Compute Nodes] 마스터노드의 slurm.conf와 gres.conf, (cgroup.conf)를 모든 계산 노드에 복사

경로: /etc/slurm-llnl/slurm.conf, /etc/slurm-llnl/gres.conf

복사 진행 * root 소유의 경로이므로 scp로 바로 안 됨

공유 폴더 설정한 경우 이를 이용해도 되고, 파일을 만들어서 내용을 복사-붙여넣기할 수도 있음

sudo chown slurm: /etc/slurm-llnl/slurm.conf

sudo chown slurm: /etc/slurm-llnl/gres.conf

cgroup.conf 설정한 경우

sudo chown slurm: /etc/slurm-llnl/cgroup.conf

 

 

@ slurmDBD 설치

* 안 해도 Slurm 사용 가능하지만 자원 제한 기능 등을 사용할 예정이면 반드시 진행

* Text 기반 계정 설정도 지원은 하지만 권장하는 방법 본 문서에서는 다루지 않음

12. [Master Node] sudo apt-get install slurmdbd

 

 

13. [Master Node] sudo apt-get install mysql-server

* anaconda 설치되어 있으면 anaconda에 포함되어 있음

 

 

14. [Master Node] MySQL 서비스 등록 및 실행

sudo systemctl enable mysql
sudo systemctl start mysql

 

 

15. [Master Node] MySQL 접속

sudo mysql -u root

* 편의상 root에 비밀번호 없는 상태로 진행하나, 작업이 끝나면 root에 비밀번호 지정을 해줘야 함

 

 

16. [Master Node] slurmDBD를 위한 MySQL 설정

데이터베이스 생성

slurm 계정 생성

slurm 계정 비밀번호 생성 - 밑줄 친 부분은 원하는 비밀번호로 변경

slurm 계정에 모든 데이터베이스 사용 권한 부여

slurm 계정에 slurm_acct_db 데이터베이스 모든 권한 부여

권한 변경 사항 적용

MySQL 종료

아래 코드를 한 번에 복사해서 붙여넣으면 한 번에 진행됨

 

create database slurm_acct_db;

create user 'slurm'@'localhost';

set password for 'slurm'@'localhost' = 'slurmdbpass';

grant usage on *.* to 'slurm'@'localhost';

grant all privileges on slurm_acct_db.* to 'slurm'@'localhost';

flush privileges;

exit;

 

* set password for 'slurm'@'localhost' = 'slurmdbpass'; 오류나면

set password for 'slurm'@'localhost' = password('slurmdbpass');

 

* root 비밀번호 지정 방법

sudo mysql -u root

ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'slurmdbpass';

 

 

17. [Master Node] my.cnf 설정

mysqld --verbose --help | grep -A 1 'Default options'

나오는 순서대로 my.cnf 확인하고, my.cnf 발견시 다음 내용 붙여넣고 저장

----------------------

[mysqld]
innodb_buffer_pool_size=4096M
innodb_log_file_size=64M
innodb_lock_wait_timeout=900
max_allowed_packet=16M

----------------------

저장 후 sudo systemctl restart mysql

 

 

18. [Master Node] slrumdbd.conf 파일 생성 및 수정

slurmdbd.conf 샘플 복사 후 압축을 풀고 slurm 유저로 소유주를 변경

sudo cp /usr/share/doc/slurmdbd/examples/slurmdbd.conf.simple.gz /etc/slurm-llnl/

sudo gzip -d /etc/slurm-llnl/slurmdbd.conf.simple.gz

sudo mv /etc/slurm-llnl/slurmdbd.conf.simple /etc/slurm-llnl/slurmdbd.conf

sudo chown slurm: /etc/slurm-llnl/slurmdbd.conf

 

DB의 암호가 포함되어 있으므로 다른 사용자 읽기 권한도 차단

sudo chmod 700 /etc/slurm-llnl/slurmdbd.conf

 

sudo gedit /etc/slurm-llnl/slurmdbd.conf

 

밑줄 친 부분 위에서 설정한 비밀번호로 변경

StoragePass=slurmdbpass

LogFile=/var/log/slurmdbd.log

PidFile=/run/slurmdbd.pid

로 변경 (slurm.conf의 파일들과 같은 경로로 통일한 것, 선택)

 

 

19. [All Node] slurm.conf 파일 수정

sudo gedit /etc/slurm-llnl/slurm.conf

 

AccountingStorageType=accounting_storage/slurmdbd

로 변경

 

필수는 아니고, Job Completion Logging을 하려면

JobCompType=jobcomp/slurmdbd

로 변경 (easy로 설정했으면 없으므로 추가)

 

 

@ Slurm 설치 (이어서 진행)

20. [Master Node] conf에서 정의한 파일 생성

* 서비스 시작 전 파일을 생성하지 않으면 에러 발생할 수 있음

sudo mkdir /var/spool/slurmctld
sudo chown slurm: /var/spool/slurmctld
sudo chmod 755 /var/spool/slurmctld
sudo touch /var/log/slurmctld.log
sudo chown slurm: /var/log/slurmctld.log

 

 

21. [Master Node] slurmctld 서비스 실행

sudo systemctl stop slurmctld

sudo systemctl enable slurmctld

sudo systemctl start slurmctld

sudo systemctl status slurmctld

active (running)인지 확인

* 응답이 없는 경우

sudo gedit /etc/slurm-llnl/slurm.conf에서 SlurmctldPidFile, SlurmdPidFile의 경로와

sudo gedit /lib/systemd/system/slurmctld.service에서 PIDFile의 경로가 일치하는지 확인

* active (running) 실패하고 slurmctld.service: Can't open PID file /run/slurmctld.pid (yet?) after start: Operation not permitted

인 경우는 PID 파일에 의한 실패라기보다 slurm.conf 설정이 잘못되었을 수 있음

예시) Hostname을 잘못 지정한 경우 active 실패 (이 경우 GPU 설정 진행한 경우 gres.conf도 수정 필요)

 

 

22. [Compute Nodes] conf에서 정의한 파일 생성

* 서비스 시작 전 파일을 생성하지 않으면 에러 발생할 수 있음

sudo mkdir /var/spool/slurmd
sudo chown slurm: /var/spool/slurmd
sudo chmod 755 /var/spool/slurmd
sudo touch /var/log/slurmd.log
sudo chown slurm: /var/log/slurmd.log

 

 

23. [Compute Nodes] slurmd 서비스 실행

sudo systemctl stop slurmd
sudo systemctl enable slurmd
sudo systemctl start slurmd
sudo systemctl status slurmd
active (running)인지 확인

 

 

24. [Master Node] slurmdbd 서비스 실행

* slurmDBD 설치한 경우만 진행

sudo systemctl enable slurmdbd

sudo systemctl start slurmdbd

 

 

25. [Master Node] slurmdbd과 DB 연결 확인

* slurmDBD 설치한 경우만 진행

sudo mysql -u slurm -p

비밀번호 입력

 

use slurm_acct_db;

show tables;

 

테이블이 생성되어 있으면 연결 성공

 

 

26. [Master Node] slurm 정상 동작 확인

srun hostname

다른 노드 이름이 나오면 성공

 

srun --pty bash

다른 노드로 접속되면 성공

 

* 제출은 되었는데 squeue에 안 뜨면 재부팅해보고 그래도 안 되면 설정 잘못된 것 없는지 점검

 

 

 

 

Slurm 세팅 방법

@ 클러스터, 어카운트, 사용자 생성 및 삭제 (위에서 SlurmDBD 설치 진행해야 가능)

* 등록하지 않은 사용자는 slurm 사용 불가

* sudo sacctmgr 만 입력해서 Interaction mode에서 sudo sacctmgr 생략하고 진행 가능

밑줄 친 부분을 원하는 이름으로 설정

sudo sacctmgr add cluster name=cluster

sudo sacctmgr add account name=account cluster=cluster

sudo sacctmgr add user name=user account=account partition=partition cluster=cluster

* partition은 선택

* 사용자 이름은 우분투에 등록한 사용자 이름과 동일해야 함

* name을 안 쓰고, sudo sacctmgr add user user=user account=account partition=partition cluster=cluster

와 같이 써도 됨

* 상위 항목에 대해서 여러 개 동시에 포함시키려면 , 찍어서 생성 예를 들어 partition=a,b

 

삭제하려면 add 대신 delete 사용

* user, account, partition, cluster는 수정 불가하므로, 변경이 필요한 경우 삭제 후 재생성해야 함

 

sacctmgr show association 으로 목록 확인 가능

 

 

 

@ 서버, 그룹, 사용자별 자원 제한 (위에서 SlurmDBD 설치 진행해야 가능)

slurm의 중요한 기능 중 하나로, 세분화된 제한 기능을 지원함

 

타이틀은 일상적으로 쓰는 용어로 작성했지만 슬럼에서는

서버(군) - Partition

그룹 - Account

사용자 - User

에 대응함

Partition은 실제 물리적인 컴퓨터인 노드가 하나 이상 묶이는 개념

 

사용자 관리 단위는 Cluster Account User Partition이 조합된 것이 하나의 단위임

예를 들어 cluster=clutser, account=student, user=a 이라도

cluster=clutser, account=student, user=a, partition=g

cluster=clutser, account=student, user=a, partition=p

는 별개의 항목으로 관리됨

 

따라서 Account, User에 대해서는 분리된 설정 옵션이 있는 것은 아니며

Partition은 계정보다는 노드 관리 개념이므로 scontrol에 분리된 설정 옵션이 있음

 

자원 제한 기능을 활성화하기 위해서

sudo gedit /etc/slurm-llnl/slurm.conf

다음 내용을 # LOGGING AND ACCOUNTING 있는 쪽 맨 아래에 추가 (사실 위치 상관 없음)

AccountingStorageEnforce=limits

(모든 노드에 대해서 갱신해야 함 - Slrum 19 기준)

 

1. 서버(군)별 접근 권한을 제한하려는 상황

* slurm.conf이나 scontrol를 통해 서버(군)별로 파티션 지정이 완료되어 있어야 

클러스터, 어카운트, 사용자 생성할 때 partition=A 등 파티션을 지정하면 해당 사용하는 파티션 A에 해당하는 서버(군)만 접근가능

예를 들어 user=a, account=student, cluster=cluster인 사용자에게 partition=gpu1인 GPU 서버에 접근 권한을 주기 위해서

sudo sacctmgr add user user=a account=student partition=gpu1 cluster=cluster

 

만약 사전에 partition을 지정하지 않은채로 user=a, account=student, cluster=cluster인 사용자를 만들었으면

사용자 a는 모든 서버에 접근 가능하며,

이 사용자에 서버 접근 제한을 하고 싶으면

sudo sacctmgr delete user user=a account=student partition="" cluster=cluster

를 통해서 파티션 제한 없는 계정을 삭제해야 함

 

두 개 이상 서버(군)에 접근 권한을 주고 싶으면, 예를 들어

user=a, account=student, cluster=cluster인 사용자에게 파티션 이름이 gpu1, gpu2인 GPU 서버에 접근 권한을 주기 위해서는

sudo sacctmgr add user user=a account=student partition=gpu1,gpu2 cluster=cluster

이렇게 하면 각각 분리된 단위, 즉 partition=gpu1인 계정과 partition=gpu2인 계정이 모두 생성됨

 

* user, account, partition, cluster는 수정 불가하므로, 변경이 필요한 경우 삭제 후 재생성해야 함

 

 

2. 사용자별로 제출 가능한 작업의 수를 5개로 제한하려는 상황

모든 사용자를 대상으로 하는 경우

sudo sacctmgr modify user set MaxSubmitJobs=5

만약 동시에 실행 가능한 작업의 수를 제한하려면

sudo sacctmgr modify user set MaxJobs=5

 

사용자 a를 대상으로 하는 경우

sudo sacctmgr modify user user=a set MaxSubmitJobs=5

또는

sudo sacctmgr modify user a set MaxSubmitJobs=5

 

특정한 그룹(account - student)의 사용자를 대상으로 하는 경우

sudo sacctmgr modify account account=student set MaxSubmitJobs=5

또는

sudo sacctmgr modify account student set MaxSubmitJobs=5

또는

sudo sacctmgr modify user where account=student set MaxSubmitJobs=5

 

같은 방법으로 클러스터를 대상으로 하면 modify cluster cluster= 와 같이 하면 됨

제한을 취소하려면 MaxSubmitJobs=-1

 

 

3. 사용자별로 사용 가능한 GPU의 수를 5개로 제한하려는 상황

모든 사용자를 대상으로 하는 경우

sudo sacctmgr modify user set GrpTRES=cpu=-1,mem=-1,gres/gpu=5

* cpu와 ram에 대해서는 지정하지 않은 것

 

만약 서로 다른 GPU 종류, 예를 들어 GPU A와 GPU B 각각 5개로 제한하려고 하면

sudo sacctmgr modify user set GrpTRES=gres/gpu:A=5,gres/gpu:B=5

 

나머지 경우는 위의 사례를 참고

 

 

4. 사용자별로 사용 가능한 GPU의 수를 제한하는데, 컴퓨팅 파워가 차이나는 다른 기종이 있어 단순 개수가 아니라 총 컴퓨팅 파워로 제한하려는 경우

TRES Billing 이용

이를 사용하기 위해서 추가 설정이 필요함

sudo gedit /etc/slurm-llnl/slurm.conf

 

AccountingStorageEnforce 아래에 다음 내용 추가 (사실 위치 상관 없음)

 

AccountingStorageTRES=gres/gpu:A,gres/gpu:B

 

위의 예시는 GPU A와 GPU B가 있다고 가정한 것이며,

GRES 자원은 gres.conf에도 정의되어 있는 것이어야 함

이것은 GPU A와 GPU B라는 자원을 추적하겠다는 선언이고,

CPU, Energy, Memory, Node, FS/Disk, Pages, VMem은 기본적으로 추적됨 (공식 문서 출처)

 

그리고 이를 바탕으로 TRES Billing을 계산하기 위해서는

파티션별로 TRES Billing Weights가 정의되어야 함

여기서는 slurm.conf 직접 명시하는 방법으로

PartitionName= ... 줄 가장 끝에 한 칸 띄고 아래 내용 추가

TRESBillingWeights="GRES/gpu:A=1.0,GRES/gpu:B=2.0"

위의 밑줄 친 부분에 gres.conf에서 정의한 종류와 사용하고 싶은 가중치를 입력

저장하고 다른 모든 노드에 수정 사항 반영 (Slurm 19 기준)

 

이렇게 하면 GPU A 4개, GPU B 2개를 요청한 경우

Billing은 1.0 * 4 + 2.0 * 2 = 4 + 4 = 8

 

마지막으로 billing을 기준으로 제한을 설정하면 되며,

모든 사용자를 대상으로 하고 총 billing 10으로 제한한다면
sudo sacctmgr modify user set GrpTRES=billing=10

 

 

5. 특정 파티션에서 그룹(account) 단위로 제출 가능한 작업의 수를 50개로 제한하려는 상황

Partition QoS 이용

먼저 QoS를 만들어야 함

sudo sacctmgr add qos equal description=example

위의 밑줄 친 qos 이름은 원하는 이름으로 쓰고 description은 선택으로 작성

 

QoS 설정 추가(수정)

sudo sacctmgr modify qos qos=equal set MaxSubmitJobsPerAccount=50

또는

sudo sacctmgr modify qos equal set MaxSubmitJobsPerAccount=50

 

파티션에 QoS 설정 추가

sudo scontrol update PartitionName=gpu1 qos=equal

영구적으로 반영하려면 slurm.conf에 추가해야 함

(@ 파티션 추가, 설정, 삭제 참고)

 

설정 반영 확인

scontrol show partition gpu1

 

* 여기서는 Partition QoS를 다루었으나,

사용자에도 (작업에 적용되는) QoS를 할당할 수 있고, 작업 제출시 QoS를 선택할 수도 있음

QoS에 존재하는 Priority는 작업 우선순위와 관련이 있음 (클수록 높은 우선순위)

작업 우선순위 개념을 스케줄링에 적용하려면 slurm.conf에 preempt 관련 내용을 추가해야 함

Partition에 지정된 QoS(Partition에 QoS)는 작업 우선순위에 영향을 주지 않음

preempt과 관련된 priority는 본 항목의 내용는 관련이 없으나 QoS 설정 참고사항으로 아래에 설정 방법을 작성하였음

sudo sacctmgr modify qos equal set priority=10

 

 

 

@ 파티션 추가, 설정, 삭제

- slurm.conf 수정

PartitionName=... 줄에 추가

설정이 상이한 다른 파티션을 추가로 만들려면 아래에 다른 줄로 새로 작성하면 됨

이때 Default=YES가 다른 줄에도 있으면 가장 마지막 것이 Default가 되므로 Default 설정 사용에 주의

PartitionName=g ...

PartitionName=p ...

저장 후 다른 노드에도 수정 사항 반영 (Slurm 19 기준)

 

- scontrol 이용

* scontrol로 변경된 것들은 Slurm을 재시작할 때 초기화되므로 영구적으로 적용해야 하면 slurm.conf을 직접 수정

추가 및 설정

sudo scontrol create PartitionName=gpu1 Nodes=node1,node2 MaxTime=INFINITE State=UP

밑줄 친 파티션 이름 외 나머지 부분에 원하는 설정을 입력하면 됨

 

설정 추가 또는 수정

sudo scontrol update PartitionName=gpu1 TRESBillingWeights="GRES/gpu:A=1.0,GRES/gpu:B=2.0"

밑줄 친 파티션 이름 외 나머지 부분에 추가 또는 수정할 설정을 입력하면 됨

 

설정 보기

scontrol show partition gpu1

밑줄 친 파티션 이름에 설정을 보기를 원하는 파티션 이름 입력

 

삭제

sudo scontrol delete PartitionName=gpu1

밑줄 친 부분에 원하는 파티션 이름 입력

 

 

 

 

Slurm 사용 방법 및 문제-해결

@ 노드 상태 업데이트

sinfo로 확인했을 때 문제가 없지만(해결되었지만) drain 등 응답 불가 상태로 나오는 경우

sudo scontrol update NodeName=node1 State=resume

위의 밑줄 친 부분(node1)에 응답이 없는 노드 이름을 입력

여러 개인 경우 node1,node2 와 같은 식으로 , 으로 여러 개 입력

 

문제가 발생해서 강제로 노드를 down 상태로 만들려고 하는 경우

sudo scontrol update NodeName=node1 State=down reason="example"

다시 정상 상태로 돌리려면

sudo scontrol update NodeName=node1 State=resume

 

 

 

참고 자료

https://slurm.schedmd.com/quickstart_admin.html
https://github.com/nateGeorge/slurm_gpu_ubuntu
https://ai4nlp.tistory.com/25
http://luxnox.iptime.org/blog/ubuntu-20-4-%EC%97%90-slurm-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/
https://novelism.co.kr/94
https://m31phy.tistory.com/32
https://wonwooddo.tistory.com/35
https://repository.kisti.re.kr/bitstream/10580/6542/1/2014-147%20Slurm%20%EA%B4%80%EB%A6%AC%EC%9E%90%20%EC%9D%B4%EC%9A%A9%EC%9E%90%20%EA%B0%80%EC%9D%B4%EB%93%9C.pdf

2014-147 Slurm 관리자 이용자 가이드.pdf
0.44MB

 

(바로 위 링크 파일)

http://www.hpc.iitkgp.ac.in/pdfs/part2-18-Sep-2021.pdf

part2-18-Sep-2021.pdf
1.44MB

 

(바로 위 링크 파일)

관련글 더보기

댓글 영역