slurm 세팅하기 1 - 초기 세팅 및 munge 설치 및 실행

Slurm은 Simplified Linux Utility for Resource Management의 약자로, 대규모 병렬 컴퓨팅 환경에서 작업 스케줄링과 리소스 관리를 위한 오픈 소스 클러스터 관리 시스템입니다.
쉽게 말해서...
- 클러스터 관리자: 여러 대의 컴퓨터(노드)로 이루어진 클러스터를 효율적으로 관리합니다.
- 작업 스케줄러: 사용자가 제출한 작업들을 컴퓨터 자원(CPU, 메모리 등)에 효율적으로 배분하고 실행 순서를 정합니다.
- 리소스 관리자: 컴퓨터 자원을 효과적으로 관리하여 여러 사용자들이 동시에 자원을 사용할 수 있도록 합니다.
Slurm이 왜 필요할까요?
- 대규모 컴퓨팅 환경: 많은 양의 데이터를 처리하거나 복잡한 시뮬레이션을 수행하는 경우, 단일 컴퓨터로는 처리 시간이 오래 걸릴 수 있습니다. Slurm을 이용하면 여러 대의 컴퓨터를 연결하여 작업을 분산 처리함으로써 처리 속도를 크게 향상시킬 수 있습니다.
- 자원 효율성: Slurm은 컴퓨터 자원을 효율적으로 관리하여 자원 낭비를 줄이고, 여러 사용자들이 동시에 자원을 사용할 수 있도록 합니다.
- 사용자 편의성: Slurm은 사용하기 쉬운 명령어 인터페이스를 제공하여 사용자가 쉽게 작업을 제출하고 관리할 수 있도록 합니다.
Slurm의 주요 기능
- 작업 제출 및 관리: 사용자가 작업을 제출하면 Slurm은 작업의 종류, 필요한 자원 등을 분석하여 적절한 컴퓨터 자원에 할당합니다.
- 대기열 관리: 여러 사용자들이 동시에 작업을 제출할 경우, Slurm은 작업들을 우선순위에 따라 대기열에 넣고, 자원이 확보되면 순차적으로 실행합니다.
- 자원 할당: Slurm은 작업에 필요한 CPU, 메모리, 디스크 공간 등을 할당하고, 작업이 완료되면 해당 자원을 회수합니다.
- 작업 모니터링: 사용자는 Slurm을 통해 작업의 상태를 실시간으로 확인하고, 필요한 경우 작업을 취소하거나 재시작할 수 있습니다.
Slurm의 활용 분야
- 고성능 컴퓨팅(HPC): 과학 기술 계산, 시뮬레이션, 데이터 분석 등
- 딥러닝: 인공지능 모델 학습
- 생명정보학: 유전체 분석
- 기상 예측: 기상 모델 시뮬레이션

slurm 세팅하기
slurm 세팅 전 계정 생성이 우선되어야 함.
필요 설치 및 업데이트 진행
dnf -y install rpm-build perl pam-devel python3 readline-devel bzip2 mariadb-devel wget gcc
dnf --enablerepo=devel install munge-devel -y
dnf --enablerepo=devel install perl-Switch -y
간혹 devel이 설치가 안 될 때는 powertools로 설치를 진행한다.
dnf --enablerepo=powertools install munge-devel -y
dnf --enablerepo=powertools install perl-Switch -y
환경변수 설정
환경변수 설정 전 마운트할 디렉터리를 생성한다.
export MUNGEUSER=1111
export SLURMUSER=1112
export SHARED_DIR="/slurm_test"
마운트할 디렉터리에 대해 권한 수정을 진행
chown slurm: slurm_test
slurm 다운로드 진행
wget https://download.schedmd.com/slurm/slurm-23.11.3.tar.bz2
rpm 설치
rpm 설치 전 파일 수정
vi /root/.rpmmacros 편집하여
=============================================
# .rpmmacros
# Override some RPM macros from /usr/lib/rpm/macros
# Set Slurm-specific macros for unconventional file locations
#
%_enable_debug "--with-debug"
%_prefix /opt/slurm
%_sysconfdir /etc/slurm
%_defaultdocdir %{_prefix}/doc
%with_munge "--with-munge=/etc/munge"
=============================================
위 내용 작성 후 저장.
rpmbuild 진행
rpmbuild -ta slurm*.tar.bz2 명령어로 rpmbuild를 진행한다.
rpmbuild 끝나면 해당 경로에 rpm 파일들 생성되어 있음. /root/rpmbuild/RPMS/x86_64
# rpmbuild 진행
# rpmbuild 진행 후 /root/rpmbuild/RPMS/x86_64 경로에 rpm 파일들 확인
dnf localinstall *.rpm -y 명령어를 통해 rpm 설치 진행.
rpm 설치 후 다음 명령어 실행
mkdir -p /etc/munge /var/lib/munge /var/log/munge /run/munge
chown munge:munge /etc/munge /var/lib/munge /var/log/munge /run/munge
chmod 0700 /etc/munge
chmod 0711 /var/lib/munge
chmod 0700 /var/log/munge
chmod 0755 /run/munge
munge key 생성
/sbin/create-munge-key -r
dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
Generating a pseudo-random key using /dev/random 에서 "Ctrl + C" 로 중단 후
/etc/munge 를 확인하면 munge.key가 생성된 것을 확인할 수 있다.
munge 실행
systemctl enable munge
systemctl start munge
systemctl status munge
해당 설정 또한 진행.
munge.key의 권한을 400 으로 수정 후
systemctl start munge 를 입력하면 정상적으로 munge가 실행된 것을 확인할 수 있다.
서버 재시작 시 munge 서비스 자동 실행되지 않음.
자동 시작 설정을 위해 vi /usr/lib/systemd/system/munge.service 파일을 편집해준다.
====================================================
[Unit]
Description=MUNGE authentication service
Documentation=man:munged(8)
After=network.target
After=time-sync.target
[Service]
PermissionsStartOnly=true
ExecStartPre=/usr/bin/mkdir -p /var/run/munge
ExecStartPre=/usr/bin/chown munge.munge /var/run/munge
Type=forking
ExecStart=/usr/sbin/munged
PIDFile=/var/run/munge/munged.pid
User=munge
Group=munge
Restart=on-abort
[Install]
WantedBy=multi-user.target
====================================================
해당 내용 입력 후 저장
서버 재시작 후에도 munge 서비스가 올라온 것을 확인할 수 있다.
마스터 서버에서의 설정은 완료되었고 슬레이브 서버로 rpmbuild 디렉터리를 복사해주고 똑같이 rpm을 설치해준다.
이후 마스터와 동일하게 슬레이브 서버도 계정 생성 및 munge 설정을 진행해준다.
munge 설정 후 마스터와 슬레이브 간 munge 통신 확인을 진행.
vi /etc/hosts 에 각각 hostname을 넣어준다.
마스터 서버에서 : munge -n | ssh slurm-s unmunge
슬레이브 서버에서 : munge -n | ssh slurm-m unmunge
서로 통신이 되는 것 확인.
