MPI 라이브러리를 사용하여 태스크 커뮤니케이션 구성

이 문서에서는 메시지 전달 인터페이스(MPI) 라이브러리를 사용하여 서로 다른 VM 간에 서로 통신하는 긴밀하게 결합된 태스크로 Batch 작업을 구성하는 방법을 설명합니다.

Batch 작업에서 결합은 상호 종속성 태스크를 설명합니다. 이 태스크는 작업의 parallelism 필드를 사용하여 순차적인 방식 대신 병렬로 실행할 수 있는 태스크 수를 구성하는 방법에 영향을 줍니다. 다음 유형의 결합을 사용하여 태스크를 설명할 수 있습니다.

  • 느슨하게 결합된 태스크: 독립적으로 실행될 수 있는 태스크입니다.
  • 긴밀하게 결합된 태스크: 실행되기 위해 서로 종속된 태스크입니다.

원하는 경우, 긴밀하게 결합된 태스크가 서로 다른 VM 인스턴스에서 서로 통신할 수 있도록 MPI 라이브러리를 사용하는 작업을 만들 수 있습니다. MPI의 일반적인 사용 사례는 긴밀하게 결합된 고성능 컴퓨팅(HPC) 워크로드입니다.

시작하기 전에

  1. Batch를 사용한 적이 없으면 Batch 시작하기를 검토하고 프로젝트 및 사용자 기본 요건을 완료하여 Batch를 사용 설정하세요.
  2. 작업을 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

    역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

    커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

  3. 이 작업의 네트워크를 지정하는 경우 네트워크에 작업의 VM 간 연결을 허용하는 방화벽 규칙이 있는지 확인합니다. 일반적인 사용 사례에 대한 VPC 방화벽 규칙 구성 방법에 대해 알아보세요.

긴밀하게 결합된 태스크에 대해 MPI를 사용하는 작업 만들기 및 실행

이 섹션에서는 MPI를 사용할 수 있는 작업을 만드는 방법에 대한 예시를 제공합니다. 특히 예시 작업에는 3개의 실행 가능 항목이 포함됩니다.

  • 첫 번째 실행 가능 항목은 동시 멀티스레딩을 사용 중지하고 Intel MPI를 설치하여 MPI에 대한 작업을 준비하는 스크립트입니다.
  • 두 번째 실행 가능 항목은 빈 실행 가능한 장벽({ "barrier": {} } 형식)으로 이후 실행 가능 항목으로 계속되기 전에 모든 태스크가 MPI 설정을 완료하도록 보장합니다.
  • 세 번째 실행 가능 항목(및 이후 실행 가능 항목)은 작업 워크로드에 사용 가능합니다.

gcloud CLI 또는 Batch API를 사용하여 긴밀하게 결합된 작업에 MPI를 사용하는 작업을 만들 수 있습니다.

gcloud

gcloud CLI를 사용하여 긴밀하게 결합된 작업에 MPI를 사용하는 스크립트 작업을 만들려면 다음을 수행하세요.

  1. 다음 콘텐츠로 JSON 구성 파일을 만듭니다.

    {
        "taskGroups": [
            {
                "taskSpec": {
                    "runnables": [
                        {
                            "script": {
                                "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
                            }
                        },
                        { "barrier": {} },
                        {
                            "script": {
                                SCRIPT
                            }
                        }
                    ]
                },
                "taskCount": TASK_COUNT,
                "taskCountPerNode": TASK_COUNT_PER_NODE,
                "requireHostsFile": REQUIRE_HOSTS_FILE,
                "permissiveSsh": PERMISSIVE_SSH
            }
        ]
    }
    

    다음을 바꿉니다.

    • SCRIPT: MPI를 사용하는 워크로드에 실행 가능한 스크립트입니다.
    • TASK_COUNT: 작업의 태스크 수입니다. 이 값은 1태스크 그룹당 태스크 한도 사이의 정수여야 합니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드가 필요하며 2 이상으로 설정해야 합니다.
    • TASK_COUNT_PER_NODE: VM 인스턴스에서 작업이 동시에 실행할 수 있는 태스크 수입니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드가 필요하며 태스크당 하나의 VM 인스턴스를 실행하는 것과 동일한 1로 설정해야 합니다.
    • REQUIRE_HOSTS_FILE: true로 설정하면 태스크 그룹에서 실행되는 VM 인스턴스를 나열하는 파일이 작업으로 생성됩니다. 파일 경로는 BATCH_HOSTS_FILE 환경 변수에 저장됩니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드를 true로 설정해야 합니다.
    • PERMISSIVE_SSH: true로 설정하면 Batch는 태스크 그룹에서 실행 중인 VM 인스턴스 간에 비밀번호가 없는 통신을 허용하도록 SSH를 구성합니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드를 true로 설정해야 합니다.
  2. 그룹을 만들려면 gcloud batch jobs submit 명령어를 사용합니다.

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    다음을 바꿉니다.

    • JOB_NAME: 작업의 이름입니다.
    • LOCATION: 작업의 위치
    • JSON_CONFIGURATION_FILE: 작업의 구성 세부정보가 포함된 JSON 파일의 경로입니다.

