4개의 GPU/128개 코어를 갖춘 서버가 있고 워크로드 관리자(slurm)를 사용하여 계산을 위한 사용자 간의 리소스 할당을 관리합니다.
문제는 스케줄러 서버(작업 제출에 사용됨)가 동일한 시스템 (1) 에서 실행되고 있고 사용자가 작업을 제출하기 위해 SSH를 통해 연결하고 있다는 것입니다.
모든 사용자에 대해 리소스 할당(cpu/mem)을 제한하고 싶습니다.SSH 세션 내에서만, 일정 시스템 외부에서 많은 계산을 실행하지 않도록 합니다(그러나 작업 내부에서는 실행할 수 있음).
나는 cgroup을 사용하여 그러한 제한을 달성할 수 있다는 것을 알고 있습니다. 예를 들면 다음과 같습니다.
cgcreate -g memory,cpu:cpulimited
cgset -r cpu.shares=100 cpulimited # limit to ~10% of cpu use
cgset -r memory.limit_in_bytes=$((10*1024*1024*1024)) # limit to 10 GB
이 cgroup 내에서 SSH 세션이 실행되도록 하려면 어떻게 해야 합니까 cpulimited
? 그러나 동시에 나는 slurm이 작업을 시작할 때 (모든 사용자에 대해) 스케줄러가 설정한 제한을 우회하고 싶지 않습니다.
(1) 여러 명의 사용자가 있고 그것이 없으면 지저분하기 때문에 워크로드 관리자가 필요하지만 표준 클러스터와 같이 스케줄링 서버 역할을 할 다른 머신이 없습니다.
답변1
내 문제에 대한 해결책을 찾았으므로 공유합니다.
customssh/limit
cgconfig
libcgroup의 서비스를 사용하여 cgroup을 정의했습니다 . 내 파일에서 발췌한 내용은 다음과 같습니다 cgconfig.conf
.
group customssh/limit {
perm {
admin {
uid=root;
gid=root;
}
task {
uid=myuser;
gid=mygroup;
fperm=775;
}
}
cpu {
cpu.shares=50;
}
memory {
memory.limit_in_bytes="10G";
memory.memsw.limit_in_bytes="10G";
memory.soft_limit_in_bytes="2G";
}
devices {
devices.deny="c 195:* rwm";
}
}
fperm = 775
이 그룹의 사용자가mygroup
이 cgroup을 사용하도록 허용- CPU 및 메모리 사용량에 제한을 적용하고 GPU에 대한 액세스를 거부합니다.
devices.deny="c 195:* rwm";
/etc/profile.d/ssh.sh
다음 내용으로 로그인할 때마다 실행되는 파일을 만들었습니다 .
# check if the user is in a ssh session
if [[ -n $SSH_CONNECTION ]]; then
# shell PID
SESSIONPID=$$
# attach the shell to the `customssh/limit` cgroup
cgclassify -g memory,cpu,devices:customssh/limit $SESSIONPID
# all processes run by this shell will be affected
fi