Bei der modernen LLM-Bereitstellung implementieren und unterstützen Modellserver mehrere Inferenzrouten für unterschiedliche Zwecke. Für diese Anwendungsfälle empfiehlt Vertex Inference, die invoke
-Methode zu verwenden, um auf mehrere Routen in einer einzelnen Bereitstellung zuzugreifen.
Die invoke
-Methode kann beim Hochladen eines Model
aktiviert werden, indem invokeRoutePrefix
als "/*"
festgelegt wird. Sobald das Modell auf einem Endpunkt bereitgestellt wurde, ist jede Nicht-Root-Route auf dem Modellserver über einen HTTP-Aufruf zugänglich.
„/invoke/foo/bar“ würde beispielsweise als „/foo/bar“ an den Modellserver weitergeleitet.
Diese Funktion befindet sich in der öffentlichen Vorschau und unterliegt den folgenden Einschränkungen:
- Aktivierte Modelle können nur auf einem dedizierten Endpunkt bereitgestellt werden.
- Für Modelle, die für den Aufruf aktiviert sind, werden nur HTTP-Aufrufe unterstützt. RPC wird nicht unterstützt.
- Beim Hochladen eines Modells kann nur entweder
predictRoute
oderinvokeRoutePrefix
festgelegt werden. Der Standardwert istpredictRoute
. Wenn das FeldinvokeRoutePrefix
für ein Modell festgelegt ist, werden nach der Bereitstellung alle anderen Vertex-Routen außerinvoke
(z. B.:predict
,:rawPredict
usw.) deaktiviert. "/*"
ist der einzige zulässige Wert fürinvokeRoutePrefix
und macht alle Nicht-Root-Pfade verfügbar. Routen, die Sie nicht preisgeben möchten, sollten mit Vorsicht behandelt werden.
Hochladen eines Modells mit aktivierter Aufruffunktion
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,
)
Bereitstellung eines Modells mit Aufruffunktion
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,
)
Inferenzanfrage für eine beliebige benutzerdefinierte Route stellen
Die Invoke-Route ermöglicht den Zugriff auf alle Nicht-Root-Anfragepfade in der Bereitstellung.
Beispiel: /invoke/foo/bar
wird als /foo/bar
an den Modellserver weitergeleitet. Es gibt zwei Möglichkeiten, auf die Route zuzugreifen.
Benutzerdefinierte Route zu einem dedizierten Endpunkt anfordern
Anfragen an einen dedizierten Endpunkt werden basierend auf der Konfiguration für die Traffic-Aufteilung an eines der bereitgestellten Modelle weitergeleitet.
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)
Benutzerdefinierte Routenanfrage an ein bereitgestelltes Modell
Anfragen zum Aufrufen können an ein bestimmtes bereitgestelltes Modell gerichtet werden. Das kann beim Testen und Debuggen hilfreich sein.
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)