リアルタイム推論のための推論ログの自動キャプチャ¶
Snowflake ML の自動キャプチャを使用して、モデルサービスによって処理されるすべてのリクエストと応答を自動的にログに記録します。自動キャプチャは、リクエストの成功、リクエストの失敗、予期しない予測の背後にある入力をすぐに可視化します。
リクエストや応答データをテーブルやビューにパイプする代わりに、推論リクエストや応答データを自動的に永続化することができます。データの取り込みと監視のために、パイプラインを正しく作成する必要がない代わりに、自動キャプチャを使用できます。
自動キャプチャを使用すると、次を実行できます。
迅速なデバッグ:過去の推論データを分析して、エッジケースを診断し、モデルの動作を理解します。
モデルの継続的な改善:実際の本番データを使用して、高品質のデータセットを作成し、新しいモデルをトレーニングします。
テスト:ログから収集したデータをA/Bテストとシャットダウンテストに使用します。
各推論リクエストについて、自動キャプチャは以下をログに記録します。
ペイロードリクエスト
応答ペイロード
モデルバージョン識別子
サービス識別子
ゲートウェイルーティングメタデータ
リクエスト/応答のタイムスタンプ
応答コード(200など)
注釈
Snowflakeは、 vLLM 推論エンジンを使用した入力と出力のデータをキャプチャしません。
このデータは読み取り専用であり、ユーザーは変更できません。
Snowflakeは、成功したリクエストの応答データのみをキャプチャします。リクエストが失敗した場合、Snowflakeはデータをキャプチャしません。
前提条件およびモデルバージョンの互換性¶
以下のセクションでは、自動キャプチャの前提条件とモデルバージョンの互換性について説明します。
アクセス制御の要件¶
キャプチャされた推論データを構成し、アクセスするには、ロールに以下の権限が必要です。
権限 |
オブジェクト |
メモ |
|---|---|---|
OWNERSHIP |
モデル |
自動キャプチャを有効にしたサービスを作成し、 INFERENCE_TABLE 関数を使用して推論テーブルデータを読み取るために必要です。OWNERSHIP は、オブジェクトを作成したロールに自動的に付与されるオブジェクトに対する特別な権限ですが、所有ロール(または MANAGE GRANTS 権限を持つ任意のロール)によって GRANTOWNERSHIP コマンドを使用して別のロールに譲渡することもできます。マネージドアクセススキーマでは、スキーマ所有者(たとえば、スキーマの OWNERSHIP 権限を持つロール)または MANAGE GRANTS 権限を持つロールのみが、スキーマ内のオブジェクトに対して、将来の付与も含めて、権限を付与または取り消すことができます。 |
OWNERSHIP |
サービス |
list_service() 関数で、サービスが自動キャプチャを有効にしているかどうかをリストするために必要です。 OWNERSHIP は、オブジェクトを作成したロールに自動的に付与されるオブジェクトに対する特別な権限ですが、所有ロール(または MANAGE GRANTS 権限を持つ任意のロール)によって GRANTOWNERSHIP コマンドを使用して別のロールに譲渡することもできます。マネージドアクセススキーマでは、スキーマ所有者(たとえば、スキーマの OWNERSHIP 権限を持つロール)または MANAGE GRANTS 権限を持つロールのみが、スキーマ内のオブジェクトに対して、将来の付与も含めて、権限を付与または取り消すことができます。 |
USAGE |
モデル、サービス、バージョン、ゲートウェイ |
INFERENCE_TABLE 関数のエンティティを解決するために必要です。 |
モデルバージョンの互換性¶
各モデルはモデルオブジェクトとして存在します。モデルオブジェクトは独自の推論テーブルを持ち、各推論リクエストのデータとメタデータが含まれます。自動キャプチャは、モデルの推論テーブルのデータをログに記録します。各モデルサービスは独自の推論テーブルを持っています。
新しいモデルを作成する場合、自動キャプチャは自動的に有効になります。
2026年1月23日より前に作成されたモデルは、自動キャプチャをサポートしていません。モデルをクローンし、そのサービスの自動キャプチャを有効にする必要があります。
既存のモデルを複製するには、以下のコマンドを使用します。
CREATE [ OR REPLACE ] MODEL [ IF NOT EXISTS ] <name> [ WITH VERSION <version_name> ]
FROM MODEL <source_model_name> [ VERSION <source_version_or_alias_name> ]
前述のコマンドで作成されたモデルには、空の推論テーブルがあります。自動キャプチャの有効化については、 自動キャプチャをアクティブ化 をご参照ください。
既存のモデルバージョンからモデルバージョンを作成することもできます。詳細については、 バリアント構文 をご参照ください。
モデルを複製した後、 自動キャプチャをアクティブ化 のステップに従って自動キャプチャを有効にできます。
自動キャプチャをアクティブ化¶
新しいモデルを作成した後、または既存のモデルをクローンした後、Python SDK を使用してモデルサービスの自動キャプチャを有効にします。モデルサービスの詳細については、 リアルタイム推論のためのモデルの展開( REST API ) をご参照ください。
次のPythonコードを使用して、自動キャプチャを有効にします。
mv.create_service(
service_name="my_service",
service_compute_pool="my_compute_pool",
autocapture=True
)
mv 変数 は、モデルバージョンオブジェクトです。モデルレジストリにモデルをログに記録するときに定義しました。
自動キャプチャのデフォルト値は False です。2026年1月23日以降に作成し、モデルレジストリにログを記録したモデルの自動キャプチャを有効にしていることを確認してください。そうでない場合は、モデルに推論テーブルがないため、サービスの作成に失敗します。
重要
自動キャプチャ設定は不変です。既存のモデルサービスで自動キャプチャを有効にしたり無効にしたりすることはできません。この構成を変更するには、サービスを再作成する必要があります。サービスを再作成すると、安定したエンドポイントまたはゲートウェイを使用しない限り、エンドポイントは変更されます。
クエリ推論データ¶
ログにアクセスするには、 INFERENCE_TABLE 関数を使用します。この関数は、モデルの推論ログを返し、バージョン、サービス、ゲートウェイによるフィルタリングをサポートします。ゲートウェイとサービスに対する USAGE 権限を持つモデル所有者のみがデータを見ることができます。
基本的な例¶
次の例は、 INFERENCE_TABLE 関数を使用してモデルのすべての推論ログを取得する方法を示しています。このクエリは、モデルのサービスによって処理されたすべての推論リクエストに対して、すべてのキャプチャされたリクエストと応答データを返します。
-- Fetch all inference logs for a specific model
SELECT * FROM TABLE(INFERENCE_TABLE('my_model'));
高度なフィルタリングの例¶
INFERENCE_TABLE()関数内で特定のバージョン、サービス、またはゲートウェイで直接フィルタリングできます。
SELECT * FROM TABLE(
INFERENCE_TABLE(
'MY_MODEL',
VERSION => 'V1',
SERVICE => 'MY_PREDICTION_SERVICE',
GATEWAY => 'MY_GATEWAY'
)
);
重要
サービス、バージョン、ゲートウェイの引数は、クエリ時に存在している必要があります。以前に存在していたものと同じ名前の新しいサービス、バージョン、またはゲートウェイを作成した場合、クエリは現在のバージョンのデータのみを生成します。
次の述語句を使用して、関数名でフィルタリングできます。
WHERE RECORD_ATTRIBUTES:"snow.model_serving.function.name" = 'predict'
注釈
最高のパフォーマンスを得るには、 TIMESTAMP 列で時間範囲をフィルターします。
削除されたエンティティの履歴データのクエリ¶
推論データは、サービス、バージョン、ゲートウェイを削除した後も保持されます。モデルがまだ存在する限り、この履歴データをクエリすることができます。
次の例は、モデルのすべての推論ログを返します。
SELECT *
FROM TABLE(
INFERENCE_TABLE('my_model')
);
次の例では、モデルのバージョンで推論ログをフィルターしています。
SELECT *
FROM TABLE(
INFERENCE_TABLE(
'my_model',
MODEL_VERSION => 'v1'
)
);
次の例では、バージョンとサービスで推論ログをフィルタリングしています。
SELECT *
FROM TABLE(
INFERENCE_TABLE(
'my_model',
MODEL_VERSION => 'v1',
SERVICE => 'my_service'
)
);
次の例では、バージョンとゲートウェイで推論ログをフィルタリングしています。
SELECT *
FROM TABLE(
INFERENCE_TABLE(
'my_model',
MODEL_VERSION => 'v1',
GATEWAY => 'my_gateway'
)
);
データスキーマとメタデータ¶
Snowflakeは、成功したリクエストの応答データのみをキャプチャします。リクエストが失敗した場合、Snowflakeはデータをキャプチャしません。
キャプチャされる記録属性は次のとおりです。
フィールド |
説明 |
|---|---|
|
モデルに送信された入力機能。 |
|
モデルが返す推論出力。 |
|
リクエストが推論サービスにヒットしたとき。 |
|
HTTP ステータス(成功の場合は200、エラーの場合は5xxなど) |
|
データがサイズ制限(NONE または TRUNCATED_DEFAULT)詳細については、 データ切り捨てロジック をご参照ください。 |
|
リクエストが推論サービスにランディングした最後のゲートウェイIDを反映します。 |
|
ゲートウェイIDのリストを反映し、トラバースのパスを示します。現在、1つのゲートウェイのみに制限されています。 |
データ切り捨てロジック¶
システムのパフォーマンスを維持するために、推論イベントごとに1 MB の制限があります。リクエストと応答が制限に達した場合、Snowflakeは複数ステージの切り捨てプロセスを適用して、可能な限り多くのユーティリティを保持します。
次のテーブルは、切り捨てプロセスを示しています。
ステージ |
トリガー |
実行済みアクション |
|---|---|---|
1:ソフト削減 |
> 700 KB |
未加工バイトが削除されました。2 KB 以上の文字列を切り捨て済み。 |
2:集約型 |
> 900 KB |
さらに256バイトに切り捨てられたすべての文字列。 |
3:削除 |
> 900 KB* |
それでも制限を超えている場合、ペイロードは削除され、最小限のメタデータスケルトンに置き換えられます。 |
*ステージ3は、コンテンツ削減後、メタデータだけがしきい値を超えた場合に発生します。
Limits¶
自動キャプチャを使用する場合は、次の制限と考慮事項に注意してください。
LLM サポート:自動キャプチャは大規模言語モデル(LLMs)ではサポートされていません。
スループット:自動キャプチャは、サービスごとに毎秒約300~400リクエスト(または 10MB/s)のシステムスループットのために設計されています。
複製:推論テーブルを複製することはできません。複製されたモデルは、ターゲットアカウントに推論テーブルを持ちません。
保持:サービスやゲートウェイが削除されても、推論データは保持されます。
警告:モデルオブジェクトを削除すると、関連するすべての推論データが完全に削除されます。
グラウンドトゥルース:ドリフト分析を実行するには、別のグランドトゥルースのテーブルを維持し、共通リクエスト IDs を使用して INFERENCE_TABLE 出力と結合します。
コンシューマーアカウント:コンシューマーアカウントは、推論テーブルとの共有モデルに対して自動キャプチャを有効にしたサービスを作成することはできません。
パフォーマンス:自動キャプチャは、推論リクエストにレイテンシを追加しないように設計されています。ただし、リクエスト量が非常に多い期間には、一部のキャプチャが削除される場合があります。
スキーマ¶
この機能の一環として、次の値がそれぞれの列に追加されます。
RESOURCE_ATTRIBUTES¶
次のテーブルで、リソース属性スキーマフィールドについて説明します。
フィールド |
説明 |
|---|---|
|
モデルバージョンの一意の識別子。 |
|
モデルバージョンの名前。 |
RECORD_ATTRIBUTES¶
次のテーブルでは、記録属性スキーマフィールドについて説明します。
フィールド |
説明 |
|---|---|
|
呼び出されたモデル関数の名前。 |
|
リクエストを処理した最後のゲートウェイの ID。 |
|
リクエストを処理したゲートウェイ IDs のリスト。 |
|
|
|
推論サービスがリクエストをキャプチャした時のタイムスタンプ。 |
|
|
|
応答がサービスによってキャプチャされたときのタイムスタンプ。 |
|
推論サービスからの応答コード(例:200、5xx) |
|
データが切り捨てられたかどうかを示します。値は |