선택적으로 다음을 수행하여 Batch에서 제공된 MPI 라이브러리의 성능을 늘릴 수 있습니다.

예를 들어 MPI를 사용하고 태스크 그룹의 3개 태스크의 호스트 이름을 태스크 출력 1개로 만드는 인스턴스 템플릿에서 스크립트 작업을 만들려면 다음 안내를 따르세요.

  1. 현재 디렉터리에 다음 콘텐츠로 example-job-uses-mpi.json이라는 JSON 파일을 만듭니다.

    {
        "taskGroups": [
            {
                "taskSpec": {
                    "runnables": [
                        {
                            "script": {
                                "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
                            }
                        },
                        { "barrier": {} },
                        {
                            "script": {
                                "text":
                                    "if [ $BATCH_TASK_INDEX = 0 ]; then
                                    mpirun -hostfile $BATCH_HOSTS_FILE -np 3 hostname;
                                    fi"
                            }
                        },
                        { "barrier": {} }
                    ]
                },
                "taskCount": 3,
                "taskCountPerNode": 1,
                "requireHostsFile": true,
                "permissiveSsh": true
            }
        ],
        "allocationPolicy": {
            "instances": [
                {
                    "instanceTemplate": "example-template-job-uses-mpi"
                }
            ]
        },
        "logsPolicy": {
            "destination": "CLOUD_LOGGING"
        }
    }
    
  2. 다음 명령어를 실행합니다.

    gcloud batch jobs submit example-template-job-uses-mpi \
      --location us-central1 \
      --config example-job-uses-mpi.json
    

API

Batch API를 사용하여 긴밀하게 결합된 태스크에 MPI를 사용하는 스크립트 작업을 만들려면 jobs.create 메서드를 사용하고 permissiveSsh, requireHostsFile, taskCount, taskCountPerNode 필드를 지정합니다.

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_ID

{
    "taskGroups": [
        {
            "taskSpec": {
                "runnables": [
                    {
                        "script": {
                            "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
                        }
                    },
                    { "barrier": {} },
                    {
                        "script": {
                            SCRIPT
                        }
                    }
                ]
            },
            "taskCount": TASK_COUNT,
            "taskCountPerNode": TASK_COUNT_PER_NODE,
            "requireHostsFile": REQUIRE_HOSTS_FILE,
            "permissiveSsh": PERMISSIVE_SSH
        }
    ]
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트의 프로젝트 ID
  • LOCATION: 작업의 위치
  • JOB_NAME: 작업의 이름입니다.
  • SCRIPT: MPI를 사용하는 워크로드에 실행 가능한 스크립트입니다.
  • TASK_COUNT: 작업의 태스크 수입니다. 이 값은 1태스크 그룹당 태스크 한도 사이의 정수여야 합니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드가 필요하며 2 이상으로 설정해야 합니다.
  • TASK_COUNT_PER_NODE: VM 인스턴스에서 작업이 동시에 실행할 수 있는 태스크 수입니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드가 필요하며 태스크당 하나의 VM 인스턴스를 실행하는 것과 동일한 1로 설정해야 합니다.
  • REQUIRE_HOSTS_FILE: true로 설정하면 태스크 그룹에서 실행되는 VM 인스턴스를 나열하는 파일이 작업으로 생성됩니다. 파일 경로는 BATCH_HOSTS_FILE 환경 변수에 저장됩니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드를 true로 설정해야 합니다.
  • PERMISSIVE_SSH: true로 설정하면 Batch는 태스크 그룹에서 실행 중인 VM 인스턴스 간에 비밀번호가 없는 통신을 허용하도록 SSH를 구성합니다. Batch에서 제공하는 MPI 라이브러리를 사용하려면 이 필드를 true로 설정해야 합니다.

선택적으로 다음을 수행하여 Batch에서 제공된 MPI 라이브러리의 성능을 늘릴 수 있습니다.

예를 들어 MPI를 사용하고 태스크 그룹의 3개 태스크의 호스트 이름을 태스크 출력 1개로 만드는 인스턴스 템플릿에서 스크립트 작업을 만들려면 다음 요청을 사용합니다.

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-template-job-uses-mpi

{
    "taskGroups": [
        {
            "taskSpec": {
                "runnables": [
                    {
                        "script": {
                            "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
                        }
                    },
                    { "barrier": {} },
                    {
                        "script": {
                            "text":
                                "if [ $BATCH_TASK_INDEX = 0 ]; then
                                mpirun -hostfile $BATCH_HOSTS_FILE -np 3 hostname;
                                fi"
                        }
                    },
                    { "barrier": {} }
                ]
            },
            "taskCount": 3,
            "taskCountPerNode": 1,
            "requireHostsFile": true,
            "permissiveSsh": true
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "instanceTemplate": "example-template-job-uses-mpi"
            }
        ]
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

여기서 PROJECT_ID는 프로젝트의 프로젝트 ID입니다.

다음 단계