Dokumen ini menjelaskan cara mengonfigurasi tugas Batch dengan tugas yang terkait erat yang berkomunikasi satu sama lain di berbagai VM dengan menggunakan library Message Passing Interface (MPI).
Untuk tugas Batch,
penggabungan
menjelaskan tugas interdependensi; hal ini memengaruhi cara Anda mengonfigurasi jumlah
tugas yang dapat berjalan secara paralel (bukan secara berurutan) menggunakan
kolom parallelism
tugas.
Tugas dapat dijelaskan menggunakan jenis pengaitan berikut:
- Tugas yang dikaitkan secara longgar: tugas yang dapat berjalan secara independen.
- Tugas yang terkait erat: tugas yang saling bergantung untuk dijalankan.
Atau, Anda dapat membuat tugas yang menggunakan library MPI untuk memungkinkan tugas yang terikat rapat berkomunikasi satu sama lain di berbagai instance VM. Kasus penggunaan umum untuk MPI adalah workload komputasi berperforma tinggi (HPC) yang dikaitkan erat.
Sebelum memulai
- Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
-
Untuk mendapatkan izin yang diperlukan untuk membuat tugas, minta administrator untuk memberi Anda peran IAM berikut:
-
Batch Job Editor (
roles/batch.jobsEditor
) di project -
Pengguna Akun Layanan (
roles/iam.serviceAccountUser
) di akun layanan tugas, yang secara default adalah akun layanan Compute Engine default
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
-
Batch Job Editor (
- Jika Anda menentukan jaringan untuk tugas ini, pastikan jaringan memiliki aturan firewall yang mengizinkan koneksi antar-VM tugas. Pelajari cara Mengonfigurasi aturan firewall VPC untuk kasus penggunaan umum.
Membuat dan menjalankan tugas yang menggunakan MPI untuk tugas yang terkait erat
Bagian ini memberikan contoh cara membuat tugas yang dapat menggunakan MPI. Secara khusus, contoh tugas memiliki 3 runnable:
- Yang pertama dapat dijalankan adalah skrip yang menyiapkan tugas untuk MPI dengan menonaktifkan multithreading simultan dan menginstal Intel MPI.
- Runnable kedua adalah
barrier runnable
kosong (diformat sebagai
{ "barrier": {} }
), yang memastikan bahwa semua tugas selesai menyiapkan MPI sebelum melanjutkan ke runnable mendatang. - Runnable ketiga (dan runnable berikutnya) tersedia untuk workload tugas.
Anda dapat membuat tugas yang menggunakan MPI untuk tugas yang terikat erat menggunakan gcloud CLI atau Batch API.
gcloud
Untuk membuat tugas skrip yang menggunakan MPI untuk tugas yang terikat erat menggunakan gcloud CLI, lakukan hal berikut:
Buat file konfigurasi JSON dengan konten berikut:
{ "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 } ] }
Ganti kode berikut:
SCRIPT
: skrip yang dapat dijalankan untuk beban kerja yang menggunakan MPI.TASK_COUNT
: jumlah tugas untuk tugas. Nilai harus berupa bilangan bulat antara1
dan batas tugas per grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini diperlukan dan harus ditetapkan ke2
atau yang lebih tinggi.TASK_COUNT_PER_NODE
: jumlah tugas yang dapat dijalankan secara serentak oleh tugas di instance VM. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini diperlukan dan harus ditetapkan ke1
, yang sama dengan menjalankan satu instance VM per tugas.REQUIRE_HOSTS_FILE
: jika ditetapkan ketrue
, tugas akan membuat file yang mencantumkan instance VM yang berjalan dalam grup tugas. Jalur file disimpan dalam variabel lingkunganBATCH_HOSTS_FILE
. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke benar (true).PERMISSIVE_SSH
: jika ditetapkan ketrue
, Batch akan mengonfigurasi SSH untuk mengizinkan komunikasi tanpa sandi di antara instance VM yang berjalan dalam grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke benar.
Untuk membuat tugas, gunakan perintah
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ganti kode berikut:
JOB_NAME
: nama tugas.LOCATION
: lokasi tugas.JSON_CONFIGURATION_FILE
: jalur untuk file JSON dengan detail konfigurasi tugas.
Secara opsional, Anda dapat meningkatkan performa library MPI yang disediakan oleh Batch dengan melakukan hal berikut:
- Buat dan jalankan tugas menggunakan template instance VM dan tentukan template instance VM yang siap digunakan dengan HPC di resource tugas Anda.
- Tentukan Cloud Logging sebagai tujuan untuk informasi logging tugas Anda di resource tugas.
Misalnya, untuk membuat tugas skrip dari template instance yang menggunakan MPI dan membuat 1 tugas menghasilkan nama host dari 3 tugas dalam grup tugas:
Buat file JSON di direktori saat ini bernama
example-job-uses-mpi.json
dengan konten berikut:{ "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" } }
Jalankan perintah berikut:
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Untuk membuat tugas skrip yang menggunakan MPI untuk tugas yang terikat erat menggunakan
Batch API, gunakan
metode jobs.create
dan tentukan kolom permissiveSsh
, requireHostsFile
, taskCount
, dan
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
}
]
}
Ganti kode berikut:
PROJECT_ID
: Project ID project Anda.LOCATION
: lokasi tugas.JOB_NAME
: nama tugas.SCRIPT
: skrip yang dapat dijalankan untuk beban kerja yang menggunakan MPI.TASK_COUNT
: jumlah tugas untuk tugas. Nilainya harus berupa bilangan bulat antara1
dan batas tugas per grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini diperlukan dan harus ditetapkan ke2
atau yang lebih tinggi.TASK_COUNT_PER_NODE
: jumlah tugas yang dapat dijalankan secara serentak oleh tugas di instance VM. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini diperlukan dan harus ditetapkan ke1
, yang sama dengan menjalankan satu instance VM per tugas.REQUIRE_HOSTS_FILE
: jika disetel ketrue
, tugas akan membuat file yang mencantumkan instance VM yang berjalan dalam grup tugas. Jalur file disimpan dalam variabel lingkunganBATCH_HOSTS_FILE
. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke benar.PERMISSIVE_SSH
: jika ditetapkan ketrue
, Batch akan mengonfigurasi SSH untuk mengizinkan komunikasi tanpa sandi di antara instance VM yang berjalan dalam grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke benar.
Secara opsional, Anda dapat meningkatkan performa library MPI yang disediakan oleh Batch dengan melakukan hal berikut:
- Buat dan jalankan tugas menggunakan template instance VM dan tentukan template instance VM yang siap digunakan dengan HPC di resource tugas Anda.
- Tentukan Cloud Logging sebagai tujuan untuk informasi logging tugas Anda di resource tugas.
Misalnya, untuk membuat tugas skrip dari template instance yang menggunakan MPI dan membuat 1 tugas menghasilkan nama host dari 3 tugas dalam grup tugas, gunakan permintaan berikut:
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"
}
}
dengan PROJECT_ID
adalah
project ID
project Anda.
Langkah selanjutnya
- Untuk contoh tugas yang menggunakan MPI untuk tugas yang terikat erat secara lebih mendetail, lihat Menjalankan model Penelitian dan Prakiraan Cuaca dengan Batch.
- Pelajari cara mengurangi latensi untuk tugas dengan tugas yang terkait erat.
- Jika Anda mengalami masalah saat membuat atau menjalankan tugas, lihat Pemecahan masalah.
- Lihat tugas dan pekerjaan.
- Pelajari opsi pembuatan tugas lainnya.