Mengonfigurasi komunikasi tugas menggunakan library MPI

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

  1. Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
  2. Untuk mendapatkan izin yang diperlukan untuk membuat tugas, minta administrator untuk memberi Anda peran IAM berikut:

    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.

  3. 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:

  1. 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 antara 1 dan batas tugas per grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini diperlukan dan harus ditetapkan ke 2 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 ke 1, yang sama dengan menjalankan satu instance VM per tugas.
    • REQUIRE_HOSTS_FILE: jika ditetapkan ke true, tugas akan membuat file yang mencantumkan instance VM yang berjalan dalam grup tugas. Jalur file disimpan dalam variabel lingkungan BATCH_HOSTS_FILE. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke benar (true).
    • PERMISSIVE_SSH: jika ditetapkan ke true, 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.
  2. 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:

Misalnya, untuk membuat tugas skrip dari template instance yang menggunakan MPI dan membuat 1 tugas menghasilkan nama host dari 3 tugas dalam grup tugas:

  1. 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"
        }
    }
    
  2. 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 antara 1 dan batas tugas per grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini diperlukan dan harus ditetapkan ke 2 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 ke 1, yang sama dengan menjalankan satu instance VM per tugas.
  • REQUIRE_HOSTS_FILE: jika disetel ke true, tugas akan membuat file yang mencantumkan instance VM yang berjalan dalam grup tugas. Jalur file disimpan dalam variabel lingkungan BATCH_HOSTS_FILE. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke benar.
  • PERMISSIVE_SSH: jika ditetapkan ke true, 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:

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