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, semua
rute non-root 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 diaktifkan untuk pemanggilan hanya dapat di-deploy ke endpoint khusus.
- Hanya panggilan HTTP yang didukung untuk model yang diaktifkan pemanggilan, dan RPC tidak didukung.
- Saat mengupload model, hanya salah satu dari
predictRoute
atauinvokeRoutePrefix
yang dapat disetel. Nilai defaultnya adalahpredictRoute
. Jika kolominvokeRoutePrefix
ditetapkan pada Model, semua rute Vertex 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 hati-hati untuk rute yang tidak ingin Anda ekspos sangat disarankan.
Mengupload Model yang mendukung pemanggilan
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 diaktifkan pemanggilan
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,
)
Membuat permintaan inferensi pada rute kustom arbitrer
Rute pemanggilan 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.
Merutekan permintaan khusus ke endpoint khusus
Permintaan pemanggilan ke endpoint khusus akan dirutekan ke salah satu model yang di-deploy berdasarkan konfigurasi pembagian 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 pemanggilan dapat dilakukan 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)