Mejora la capacidad de obtención con la flexibilidad de las instancias

En este documento, se describe cómo crear y ejecutar un trabajo de Batch que usa la flexibilidad de instancias. La flexibilidad de instancias te permite permitir que un trabajo se ejecute en varios tipos de máquinas que especifiques y que puedes clasificar de forma opcional.

Si permites más tipos de máquinas para un trabajo, puedes usar la flexibilidad de instancias para mejorar la disponibilidad, que es la probabilidad de que los recursos estén disponibles para ejecutar tu trabajo. Para obtener más información sobre cómo elegir qué funciones de disponibilidad usar para tu carga de trabajo, consulta Mejora la disponibilidad de recursos. Por ejemplo, usar la flexibilidad de instancias puede ayudarte a hacer lo siguiente:

  • Reducir la probabilidad de errores de disponibilidad de recursos y los retrasos de programación relacionados
  • Seleccionar recursos con mayor disponibilidad para ayudar a que los trabajos finalicen antes, por ejemplo:

Antes de comenzar

  1. Si nunca usaste Batch, revisa Comienza 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

Cuando un trabajo usa la flexibilidad de instancias, se aplican todas las siguientes restricciones:

  • La mejora de la disponibilidad aumenta con la cantidad de tipos de máquinas que permites que use un trabajo.

  • El trabajo no puede especificar el modelo de aprovisionamiento FLEX_START ni el modelo de aprovisionamiento RESERVATION_BOUND.

  • El trabajo no puede consumir una reserva específicamente segmentada. (El reservation campo debe estar sin definir o configurado como NO_RESERVATION).

    Una reserva específicamente segmentada incluye todas las reservas para el modelo de aprovisionamiento RESERVATION_BOUND y algunas reservas para el modelo de aprovisionamiento STANDARD. Estas funciones son inherentemente incompatibles porque la creación de instancias solo puede tener éxito para el tipo de máquina de la reserva.

  • Cada trabajo puede tener hasta 50 selecciones de instancias.

  • Cada selección de instancias en un trabajo debe tener un nombre único, una clasificación única y uno o más tipos de máquinas únicos.

  • Los tipos de máquinas no se pueden repetir. Incluye cada tipo de máquina en una sola selección de instancias por trabajo.

  • Cada trabajo puede tener hasta 200 tipos de máquinas únicos en sus selecciones de instancias.

  • Si bien es opcional especificar varios tipos de máquinas en la misma selección de instancias, es obligatorio si deseas recursos con mayor disponibilidad.

    • Batch intenta seleccionar uno o más tipos de máquinas con la mayor disponibilidad solo cuando la selección de instancias para una clasificación tiene varios tipos de máquinas. Por ejemplo, esta selección es importante si deseas que tu trabajo tenga VMs Spot que tengan menos probabilidades de interrumpirse o más instancias para un trabajo que pueda ejecutar tareas en paralelo.
    • De lo contrario, cuando la selección de instancias para una clasificación solo tiene un tipo de máquina, la flexibilidad de instancias solo ayuda a evitar errores de disponibilidad de recursos.
  • El trabajo no puede incluir el machineType campo, y se ignora el tipo de máquina para cualquier plantilla de instancias que especifique el trabajo.

  • Debes verificar que cada propiedad que especifiques para el trabajo sea compatible con cada tipo de máquina permitido. De lo contrario, es posible que el trabajo falle después de enviarse porque no puede crear instancias. Por ejemplo, te recomendamos que verifiques que, al menos, las siguientes propiedades de un trabajo sean compatibles con todos los tipos de máquinas:

    • ubicación (si se especifica, campo allowedLocations[]; de lo contrario, location)
    • recursos de procesamiento por tarea (campo computeResource)
    • discos e imágenes (campos volumes[], disk[] y bootDisk)
    • red (campo network)
    • todas las demás propiedades de la instancia (subcampos instances[]):

      • plataforma de CPU mínima (campo minCpuPlatform)
      • modelo de aprovisionamiento (campo provisioningModel)
      • GPUs (campo accelerators[])
  • No puedes anular los discos ni las plataformas de CPU mínimas para los trabajos de Batch. Todos los tipos de máquinas usan los valores especificados (en los subcampos policy o una plantilla de instancias) o, si no se especifican, usan los valores predeterminados para un tipo de máquina en la selección de instancias de mayor prioridad. Por lo tanto, te recomendamos que hagas lo siguiente:

    • Verifica que el tipo de disco de arranque sea compatible con cada tipo de máquina permitido. En resumen, los tipos de máquinas de cuarta generación y posteriores no admiten discos persistentes, los tipos de máquinas de segunda generación y anteriores no admiten Hyperdisk, y los tipos de máquinas de tercera generación y anteriores usan discos de arranque persistentes de forma predeterminada.

    • No especifiques una plataforma de CPU mínima ni discos opcionales, a menos que hayas verificado que sean compatibles con cada tipo de máquina permitido.

Crea un trabajo que pueda usar varios tipos de máquinas

