安定したエンドポイントおよび API 参照情報¶
このページでは、推論サービスを外部で消費し、Snowflake Gatewayを使用してプロダクションモデルのアップグレードと高可用性を管理するための技術仕様を示します。
Snowflakeゲートウェイによる安定したエンドポイント¶
標準 SPCS イングレスシステムでは、サービスとそのホスト名の間に密な結合があります。サービスが再作成されると、関連付けられているホスト名は失われます。Snowflake Gatewayは、ゲートウェイオブジェクトの有効期間中は変更されない、作成時に割り当てられた永続的なホスト名を指定することにより、この問題を解決します。
主な機能¶
安定した URL: モデルが進化するにつれて、さまざまな基盤となるサービスにゲートウェイをポイントしながら、1つの永続的な URL を維持します。変更は通常、1分以内に反映されます。
トラフィック分割: 割り当てられたパーセンテージに基づいて、リクエストを複数のエンドポイントにルーティングし、ブルーグリーンデプロイまたはカナリアデプロイを容易にします。
自動フェイルオーバー: 利用不可または動作しない状態のエンドポイントから他の正常なターゲットにトラフィックを自動的にリダイレクトします。
ゲートウェイのフェイルオーバー動作¶
ゲートウェイは、指定された健全なエンドポイントの相対的な割合を尊重し、次の場合にフェイルオーバーを自動的にトリガーします。
サービスが一時停止される(auto_resumeがfalse)か、そのコンピューティングプールが一時停止された(再起動するまで)。
サービスのreadinessプローブが失敗するか、完全にドロップされた。
ゲートウェイの所有者が、ターゲットサービスエンドポイントに対する USAGE 権限または OWNERSHIP 権限を失った。
注釈
トラフィックが0%分割された状態でエンドポイントにフェイルオーバーされることはありません。ターゲットがフェイルオーバーの対象となるには、少なくとも1%が必要です。
モデルアップグレードの管理¶
1.ゲートウェイの作成と変更¶
SQL コマンド内で YAML ベースの仕様を使用して、モデルのバージョン間でトラフィックをどのように分散するかを定義できます。
-- Create a gateway to split traffic between V1 (90%) and V2 (10%)
CREATE OR REPLACE GATEWAY my_model_gateway
FROM SPECIFICATION $$
spec:
type: traffic_split
split_type: custom
targets:
- type: endpoint
value: my_db.my_schema.model_v1_service!inference
weight: 90
- type: endpoint
value: my_db.my_schema.model_v2_service!inference
weight: 10
$$;
-- Change the gateway to split traffic differently V1 (60%) and V2 (40%)
ALTER GATEWAY split_gateway
FROM SPECIFICATION $$
spec:
type: traffic_split
split_type: custom
targets:
- type: endpoint
value: my_db.my_schema.model_v1_service!inference
weight: 60
- type: endpoint
value: my_db.my_schema.model_v2_service!inference
weight: 40
$$;
仕様のルール: 型はtraffic_splitである必要があり、split_typeはカスタムである必要があります。さらに、すべてのターゲットの重みは正確に合計100にする必要があります。デフォルトでは、ゲートウェイは最大5つのエンドポイントにルーティングできます。
2.スキーマの進化の処理¶
新しいモデルのバージョン(V2)でV1とは異なる入力機能が必要な場合は、この戦略に従ってリクエストの中断を防ぎます。
スーパーセットの更新: V1とV2の両方に必要なすべての機能を送信するように、クライアントアプリケーションを更新します。Snowflakeモデルサービングは、不要な機能を暗黙的に無視します。
段階的分割: V2をデプロイし、ALTER GATEWAY を使用して、トラフィックのパーセンテージをV1からV2に徐々にシフトします。
クライアントのクリーンアップ: トラフィックの100%がV2にルーティングされたら、クライアントを更新して、現在は廃止されているV1の機能を削除します。
重要
スーパーセット機能を使用したゲートウェイルーティングは、現在dataframe_records形式でサポートされています。dataframe_splitのサポートは近日開始予定です。
3. HTTP エンドポイント¶
すべてのゲートウェイオブジェクトには、次のクエリを使用して見つけることができるエンドポイント名が付いています。
DESC GATEWAY split_gateway ->> select "ingress_url" as endpoint from $1
ゲートウェイのエンドポイントは https://<endpoint>/ になります。ゲートウェイ経由でモデルに対して特定のメソッドを呼び出すには、メソッド名を URL(例: https://<endpoint>/<method-name>)へのパスとして使用します。URL で、メソッド名のアンダースコア(_)は URL 内でダッシュ(-)に置き換えられます。たとえば、predict_probのサービス名は、URL でpredict-probaに変更されます。
プライベートリンクユーザーの場合は、ingress_urlではなくprivatelink_ingress_urlを使用してください。
リクエストおよび応答プロトコル¶
ゲートウェイは、リアルタイム推論ページで説明されているのと同じデータ形式をサポートしています。
補足メタデータの引き渡し¶
シナリオによっては、モデルの入力署名の一部ではないものの、グランドトゥルースラベルを使用した下流でのロギングまたは結合に必要な補足データ(記録の IDs や主キーなど)を渡すことが必要な場合があります。これを処理するために、Snowflakeはオプションのextra_columnsトップレベルフィールドをサポートします。
例¶
dataframe_splitを使用して、余分な列を DataFrame ペイロードの横にあるトップレベルのフィールドとして配置します。
payload = {
"dataframe_split": {
"index": [0, 1],
"columns": [
"customer_id",
"age",
"monthly_spend",
"primary_key",
],
"data": [
[101, 32, 85.5, "001"],
[102, 45, 120.0, "002"],
]
},
"extra_columns": ["primary_key"]
}
またはdataframe_recordsを使用します。
payload = {
"dataframe_records": [
{
"customer_id": 101,
"age": 32,
"monthly_spend": 85.5,
"primary_key": "001",
},
{
"customer_id": 102,
"age": 45,
"monthly_spend": 120.0,
"primary_key": "002",
},
],
"extra_columns": ["primary_key"]
}
extra_columnsのガイドライン¶
オプション: 不要な場合は、extra_columns全体を省略できます。
競合なし: extra_columnsにリストされている列名が、モデルメソッドが入力として想定する列と競合しないようにする必要があります。モデルの入力列と余分な列を概念的に分離します。
ペイロードサイズの制限: リクエストペイロード全体(extra_columnsとすべてのデータ行を含む)は1 MB に制限されます。この制限を超えた場合:
バッチサイズを小さくする(リクエストごとの行数を減らす)、または
厳密には必要ない余分な列を削除または短縮します。