En el servicio de LLMs moderno, los servidores de modelos implementan y admiten varias rutas de inferencia para diferentes propósitos. En esos casos prácticos, Vertex Inference recomienda usar el método invoke
para acceder a varias rutas en una sola implementación.
El método invoke
se puede habilitar al subir un Model
si se define invokeRoutePrefix
como "/*"
. Una vez que el modelo se haya desplegado en un endpoint, se podrá acceder a cualquier ruta que no sea raíz en el servidor del modelo mediante una llamada HTTP invoke.
Por ejemplo, "/invoke/foo/bar" se reenviaría como "/foo/bar" al servidor del modelo.
Esta función está en fase de vista previa pública y tiene las siguientes restricciones:
- Los modelos habilitados para invocar solo se pueden desplegar en un endpoint específico.
- Solo se admiten llamadas HTTP para los modelos con invocación habilitada y no se admite RPC.
- Al subir un modelo, solo se puede definir uno de los valores
predictRoute
oinvokeRoutePrefix
. El valor predeterminado espredictRoute
. Si el campoinvokeRoutePrefix
se define en un modelo, todas las demás rutas de Vertex, exceptoinvoke
(por ejemplo,:predict
,:rawPredict
, etc.), se inhabilitarán una vez desplegado. "/*"
es el único valor permitido parainvokeRoutePrefix
y expone todas las rutas que no son raíz. Se recomienda tener cuidado con las rutas que no quieras exponer.
Subir un modelo con invocación habilitada
from google.cloud import aiplatform
invoke_enabled_model = aiplatform.Model.upload(
display_name="invoke-enabled-model",
serving_container_image_uri=IMAGE_URI,
serving_container_invoke_route_prefix="/*",
serving_container_health_route=HEALTH_ROUTE,
serving_container_environment_variables={"KEY": "VALUE"},
serving_container_args=[],
sync=True,
)
Desplegar un modelo con invocación habilitada
dedicated_endpoint = aiplatform.Endpoint.create(
display_name="dedicated-endpoint-for-invoke-enabled-model",
dedicated_endpoint_enabled=True,
sync=True,
)
dedicated_endpoint.deploy(
model=model,
traffic_percentage=100,
machine_type=MACHINE_TYPE,
accelerator_type=ACCELERATOR_TYPE,
accelerator_count=1,
max_replica_count=1,
)
Hacer una solicitud de inferencia en una ruta personalizada arbitraria
La ruta de invocación permite acceder a todas las rutas de solicitud que no sean de raíz en la implementación.
Por ejemplo, /invoke/foo/bar
se reenviará como /foo/bar
al servidor del modelo. Hay dos formas de acceder a la ruta.
Solicitud de ruta personalizada a un endpoint específico
Las solicitudes a un endpoint específico se dirigirán a uno de los modelos desplegados en función de la configuración de división del tráfico.
def invoke_tabular_sample(
project: str,
location: str,
endpoint_id: str,
request_path: str,
http_request_body: Dict[str, Any],
stream: bool = False,
):
aiplatform.init(project=project, location=location)
dedicated_endpoint = aiplatform.Endpoint(endpoint_id)
if stream:
for chunk in dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
stream=True,
):
print(chunk)
else:
response = dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
)
print(response)
Solicitud de ruta personalizada a un modelo desplegado
Se puede enviar una solicitud de invocación para orientarla a un modelo implementado específico. Puede ser útil para hacer pruebas y depurar errores.
def invoke_direct_deployed_model_inference_tabular_sample(
project: str,
location: str,
endpoint_id: str,
request_path: str,
http_request_body: Dict[str, Any],
deployed_model_id: str,
stream: bool = False,
):
aiplatform.init(project=project, location=location)
dedicated_endpoint = aiplatform.Endpoint(endpoint_id)
if stream:
for chunk in dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
deployed_model_id=deployed_model_id,
stream=True,
):
print(chunk)
else:
response = dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
deployed_model_id=deployed_model_id,
)
print(response)