Reducir la latencia usando políticas de colocación compacta

En este documento, se explica cómo reducir la latencia de red entre las VMs de un trabajo a través de la especificación de una política de posición compacta.

Tener hosts de VM que estén físicamente más cerca entre sí dentro de una zona puede reducir la latencia de red entre las VMs. Este beneficio de rendimiento puede ser especialmente útil para trabajos con tareas estrechamente acopladas, como tareas que se comunican con bibliotecas MPI. Cuando creas un trabajo, puedes especificar una política de posición compacta para que las VMs de un trabajo se ubiquen más cerca unas de las otras de forma opcional. De lo contrario, la ubicación predeterminada de las VMs suele distribuirlas en hosts separados para ayudar a minimizar el impacto de las fallas de energía.

Para obtener más información sobre las políticas de posición compacta, consulta Acerca de las políticas de ubicación en la documentación de Compute Engine.

Antes de comenzar

  1. Si nunca usaste Batch, consulta Cómo comenzar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
  2. Para obtener los permisos que necesitas para crear un trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM:

    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.

Restricciones

Además de las restricciones generales para las políticas de posición compacta, Batch también tiene las siguientes restricciones:

  • Cuando especificas que un trabajo use una política de posición compacta, Batch crea y borra automáticamente una política de posición compacta para las VMs del trabajo. No puedes especificar una política de posición de compactación existente para un trabajo.
  • No puedes especificar una cantidad de VMs para la política de posición de compactación. La política de posición compacta de una tarea se aplica independientemente de la cantidad de VMs en las que se ejecuta la tarea.

Crea y ejecuta un trabajo que use una política de posición

Para especificar que una tarea use una política de posición de compactación, configura el campo collocation en COLLOCATED con la CLI de gcloud o la API de Batch.

gcloud

  1. Crea un archivo JSON que especifique los detalles de configuración de la tarea y establezca el campo collocation en COLLOCATED.

    Por ejemplo, para crear una tarea de secuencia de comandos básica que especifique una política de posición compacta, crea un archivo JSON con el siguiente contenido:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "placement": {
          "collocation": "COLLOCATED"
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. Para crear y ejecutar la tarea, 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 a un archivo JSON con los detalles de configuración de la tarea.

API

Realiza una solicitud POST al método jobs.create que establezca el campo collocation en COLLOCATED.

Por ejemplo, para crear un trabajo de secuencia de comandos básico que especifique una política de posición compacta, realiza la siguiente solicitud:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "placement": {
      "collocation": "COLLOCATED"
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de tu proyecto.

  • LOCATION: Es la ubicación del trabajo.

  • JOB_NAME: Es el nombre del trabajo.

¿Qué sigue?