Dokumen ini menjelaskan cara mengonfigurasi tugas Batch dengan tugas yang terkait erat yang berkomunikasi satu sama lain di berbagai VM menggunakan library Message Passing Interface (MPI).
Untuk tugas Batch,
penggabungan
menjelaskan tugas interdependensi; hal ini memengaruhi cara Anda mengonfigurasi jumlah
tugas yang dapat dijalankan secara paralel (bukan secara berurutan) menggunakan
kolom parallelism
tugas.
Tugas dapat dijelaskan menggunakan jenis pengaitan berikut:
- Tugas yang dikaitkan secara longgar: tugas yang dapat dijalankan secara independen.
- Tugas yang terkait erat: tugas yang saling bergantung satu sama lain untuk dijalankan.
Secara opsional, Anda dapat membuat tugas yang menggunakan library MPI agar tugas yang terkait erat 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 Anda perlukan guna membuat tugas, minta administrator untuk memberi Anda peran IAM berikut:
-
Batch Job Editor (
roles/batch.jobsEditor
) pada project -
Service Account User (
roles/iam.serviceAccountUser
) pada akun layanan tugas, yang secara default merupakan akun layanan Compute Engine default
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.
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 tersebut memiliki aturan firewall yang mengizinkan koneksi antara 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 ini memiliki 3 runnable:
- Dapat dijalankan pertama adalah skrip yang menyiapkan tugas untuk MPI dengan menonaktifkan multithreading simultan dan menginstal Intel MPI.
- Runnable kedua adalah
barrier runnable
kosong (yang diformat sebagai
{ "barrier": {} }
), yang memastikan bahwa semua tugas telah selesai menyiapkan MPI sebelum melanjutkan ke runnable berikutnya. - Dapat dijalankan ketiga (dan setiap runnable berikutnya) tersedia untuk beban kerja tugas.
Anda dapat membuat tugas yang menggunakan MPI untuk tugas-tugas yang terkait erat menggunakan gcloud CLI atau Batch API.
gcloud
Guna membuat tugas skrip yang menggunakan MPI untuk tugas yang terkait 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 wajib diisi dan harus ditetapkan ke2
atau yang lebih tinggi.TASK_COUNT_PER_NODE
: jumlah tugas yang dapat dijalankan secara serentak oleh suatu tugas pada instance VM. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini wajib diisi 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 true.PERMISSIVE_SSH
: jika ditetapkan ketrue
, Batch akan mengonfigurasi SSH untuk mengizinkan komunikasi tanpa sandi di antara instance VM yang berjalan di grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke true.
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 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 output 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 terkait erat dengan 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. Nilai harus berupa bilangan bulat antara1
dan batas tugas per grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini wajib diisi dan harus ditetapkan ke2
atau yang lebih tinggi.TASK_COUNT_PER_NODE
: jumlah tugas yang dapat dijalankan secara serentak oleh suatu tugas pada instance VM. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini wajib diisi 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 di grup tugas. Jalur file disimpan dalam variabel lingkunganBATCH_HOSTS_FILE
. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke true.PERMISSIVE_SSH
: jika ditetapkan ketrue
, Batch akan mengonfigurasi SSH untuk mengizinkan komunikasi tanpa sandi di antara instance VM yang berjalan di grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke true.
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 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 mengetahui contoh lebih detail dari tugas yang menggunakan MPI untuk tugas yang berkaitan erat, lihat Menjalankan model Riset dan Perkiraan 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.
- Melihat tugas dan tugas.
- Pelajari opsi penciptaan pekerjaan lainnya.