Questo documento spiega come configurare un job Batch con attività strettamente accoppiate che comunicano tra loro su VM diverse utilizzando una libreria Message Passing Interface (MPI).
Per i job batch,
l'accoppiamento
descrive le attività interdipendenti. Ciò influisce sulla configurazione del numero
di attività che possono essere eseguite in parallelo (anziché in sequenza) utilizzando il
campo parallelism
di un job.
Le attività possono essere descritte utilizzando i seguenti tipi di accoppiamento:
- Attività a basso accoppiamento: attività che possono essere eseguite in modo indipendente.
- Attività ad alto accoppiamento:attività che dipendono l'una dall'altra per essere eseguite.
Se vuoi, puoi creare un job che utilizza una libreria MPI per consentire a task strettamente accoppiate di comunicare tra loro su diverse istanze VM. Un caso d'uso comune per MPI sono i carichi di lavoro di computing ad alte prestazioni (HPC) strettamente accoppiati.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la sezione Guida introduttiva a Batch e attiva Batch completando i prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Batch Job Editor (
roles/batch.jobsEditor
) sul progetto -
Utente service account (
roles/iam.serviceAccountUser
) sul service account del job, che per impostazione predefinita è il service account Compute Engine predefinito
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Batch Job Editor (
- Se specifichi la rete per questo job, assicurati che la rete abbia una regola firewall che consenta le connessioni tra le VM del job. Scopri come configurare le regole firewall VPC per i casi d'uso comuni.
Crea ed esegui un job che utilizza MPI per attività strettamente accoppiate
Questa sezione fornisce esempi su come creare un job che possa utilizzare MPI. In particolare, il job di esempio ha tre eseguibili:
- Il primo eseguibile è uno script che prepara il job per MPI disattivando il multithreading simultaneo e installando Intel MPI.
- Il secondo eseguibile è un
eseguibile di barriera
vuoto (formattato come
{ "barrier": {} }
), che garantisce che tutte le attività terminino la configurazione di MPI prima di continuare con gli eseguibili futuri. - Il terzo eseguibile (e tutti gli eseguibili successivi) è disponibile per il workload del job.
Puoi creare un job che utilizza MPI per attività strettamente accoppiate utilizzando gcloud CLI o l'API Batch.
gcloud
Per creare un job di script che utilizza MPI per attività strettamente accoppiate utilizzando gcloud CLI, procedi nel seguente modo:
Crea un file di configurazione JSON con i seguenti contenuti:
{ "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 } ] }
Sostituisci quanto segue:
SCRIPT
: uno script eseguibile per un carico di lavoro che utilizza MPI.TASK_COUNT
: il numero di attività per il job. Il valore deve essere un numero intero compreso tra1
e il limite di attività per gruppo di attività. Per utilizzare le librerie MPI fornite da Batch, questo campo è obbligatorio e deve essere impostato su2
o versioni successive.TASK_COUNT_PER_NODE
: il numero di attività che un job può eseguire contemporaneamente su un'istanza VM. Per utilizzare le librerie MPI fornite da Batch, questo campo è obbligatorio e deve essere impostato su1
, che equivale a eseguire un'istanza VM per ogni attività.REQUIRE_HOSTS_FILE
: se impostato sutrue
, il job crea un file che elenca le istanze VM in esecuzione in un gruppo di attività. Il percorso del file è memorizzato nella variabile di ambienteBATCH_HOSTS_FILE
. Per utilizzare le librerie MPI fornite da Batch, questo campo deve essere impostato su true.PERMISSIVE_SSH
: se impostato sutrue
, Batch configura SSH per consentire la comunicazione senza password tra le istanze VM in esecuzione in un gruppo di attività. Per utilizzare le librerie MPI fornite da Batch, questo campo deve essere impostato su true.
Per creare il job, utilizza il comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Sostituisci quanto segue:
JOB_NAME
: il nome del job.LOCATION
: la sede del lavoro.JSON_CONFIGURATION_FILE
: il percorso di un file JSON con i dettagli di configurazione del job.
Se vuoi, puoi aumentare il rendimento delle librerie MPI fornite da Batch procedendo nel seguente modo:
- Crea ed esegui un job utilizzando un modello di istanza VM e specifica un modello di istanza VM pronto per l'HPC nelle risorse del job.
- Specifica Cloud Logging come destinazione per le informazioni di logging del job nelle risorse del job.
Ad esempio, per creare un job di script da un modello di istanza che utilizza MPI e fa in modo che un'attività restituisca il nome host delle tre attività nel gruppo di attività:
Crea un file JSON nella directory attuale denominato
example-job-uses-mpi.json
con il seguente contenuto:{ "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" } }
Esegui questo comando:
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Per creare un job di script che utilizza un MPI per attività strettamente accoppiate utilizzando
l'API Batch, utilizza il
metodo jobs.create
e specifica i campi permissiveSsh
, requireHostsFile
, taskCount
e
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
}
]
}
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del tuo progetto.LOCATION
: la sede del lavoro.JOB_NAME
: il nome del job.SCRIPT
: lo script eseguibile per un workload che utilizza MPI.TASK_COUNT
: il numero di attività per il job. Il valore deve essere un numero intero compreso tra1
e il limite di attività per gruppo di attività. Per utilizzare le librerie MPI fornite da Batch, questo campo è obbligatorio e deve essere impostato su2
o versioni successive.TASK_COUNT_PER_NODE
: il numero di attività che un job può eseguire contemporaneamente su un'istanza VM. Per utilizzare le librerie MPI fornite da Batch, questo campo è obbligatorio e deve essere impostato su1
, che equivale a eseguire un'istanza VM per ogni attività.REQUIRE_HOSTS_FILE
: se impostato sutrue
, il job crea un file che elenca le istanze VM in esecuzione in un gruppo di attività. Il percorso del file è memorizzato nella variabile di ambienteBATCH_HOSTS_FILE
. Per utilizzare le librerie MPI fornite da Batch, questo campo deve essere impostato su true.PERMISSIVE_SSH
: se impostato sutrue
, Batch configura SSH per consentire la comunicazione senza password tra le istanze VM in esecuzione in un gruppo di attività. Per utilizzare le librerie MPI fornite da Batch, questo campo deve essere impostato su true.
Se vuoi, puoi aumentare il rendimento delle librerie MPI fornite da Batch procedendo nel seguente modo:
- Crea ed esegui un job utilizzando un modello di istanza VM e specifica un modello di istanza VM pronto per l'HPC nelle risorse del job.
- Specifica Cloud Logging come destinazione per le informazioni di logging del job nelle risorse del job.
Ad esempio, per creare un job di script da un modello di istanza che utilizza MPI e fa in modo che un'attività restituisca il nome host delle tre attività nel gruppo di attività, utilizza la seguente richiesta:
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"
}
}
dove PROJECT_ID
è l'ID progetto del tuo progetto.
Passaggi successivi
- Per un esempio più dettagliato di un job che utilizza MPI per attività ad alto accoppiamento, vedi Esecuzione del modello di ricerca e previsione meteorologica con Batch.
- Scopri come ridurre la latenza per i job con attività strettamente accoppiate.
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Visualizzare lavori e attività.
- Scopri di più sulle opzioni di creazione dei job.