サブシステムをクラスタ化しようとしてちょっとハマった。
メインシステムはほぼ同じスペックで各ノード256GBメモリを積んでおり、特に問題なくSlurmがインストールできて
NODELIST NODES PARTITION STATE CPUS S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON node3-a6 1 work* idle 48 1:24:2 256000 0 1 (null) none node4-a6 1 work* idle 48 1:24:2 256000 0 1 (null) none node5-a6 1 work* idle 48 1:24:2 256000 0 1 (null) none
こんな感じ。
ところが寄せ集めのサブシステムではなんだかうまくいかず、
NODELIST NODES PARTITION STATE CPUS S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON node6-x2110 1 work* drained 8 1:4:2 32000 0 1 (null) Low RealMemory node7-r620 1 work* idle 32 2:8:2 96000 0 1 (null) none
このようにLowRealMemoryというエラーがついてstateがdrainedとなってしまう。
問題のノードの実メモリは
$ cat /proc/meminfo MemTotal: 32583320 kB MemFree: 31144288 kB MemAvailable: 31471072 kB Buffers: 4664 kB Cached: 686380 kB SwapCached: 0 kB Active: 177208 kB Inactive: 918404 kB Active(anon): 2884 kB Inactive(anon): 425188 kB Active(file): 174324 kB Inactive(file): 493216 kB Unevictable: 25072 kB Mlocked: 21984 kB SwapTotal: 8241148 kB SwapFree: 8241148 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 411780 kB Mapped: 235504 kB Shmem: 19008 kB KReclaimable: 53572 kB Slab: 124156 kB SReclaimable: 53572 kB SUnreclaim: 70584 kB KernelStack: 7296 kB PageTables: 23696 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 24532808 kB Committed_AS: 2863272 kB VmallocTotal: 34359738367 kB VmallocUsed: 84148 kB VmallocChunk: 0 kB Percpu: 5248 kB HardwareCorrupted: 0 kB AnonHugePages: 116736 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB FileHugePages: 0 kB FilePmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 202340 kB DirectMap2M: 6031360 kB DirectMap1G: 27262976 kB
ということで32GBなので32000 (MB)として/etc/slurm/slurm.confで
# COMPUTE NODES NodeName=node6-x2110 CPUs=8 Sockets=1 CoresPerSocket=4 ThreadsPerCore=2 RealMemory=32000 State=UNKNOWN NodeName=node7-r620 CPUs=32 Sockets=2 CoresPerSocket=8 ThreadsPerCore=2 RealMemory=96000 State=UNKNOWN PartitionName=work Nodes=ALL OverSubscribe=FORCE Default=YES MaxTime=INFINITE State=UP
というふうに設定したのだが。
slurmd -Cというコマンドでどういうふうに認識されているかを見る方法があるということなので
$ slurmd -C NodeName=node6-x2110 CPUs=8 Boards=1 SocketsPerBoard=1 CoresPerSocket=4 ThreadsPerCore=2 RealMemory=31819 UpTime=0-00:53:14
おやおや?31819と認識されているよ?
ってことで実際に載せているメモリよりちょっと小さめに設定しておくのが吉らしい。
RealMemory=30000
としてやり、
$ sudo systemctl stop slurmctld $ sudo systemctl stop slurmd $ sudo systemctl start slurmd $ sudo systemctl start slurmctld
さらに
$ sudo scontrol reconfigure $ sudo scontrol update nodename=node6-x2110 state=resume
としてやってようやく
$ sinfo -N -l NODELIST NODES PARTITION STATE CPUS S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON node6-x2110 1 work* idle 8 1:4:2 30000 0 1 (null) none node7-r620 1 work* idle 32 2:8:2 95000 0 1 (null) none
無事使えるようになった。