'2020/12/23'에 해당되는 글 3건

  1. 2020.12.23 slurm.conf 과 cpu 코어 1
  2. 2020.12.23 slurm 먼가 까다롭네... 3
  3. 2020.12.23 slurm.conf 생성기
프로그램 사용/openHPC2020. 12. 23. 17:07

결론만 말하자면, virtualbox에서 가상 cpu의 갯수는 아래의 곱으로 설정을 해주어야 한다.

물리 서버에서 한다면 하이퍼 쓰레드랑 고려해서 적절하게 해주면 될 듯.

 

 

아래의 값이 기본값인데 openhpc 에서는 좀 높게 설정하네?

Sockets=1 CoresPerSocket=1 ThreadsPerCore=1

 

/etc/slurm/slurm.conf.ohpc

Sockets=2 CoresPerSocket=8 ThreadsPerCore=2

 

Socket은 TCP랑은 1도 상관없는 물리적인 CPU 소켓 갯수를 의미한다.

요즘 추세야 1cpu 멀티코어니까 1로 해도 무방할듯하고

 

CoresPerSocket은 1개 물리 CPU에 들어있는 physical CPU의 갯수

 

ThreadsPerCore는 intel 기준 HT 사용시 2로 1개 코어에서 사용하는 쓰레드 갯수를 의미한다.

 

Sockets
Number of physical processor sockets/chips on the node (e.g. "2"). If Sockets is omitted, it will be inferred from CPUs, CoresPerSocket, and ThreadsPerCore. NOTE: If you have multi-core processors, you will likely need to specify these parameters. Sockets and SocketsPerBoard are mutually exclusive. If Sockets is specified when Boards is also used, Sockets is interpreted as SocketsPerBoard rather than total sockets. The default value is 1.

CoresPerSocket
Number of cores in a single physical processor socket (e.g. "2"). The CoresPerSocket value describes physical cores, not the logical number of processors per socket. NOTE: If you have multi-core processors, you will likely need to specify this parameter in order to optimize scheduling. The default value is 1.

ThreadsPerCore
Number of logical threads in a single physical core (e.g. "2"). Note that the Slurm can allocate resources to jobs down to the resolution of a core. If your system is configured with more than one thread per core, execution of a different job on each thread is not supported unless you configure SelectTypeParameters=CR_CPU plus CPUs; do not configure Sockets, CoresPerSocket or ThreadsPerCore. A job can execute a one task per thread from within one job step or execute a distinct job step on each of the threads. Note also if you are running with more than 1 thread per core and running the select/cons_res or select/cons_tres plugin then you will want to set the SelectTypeParameters variable to something other than CR_CPU to avoid unexpected results. The default value is 1.

