이 문서에서는 메시지 전달 인터페이스(MPI) 라이브러리를 사용하여 서로 다른 VM 간에 서로 통신하는 긴밀하게 결합된 태스크로 Batch 작업을 구성하는 방법을 설명합니다.
Batch 작업에서 결합은 상호 종속성 태스크를 설명합니다. 이 태스크는 작업의 parallelism
필드를 사용하여 순차적인 방식 대신 병렬로 실행할 수 있는 태스크 수를 구성하는 방법에 영향을 줍니다.
다음 유형의 결합을 사용하여 태스크를 설명할 수 있습니다.
- 느슨하게 결합된 태스크: 독립적으로 실행될 수 있는 태스크입니다.
- 긴밀하게 결합된 태스크: 실행되기 위해 서로 종속된 태스크입니다.
원하는 경우, 긴밀하게 결합된 태스크가 서로 다른 VM 인스턴스에서 서로 통신할 수 있도록 MPI 라이브러리를 사용하는 작업을 만들 수 있습니다. MPI의 일반적인 사용 사례는 긴밀하게 결합된 고성능 컴퓨팅(HPC) 워크로드입니다.
시작하기 전에
- Batch를 사용한 적이 없으면 Batch 시작하기를 검토하고 프로젝트 및 사용자 기본 요건을 완료하여 Batch를 사용 설정하세요.
-
작업을 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
프로젝트에 대한 일괄 작업 편집자(
roles/batch.jobsEditor
) -
기본적으로 기본 Compute Engine 서비스 계정인 작업의 서비스 계정에 대한 서비스 계정 사용자(
roles/iam.serviceAccountUser
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
-
프로젝트에 대한 일괄 작업 편집자(
- 이 작업의 네트워크를 지정하는 경우 네트워크에 작업의 VM 간 연결을 허용하는 방화벽 규칙이 있는지 확인합니다. 일반적인 사용 사례에 대한 VPC 방화벽 규칙 구성 방법에 대해 알아보세요.
긴밀하게 결합된 태스크에 대해 MPI를 사용하는 작업 만들기 및 실행
이 섹션에서는 MPI를 사용할 수 있는 작업을 만드는 방법에 대한 예시를 제공합니다. 특히 예시 작업에는 3개의 실행 가능 항목이 포함됩니다.
- 첫 번째 실행 가능 항목은 동시 멀티스레딩을 사용 중지하고 Intel MPI를 설치하여 MPI에 대한 작업을 준비하는 스크립트입니다.
- 두 번째 실행 가능 항목은 빈 실행 가능한 장벽(
{ "barrier": {} }
형식)으로 이후 실행 가능 항목으로 계속되기 전에 모든 태스크가 MPI 설정을 완료하도록 보장합니다. - 세 번째 실행 가능 항목(및 이후 실행 가능 항목)은 작업 워크로드에 사용 가능합니다.
gcloud CLI 또는 Batch API를 사용하여 긴밀하게 결합된 작업에 MPI를 사용하는 작업을 만들 수 있습니다.
gcloud
gcloud CLI를 사용하여 긴밀하게 결합된 작업에 MPI를 사용하는 스크립트 작업을 만들려면 다음을 수행하세요.
다음 콘텐츠로 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로 설정해야 합니다.
그룹을 만들려면
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 라이브러리의 성능을 늘릴 수 있습니다.
- VM 인스턴스 템플릿을 사용하여 작업 만들기 및 실행을 수행하고 작업 리소스에 HPC 지원 VM 인스턴스 템플릿을 지정합니다.
- 작업 리소스에 작업 로깅 정보의 대상으로 Cloud Logging을 지정합니다.
예를 들어 MPI를 사용하고 태스크 그룹의 3개 태스크의 호스트 이름을 태스크 출력 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" } }
다음 명령어를 실행합니다.
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
: 프로젝트의 프로젝트 IDLOCATION
: 작업의 위치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 라이브러리의 성능을 늘릴 수 있습니다.
- VM 인스턴스 템플릿을 사용하여 작업 만들기 및 실행을 수행하고 작업 리소스에 HPC 지원 VM 인스턴스 템플릿을 지정합니다.
- 작업 리소스에 작업 로깅 정보의 대상으로 Cloud Logging을 지정합니다.
예를 들어 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입니다.
다음 단계
- 긴밀하게 결합된 태스크에 MPI를 사용하는 작업의 자세한 예시는 Batch를 사용하여 날씨 연구 및 예측 모델 실행 참조하기
- 밀접하게 결합된 태스크가 있는 작업의 지연 시간을 줄이는 방법을 알아보세요.
- 작업을 만들거나 실행하는 데 문제가 있는 경우 문제 해결을 참조하기
- 작업 및 태스크 보기
- 작업 만들기 옵션 자세히 알아보기