Garantiza la disponibilidad de los recursos con las reservas de VMs

En este documento, se explica cómo crear trabajos que se ejecuten en recursos reservados.

Las reservas son una función de Compute Engine. Una reserva proporciona un nivel de seguridad muy alto para obtener capacidad para una o más VMs con la configuración de hardware especificada. Una reserva de una VM genera los costos desde que la creas y hasta que borras la reserva. Sin embargo, si bien que consumes esa VM, el costo total es equivalente a una VM sin reserva.

En general, las reservas son útiles cuando la disponibilidad de la capacidad es crítica importante o para evitar errores de obtención de recursos. Específicamente, en el caso de Batch, considera usar reservas dedicadas para ayudar a minimizar el tiempo de programación de trabajos o intentar usar reservas mientras no se usan. Si tienes reservas que no se usan lo suficiente, como las reservas necesarias para los descuentos por compromiso de uso, puedes configurar trabajos para intentar consumirlas mientras no se usan para intentar ayudar a optimizar los costos incurridos.

Para obtener más información sobre las reservas, consulta la Documentación de Compute Engine sobre reservas

Antes de comenzar

  1. Si nunca usaste Batch, revisa Comienza a usar Batch y habilitar Batch completando el requisitos previos para los proyectos y usuarios.
  2. Asegúrate de tener los permisos para crear una reserva o ver una reserva existente que quieres que las VMs de un trabajo consuman según sea necesario.
  3. 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 del artículo restricciones generales para las reservas Batch también tiene las siguientes restricciones:

  • Las VMs de una tarea no pueden consumir reservas compartidas.
  • Las VMs de un trabajo no pueden consumir reservas si alguna de ellas especifica política de posición compacta.

Requisitos

En esta sección, se resumen los requisitos para que las VMs de un trabajo consuman una reserva. Para obtener más información sobre todos los requisitos, consulta la requisitos generales para las reservas en la documentación de Compute Engine y en la procedimiento para planificar la configuración más adelante en este documento.

  • Para que las VMs de un trabajo puedan consumir una reserva, se deben cumplir todas las siguientes condiciones:

    • En el trabajo y la reserva, se deben especificar las propiedades de la VM que coinciden de forma exacta.

    • Debe cumplir con todas las restricciones de este documento y todos los demás requisitos generales de las reservas.

  • Para que cada una de las VMs de un trabajo consuma una reserva de forma correcta, esta debe tener capacidad sin usar disponible durante el tiempo de ejecución de la VM.

    La capacidad sin usar de una reserva es la diferencia entre su Cantidad de VM y la cantidad de VMs que lo consumen actualmente. las VMs intentan consumir reservas cuando tienes capacidad de reserva sin usar. Entonces, una VM puede empezar a consumir cuando se crea la VM o una fecha posterior en su tiempo de ejecución. Una VM no y deja de consumir una reserva hasta que la VM deja de ejecutarse o borrar.

    Según la capacidad total de reserva sin usar, es posible que ninguna, algunas o todas las VMs de un trabajo consuman reservas, y la cantidad de VMs reservadas puede variar durante el tiempo de ejecución del trabajo.

