En este documento se explica cómo usar las reservas de Compute Engine para asegurarte de que tus tareas de entrenamiento personalizadas tengan los recursos de máquina virtual (VM) necesarios para ejecutarse.
Las reservas son una función de Compute Engine. Te ayudan a asegurarte de que tienes los recursos disponibles para crear máquinas virtuales con el mismo hardware (memoria y vCPUs) y recursos opcionales (CPUs, GPUs, TPUs y discos SSD locales) cuando los necesites.
Cuando creas una reserva, Compute Engine verifica que la capacidad solicitada esté disponible en la zona especificada. Si es así, Compute Engine reserva los recursos, crea la reserva y ocurre lo siguiente:
- Puedes usar los recursos reservados inmediatamente y seguirán estando disponibles hasta que elimines la reserva.
- Se te cobrarán los recursos reservados a la misma tarifa bajo demanda que las máquinas virtuales en ejecución, incluidos los descuentos aplicables, hasta que se elimine la reserva. Las VMs que consumen una reserva no incurren en cargos independientes. Solo se te cobrarán los recursos que no estén incluidos en la reserva, como discos o direcciones IP. Para obtener más información, consulta los precios de las reservas.
Limitaciones y requisitos
Cuando uses reservas de Compute Engine con Vertex AI, ten en cuenta las siguientes limitaciones y requisitos:
- Vertex AI solo puede usar reservas para CPUs, VMs con GPU, o TPUs (vista previa).
- Vertex AI no puede consumir reservas de VMs que tengan discos SSD locales vinculados manualmente.
- Solo se admite el uso de reservas de Compute Engine con Vertex AI para el entrenamiento y la inferencia personalizados, así como para Vertex AI Workbench (vista previa).
- Las propiedades de la VM de una reserva deben coincidir exactamente con las de tu carga de trabajo de Vertex AI para que se pueda consumir la reserva. Por ejemplo, si una reserva especifica un tipo de máquina
a2-ultragpu-8g
, la carga de trabajo de Vertex AI solo podrá consumir la reserva si también usa un tipo de máquinaa2-ultragpu-8g
. Consulta los requisitos. - Para consumir una reserva compartida de máquinas virtuales con GPU o TPUs, debes hacerlo con el proyecto propietario o con un proyecto consumidor con el que se haya compartido 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 número de máquinas virtuales en al menos una por cada implementación simultánea.
-
Los siguientes servicios y funciones no se admiten cuando se usan reservas de Compute Engine con el entrenamiento de Vertex AI:
- Inicio flexible para Dynamic Workload Scheduler
- Ejecutar tareas de entrenamiento en un recurso persistente
Facturación
Cuando usas reservas de Compute Engine, se te cobra por lo siguiente:
- Precios de los recursos de Compute Engine, incluidos los descuentos por compromiso de uso (CUDs) aplicables. Consulta los precios de Compute Engine.
- Tarifas de gestión del entrenamiento personalizado de Vertex AI, además del uso de la infraestructura. Consulta los precios de los modelos con entrenamiento personalizado.
Antes de empezar
- Consulta los requisitos y las restricciones de las reservas.
- Consulte los requisitos de cuota y las restricciones de las reservas compartidas.
Permitir que se consuma una reserva
Antes de consumir una reserva de CPUs, VMs con GPU o TPUs, debes definir su política de uso compartido para permitir que Vertex AI consuma la reserva. Para ello, utilice uno de los siguientes métodos:
Permitir el consumo al crear una reserva
Cuando creas una reserva de un solo proyecto o una reserva compartida de VMs con GPU, puedes permitir que Vertex AI consuma la reserva de la siguiente manera:
- Si usas la Google Cloud consola, ve a la sección Servicios de Google Cloud y selecciona Compartir reserva.
- Si usas Google Cloud CLI, incluye la marca
--reservation-sharing-policy
definida comoALLOW_ALL
. - Si usas la API REST, incluye en el cuerpo de la solicitud el campo
serviceShareType
con el valorALLOW_ALL
.
Permitir el consumo en una reserva
Solo puedes modificar una reserva creada automáticamente de VMs con GPU o TPUs para una reserva futura después de la hora de inicio de la reserva.
Para permitir que Vertex AI use una reserva, utilice uno de los siguientes métodos:
Verificar que se ha consumido una reserva
Para comprobar que se está usando la reserva, consulta la sección Verificar el consumo de reservas en la documentación de Compute Engine.Crear una tarea de entrenamiento personalizada con una reserva
Usa la API REST para crear una tarea de entrenamiento personalizada que consuma una reserva de máquinas virtuales con GPU de Compute Engine.
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- LOCATION: la región en la que se ejecutará el contenedor o el paquete de Python.
- PROJECT_ID: el proyecto en el que se creó la reserva. Para consumir una reserva compartida de otro proyecto, debes compartir la reserva con ese proyecto. Para obtener más información, consulta el artículo Modificar los proyectos de consumidor de una reserva compartida.
-
JOB_NAME: obligatorio. Nombre visible de la
CustomJob
. - MACHINE_TYPE: el tipo de máquina que se va a usar en el trabajo. Su ajuste predeterminado es
n1-standard-2
. Para obtener más información sobre los tipos de máquinas admitidos, consulta Configurar recursos de computación para el entrenamiento personalizado. - ACCELERATOR_TYPE: el tipo de acelerador que se va a asociar a la máquina. Para obtener más información sobre el tipo de GPU que admite cada tipo de máquina, consulta GPUs para cargas de trabajo de computación.
- ACCELERATOR_COUNT: número de aceleradores que se van a asociar a la máquina.
- Define el trabajo de entrenamiento personalizado:
RESERVATION_AFFINITY_TYPE: debe ser
ANY
,SPECIFIC_RESERVATION
oNONE
.ANY
significa que las VMs de tucustomJob
pueden consumir automáticamente cualquier reserva con propiedades coincidentes.SPECIFIC_RESERVATION
significa que las VMs de tucustomJob
solo pueden consumir una reserva a la que se dirijan específicamente por su nombre.NONE
significa que las VMs de tucustomJob
no pueden consumir ninguna reserva. EspecificarNONE
tiene el mismo efecto que omitir una especificación de afinidad de reserva.
- ZONE: la zona en la que se creó la reserva.
- RESERVATION_NAME: el nombre de tu reserva.
- DISK_TYPE: opcional. Tipo de disco de arranque que se va a usar en la tarea. Puede ser
pd-standard
(valor predeterminado) opd-ssd
. Más información sobre los tipos de discos - DISK_SIZE: opcional. Tamaño en GB del disco de arranque que se va a usar en la tarea. El valor predeterminado es 100.
- REPLICA_COUNT: el número de réplicas de trabajadores que se deben usar. En la mayoría de los casos, asigna el valor
1
a tu primer grupo de trabajadores. - Si tu aplicación de entrenamiento se ejecuta en un contenedor personalizado, especifica lo siguiente:
- CUSTOM_CONTAINER_IMAGE_URI: URI de una imagen de contenedor en Artifact Registry o Docker Hub que se va a ejecutar en cada réplica de trabajador.
- CUSTOM_CONTAINER_COMMAND: opcional. El comando que se invoca cuando se inicia el contenedor. Este comando anula el punto de entrada predeterminado del contenedor.
- CUSTOM_CONTAINER_ARGS: opcional. Los argumentos que se deben transferir al iniciar el contenedor.
- Si tu aplicación de entrenamiento es un paquete de Python que se ejecuta en un contenedor prediseñado,
especifica lo siguiente:
- EXECUTOR_IMAGE_URI: el URI de la imagen del contenedor que ejecuta el código proporcionado. Consulta los contenedores precompilados disponibles para el entrenamiento.
- PYTHON_PACKAGE_URIS: lista separada por comas de URIs de Cloud Storage que especifican los archivos del paquete de Python que son el programa de entrenamiento y sus paquetes dependientes. El número máximo de URIs de paquetes es 100.
- PYTHON_MODULE: nombre del módulo de Python que se va a ejecutar después de instalar los paquetes.
- PYTHON_PACKAGE_ARGS: opcional. Argumentos de línea de comandos que se van a transferir al módulo de Python.
- TIMEOUT: opcional. Tiempo máximo de ejecución del trabajo.
- Especifica el LABEL_NAME y el LABEL_VALUE de las etiquetas que quieras aplicar a este trabajo personalizado.
Método HTTP y URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/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/zones/ZONE/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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
La respuesta contiene información sobre las especificaciones, así como el elemento TRAININGPIPELINE_ID.
Siguientes pasos
- Consulta más información sobre las reservas de recursos de zona de Compute Engine.
- Consulta cómo usar reservas con la predicción de Vertex AI.
- Consulta cómo ver las reservas.
- Consulta cómo monitorizar el consumo de reservas.