単一のデプロイで任意のカスタムルートを使用する

最新の 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)