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 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

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:

  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 wajib diisi dan harus ditetapkan ke 2 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 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 true.
    • PERMISSIVE_SSH: jika ditetapkan ke true, 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.
  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 output 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 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 antara 1 dan batas tugas per grup tugas. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini wajib diisi dan harus ditetapkan ke 2 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 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 di grup tugas. Jalur file disimpan dalam variabel lingkungan BATCH_HOSTS_FILE. Untuk menggunakan library MPI yang disediakan oleh Batch, kolom ini harus ditetapkan ke true.
  • PERMISSIVE_SSH: jika ditetapkan ke true, 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:

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