Slurm을 사용하여 다중 노드 MPI 작업 실행 AWS PCS - AWS PCS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Slurm을 사용하여 다중 노드 MPI 작업 실행 AWS PCS

이 지침은 Slurm을 사용하여 에서 메시지 전달 인터페이스 () 작업을 실행하는 방법을 보여줍니다. MPI AWS PCS

로그인 노드의 셸 프롬프트에서 다음 명령을 실행합니다.

  • 기본 사용자가 되세요. 홈 디렉터리로 변경합니다.

    sudo su - ec2-user cd ~/
  • C 프로그래밍 언어로 소스 코드를 생성합니다.

    cat > hello.c << EOF // * mpi-hello-world - https://www.mpitutorial.com // Released under MIT License // // Copyright (c) 2014 MPI Tutorial. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. #include <mpi.h> #include <stdio.h> #include <stddef.h> int main(int argc, char** argv) { // Initialize the MPI environment. The two arguments to MPI Init are not // currently used by MPI implementations, but are there in case future // implementations might need the arguments. MPI_Init(NULL, NULL); // Get the number of processes int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); // Get the rank of the process int world_rank; MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); // Get the name of the processor char processor_name[MPI_MAX_PROCESSOR_NAME]; int name_len; MPI_Get_processor_name(processor_name, &name_len); // Print off a hello world message printf("Hello world from processor %s, rank %d out of %d processors\n", processor_name, world_rank, world_size); // Finalize the MPI environment. No more MPI calls can be made after this MPI_Finalize(); } EOF
  • Open MPI 모듈을 로드합니다.

    module load openmpi
  • C 프로그램을 컴파일합니다.

    mpicc -o hello hello.c
  • Slurm 작업 제출 스크립트를 작성하세요.

    cat > hello.sh << EOF #!/bin/bash #SBATCH -J multi #SBATCH -o multi.out #SBATCH -e multi.err #SBATCH --exclusive #SBATCH --nodes=4 #SBATCH --ntasks-per-node=1 srun $HOME/hello EOF
  • 공유 디렉터리로 변경합니다.

    cd /shared
  • 작업 스크립트를 제출합니다.

    sbatch -p demo ~/hello.sh
  • 작업이 완료될 때까지 작업을 모니터링하는 squeue 데 사용합니다.

  • multi.out다음 내용을 확인하세요.

    cat multi.out

    출력 결과는 다음과 비슷합니다. 참고로 각 랭크는 다른 노드에서 실행되었으므로 고유한 IP 주소를 가집니다.

    Hello world from processor ip-10-3-133-204, rank 0 out of 4 processors
    Hello world from processor ip-10-3-128-219, rank 2 out of 4 processors
    Hello world from processor ip-10-3-141-26, rank 3 out of 4 processors
    Hello world from processor ip-10-3-143-52, rank 1 out of 4 processor