Questo documento spiega come configurare un job batch con attività ad alto accoppiamento che comunicano tra loro tramite diverse VM utilizzando una libreria Message Passing Interface (MPI).
Per i job batch, l'accoppiamento descrive le attività di interdipendenza; questo influenza il modo in cui configuri il numero di attività che possono essere eseguite in parallelo (anziché in sequenza) mediante il campo parallelism
di un job.
Le attività possono essere descritte con i seguenti tipi di accoppiamento:
- Attività a basso accoppiamento: attività che possono essere eseguite indipendentemente.
- Attività ad alto accoppiamento: attività dipendenti l'una dall'altra per essere eseguite.
Facoltativamente, puoi creare un job che utilizzi una libreria MPI per consentire la comunicazione tra attività strettamente accoppiate tra istanze VM diverse. Un caso d'uso comune per i file MPI sono i carichi di lavoro di computing ad alte prestazioni (HPC) ad alto accoppiamento.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la sezione Iniziare a utilizzare il batch e abilita 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:
-
Editor job batch (
roles/batch.jobsEditor
) sul progetto -
Utente account di servizio (
roles/iam.serviceAccountUser
) nell'account di servizio job, che per impostazione predefinita è l'account di servizio Compute Engine predefinito
Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche ottenere le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.
-
Editor job batch (
- Se specifica 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 casi d'uso comuni.
Creare ed eseguire un job che utilizza MPI per attività ad alto accoppiamento
Questa sezione fornisce esempi su come creare un job in grado di utilizzare MPI. In particolare, il job di esempio ha tre esecuzioni:
- Il primo eseguibile è uno script che prepara il job per MPI disattivando il multithreading simultaneo e installando Intel MPI.
- La seconda eseguibile è una barrier eseguibile vuota (formattata come
{ "barrier": {} }
), che garantisce che tutte le attività concludano la configurazione della MPI prima di continuare con le esecuzioni eseguibili future. - La terza eseguibile (ed eventuali successive eseguibili) è disponibile per il carico di lavoro del job.
Puoi creare un job che utilizzi MPI per attività ad alto accoppiamento utilizzando l'interfaccia a riga di comando gcloud o l'API Batch.
gcloud
Per creare un job di script che utilizzi MPI per attività ad alto accoppiamento utilizzando l'interfaccia a riga di comando gcloud, procedi come segue:
Crea un file di configurazione JSON con il seguente contenuto:
{ "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 lavoro. Il valore deve essere un numero intero compreso tra1
e10000
. Per utilizzare le librerie MPI fornite da Batch, questo campo è obbligatorio e deve essere impostato su2
o superiore.TASK_COUNT_PER_NODE
: il numero di attività che possono essere eseguite 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 attività.REQUIRE_HOSTS_FILE
: se è impostato sutrue
, il job crea un file che elenca le istanze VM in esecuzione in un gruppo attività. Il percorso del file viene archiviato 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 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 località del job.JSON_CONFIGURATION_FILE
: il percorso di un file JSON con i dettagli di configurazione del job.
Facoltativamente, puoi aumentare le prestazioni delle librerie MPI fornite da Batch come segue:
- Crea ed esegui un job utilizzando un modello di istanza VM e specifica un modello di istanza VM compatibile con HP nelle risorse del job.
- Specificare 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 fare in modo che 1 attività restituisca il nome host delle tre attività nel gruppo:
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 utilizzi un MPI per attività ad alto accoppiamento utilizzando l'API batch, utilizza il comando gcloud batch jobs submit
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 del progetto del tuo progetto.LOCATION
: la località del job.JOB_NAME
: il nome del job.SCRIPT
: lo script eseguibile per un carico di lavoro che utilizza MPI.TASK_COUNT
: il numero di attività per il lavoro. Il valore deve essere un numero intero compreso tra1
e10000
. Per utilizzare le librerie MPI fornite da Batch, questo campo è obbligatorio e deve essere impostato su2
o superiore.TASK_COUNT_PER_NODE
: il numero di attività che un job può essere eseguito 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 attività.REQUIRE_HOSTS_FILE
: quando è impostato sutrue
, il job crea un file in cui sono elencate le istanze VM in esecuzione in un gruppo attività. Il percorso del file viene archiviato 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 attività. Per utilizzare le librerie MPI fornite da Batch, questo campo deve essere impostato su true.
Facoltativamente, puoi aumentare le prestazioni delle librerie MPI fornite da Batch come segue:
- Crea ed esegui un job utilizzando un modello di istanza VM e specifica un modello di istanza VM compatibile con HP nelle risorse del job.
- Specificare 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 fare in modo che 1 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 del progetto del tuo progetto.
Passaggi successivi
- Per un esempio più dettagliato di un job che utilizza MPI per attività ad alto accoppiamento, consulta l'articolo Esecuzione del modello di ricerca e previsione meteo con batch.
- Se hai problemi a creare o eseguire un job, vedi Risoluzione dei problemi.
- Visualizzare lavori e attività.
- Scopri di più sulle opzioni per la creazione di offerte di lavoro.