Usa reservas con el entrenamiento

En este documento, se explica cómo usar las reservas de Compute Engine para obtener un alto nivel de seguridad de que tus trabajos de entrenamiento personalizados tengan los recursos necesarios para ejecutarse.

Para asegurarte de que tus trabajos de entrenamiento personalizados tengan los recursos de instancias de máquina virtual (VM) disponibles cuando los necesiten, usa las reservas de Compute Engine. Las reservas proporcionan un nivel de seguridad alto a fin de obtener capacidad para una o más VMs con la configuración de hardware especificada. Una reserva de una VM genera los costos de esa VM desde el momento en que la creas hasta que la borras. Sin embargo, mientras consumes esa VM, el costo total equivale al de una VM sin reserva. Para obtener más información, consulta Reservas de recursos zonales de Compute Engine.

Limitaciones y requisitos

Cuando uses las reservas de Compute Engine con Vertex AI, ten en cuenta las siguientes limitaciones y requisitos:

  • Vertex AI solo puede consumir reservas de VMs que tengan GPUs conectadas.
  • El uso de reservas de Compute Engine con Vertex AI solo se admite para el entrenamiento y la predicción personalizados.
  • Para consumir la reserva, las propiedades de la VM de la reserva deben coincidir exactamente con tu carga de trabajo de Vertex AI. Por ejemplo, si una reserva especifica un tipo de máquina a2-ultragpu-8g, la carga de trabajo de Vertex AI solo puede consumir la reserva si también usa un tipo de máquina a2-ultragpu-8g. Consulta Requisitos.
  • Para consumir una reserva compartida de VMs de GPU, debes consumirla con su proyecto propietario o un proyecto consumidor con el que se comparte la reserva. Consulta Cómo funcionan las reservas compartidas.
  • Para admitir actualizaciones periódicas de tus implementaciones de Vertex AI, te recomendamos que aumentes el recuento de VMs en al menos 1 VM adicional para cada implementación simultánea.
  • Los siguientes servicios y funciones no son compatibles cuando se usan reservas de Compute Engine con el entrenamiento de Vertex AI:

Facturación

Cuando usas las reservas de Compute Engine, se te factura lo siguiente:

Antes de comenzar

Permite que se consuma una reserva

Antes de consumir una reserva de VMs de GPU, debes configurar su política de uso compartido para permitir que Vertex AI consuma la reserva. Para ello, usa uno de los siguientes métodos:

Cómo permitir el consumo mientras se crea una reserva

Cuando creas una reserva de un solo proyecto o compartida de VMs de GPU, puedes permitir que Vertex AI consuma la reserva de la siguiente manera:

  • Si usas la consola de Google Cloud, en la sección Servicios de Google Cloud, selecciona Compartir reserva.
  • Si usas Google Cloud CLI, incluye la marca --reservation-sharing-policy establecida en ALLOW_ALL.
  • Si usas la API de REST, en el cuerpo de la solicitud, incluye el campo serviceShareType configurado en ALLOW_ALL.

Cómo permitir el consumo en una reserva existente

Para permitir que Vertex AI consuma una reserva existente de VMs de GPU, consulta Cómo modificar la política de uso compartido de una reserva.

Crea un trabajo de entrenamiento personalizado con una reserva

