En este documento, se explica cómo usar las reservas de Compute Engine para garantizar que tus trabajos de inferencia en línea 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 CPU 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 sucede lo siguiente:
- Puedes consumir los recursos reservados de inmediato, y estos permanecerán disponibles hasta que borres la reserva.
- Se te cobrarán los recursos reservados con la misma tarifa según demanda que las VMs en ejecución, incluidos los descuentos aplicables, hasta que se borre la reserva. Una VM que consume una reserva no incurre en cargos independientes. Solo se te cobrarán los recursos fuera de 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 (vista previa).
- 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 sin servidores, la inferencia y Agent Platform Workbench (vista previa) de Gemini Enterprise Agent Platform.
- 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 los Requisitos. - Para consumir una reserva compartida de VMs de GPU o TPUs, 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 VM en más de la cantidad total de réplicas de la siguiente manera, según el
tipo de reserva que use tu
DeployedModel:SPECIFIC_RESERVATION: Debe especificar al menos 1 VM adicional; recomendamos un 10% (pero al menos 1). Se garantiza que los modelos implementados que usanSPECIFIC_RESERVATIONsolo consumirán VMs de la reserva. Agent Platform no puede realizar actualizaciones si no hay una VM adicional.ANY:- No es necesario tener VMs adicionales, ya que los modelos implementados que usan
ANYreserva usan VMs a pedido si la capacidad de la reserva no es suficiente. Sin embargo, sin VMs adicionales, es posible que tu reserva no se utilice por completo después de una actualización. Por ejemplo, supongamos que tienes una reserva con 40 VMs y que implementas un modelo con 40 réplicas con esa reserva. Cuando implementas por primera vez, elDeployedModelusa las 40 VMs de la reserva. Después de una actualización, solo 36 VMs son de la reserva y 4 VMs son a pedido. - Si deseas mantener el uso dentro de la reserva, te recomendamos que tengas al menos 1
VM adicional para cada
DeployedModeloDeploymentResourcePoolque use la reserva. Si la cantidad total de VMs del mismo tipo en tusANYreservas es inferior a 50, recomendamos un 10% (pero al menos 1) más. Si es superior a 50, recomendamos un 25% más. Por ejemplo:- Si planeas implementar modelos con 40 VMs A3, puedes tener 1 reserva A3 con 44 VMs o 2 reservas A3: la reserva X con 30 VMs y la reserva Y con 14 VMs (44 en total). Lo mismo se aplica a otras cantidades de reservas, siempre que se compartan todas con Agent Platform y la cantidad total de VMs en esas reservas sea de al menos 44.
- Si planeas implementar modelos con 100 VMs A3, la cantidad total de VMs en todas las reservas A3 compartidas con Agent Platform debe ser de al menos 125.
- Si planeas implementar 2 modelos con 10 VMs, la cantidad total de VMs en todas las reservas A3
compartidas con Agent Platform debe ser de al menos
12. La cantidad de VMs es inferior a 50, pero la cantidad de VMs adicionales es 2
(1 por
DeployedModel).
- Para consumir una reserva
SPECIFIC_RESERVATION, otorga el rol de IAM Visualizador de Compute a la cuenta de servicio de Agent Platform en el proyecto al que pertenecen las reservas (service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com, donde PROJECT_NUMBER es el número de proyecto del proyecto que consume la reserva).
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 de inferencia en línea de Agent Platform, además del uso de tu infraestructura. Consulta Precios de las predicciones.
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 CPUs, VMs de GPU o TPUs, 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:
Permite 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 Google Cloud consola, en la sección Servicios de Google Cloud, selecciona Compartir reserva.
- Si usas Google Cloud CLI, incluye la
--reservation-sharing-policymarca establecida enALLOW_ALL. - Si usas la API de REST, en el cuerpo de la solicitud, incluye el
serviceShareTypecampo establecido enALLOW_ALL.
Permite el consumo de una reserva existente
Solo puedes modificar una reserva creada automáticamente de VMs de GPU o TPUs 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:
Permite el consumo de varias reservas específicas
Puedes permitir el consumo de varias reservas específicas si especificas dos o más
reservas, en orden de prioridad, en la lista de nombres de reserva en el campo values de la especificación de afinidad de reserva. Debes enumerarlas en orden de prioridad.
Cada reserva debe compartirse con Vertex, y la zona de la reserva debe estar en la región del extremo. De lo contrario, puedes combinar reservas en proyectos de origen y varias zonas.
Verifica que se consuma una reserva
Para verificar que se consuma la reserva, consulta Verifica el consumo de reservas en la documentación de Compute Engine.Obtén inferencias en línea con una reserva
Para crear una implementación de modelo que consuma una reserva de Compute Engine de VMs de GPU, usa la API de REST o el SDK de Agent Platform para Python.
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION_ID: La región en la que usas Agent Platform.
- 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 Modifica los proyectos de consumidor en una reserva compartida.
- ENDPOINT_ID: Es el ID del extremo.
- MODEL_ID: El ID del modelo que se implementará.
-
DEPLOYED_MODEL_NAME: Un nombre para
DeployedModelTambién puedes usar el nombre comercial deModelparaDeployedModeltambién. - MACHINE_TYPE: El tipo de máquina que se usará para cada nodo en esta implementación. 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 la predicción. - ACCELERATOR_TYPE: 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 GPUs para cargas de trabajo de procesamiento.
- ACCELERATOR_COUNT: La cantidad de aceleradores que se conectarán a la máquina.
- RESERVATION_AFFINITY_TYPE: Debe ser
ANY,SPECIFIC_RESERVATIONoNONE.ANYsignifica que las VMs de tucustomJobpueden consumir automáticamente cualquier reserva con propiedades coincidentes.SPECIFIC_RESERVATIONsignifica que las VMs de tucustomJobsolo pueden consumir reservas a las que las VMs se orienten de forma específica por nombre.NONEsignifica que las VMs decustomJobno pueden consumir ninguna reserva. EspecificarNONEtiene 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_N: Los nombres de tus reservas, en orden de prioridad. Cada uno debe ser el nombre completo del recurso de la reserva o el bloque de reserva.
- MIN_REPLICA_COUNT: La cantidad mínima de nodos para esta implementación. El recuento de nodos se puede aumentar o disminuir según lo requiera la carga de inferencia, hasta la cantidad máxima de nodos y nunca menos que esta cantidad. Este valor debe ser mayor o igual que 1.
- MAX_REPLICA_COUNT: La cantidad máxima de nodos para esta implementación. El recuento de nodos se puede aumentar o disminuir según lo requiera la carga de inferencia, hasta esta cantidad de nodos y nunca menos que la cantidad mínima de nodos.
- TRAFFIC_SPLIT_THIS_MODEL: El porcentaje del tráfico de predicción a este extremo para enrutar al modelo que se implementa con esta operación. La configuración predeterminada es 100. Todos los porcentajes de tráfico deben sumar hasta 100. Obtén más información sobre las divisiones del tráfico.
- DEPLOYED_MODEL_ID_N: Opcional Si se implementan otros modelos en este extremo, debes actualizar sus porcentajes de división del tráfico para que todos los porcentajes sumen hasta 100.
- TRAFFIC_SPLIT_MODEL_N: El valor de porcentaje de división del tráfico para la clave del ID del modelo implementado
- PROJECT_NUMBER: El número de proyecto de tu proyecto generado de forma automática.
HTTP method and URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
Cuerpo JSON de la solicitud:
{
"deployedModel": {
"model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
"displayName": "DEPLOYED_MODEL_NAME",
"dedicatedResources": {
"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_1",
"projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_2"
]
}
},
"minReplicaCount": MIN_REPLICA_COUNT,
"maxReplicaCount": MAX_REPLICA_COUNT
},
},
"trafficSplit": {
"0": TRAFFIC_SPLIT_THIS_MODEL,
"DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
"DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
},
}
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{
"name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
"genericMetadata": {
"createTime": "2020-10-19T17:53:16.502088Z",
"updateTime": "2020-10-19T17:53:16.502088Z"
}
}
}
Python
Si deseas obtener información para instalar o actualizar el SDK de Agent Platform para Python, consulta Instala el SDK de Agent Platform para Python. Si deseas obtener más información, consulta la documentación de referencia de la API del SDK de Agent Platform para Python.
Antes de ejecutar cualquiera de las siguientes secuencias de comandos, realiza los siguientes reemplazos:
- DEPLOYED_NAME: Un nombre para el modelo implementado.
- TRAFFIC_SPLIT: El valor de porcentaje de división del tráfico para la clave del ID del modelo implementado
- MACHINE_TYPE: La máquina que se usa para cada nodo de esta
implementación. Su configuración predeterminada es
n1-standard-2. Obtén más información sobre los tipos de máquinas. - ACCELERATOR_TYPE: 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 GPUs para cargas de trabajo de procesamiento.
- ACCELERATOR_COUNT: La cantidad de aceleradores que se conectarán a la máquina.
- 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 Modifica los proyectos de consumidor en una reserva compartida.
- ZONE: Es la zona en la que se encuentra la reserva.
- RESERVATION_NAME_N: Los nombres de tus reservas, en orden de prioridad. Cada uno debe ser el nombre completo del recurso de la reserva o el bloque de reserva.
- MIN_REPLICA_COUNT: La cantidad mínima de nodos para esta implementación. El recuento de nodos se puede aumentar o disminuir según lo requiera la carga de inferencia, hasta la cantidad máxima de nodos y nunca menos que esta cantidad. Este valor debe ser mayor o igual que 1.
- MAX_REPLICA_COUNT: La cantidad máxima de nodos para esta implementación. El recuento de nodos se puede aumentar o disminuir según lo requiera la carga de inferencia, hasta esta cantidad de nodos y nunca menos que la cantidad mínima de nodos.
Según el tipo de reserva que deseas consumir, realiza una de las siguientes acciones:
- Para consumir una o más reservas específicas:
endpoint5.deploy( model = model, deployed_model_display_name=DEPLOYED_NAME, traffic_split=TRAFFIC_SPLIT, machine_type="MACHINE_TYPE", accelerator_type="ACCELERATOR_TYPE", accelerator_count=ACCELERATOR_COUNT, reservation_affinity_type="SPECIFIC_RESERVATION", reservation_affinity_key="compute.googleapis.com/reservation-name", reservation_affinity_values=[ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_1", "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_2" ], min_replica_count=MIN_REPLICA_COUNT, max_replica_count=MAX_REPLICA_COUNT, sync=True )
- Para consumir una reserva que se consume automáticamente:
endpoint5.deploy( model = model, deployed_model_display_name=DEPLOYED_NAME, traffic_split=TRAFFIC_SPLIT, machine_type="MACHINE_TYPE", accelerator_type="ACCELERATOR_TYPE", accelerator_count=ACCELERATOR_COUNT, reservation_affinity_type="ANY_RESERVATION", min_replica_count=MIN_REPLICA_COUNT, max_replica_count=MAX_REPLICA_COUNT, sync=True )
¿Qué sigue?
- Obtén información sobre las reservas de los recursos zonales de Compute Engine.
- Obtén información para usar reservas con Agent Platform inferencia por lotes.
- Obtén información para usar reservas con Agent Platform entrenamiento.
- Obtén información para ver las reservas.
- Obtén información para supervisar el consumo de reservas.