Crear y ejecutar un trabajo que pueda consumir VMs reservadas

  1. Planifica la configuración. Para asegurarte de que el trabajo y la reserva sean compatibles, completa los siguientes pasos.

    Si quieres consumir una reserva que ya existe, debes crear una trabajo con la configuración correspondiente. De lo contrario, si planeas crear un reserva nueva, selecciona las opciones de configuración que prefieras.

    1. Determina las propiedades de la reserva. Debido a las restricciones, El tipo de recurso compartido debe ser single-project, que es el valor predeterminado. para realizar una reserva. Determina los valores que quieres usar para la las siguientes propiedades de reserva:

      • Tipo de consumo*
      • VM VMs

      * La reserva tipo de consumo (segmentados específicamente o consumidos automáticamente) determina qué VMs pueden consumir la reserva.

      El Cantidad de VMs representa la capacidad total de una reserva. Cuando decidas este valor, considera la cantidad de VMs del trabajo.

    2. Determina las propiedades de la VM para el trabajo y la reserva. Debido a las restricciones, ni el trabajo ni la reserva pueden especificar una política de posición compacta, que es la opción predeterminada para reservas y trabajos. Determina los valores que quieres usar para lo siguiente Propiedades de las VM, que deben coincidir exactamente de la reserva y el trabajo:

      • Proyecto
      • Zona*
      • Tipo de máquina
      • Plataforma de CPU mínima (si existe)
      • Tipo y cantidad de GPU (si corresponde)
      • Tipo y cantidad de SSD locales (si corresponde)
      • Afinidad de reserva#

      * Las VM del trabajo deben estar ubicadas en la misma zona que la las VMs reservadas. Debes incluir esta zona en el bucket allowedLocations[] o, si se omite el Campo allowedLocations[], establece la ubicación del trabajo a la región que contiene esta zona.

      El trabajo debe definir todas estas propiedades mediante los subcampos policy o una plantilla de instancias de VM. Un trabajo no puede especificar una combinación de subcampos de policy y una plantilla.

      Un campo opcional no puede definirse para un recurso y omitida de la otra. Define o omite el campo opcional para la reserva y el trabajo. Si el trabajo especifica una plantilla de instancia de VM, esto también se aplica a los campos de la plantilla especificada.

      #El tipo de consumo de la reserva determina la afinidad de reserva necesaria para las VMs del trabajo, que debes especificar en el trabajo de la siguiente manera:

      • Si el trabajo usa una plantilla de instancias de VM, Configura la afinidad de reserva como se explica en la documentación de reservas.
      • Si el trabajo no usa una plantilla y la reserva se segmenta de forma específica, especifica el nombre de la reserva en el campo reservation del trabajo.
      • De lo contrario, si el trabajo no usa una plantilla y la reserva está se consume automáticamente, se omiten reservation.
  2. Prepara la reserva. Si aún no lo hiciste, crea la reserva que deseas que consuman las VMs de la tarea. Asegúrate de que la reserva tenga propiedades que planificaste.

  3. Crea y ejecuta el trabajo. Puedes crear y ejecutar un trabajo que consuma VMs de la reserva preparada con el gcloud CLI o API de Batch:

    gcloud

    1. Crear un archivo JSON en el que se especifiquen los detalles de configuración del trabajo que establece Subcampos del recurso de instancia de VM (instances[]) para que coincida exactamente con las propiedades de la VM de una reserva.

      Por ejemplo, para crear un trabajo de secuencia de comandos básico que consuma VMs de un reserva, crea un archivo JSON con los siguientes contenidos:

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

      Reemplaza VM_RESOURCES por los recursos de VM. que coincidan con la reserva que quieres que el trabajo consuma especificando los subcampos instances[] que planeaste en el pasos anteriores.

      Por ejemplo, comienza con el siguiente valor para VM_RESOURCES:

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }
      

      Para usar este valor, realiza los siguientes cambios:

      1. ¿Quieres usar una plantilla de instancias?

        • Sí: Reemplaza policy. con el campo instanceTemplate y especificar una Plantilla de instancia de VM que coincide con la reserva. Por ejemplo, consulta el ejemplo de código para usar una plantilla de instancia de VM. Si la reserva usa GPUs o SSD locales, también debes configurar el campo installGpuDrivers y el campo volumes[] de la tarea, respectivamente. De lo contrario, omite los pasos restantes cambios.

        • No: Reemplaza MACHINE_TYPE por el mismo tipo de máquina que la reserva.

      2. ¿La reserva incluye una plataforma de CPU mínima?

        • Sí: Reemplaza MIN_CPU_PLATFORM por la misma plataforma de CPU mínima.

        • No: Quita el campo minCpuPlatform.

      3. ¿La reserva incluye GPU?

        • Sí: Reemplaza INSTALL_GPU_DRIVERS. GPU_TYPE y GPU_COUNT para que coincida con la reserva. Por ejemplo, consulta la muestra de código de con GPU.

        • No: Quita el campo installGpuDrivers y el campo accelerators[].

      4. ¿La reserva incluye SSD locales?

        • Sí: Reemplaza LOCAL_SSD_SIZE y LOCAL_SSD_NAME para que coincida con la reserva y activar los SSD locales agregando el Campo volumes[] al trabajo. Por ejemplo, consulta la muestra de código de con SSD locales.

        • No: Quita el campo disks[].

      5. ¿La reserva usa el tipo de consumo específico?

        • Sí: Reemplaza SPECIFIC_RESERVATION_NAME con el nombre de la reserva.

        • No: Quita el campo reservation.

      Por ejemplo, supongamos que usas una reserva consumida automáticamente para VMs n2-standard-32 que no especifica ninguna plataforma de CPU mínima, GPU ni SSD local. Además, no quieres especificar una plantilla de instancias de VM. En ese caso, debes reemplazar VM_RESOURCES con el siguiente valor:

      "policy": {
        "machineType": "n2-standard-32"
      }
      
    2. Para crear y ejecutar 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. A menos que la tarea especifique el campo allowedLocations[], esta debe ser la región que contiene la zona de la reserva.

      • 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 establece Subcampos de recurso de instancia de VM (instances[]) para que coincida exactamente con las propiedades de la VM de una reserva.

    Por ejemplo, para crear un trabajo de secuencia de comandos básico que consuma VMs de un reserva, 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": {
        "instances": [
          {
            VM_RESOURCES
          }
        ],
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto de tu proyecto.

    • LOCATION: Es la ubicación. del trabajo. A menos que el trabajo especifique allowedLocations[], debe ser la región que contiene la zona de la reserva.

    • JOB_NAME: Es el nombre del trabajo.

    • VM_RESOURCES: Los recursos de la VM que coincidan con la reserva que quieres que el trabajo consuma especificando los subcampos instances[] que planeaste en el pasos anteriores.

      Por ejemplo, comienza con el siguiente valor para VM_RESOURCES:

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }

      Para usar este valor, realiza los siguientes cambios:

      1. ¿Quieres usar una plantilla de instancias?

        • Sí: Reemplaza policy. con el campo instanceTemplate y especificar una Plantilla de instancia de VM que coincide con la reserva. Por ejemplo, consulta el ejemplo de código para usar una plantilla de instancia de VM. Si la reserva usa GPU o SSD locales, también debes configurar el campo installGpuDrivers del trabajo y volumes[], respectivamente. De lo contrario, omite los pasos restantes cambios.

        • No: Reemplaza MACHINE_TYPE por el mismo tipo de máquina que la reserva.

      2. ¿La reserva incluye una plataforma de CPU mínima?

        • Sí: Reemplaza MIN_CPU_PLATFORM por la misma plataforma de CPU mínima.

        • No: Quita el campo minCpuPlatform.

      3. ¿La reserva incluye GPU?

        • Sí: Reemplaza INSTALL_GPU_DRIVERS. GPU_TYPE y GPU_COUNT para que coincida con la reserva. Por ejemplo, consulta la muestra de código de con GPU.

        • No: quita el campo installGpuDrivers y las accelerators[].

      4. ¿La reserva incluye SSD locales?

        • Sí: Reemplaza LOCAL_SSD_SIZE y LOCAL_SSD_NAME para que coincida con la reserva y activar los SSD locales agregando el Campo volumes[] al trabajo. Por ejemplo, consulta la muestra de código de con SSD locales.

        • No: Quita el campo disks[].

      5. ¿La reserva usa el tipo de consumo específico?

        • Sí: Reemplaza SPECIFIC_RESERVATION_NAME con el nombre de la reserva.

        • No: Quita el campo reservation.

      Por ejemplo, imagina que usas un bucket reserva para n2-standard-32 VM que no especifica ninguna plataforma de CPU mínima, GPU o SSD locales. Además, no quieres especificar una plantilla de instancias de VM. En ese caso, debes reemplazar VM_RESOURCES por el siguiente valor:

      "policy": {
        "machineType": "n2-standard-32"
      }

¿Qué sigue?