Para crear un trabajo de entrenamiento personalizado que consuma una reserva de Compute Engine de VMs con GPU, usa la API de REST.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • LOCATION: es la región en la que se ejecutará el contenedor o el paquete de Python.
  • PROJECT_ID: Es el proyecto en el que se creó la reserva. Para consumir una reserva compartida desde otro proyecto, debes compartirla con ese proyecto. Para obtener más información, consulta Modifica los proyectos de consumidor en una reserva compartida.
  • JOB_NAME: Obligatorio. Es un nombre visible para CustomJob.
  • MACHINE_TYPE: Es el tipo de máquina que se usará para la tarea. Su configuración predeterminada es n1-standard-2. Para obtener más información sobre los tipos de máquinas compatibles, consulta Configura recursos de procesamiento para el entrenamiento personalizado.
  • ACCELERATOR_TYPE: Es el tipo de acelerador que se conectará a la máquina. Para obtener más información sobre el tipo de GPU que admite cada tipo de máquina, consulta GPU para cargas de trabajo de procesamiento.
  • ACCELERATOR_COUNT: Es la cantidad de aceleradores que se deben conectar a la máquina.
  • Define el trabajo de entrenamiento personalizado:
    • RESERVATION_AFFINITY_TYPE: debe ser ANY, SPECIFIC_RESERVATION o NONE.

      • ANY significa que las VMs de tu customJob pueden consumir automáticamente cualquier reserva con propiedades coincidentes.
      • SPECIFIC_RESERVATION significa que las VMs de tu customJob solo pueden consumir una reserva a la que las VMs se orienten de forma específica por nombre.
      • NONE significa que las VMs de customJob no pueden consumir ninguna reserva. Especificar NONE tiene el mismo efecto que omitir una especificación de afinidad de reserva.
    • RESERVATION_NAME: el nombre de tu reserva.
    • DISK_TYPE: Opcional es el tipo de disco de arranque que se usará para el trabajo, ya sea pd-standard (predeterminado) o pd-ssd. Obtén más información sobre los tipos de discos.
    • DISK_SIZE: Opcional es el tamaño en GB del disco de arranque que se usará para el trabajo. El valor predeterminado es 100.
    • REPLICA_COUNT: Es la cantidad de réplicas de trabajadores que se deben usar. En la mayoría de los casos, debes configurar esta opción como 1 para el primer grupo de trabajadores.
    • Si tu aplicación de entrenamiento se ejecuta en un contenedor personalizado, especifica lo siguiente:
      • CUSTOM_CONTAINER_IMAGE_URI: es el URI de una imagen de contenedor en Artifact Registry o Docker Hub que se ejecuta en cada réplica de trabajador.
      • CUSTOM_CONTAINER_COMMAND: Opcional El comando que se invocará cuando se inicie el contenedor. Este comando anula el punto de entrada predeterminado del contenedor.
      • CUSTOM_CONTAINER_ARGS: Opcional son los argumentos que se transmitirán cuando se inicia el contenedor (opcional).
    • Si tu aplicación de entrenamiento es un paquete de Python que se ejecuta en un contenedor compilado previamente, especifica lo siguiente:
      • EXECUTOR_IMAGE_URI: Es el URI de la imagen de contenedor que ejecuta el código proporcionado. Consulta los contenedores compilados previamente disponibles para el entrenamiento.
      • PYTHON_PACKAGE_URIS: es una lista separada por comas de URI de Cloud Storage que especifican los archivos de paquete de Python que son el programa de entrenamiento y sus paquetes dependientes. La cantidad máxima de URI de paquete es 100.
      • PYTHON_MODULE: es el nombre del módulo de Python que se ejecutará después de instalar los paquetes.
      • PYTHON_PACKAGE_ARGS: Opcional son los argumentos de la línea de comandos que se pasarán al módulo de Python.
    • TIMEOUT: Opcional es el tiempo máximo de ejecución para el trabajo.
  • Especifica LABEL_NAME y LABEL_VALUE para las etiquetas que desees aplicar a este trabajo personalizado.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs

Cuerpo JSON de la solicitud:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "MACHINE_TYPE",
          "acceleratorType": "ACCELERATOR_TYPE",
          "acceleratorCount": ACCELERATOR_COUNT,
          "reservationAffinity": {
            "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
            "key": "compute.googleapis.com/reservation-name",
            "values": [
              "projects/PROJECT_ID/reservations/RESERVATION_NAME"
            ]
          },
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

La respuesta contiene información sobre las especificaciones y los TRAININGPIPELINE_ID.

¿Qué sigue?