24장. HPC 환경에서 Podman 사용
Podman을 Open MPI(Message Passing Interface)와 함께 사용하여 HPC(고성능 컴퓨팅) 환경에서 컨테이너를 실행할 수 있습니다.
24.1. MPI로 Podman 사용
이 예제는 Open MPI에서 가져온 ring.c 프로그램을 기반으로 합니다. 이 예에서 값은 링과 유사한 방식으로 모든 프로세스에 전달됩니다. 메시지가 순위 0을 통과할 때마다 값이 감소됩니다. 각 프로세스에 0 메시지가 수신되면 해당 메시지를 다음 프로세스로 전달한 다음 종료합니다. 0을 먼저 전달하면 모든 프로세스가 0 메시지를 가져오고 정상적으로 종료될 수 있습니다.
사전 요구 사항
-
container-tools
모듈이 설치되어 있습니다.
절차
열기 MPI를 설치합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow yum install openmpi
# yum install openmpi
환경 모듈을 활성화하려면 다음을 입력합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow . /etc/profile.d/modules.sh
$ . /etc/profile.d/modules.sh
mpi/openmpi-x86_64
모듈을 로드합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow module load mpi/openmpi-x86_64
$ module load mpi/openmpi-x86_64
선택적으로
mpi/openmpi-x86_64
모듈을 자동으로 로드하려면 다음 행을.bashrc
파일에 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo "module load mpi/openmpi-x86_64" >> .bashrc
$ echo "module load mpi/openmpi-x86_64" >> .bashrc
mpirun
과podman
을 결합하려면 다음 정의를 사용하여 컨테이너를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat Containerfile FROM registry.access.redhat.com/ubi8/ubi RUN yum -y install openmpi-devel wget && \ yum clean all yum clean all RUN wget https://raw.githubusercontent.com/open-mpi/ompi/master/test/simple/ring.c && \ /usr/lib64/openmpi/bin/mpicc ring.c -o /home/ring && \ /usr/lib64/openmpi/bin/mpicc ring.c -o /home/ring && \ rm -f ring.c rm -f ring.c
$ cat Containerfile FROM registry.access.redhat.com/ubi8/ubi RUN yum -y install openmpi-devel wget && \ yum clean all RUN wget https://raw.githubusercontent.com/open-mpi/ompi/master/test/simple/ring.c && \ /usr/lib64/openmpi/bin/mpicc ring.c -o /home/ring && \ rm -f ring.c
컨테이너를 빌드합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman build --tag=mpi-ring .
$ podman build --tag=mpi-ring .
컨테이너를 시작합니다. CPU 4개가 있는 시스템에서 이 명령은 컨테이너 4개를 시작합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mpirun \ --mca orte_tmpdir_base /tmp/podman-mpirun \ podman run --env-host \ -v /tmp/podman-mpirun:/tmp/podman-mpirun \ --userns=keep-id \ --net=host --pid=host --ipc=host \ mpi-ring /home/ring
$ mpirun \ --mca orte_tmpdir_base /tmp/podman-mpirun \ podman run --env-host \ -v /tmp/podman-mpirun:/tmp/podman-mpirun \ --userns=keep-id \ --net=host --pid=host --ipc=host \ mpi-ring /home/ring Rank 2 has cleared MPI_Init Rank 2 has completed ring Rank 2 has completed MPI_Barrier Rank 3 has cleared MPI_Init Rank 3 has completed ring Rank 3 has completed MPI_Barrier Rank 1 has cleared MPI_Init Rank 1 has completed ring Rank 1 has completed MPI_Barrier Rank 0 has cleared MPI_Init Rank 0 has completed ring Rank 0 has completed MPI_Barrier
결과적으로
mpirun
은 4개의 Podman 컨테이너를 시작하고 각 컨테이너에서링
바이너리 인스턴스 하나를 실행합니다. 4개의 프로세스는 모두 MPI를 통해 서로 통신합니다.
추가 리소스