最新の LLM サービングでは、モデルサーバーはさまざまな目的で複数の推論ルートを実装してサポートしています。このようなユースケースでは、Vertex Inference は invoke
メソッドを使用して、単一のデプロイで複数のルートにアクセスすることをおすすめします。
invoke
メソッドは、Model
をアップロードするときに、invokeRoutePrefix
を "/*"
に設定することで有効にできます。モデルがエンドポイントにデプロイされると、モデルサーバーのルート以外のルートは、HTTP 呼び出しでアクセスできるようになります。たとえば、「/invoke/foo/bar」は「/foo/bar」としてモデルサーバーに転送されます。
この機能は公開プレビュー段階であり、次の制限があります。
- 有効なモデルの呼び出しは、専用エンドポイントにのみデプロイできます。
- 呼び出しが有効になっているモデルでは HTTP 呼び出しのみがサポートされ、RPC はサポートされていません。
- モデルをアップロードするときに、
predictRoute
またはinvokeRoutePrefix
のいずれか 1 つのみを設定できます。デフォルト値はpredictRoute
です。Model でinvokeRoutePrefix
フィールドが設定されている場合、デプロイ後にinvoke
以外の他のすべての Vertex ルート(:predict
、:rawPredict
など)が無効になります。 invokeRoutePrefix
で使用できる値は"/*"
のみで、ルート以外のすべてのパスが公開されます。公開したくないルートは慎重に処理することをおすすめします。
呼び出しが有効なモデルをアップロードする
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,
)
呼び出しが有効なモデルをデプロイする
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,
)
任意のカスタムルートで推論リクエストを行う
呼び出しルートは、デプロイ内のすべての非ルート リクエストパスへのアクセスを許可します。たとえば、/invoke/foo/bar
は /foo/bar
としてモデルサーバーに転送されます。ルートにアクセスする方法は 2 つあります。
専用エンドポイントへのカスタムルート リクエスト
専用エンドポイントへの呼び出しリクエストは、トラフィック分割構成に基づいてデプロイされたモデルのいずれかにルーティングされます。
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)
デプロイされたモデルへのカスタムルート リクエスト
特定のデプロイ済みモデルをターゲットにして呼び出しリクエストを行うことができます。これはテストとデバッグに役立ちます。
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)