En este documento, se explica cómo usar las reservas de Compute Engine para obtener un alto nivel de garantía de que tus trabajos de entrenamiento sin servidores tengan los recursos de máquina virtual (VM) necesarios para ejecutarse.
Las reservas son una función de Compute Engine. Ayudan a garantizar que tengas los recursos disponibles para crear VMs con el mismo hardware (memoria y CPUs virtuales) y los 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 consumir los recursos reservados de inmediato, y permanecerán disponibles hasta que borres la reserva.
- Se te cobrará por los recursos reservados con la misma tarifa a pedido que las VMs en ejecución, incluidos los descuentos correspondientes, hasta que se borre la reserva. Una VM que consume una reserva no genera cargos independientes. Solo se te cobrarán los recursos que no estén incluidos en la reserva, como los discos o las direcciones IP. Para obtener más información, consulta los precios de las reservas.
Limitaciones y requisitos
Cuando uses las reservas de Compute Engine con Agent Platform, ten en cuenta las siguientes limitaciones y requisitos:
- Agent Platform solo puede usar reservas para CPUs, VMs de GPU o TPUs (versión preliminar).
- Agent Platform no puede consumir reservas de VMs que tengan discos SSD locales conectados de forma manual.
- El uso de reservas de Compute Engine con Agent Platform solo se admite para el entrenamiento y la inferencia sin servidores, y Gemini Enterprise Agent Platform Workbench (versión preliminar).
- Para consumir la reserva, las propiedades de la VM de la reserva deben coincidir exactamente con tu carga de trabajo de Agent Platform. Por ejemplo, si una reserva especifica un
tipo de máquina
a2-ultragpu-8g, la carga de trabajo de Agent Platform solo puede consumir la reserva si también usa un tipo de máquinaa2-ultragpu-8g. Consulta Requisitos. - Para consumir una reserva compartida de VMs de GPU o TPU, debes consumirla con su proyecto propietario o un proyecto de consumidor con el que se comparte la reserva. Consulta Cómo funcionan las reservas compartidas.
- Para admitir actualizaciones periódicas de tus implementaciones de Agent Platform, te recomendamos que aumentes el recuento de VMs en al menos 1 VM adicional para cada implementación simultánea.
-
Se admiten tanto el inicio flexible para Dynamic Workload Scheduler como la ejecución de trabajos de entrenamiento en un recurso persistente, excepto cuando se usan reservas de Compute Engine con el entrenamiento de Agent Platform.
Facturación
Cuando usas las reservas de Compute Engine, se te factura lo siguiente:
- Precios de Compute Engine para los recursos de Compute Engine, incluidos los descuentos por compromiso de uso (CUD) aplicables. Consulta los precios de Compute Engine.
- Tarifas de administración del entrenamiento sin servidores de Agent Platform, además del uso de tu infraestructura. Consulta Precios de los modelos entrenados de forma personalizada.
Antes de comenzar
- Revisa los requisitos y las y las restricciones para las reservas.
- Revisa los requisitos de cuota y las restricciones para las reservas.
Permite que se consuma una reserva
Antes de consumir una reserva de CPU, VMs de GPU o TPU, debes configurar su política de uso compartido para permitir que Agent Platform 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 Agent Platform consuma la reserva de la siguiente manera:
- Si usas la consola de Cloud de Confiance , en la sección Servicios de Google Cloud, selecciona Compartir reserva.
- Si usas Google Cloud CLI, incluye la marca
--reservation-sharing-policyestablecida enALLOW_ALL. - Si usas la API de REST, incluye el campo
serviceShareTypeconfigurado comoALLOW_ALLen el cuerpo de la solicitud.
Permite el consumo de una reserva existente
Solo puedes modificar una reserva creada de forma automática de VMs de GPU o TPU para una reserva futura después de la hora de inicio de la reserva.
Para permitir que Agent Platform consuma una reserva existente, usa uno de los siguientes métodos:
Verifica que se consuma una reserva
Para verificar que se esté consumiendo la reserva, consulta Verifica el consumo de reservas en la documentación de Compute Engine.Crea un trabajo de entrenamiento sin servidores con una reserva
Usa la API de REST para crear un trabajo de entrenamiento sin servidores que consuma una reserva de Compute Engine de VMs de GPU.
Cómo funcionan la afinidad y la validación de reservas
Cuando envías un trabajo de entrenamiento personalizado que especifica una configuración de reservationAffinity, Agent Platform valida la configuración de tu reserva
antes de poner en cola el trabajo:
- Para
ANY_RESERVATION:- Debe existir al menos una reserva consumida automáticamente en la región de tu trabajo y debe compartirse con Agent Platform (y con tu proyecto, si la reserva está en un proyecto host diferente).
- Los campos
keyyvaluesenreservationAffinitydeben omitirse o estar vacíos.
- Para
SPECIFIC_RESERVATION:- El campo
keydebe establecerse encompute.googleapis.com/reservation-name, y el campovaluesdebe especificar una sola reserva existente en una zona dentro de la región del trabajo. - La reserva especificada debe configurarse para una segmentación específica (no para el consumo automático) y debe compartirse con Agent Platform (y con tu proyecto, si la reserva se encuentra en un proyecto host diferente).
- El campo
Si alguna de estas verificaciones de validación falla, la API rechaza de inmediato la solicitud
con un error INVALID_ARGUMENT. La validación inicial no verifica la compatibilidad del tipo de máquina
ni la capacidad de reserva disponible en el momento del envío del trabajo.
En la siguiente tabla, se resume cómo Agent Platform controla un trabajo de entrenamiento
en función del estado de la reserva y reservationAffinityType:
| Situación | Comportamiento con ANY_RESERVATION |
Comportamiento con SPECIFIC_RESERVATION |
|---|---|---|
| La reserva existe, coincide con las propiedades de la máquina y tiene capacidad disponible | El trabajo se acepta, se enruta a la zona de la reserva y consume la reserva. | El trabajo se acepta y consume la reserva especificada. |
| La reserva existe y coincide con las propiedades de la máquina, pero está llena | El trabajo se acepta y se enruta a la zona en la que se encuentra tu reserva coincidente. Debido a que se agotó la capacidad reservada, Agent Platform intenta aprovisionar capacidad a pedido. | El trabajo se acepta, pero si la capacidad no está disponible en la reserva de destino, Agent Platform. No recurre a la capacidad on-demand. |
| La reserva existe, pero no se comparte con Agent Platform ni con el proyecto de consumidor |
El trabajo falla de inmediato en el envío con un
error INVALID_ARGUMENT (a menos que exista otra reserva accesible
consumida automáticamente en la región).
|
El trabajo falla de inmediato en el envío con un
error INVALID_ARGUMENT.
|
| No existe ninguna reserva accesible en la región del trabajo |
El trabajo falla de inmediato en el envío con un
error INVALID_ARGUMENT. No recurre a la capacidad
on demand.
|
El trabajo falla de inmediato en el envío con un
error INVALID_ARGUMENT.
|
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 compartir la reserva 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 el trabajo. 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 conectarán a la máquina.
- Define el trabajo de entrenamiento personalizado:
RESERVATION_AFFINITY_TYPE: debe ser
ANY_RESERVATION,SPECIFIC_RESERVATIONoNO_RESERVATION.ANY_RESERVATIONsignifica que las VMs de tucustomJobpueden consumir automáticamente cualquier reserva con propiedades coincidentes.SPECIFIC_RESERVATIONsignifica que las VMs de tucustomJobsolo pueden consumir una reserva a la que las VMs se orienten de forma específica por nombre.NO_RESERVATIONsignifica que las VMs decustomJobno pueden consumir ninguna reserva. EspecificarNO_RESERVATIONtiene el mismo efecto que omitir una especificación de afinidad de reserva.
- ZONE: Es la zona en la que se creó la reserva.
- RESERVATION_NAME: Es 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) opd-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
1para 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/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",
// Use the following key and values only if
// the reservationAffinityType is SPECIFIC_RESERVATION.
"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 y los TRAININGPIPELINE_ID.
¿Qué sigue?
- Obtén información sobre las reservas de los recursos zonales de Compute Engine.
- Obtén información para usar reservas con la inferencia en línea de Agent Platform.
- Obtén información para usar reservas con la inferencia por lotes de Agent Platform.
- Obtén información para ver las reservas.
- Obtén más información para supervisar el consumo de reservas.