일하면서 하느라 드디어 slurm 설치가 끝났다.
해당 내용은 서버노드와
computenode(vm환경)에 설치과정을 처음부터 끝까지 정리해뒀다.
먼저 rpmbuild가 없다면
yum install rpmbuild
slurm다운로드
https://www.schedmd.com/archives.php
rpm파일 만들기
rpmbuild -ta slurm*.tar.bz2 // 실행하면 설치 안되어 있는 프로그램들 알 수 있다.
오류 사항들 하나하나 찾아서 다운로드 및 설치.
* munge-devel
- rocky
dnf --enablerepo=powertools install munge-devel
- centos
yum install munge-devel
* munge-libs
yum install munge-libs
* python
yum install python3
* readline-devel
yum install readline-devel
* perl(ExtUtils::MakeMaker)
yum install perl-ExtUtils-MakeMaker
* pam-devel
yum install pam-devel
configure: error: no acceptable C compiler found in $PATH
이런 에러가 나온다면,
yum install -y gcc-c++
파일을 찾을 수 없음: /root/rpmbuild/BUILDROOT/slurm-20.11.9-1.el7.x86_64/usr/lib64/slurm/accounting_storage_mysql.so
이런 에러가 나온다면,
rpmbuild -ta slurm*.tar.bz2 --with mysql
명령 실행 했는데,
mysql-devel >= 5.0.0 is needed by slurm-20.11.9-1.el7.x86_64
이런 에러가 나온다면
yum install mysql-devel
(밑에 내용은 당장은 안해도 된다.)
이후 mysql도 사용해야하니 하는 김에
mysql 설치(url은 각자 OS 버전에 맞는 걸로 바꿔야함.)
yum install https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
yum install mysql-server
다시 설치 진행
rpmbuild -ta slurm*.tar.bz2 --with mysql
정상적으로 실행될 경우
작성: /root/rpmbuild/SRPMS/slurm-20.11.9-1.el7.src.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-perlapi-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-devel-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-example-configs-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-slurmctld-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-slurmd-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-slurmdbd-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-libpmi-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-torque-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-openlava-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-contribs-20.11.9-1.el7.x86_64.rpm
작성: /root/rpmbuild/RPMS/x86_64/slurm-pam_slurm-20.11.9-1.el7.x86_64.rpm
rpm 파일들 생성된다.
모든 노드에 rpm 파일 scp로 전달하여 다 설치하면 된다.
yum --nogpgcheck localinstall /root/rpmbuild/RPMS/x86_64/slurm-devel-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-example-configs-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-slurmctld-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-slurmdbd-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-libpmi-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-torque-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-openlava-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-contribs-20.11.9-1.el7.x86_64.rpm /root/rpmbuild/RPMS/x86_64/slurm-pam_slurm-20.11.9-1.el7.x86_64.rpm
slurm 버전 같은거 쓴다면 위에 내용 복사해서 붙이면 다 설치된다.
* slurm 셋팅
/usr/share/doc/slurm-18.08.8/html/configurator.easy.html // 접속해서 값 입력한다. slurm 버전에 맞게 주소 바꿔줘야 한다.
나는 file:///usr/share/doc/slurm-20.11.9/html/configurator.easy.html 여기다. (20.11.9 버전)
다 작성한 후에 submit을 누르면
페이지가 바뀌고 내가 입력한 값들을 보여주는데
이 내용을 전체 복사해서
/etc/slurm/slurm.conf (ovewriting the old file)
위의 파일을 만들어 붙여넣기 한 후 저장해주면 된다.
그리고 단일 노드면 상관없지만 다른 노드가 있는 경우에는
해당 파일을 모든 노드에 옮겨주면 된다.
https://dlwjdwls90.tistory.com/54 참고.
* slurm 설치 전 설치해야 할 것들.
- munge
위에서 이미 다 설치가 되어 있을 거다.
munge는 인증키?를 만들어주는 프로그램이라고 보면 될 것 같고,
키 만드는 방법을 알려주겠다.
yum install rng-tools -y
rngd -r /dev/urandom
/usr/sbin/create-munge-key -r
이렇게 하면 /etc/munge/munge.key가 만들어질건데,
해당 키를 scp 명령을 사용하여 모든 노드로 보내주면 된다.
그리고 나서 다음과 같이
소유권을 바꿔주지 않으면 systemctl로 실행했을 때 실행 안되는 경우가 있을거다.
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
여기서 munge 계정이
/etc/passwd에 있는지 확인해야하고,
만약 없다면,
munge:x:971:970:Runs Uid 'N' Gid Emporium:/var/run/munge:/sbin/nologin
해당 내용을 붙여넣으면 된다.
추가로
yum install openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad -y
해당 명령을 실행해서 관련 패키지들을 설치해주자. 설치 안되는건 일단 넘어가도 된다.
* 서버노드
이제 서버 node에서 slurmctld를 실행할건데,
systemctl enable slurmctld.service
systemctl start slurmctld.service
systemctl status slurmctld.service
.service는 빼도 된다.
만약 아래와 같은 에러가 뜬다면,
cat /etc/passwd | grep slurm
커맨드를 입력했을 때 아무 결과 값이 없는 경우가 있다.
그럴 때 slurm 계정을 추가해주면 된다.
slurm:x:1997:1997:SLURM workload manager:/var/lib/slurm:/bin/bash
위의 내용은 /etc/passwd에 넣어주자.
그리고 다시 실행하면 될 거다.
위처럼 되면 정상 실행된 거다.
아니면
scontrol show nodes
이렇게 나와도 된거다.
mkdir /var/spool/slurmctld
chown slurm: /var/spool/slurmctld
chmod 755 /var/spool/slurmctld
touch /var/log/slurmctld.log
chown slurm: /var/log/slurmctld.log
touch /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
chown slurm: /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
위의 명령은 로그 파일 만들어지는 경로를 설정해 주는건데,
slurm.conf에 해당 내용을 넣는 곳이 있다.
* computenode
systemctl enable slurmd.service
systemctl start slurmd.service
systemctl status slurmd.service
.service는 빼도 된다.
computenode에서는 아래와 같은 에러가 발생했는데,
이 경우는 /etc/slurm/slurm.conf에 COMPUTE NODES에 정보가 잘못 입력된 경우다.
오타 등이 없는지 확인해보자.
위에 사진에서 보면, 첫줄의 NodeName= 과 둘째줄의 Nodes= 가 다르게 입력되어 있었다.
이렇게 되면 서버노드도 정상 작동하지 않을 수 있으니 참고하자.
정상 실행됐다면
위처럼 나온다.
mkdir /var/spool/slurmd
chown slurm: /var/spool/slurmd
chmod 755 /var/spool/slurmd
touch /var/log/slurmd.log
chown slurm: /var/log/slurmd.log
위의 내용은 로그파일 만드는 설정이고,
역시나 slurm.conf에 해당 내용 넣는 곳이 있다.
위에 서버 설정에서 잘 찾아보자.
* 추가로 발생했던 에러들.
서버노드는 정상 실행이 됐었는데,
computenode에 slurmd가 실행이 안돼서
로그 파일을 열어보니,
error: Node configuration differs from hardware: CPUs=1:2(hw) Boards=1:1(hw) SocketsPerBoard=1:2(hw) CoresPerSocket=1:1(hw) ThreadsPerCore=1:1(hw)
이런 에러가 발생하는 모습을 볼 수 있었다.
딱 봐도 뭔가 하드웨어적인 설정 문제로 보여서 찾아보니,
computenode에 /etc/slurm 경로에
cgroup.conf와 cgroup_allowed_devices_file.conf를 추가해주니 됐다.
// cgroup.conf
CgroupMountpoint="/sys/fs/cgroup"
CgroupAutomount=yes
CgroupReleaseAgentDir="/etc/slurm/cgroup"
AllowedDevicesFile="/etc/slurm/cgroup_allowed_devices_file.conf"
ConstrainCores=no
TaskAffinity=no
ConstrainRAMSpace=yes
ConstrainSwapSpace=no
ConstrainDevices=no
AllowedRamSpace=100
AllowedSwapSpace=0
MaxRAMPercent=100
MaxSwapPercent=100
MinRAMSpace=30
// cgroup_allowed_devices_file.conf
/dev/null
/dev/urandom
/dev/zero
/dev/sda*
/dev/cpu/*/*
/dev/pts/*
해당 내용들 추가해주면 문제가 해결됐다.
이렇게 2주 정도? 고생해서 slurm 설치를 끝냈다.
실제로는 2~3일정도 소요된거 같다..
이후에 slurm을 어떻게 쓰는 건지에 대해 공부하고
정리해보려 한다.
해당 글을 순서대로 쭉 따라하면
설치하는데 문제 없을 거다.
다들 성공하길 바란다...
'Cluster > Slurm' 카테고리의 다른 글
slurm_load_partitions: Unable to contact slurm controller (connect failure) (0) | 2023.09.11 |
---|---|
slurm computenode | sinfo: error: get_addr_info: getaddrinfo() failed: Name or service not known error (0) | 2023.09.11 |
slurm 설치해보기(3) (0) | 2023.08.08 |
Slurm 설치해보기(2) (0) | 2023.08.08 |
Slurm 설치 해보기(1) (0) | 2023.08.07 |