Para crear un trabajo que pueda usar varios tipos de máquinas, selecciona uno de los siguientes métodos.

gcloud

Para configurar varios tipos de máquinas mientras usas Google Cloud CLI para crear un trabajo, completa los siguientes pasos:

  1. Incluye el instanceFlexibilityPolicy campo y los subcampos en el campo allocationPolicy en el archivo JSON que especifica los detalles de configuración de tu trabajo. El campo instanceFlexibilityPolicy admite una o más selecciones de instancias, cada una con un nombre único, una clasificación única y una lista de uno o más tipos de máquinas.

    "allocationPolicy":{
      "instanceFlexibilityPolicy":{
        "instanceSelections":{
          "INSTANCE_SELECTION_NAME":{
            "rank": RANK,
            "machineTypes": [MACHINE_TYPES]
          }
        }
      }
    }
    

    Reemplaza lo siguiente:

    • INSTANCE_SELECTION_NAME: un nombre para la selección de instancias. Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada nombre de este trabajo sea único.

    • RANK: Es un número entero de cero o más que representa la prioridad de esta selección de instancias, en la que el valor más bajo es la prioridad más alta (opcional). Si no se especifica, el valor predeterminado es 0 (prioridad más alta). Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada clasificación de este trabajo sea única.

    • MACHINE_TYPES: una lista separada por comas de uno o más tipos de máquinas, que se escriben como cadenas, para esta selección de instancias. Puedes incluir cada tipo de máquina en una sola selección de instancias por trabajo. Por ejemplo, una lista de tres tipos de máquinas se puede escribir de la siguiente manera:

      "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
      

      Reemplaza MACHINE_TYPE_1, MACHINE_TYPE_2 y MACHINE_TYPE_3 por un tipo de máquina, por ejemplo, e2-micro, e2-small y n1-standard-2.

    Para obtener más información, consulta también el trabajo de ejemplo.

  2. Mientras esta función esté en versión preliminar, debes usar el gcloud alpha batch jobs submit comando para crear y enviar el trabajo.

    gcloud alpha batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Reemplaza lo siguiente:

    • JOB_NAME: el nombre del trabajo
    • LOCATION: la ubicación del trabajo.
    • JSON_CONFIGURATION_FILE: la ruta de acceso a un archivo JSON con los detalles de configuración del trabajo

REST

Para usar la API de Batch y crear un trabajo que use varios tipos de máquinas, usa el método v1alpha jobs.create mientras esta función esté en versión preliminar.

Para especificar varios tipos de máquinas para un trabajo, incluye el instanceFlexibilityPolicy campo y subcampos en el campo allocationPolicy en el cuerpo principal del archivo JSON. El campo instanceFlexibilityPolicy admite una o más selecciones de instancias, cada una con un nombre único, una clasificación única y una lista de uno o más tipos de máquinas.

"allocationPolicy":{
  "instanceFlexibilityPolicy":{
    "instanceSelections":{
      "INSTANCE_SELECTION_NAME":{
        "rank": RANK,
        "machineTypes": [MACHINE_TYPES]
      }
    }
  }
}

Reemplaza lo siguiente:

  • INSTANCE_SELECTION_NAME: un nombre para la selección de instancias. Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada nombre de este trabajo sea único.

  • RANK: Es un número entero de cero o más que representa la prioridad de esta selección de instancias, en la que el valor más bajo es la prioridad más alta (opcional). Si no se especifica, el valor predeterminado es 0 (prioridad más alta). Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada clasificación de este trabajo sea única.

  • MACHINE_TYPES: una lista separada por comas de uno o más tipos de máquinas, que se escriben como cadenas, para esta selección de instancias. Puedes incluir cada tipo de máquina en una sola selección de instancias por trabajo. Por ejemplo, una lista de tres tipos de máquinas se puede escribir de la siguiente manera:

    "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
    

    Reemplaza MACHINE_TYPE_1, MACHINE_TYPE_2 y MACHINE_TYPE_3 por un tipo de máquina, por ejemplo, e2-micro, e2-small y n1-standard-2.

Para obtener más información, consulta también el trabajo de ejemplo.

Ejemplo de archivo de configuración JSON del trabajo

Por ejemplo, cuando usas gcloud CLI o la API de Batch, puedes usar el siguiente archivo de configuración JSON para crear un trabajo de secuencia de comandos básico que tenga dos selecciones de instancias:

  • La selección de instancias llamada first-choice tiene la prioridad más alta ("rank": 0) y tres tipos de máquinas (e2-micro, e2-small, y n1-standard-2).
  • La selección de instancias llamada second-choice tiene la segunda prioridad ("rank": 1) y un tipo de máquina (e2-medium).
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy":{
    "instanceFlexibilityPolicy":{
      "instanceSelections":{
        "first-choice":{
          "rank": 0,
          "machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
        },
        "second-choice":{
          "rank": 1,
          "machineTypes": ["e2-medium"]
        }
      }
    }
  }
}

¿Qué sigue?