En este documento, se explica cómo configurar un trabajo por lotes con tareas estrechamente vinculadas que se comunican entre sí en diferentes VM mediante una biblioteca de interfaz de envío de mensajes (MPI).
En los trabajos por lotes, en el acoplamiento se describen las tareas de interdependencia. Esto influye en la configuración de la cantidad de tareas que se pueden ejecutar en paralelo (en lugar de secuencialmente) mediante el campo parallelism
de un trabajo.
Las tareas se pueden describir mediante los siguientes tipos de acoplamiento:
- Tareas de estructura flexible: Son tareas que se pueden ejecutar de forma independiente.
- Tareas estrechamente vinculadas: Son tareas que dependen unas de otras para ejecutarse.
De manera opcional, puedes crear un trabajo que use una biblioteca MPI para permitir que las tareas estrechamente vinculadas se comuniquen entre diferentes instancias de VM. Un caso de uso común para la MPI son las cargas de trabajo de computación de alto rendimiento (HPC) con acoplamiento alto.
Antes de comenzar
- Si nunca antes usaste Batch, revisa Comienza a usar Batch y completa los requisitos previos para proyectos y usuarios.
-
Si quieres obtener los permisos que necesitas para crear un trabajo, solicita al 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 es la cuenta de servicio predeterminada de Compute Engine de forma predeterminada
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Editor de trabajos por lotes (
- Si especificas la red de este trabajo, asegúrate de que la red tenga una regla de firewall que permita conexiones entre las VM del trabajo. Aprende a configurar reglas de firewall de VPC para casos de uso comunes.
Crea y ejecuta un trabajo que use la MPI para las tareas estrechamente vinculadas
En esta sección, se proporcionan ejemplos sobre cómo crear un trabajo que pueda usar la MPI. En particular, el trabajo de ejemplo tiene 3 ejecutables:
- La primera que se puede ejecutar es una secuencia de comandos que prepara el trabajo para la MPI mediante la inhabilitación de varios subprocesos simultáneos y la instalación de Intel MPI.
- La segunda opción es una ejecutable de barrera vacía (con formato
{ "barrier": {} }
), que garantiza que todas las tareas terminen de configurar la MPI antes de continuar a los ejecutables futuros. - El tercer ejecutable (y cualquier otro ejecutable) está disponible para la carga de trabajo del trabajo.
Puedes crear un trabajo que use la MPI para las tareas estrechamente vinculadas mediante la CLI de gcloud o la API de Batch.
gcloud
Si deseas crear un trabajo de secuencia de comandos que use la MPI para las tareas estrechamente vinculadas mediante la CLI de gcloud, 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 una secuencia de comandos que se puede ejecutar para una carga de trabajo que usa MPI.TASK_COUNT
: la cantidad de tareas para el trabajo El valor debe ser un número entero entre1
y10000
. Para usar las bibliotecas de la MPI que proporciona Batch, este campo es obligatorio y debe establecerse en2
o superior.TASK_COUNT_PER_NODE
: Es la cantidad de tareas que puede ejecutar un trabajo simultáneamente en una instancia de VM. Para usar las bibliotecas de la MPI que proporciona Batch, este campo es obligatorio y debe establecerse en1
, que equivale a ejecutar una instancia de VM por tarea.REQUIRE_HOSTS_FILE
: Cuando se establece entrue
, el trabajo crea un archivo que enumera las instancias de VM que se ejecutan en un grupo de tareas. La ruta de acceso del archivo se almacena en la variable de entornoBATCH_HOSTS_FILE
. Para usar las bibliotecas de la MPI que proporciona Batch, este campo se debe establecer como 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 la MPI que proporciona Batch, este campo se debe establecer como 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
: Es la ubicación del trabajo.JSON_CONFIGURATION_FILE
: Es la ruta de acceso de un archivo JSON con los detalles de configuración del trabajo.
De manera opcional, puedes aumentar el rendimiento de las bibliotecas de la MPI que proporciona Batch si haces lo siguiente:
- 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 del 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 el resultado de 1 tarea sea el nombre de host de las 3 tareas del grupo de tareas, sigue estos pasos:
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
Si quieres crear un trabajo de secuencia de comandos que use una MPI para las tareas estrechamente vinculadas mediante la API de Batch, usa el comando gcloud batch jobs submit
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.LOCATION
: Es la ubicación del trabajo.JOB_NAME
: Es el nombre del trabajo.SCRIPT
: Es la secuencia de comandos que se puede ejecutar para una carga de trabajo que usa MPI.TASK_COUNT
: la cantidad de tareas para el trabajo El valor debe ser un número entero entre1
y10000
. Para usar las bibliotecas de la MPI que proporciona Batch, este campo es obligatorio y debe establecerse en2
o superior.TASK_COUNT_PER_NODE
: La cantidad de tareas que un trabajo puede ejecutar en simultáneo en una instancia de VM. Para usar las bibliotecas de la MPI que proporciona Batch, este campo es obligatorio y debe establecerse en1
, que equivale a ejecutar una instancia de VM por tarea.REQUIRE_HOSTS_FILE
: Cuando se establece entrue
, el trabajo crea un archivo que enumera las instancias de VM que se ejecutan en un grupo de tareas. La ruta del archivo se almacena en la variable de entornoBATCH_HOSTS_FILE
. Para usar las bibliotecas de la MPI que proporciona Batch, este campo se debe establecer como 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 la MPI que proporciona Batch, este campo se debe establecer como verdadero.
De manera opcional, puedes aumentar el rendimiento de las bibliotecas de la MPI que proporciona Batch si haces lo siguiente:
- 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 del 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 use MPI y que 1 resultado de tarea sea el nombre de host de las 3 tareas en el 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"
}
}
En el comando anterior, PROJECT_ID
es el ID del proyecto.
¿Qué sigue?
- Si deseas obtener un ejemplo más detallado de un trabajo que usa la MPI para tareas estrechamente vinculadas, consulta Ejecuta el modelo de investigación del clima y previsión con Batch.
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Consulta trabajos y tareas.
- Obtenga más información sobre las opciones de creación de trabajos.