[링크 : https://slurm.schedmd.com/slurm.conf.html]

 


CPUs: Count of processors on each compute node. If CPUs is omitted, it will be inferred from: Sockets, CoresPerSocket, and ThreadsPerCore.

 Sockets: Number of physical processor sockets/chips on the node. If Sockets is omitted, it will be inferred from: CPUs, CoresPerSocket, and ThreadsPerCore.

 CoresPerSocket: Number of cores in a single physical processor socket. The CoresPerSocket value describes physical cores, not the logical number of processors per socket.

 ThreadsPerCore: Number of logical threads in a single physical core.

[링크 : https://slurm.schedmd.com/configurator.html]

'프로그램 사용 > openHPC' 카테고리의 다른 글

xcat 는 arm 미지원  (0) 2020.12.28
xcat stateful, stateless  (0) 2020.12.28
slurm 먼가 까다롭네...  (3) 2020.12.23
slurm.conf 생성기  (0) 2020.12.23
openhpc, slurm 시도..  (0) 2020.12.22
Posted by 구차니
프로그램 사용/openHPC2020. 12. 23. 10:22

수동으로 막 서비스 올리고 쑈를 해야지 먼가 돌아가는 척 하는 것 같은데

 

일단은 먼가 이제야 실행을 하려고 하나보다 싶은 느낌..

# srun mpi_hello_world
srun: error: openhpc-1: task 0: Exited with exit code 2
slurmstepd: error: couldn't chdir to `/root/src/mpitutorial/tutorials/mpi-hello-world/code': No such file or directory: going to /tmp instead
slurmstepd: error: execve(): mpi_hello_world: No such file or directory

 

헐...?!?!?

vnfs를 다시 만들어야 하게 생겼네 ㅠㅠ

# srun mpi_hello_world
srun: error: openhpc-1: task 0: Exited with exit code 127
mpi_hello_world: error while loading shared libraries: libmpi.so.40: cannot open shared object file: No such file or directory

 

크흡.. 너무 최신버전으로 빌드했나 ㅠㅠ

# find / -name libmpi*
find: '/proc/sys/fs/binfmt_misc': No such device
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpi.a
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpi.so
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpi.so.12
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpi.so.12.1.8
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpich.so
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpichcxx.so
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpichf90.so
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpicxx.a
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpicxx.so
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpicxx.so.12
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpicxx.so.12.1.8
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpifort.a
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpifort.so
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpifort.so.12
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpifort.so.12.1.8

 

+

# cat makefile
EXECS=mpi_hello_world
MPICC?=mpicc

all: ${EXECS}

mpi_hello_world: mpi_hello_world.c
        ${MPICC} -o mpi_hello_world mpi_hello_world.c /opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpi.so.12.1.8

clean:
        rm -f ${EXECS}

 

링크된 파일을 보는데 not found 흐음...

# ldd mpi_hello_world
        linux-vdso.so.1 (0x00007ffeeb74c000)
        libmpi.so.12 => not found
        libmpi.so.40 => /usr/local/lib/libmpi.so.40 (0x00007f75294fc000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f75292dc000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f7528f19000)
        libopen-rte.so.40 => /usr/local/lib/libopen-rte.so.40 (0x00007f7528c63000)
        libopen-pal.so.40 => /usr/local/lib/libopen-pal.so.40 (0x00007f752895c000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f7528758000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f7528550000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f75281ce000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f7527fca000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f752981f000)

[링크 : https://stackoverflow.com/questions/3384897/]

 

 

+

ldconfig 환경 설정에서 하나 추가해주고 했는데

# cat /etc/ld.so.conf.d/bind-export-x86_64.conf
/usr/lib64//bind9-export/
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/

일단은 mpi가 추가된건 확인

# ldconfig -v | grep mpi
ldconfig: Can't stat /libx32: No such file or directory
ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
ldconfig: Can't stat /usr/libx32: No such file or directory
/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib:
        libmpicxx.so.12 -> libmpicxx.so.12.1.8
        libmpi.so.12 -> libopa.so
        libmpifort.so.12 -> libmpifort.so.12.1.8

이제는 libmpi.so.12는 사라지고 libmpi.so.40이 없다고 나오는군.. 흐음..

$ srun mpi_hello_world
mpi_hello_world: error while loading shared libraries: libmpi.so.40: cannot open shared object file: No such file or directory
srun: error: openhpc-1: task 0: Exited with exit code 127

 

[링크 : https://yongary.tistory.com/45]

[링크 : https://chuls-lee.tistory.com/10]

 

 

 

+

나 앞에서 openmpi 4.0 빌드한다고 왜 쑈했냐...

/opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/bin

 

# ldd mpi_hello_world
        linux-vdso.so.1 (0x00007ffdd4285000)
        libmpi.so.12 => /opt/ohpc/pub/mpi/mpich-ucx-gnu9-ohpc/3.3.2/lib/libmpi.so.12 (0x00007f477fe00000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f477fa3d000)
        libgfortran.so.5 => /lib64/libgfortran.so.5 (0x00007f477f5c0000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f477f23e000)
        libucp.so.0 => /lib64/libucp.so.0 (0x00007f477efdf000)
        libucs.so.0 => /lib64/libucs.so.0 (0x00007f477eda1000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f477eb81000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f477e979000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f477e761000)
        libquadmath.so.0 => /lib64/libquadmath.so.0 (0x00007f477e520000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f4780354000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f477e309000)
        libuct.so.0 => /lib64/libuct.so.0 (0x00007f477e0dd000)
        libnuma.so.1 => /lib64/libnuma.so.1 (0x00007f477ded1000)
        libucm.so.0 => /lib64/libucm.so.0 (0x00007f477dcbb000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f477dab7000)

 

아니 왜 여기서 fortran이 나와 ㅠㅠㅠㅠㅠㅠㅠㅠ

$ srun mpi_hello_world
mpi_hello_world: error while loading shared libraries: libgfortran.so.5: cannot open shared object file: No such file or directory
srun: error: openhpc-1: task 0: Exited with exit code 127

 

 

+ 이 세개만 추가하면 되려나? ㅠㅠ

yum -y --installroot=$CHROOT install libgfortran libquadmath ucx

 

libgfortran.i686 : Fortran runtime
libquadmath-devel.x86_64 : GCC __float128 support
ucx.x86_64 : UCX is a communication library implementing high-performance messaging

[링크 : https://pkgs.org/download/libucp.so.0()(64bit)]

 

 

일단은 실행에 성공한 듯?

다만 nodename에 설정한 이상의 task는 실행할 수 없는 듯?(-n)

NodeName=openhpc-[1-2] Sockets=1 CoresPerSocket=1 ThreadsPerCore=1 State=UNKNOWN

 

아무튼 2개 노드에 1개의 태스크를 하라니 1개는 할당을 못하고 openhpc-1에서만 구동한 것 같고

$ srun -N 2 -n 1 mpi_hello_world
srun: Warning: can't run 1 processes on 2 nodes, setting nnodes to 1
Hello world from processor openhpc-1, rank 0 out of 1 processors

 

2개 노드에 2개 태스크 하라니 openhpc-1,openhpc-2 노드에서 각각 하나씩 실행한 듯.

$ srun -N 2 -n 2 mpi_hello_world
Hello world from processor openhpc-1, rank 0 out of 1 processors
Hello world from processor openhpc-2, rank 0 out of 1 processors

 

다만 2개 노드에 3개 하라니까 그 숫자 이상부터는 task로 할당되는데 실행이 안되는걸 보면 또 설정 문제인가.. ㅠㅠ

$ srun -N 2 -n 3 mpi_hello_world
srun: Requested partition configuration not available now
srun: job 84 queued and waiting for resources
^Csrun: Job allocation 84 has been revoked
srun: Force Terminated job 84

 

slurmd랑 munged가 좀 튀는데..

너무 순식간에 끝나는 애라 그런가 top에 잡히지도 않는다.

 

 

+

서버측의 /var/log/slurmctld.log 를 확인하니

시스템에서 구성된 리소스 보다 크게 잡을순 없다고..

[2020-12-23T02:40:11.527] error: Node openhpc-1 has low socket*core*thread count (1 < 4)
[2020-12-23T02:40:11.527] error: Node openhpc-1 has low cpu count (1 < 4)
[2020-12-23T02:40:11.527] error: _slurm_rpc_node_registration node=openhpc-1: Invalid argument

 

 

+

virtualbox에서 cpu를 4개로 올려주고 설정 바꾸어서 정상작동 확인

$ srun -N 2 -n 4 mpi_hello_world
Hello world from processor openhpc-1, rank 0 out of 1 processors
Hello world from processor openhpc-1, rank 0 out of 1 processors
Hello world from processor openhpc-2, rank 0 out of 1 processors
Hello world from processor openhpc-2, rank 0 out of 1 processors

저 rank는 멀까..

$ srun -N 2 -n 8 mpi_hello_world 
Hello world from processor openhpc-2, rank 0 out of 1 processors 
Hello world from processor openhpc-2, rank 0 out of 1 processors 
Hello world from processor openhpc-1, rank 0 out of 1 processors 
Hello world from processor openhpc-2, rank 0 out of 1 processors 
Hello world from processor openhpc-1, rank 0 out of 1 processors 
Hello world from processor openhpc-1, rank 0 out of 1 processors 
Hello world from processor openhpc-1, rank 0 out of 1 processors 
Hello world from processor openhpc-2, rank 0 out of 1 processors 

 

아무튼 사용 가능한 코어 갯수를 넘어가면 아래와 같이 무기한 대기가 걸려

사실상 실행을 못하게 되는 것 같기도 하다?

$ srun -N 2 -n 12 mpi_hello_world
srun: Requested partition configuration not available now
srun: job 92 queued and waiting for resources
^Csrun: Job allocation 92 has been revoked
srun: Force Terminated job 92

'프로그램 사용 > openHPC' 카테고리의 다른 글

xcat stateful, stateless  (0) 2020.12.28
slurm.conf 과 cpu 코어  (1) 2020.12.23
slurm.conf 생성기  (0) 2020.12.23
openhpc, slurm 시도..  (0) 2020.12.22
openmpi 및 예제  (0) 2020.12.22
Posted by 구차니
프로그램 사용/openHPC2020. 12. 23. 10:12

 

[링크 : https://slurm.schedmd.com/configurator.html]

'프로그램 사용 > openHPC' 카테고리의 다른 글

slurm.conf 과 cpu 코어  (1) 2020.12.23
slurm 먼가 까다롭네...  (3) 2020.12.23
openhpc, slurm 시도..  (0) 2020.12.22
openmpi 및 예제  (0) 2020.12.22
openmpi on centos8  (0) 2020.12.17
Posted by 구차니