En este documento, se explica cómo configurar un trabajo de Batch con tareas estrechamente acopladas que se comunican entre sí en diferentes VMs con una biblioteca de la interfaz de transmisión de mensajes (MPI).
En el caso de los trabajos por lotes, el acoplamiento describe las tareas interdependientes, lo que influye en la forma en que configuras la cantidad de tareas que se pueden ejecutar en paralelo (en lugar de secuencialmente) con el campo parallelism
de un trabajo.
Las tareas se pueden describir con los siguientes tipos de acoplamiento:
- Tareas con acoplamiento bajo: Tareas que se pueden ejecutar de forma independiente.
- Tareas con acoplamiento alto: Tareas que dependen una de otra para ejecutarse.
De manera opcional, puedes crear un trabajo que use una biblioteca de MPI para permitir que las tareas estrechamente vinculadas se comuniquen entre sí en diferentes instancias de VM. Un caso de uso común de MPI son las cargas de trabajo de computación de alto rendimiento (HPC) con acoplamiento alto.
Antes de comenzar
- Si nunca usaste Batch, revisa Cómo comenzar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para obtener los permisos que necesitas para crear un trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que, de forma predeterminada, es la cuenta de servicio predeterminada de Compute Engine
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Editor de trabajos por lotes (
- Si especificas la red para este trabajo, asegúrate de que la red tenga una regla de firewall que permita las conexiones entre las VMs del trabajo. Obtén más información para configurar reglas de firewall de VPC para casos de uso comunes.
Crea y ejecuta un trabajo que usa MPI para tareas estrechamente acopladas
En esta sección, se proporcionan ejemplos para crear un trabajo que pueda usar MPI. En particular, el trabajo de ejemplo tiene 3 elementos ejecutables:
- El primer ejecutable es un script que prepara el trabajo para MPI inhabilitando el multiprocesamiento simultáneo y instalando Intel MPI.
- El segundo objeto ejecutable es un objeto ejecutable de barrera vacío (con el formato
{ "barrier": {} }
), que garantiza que todas las tareas finalicen la configuración de MPI antes de continuar con los objetos ejecutables futuros. - El tercer ejecutable (y cualquier ejecutable posterior) está disponible para la carga de trabajo del trabajo.
Puedes crear un trabajo que use MPI para tareas estrechamente vinculadas con gcloud CLI o la API de Batch.
gcloud
Para crear un trabajo de secuencia de comandos que use MPI para tareas estrechamente vinculadas con gcloud CLI, haz lo siguiente:
Crea un archivo de configuración JSON con el siguiente contenido:
{ "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 } ] }
Reemplaza lo siguiente:
SCRIPT
: Es un script ejecutable para una carga de trabajo que usa MPI.TASK_COUNT
: Es la cantidad de tareas del trabajo. El valor debe ser un número entero entre1
y el límite de tareas por grupo de tareas. Para usar las bibliotecas de MPI que proporciona Batch, este campo es obligatorio y se debe establecer en2
o un valor superior.TASK_COUNT_PER_NODE
: Es la cantidad de tareas que un trabajo puede ejecutar de forma simultánea en una instancia de VM. Para usar las bibliotecas de MPI que proporciona Batch, este campo es obligatorio y debe establecerse en1
, lo que equivale a ejecutar una instancia de VM por tarea.REQUIRE_HOSTS_FILE
: Cuando se configura comotrue
, el trabajo crea un archivo en el que se enumeran las instancias de VM que se ejecutan en un grupo de tareas. La ruta de acceso al archivo se almacena en la variable de entornoBATCH_HOSTS_FILE
. Para usar las bibliotecas de MPI que proporciona Batch, este campo debe establecerse en verdadero.PERMISSIVE_SSH
: Cuando se establece entrue
, Batch configura SSH para permitir la comunicación sin contraseña entre las instancias de VM que se ejecutan en un grupo de tareas. Para usar las bibliotecas de MPI que proporciona Batch, este campo debe establecerse en verdadero.
Para crear el trabajo, usa el comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Reemplaza lo siguiente:
JOB_NAME
: Es el nombre del trabajo.LOCATION
: La ubicación del trabajo.JSON_CONFIGURATION_FILE
: Es la ruta de acceso a un archivo JSON con los detalles de configuración del trabajo.
De manera opcional, puedes aumentar el rendimiento de las bibliotecas de MPI que proporciona Batch de la siguiente manera:
- Crea y ejecuta un trabajo con una plantilla de instancias de VM y especifica una plantilla de instancias de VM lista para HPC en los recursos de tu trabajo.
- Especifica Cloud Logging como el destino de la información de registro de tu trabajo en los recursos del trabajo.
Por ejemplo, para crear un trabajo de secuencia de comandos a partir de una plantilla de instancias que usa MPI y hace que 1 tarea genere el nombre de host de las 3 tareas del grupo de tareas, haz lo siguiente:
Crea un archivo JSON en el directorio actual llamado
example-job-uses-mpi.json
con el siguiente contenido:{ "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" } }
Ejecuta el siguiente comando:
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Para crear un trabajo de secuencia de comandos que use MPI para tareas estrechamente vinculadas con la API de Batch, usa el método jobs.create
y especifica los campos permissiveSsh
, requireHostsFile
, taskCount
y 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
}
]
}
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto de tu proyecto.LOCATION
: La ubicación del trabajo.JOB_NAME
: Es el nombre del trabajo.SCRIPT
: Es el script ejecutable para una carga de trabajo que usa MPI.TASK_COUNT
: Es la cantidad de tareas del trabajo. El valor debe ser un número entero entre1
y el límite de tareas por grupo de tareas. Para usar las bibliotecas de MPI que proporciona Batch, este campo es obligatorio y se debe establecer en2
o un valor superior.TASK_COUNT_PER_NODE
: Es la cantidad de tareas que un trabajo puede ejecutar de forma simultánea en una instancia de VM. Para usar las bibliotecas de MPI proporcionadas por Batch, este campo es obligatorio y debe establecerse en1
, lo que equivale a ejecutar una instancia de VM por tarea.REQUIRE_HOSTS_FILE
: Cuando se configura comotrue
, el trabajo crea un archivo que enumera las instancias de VM que se ejecutan en un grupo de tareas. La ruta de acceso al archivo se almacena en la variable de entornoBATCH_HOSTS_FILE
. Para usar las bibliotecas de MPI que proporciona Batch, este campo debe establecerse en verdadero.PERMISSIVE_SSH
: Cuando se establece entrue
, Batch configura SSH para permitir la comunicación sin contraseña entre las instancias de VM que se ejecutan en un grupo de tareas. Para usar las bibliotecas de MPI que proporciona Batch, este campo debe establecerse en verdadero.
De manera opcional, puedes aumentar el rendimiento de las bibliotecas de MPI que proporciona Batch de la siguiente manera:
- Crea y ejecuta un trabajo con una plantilla de instancias de VM y especifica una plantilla de instancias de VM lista para HPC en los recursos de tu trabajo.
- Especifica Cloud Logging como el destino de la información de registro de tu trabajo en los recursos del trabajo.
Por ejemplo, para crear un trabajo de secuencia de comandos a partir de una plantilla de instancias que usa MPI y hace que 1 tarea genere el nombre de host de las 3 tareas del grupo de tareas, usa la siguiente solicitud:
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"
}
}
donde PROJECT_ID
es el ID del proyecto de tu proyecto.
¿Qué sigue?
- Si deseas ver un ejemplo más detallado de un trabajo que usa MPI para tareas estrechamente vinculadas, consulta Cómo ejecutar el modelo de investigación y previsión meteorológica con Batch.
- Obtén más información para reducir la latencia de los trabajos con tareas estrechamente vinculadas.
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Ver trabajos y tareas
- Obtén más información sobre las opciones de creación de trabajos.