リアルタイム推論のための推論ログの自動キャプチャ

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> ]
Copy

前述のコマンドで作成されたモデルには、空の推論テーブルがあります。自動キャプチャの有効化については、 自動キャプチャをアクティブ化 をご参照ください。

既存のモデルバージョンからモデルバージョンを作成することもできます。詳細については、 バリアント構文 をご参照ください。

モデルを複製した後、 自動キャプチャをアクティブ化 のステップに従って自動キャプチャを有効にできます。

自動キャプチャをアクティブ化

新しいモデルを作成した後、または既存のモデルをクローンした後、Python SDK を使用してモデルサービスの自動キャプチャを有効にします。モデルサービスの詳細については、 リアルタイム推論のためのモデルの展開( REST API ) をご参照ください。

次のPythonコードを使用して、自動キャプチャを有効にします。

mv.create_service(
    service_name="my_service",
    service_compute_pool="my_compute_pool",
    autocapture=True
)
Copy

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'));
Copy

高度なフィルタリングの例

INFERENCE_TABLE()関数内で特定のバージョン、サービス、またはゲートウェイで直接フィルタリングできます。

SELECT * FROM TABLE(
INFERENCE_TABLE(
'MY_MODEL',
VERSION => 'V1',
SERVICE => 'MY_PREDICTION_SERVICE',
GATEWAY => 'MY_GATEWAY'
)
);
Copy

重要

サービス、バージョン、ゲートウェイの引数は、クエリ時に存在している必要があります。以前に存在していたものと同じ名前の新しいサービス、バージョン、またはゲートウェイを作成した場合、クエリは現在のバージョンのデータのみを生成します。

次の述語句を使用して、関数名でフィルタリングできます。

WHERE RECORD_ATTRIBUTES:"snow.model_serving.function.name" = 'predict'
Copy

注釈

最高のパフォーマンスを得るには、 TIMESTAMP 列で時間範囲をフィルターします。

削除されたエンティティの履歴データのクエリ

推論データは、サービス、バージョン、ゲートウェイを削除した後も保持されます。モデルがまだ存在する限り、この履歴データをクエリすることができます。

次の例は、モデルのすべての推論ログを返します。

SELECT *
FROM TABLE(
  INFERENCE_TABLE('my_model')
);
Copy

次の例では、モデルのバージョンで推論ログをフィルターしています。

SELECT *
FROM TABLE(
  INFERENCE_TABLE(
    'my_model',
    MODEL_VERSION => 'v1'
  )
);
Copy

次の例では、バージョンとサービスで推論ログをフィルタリングしています。

SELECT *
FROM TABLE(
  INFERENCE_TABLE(
    'my_model',
    MODEL_VERSION => 'v1',
    SERVICE => 'my_service'
  )
);
Copy

次の例では、バージョンとゲートウェイで推論ログをフィルタリングしています。

SELECT *
FROM TABLE(
  INFERENCE_TABLE(
    'my_model',
    MODEL_VERSION => 'v1',
    GATEWAY => 'my_gateway'
  )
);
Copy

データスキーマとメタデータ

Snowflakeは、成功したリクエストの応答データのみをキャプチャします。リクエストが失敗した場合、Snowflakeはデータをキャプチャしません。

キャプチャされる記録属性は次のとおりです。

フィールド

説明

snow.model_serving.request.data.<列>

モデルに送信された入力機能。

snow.model_serving.response.data.<列>

モデルが返す推論出力。

snow.model_serving.request.timestamp

リクエストが推論サービスにヒットしたとき。

snow.model_serving.response.code

HTTP ステータス(成功の場合は200、エラーの場合は5xxなど)

snow.model_serving.truncation_policy

データがサイズ制限(NONE または TRUNCATED_DEFAULT)詳細については、 データ切り捨てロジック をご参照ください。

snow.model_serving.last_hop_id

リクエストが推論サービスにランディングした最後のゲートウェイIDを反映します。

snow.model_serving.hop_ids

ゲートウェイIDのリストを反映し、トラバースのパスを示します。現在、1つのゲートウェイのみに制限されています。

データ切り捨てロジック

システムのパフォーマンスを維持するために、推論イベントごとに1 MB の制限があります。リクエストと応答が制限に達した場合、Snowflakeは複数ステージの切り捨てプロセスを適用して、可能な限り多くのユーティリティを保持します。

次のテーブルは、切り捨てプロセスを示しています。

ステージ

トリガー

実行済みアクション

1:ソフト削減

> 700 KB

未加工バイトが削除されました。2 KB 以上の文字列を切り捨て済み。 TRUNCATED ステータスに置き換えられた JSON オブジェクト。

2:集約型

> 900 KB

さらに256バイトに切り捨てられたすべての文字列。

3:削除

> 900 KB*

それでも制限を超えている場合、ペイロードは削除され、最小限のメタデータスケルトンに置き換えられます。

*ステージ3は、コンテンツ削減後、メタデータだけがしきい値を超えた場合に発生します。

Limits

自動キャプチャを使用する場合は、次の制限と考慮事項に注意してください。

  • LLM サポート:自動キャプチャは大規模言語モデル(LLMs)ではサポートされていません。

  • スループット:自動キャプチャは、サービスごとに毎秒約300~400リクエスト(または 10MB/s)のシステムスループットのために設計されています。

  • 複製:推論テーブルを複製することはできません。複製されたモデルは、ターゲットアカウントに推論テーブルを持ちません。

  • 保持:サービスやゲートウェイが削除されても、推論データは保持されます。

  • 警告:モデルオブジェクトを削除すると、関連するすべての推論データが完全に削除されます。

  • グラウンドトゥルース:ドリフト分析を実行するには、別のグランドトゥルースのテーブルを維持し、共通リクエスト IDs を使用して INFERENCE_TABLE 出力と結合します。

  • コンシューマーアカウント:コンシューマーアカウントは、推論テーブルとの共有モデルに対して自動キャプチャを有効にしたサービスを作成することはできません。

  • パフォーマンス:自動キャプチャは、推論リクエストにレイテンシを追加しないように設計されています。ただし、リクエスト量が非常に多い期間には、一部のキャプチャが削除される場合があります。

スキーマ

この機能の一環として、次の値がそれぞれの列に追加されます。

RESOURCE_ATTRIBUTES

次のテーブルで、リソース属性スキーマフィールドについて説明します。

フィールド

説明

snow.model.version.id

モデルバージョンの一意の識別子。

snow.model.version.name

モデルバージョンの名前。

RECORD_ATTRIBUTES

次のテーブルでは、記録属性スキーマフィールドについて説明します。

フィールド

説明

snow.model_serving.function.name

呼び出されたモデル関数の名前。

snow.model_serving.last_hop_id

リクエストを処理した最後のゲートウェイの ID。

snow.model_serving.hop_ids

リクエストを処理したゲートウェイ IDs のリスト。

snow.model_serving.request.data.<列>

<column> が特定の入力フィールド名を表す入力フィールド。

snow.model_serving.request.timestamp

推論サービスがリクエストをキャプチャした時のタイムスタンプ。

snow.model_serving.response.data.<列>

<column> に推論応答フィールドが含まれる応答データ。

snow.model_serving.response.timestamp

応答がサービスによってキャプチャされたときのタイムスタンプ。

snow.model_serving.response.code

推論サービスからの応答コード(例:200、5xx)

snow.model_serving.truncation_policy

データが切り捨てられたかどうかを示します。値は NONE または TRUNCATED_DEFAULT です。