Dalam penayangan LLM modern, server model menerapkan dan mendukung beberapa rute inferensi untuk berbagai tujuan. Untuk kasus penggunaan tersebut, Vertex Inference merekomendasikan penggunaan metode invoke untuk mengakses beberapa rute pada satu deployment.
Metode invoke dapat diaktifkan saat mengupload Model dengan menetapkan
invokeRoutePrefix sebagai "/*". Setelah Model di-deploy ke endpoint, rute non-root apa pun di server model akan dapat diakses dengan panggilan HTTP invoke.
Misalnya, "/invoke/foo/bar" akan diteruskan sebagai "/foo/bar" ke server model.
Fitur ini berada dalam tahap pratinjau publik dan memiliki batasan berikut:
- Model yang mengaktifkan invoke hanya dapat di-deploy ke endpoint khusus.
- Hanya panggilan HTTP yang didukung untuk model yang mengaktifkan invoke, dan RPC tidak didukung.
- Saat mengupload model, hanya salah satu dari
predictRouteatauinvokeRoutePrefixyang dapat ditetapkan. Nilai defaultnya adalahpredictRoute. JikainvokeRoutePrefixkolom ditetapkan pada Model, semua rute Vertex lainnya selaininvoke(misalnya,:predict,:rawPredict..) akan dinonaktifkan setelah di-deploy. "/*"adalah satu-satunya nilai yang diizinkan untukinvokeRoutePrefix, dan nilai ini mengekspos semua jalur non-root. Penanganan yang cermat untuk rute yang tidak ingin Anda ekspos disarankan.
Mengupload Model yang mengaktifkan invoke
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,
)
Men-deploy Model yang mengaktifkan invoke
dedicated_endpoint = aiplatform.Endpoint.create(
display_name="dedicated-endpoint-for-invoke-enabled-model",
dedicated_endpoint_enabled=True,
sync=True,
)
dedicated_endpoint.deploy(
model=invoke_enabled_model,
traffic_percentage=100,
machine_type=MACHINE_TYPE,
accelerator_type=ACCELERATOR_TYPE,
accelerator_count=1,
max_replica_count=1,
)
Membuat permintaan inferensi pada rute kustom arbitrer
Rute invoke memungkinkan akses ke semua jalur permintaan non-root dalam deployment.
Misalnya, /invoke/foo/bar akan diteruskan sebagai /foo/bar ke server model. Ada dua cara untuk mengakses rute.
Permintaan rute kustom ke endpoint khusus
Permintaan invoke ke endpoint khusus akan dirutekan ke salah satu model yang di-deploy berdasarkan konfigurasi pemisahan traffic.
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)
Permintaan rute kustom ke model yang di-deploy
Permintaan invoke dapat dibuat untuk menargetkan model yang di-deploy tertentu. Hal ini dapat berguna untuk pengujian dan proses debug.
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)