실시간 추론을 위한 추론 로그 자동 캡처

Snowflake ML에서 자동 캡처를 사용하여 모델 서비스에서 처리한 모든 요청과 응답을 자동으로 기록합니다. 자동 캡처는 요청 성공, 요청 실패, 예기치 않은 예측 이면의 입력에 대한 즉각적인 가시성을 제공합니다.

요청 또는 응답 데이터를 테이블이나 뷰로 파이프하는 대신 추론 요청 및 응답 데이터를 자동으로 유지할 수 있습니다. 데이터 수집 및 모니터링을 위해 파이프라인을 올바르게 생성할 필요 없이 자동 캡처를 사용할 수 있습니다.

자동 캡처를 사용하면 다음을 수행할 수 있습니다.

  • 신속한 디버그: 과거 추론 데이터를 분석하여 극단적인 사례를 진단하고 모델 동작을 이해합니다.

  • 모델을 지속적으로 개선: 실제 프로덕션 데이터를 통해 고품질 데이터 세트를 생성하여 새 모델을 학습시킵니다.

  • 테스트: 로그에서 수집된 데이터를 A/B 테스트 및 섀도우 테스트에 사용합니다.

각 추론 요청에 대해 자동 캡처는 다음을 기록합니다.

  • 요청 페이로드

  • 응답 페이로드

  • 모델 버전 식별자

  • 서비스 식별자

  • 게이트웨이 라우팅 메타데이터

  • 요청 및 응답 타임스탬프

  • 응답 코드(예: 200)

참고

Snowflake는 vLLM 추론 엔진을 사용하여 입력 및 출력에 대한 데이터를 캡처하지 않습니다.

이 데이터는 읽기 전용이며 사용자가 수정할 수 없습니다.

Snowflake는 성공적인 요청에 대한 응답 데이터만 캡처합니다. 요청이 실패하면 Snowflake는 데이터를 캡처하지 않습니다.

전제 조건 및 모델 버전 호환성

다음 섹션에서는 자동 캡처의 전제 조건과 모델 버전 호환성에 대해 설명합니다.

액세스 제어 요구 사항

캡처된 추론 데이터를 구성하고 액세스하려면 역할에 다음 권한이 있어야 합니다.

권한

오브젝트

참고

OWNERSHIP

모델

자동 캡처가 활성화된 서비스를 생성하고 INFERENCE_TABLE 함수를 사용하여 추론 테이블 데이터를 읽는 데 필요합니다. OWNERSHIP은 오브젝트에 대한 특수 권한으로 오브젝트를 생성한 역할에 자동으로 부여되지만 GRANT OWNERSHIP 명령을 사용하여 소유하는 역할(또는 MANAGE GRANTS 권한을 보유한 역할)에 의해 다른 역할로 이전될 수도 있습니다. 관리형 액세스 스키마에서 스키마 소유자(예: 역할 스키마에 대한 OWNERSHIP 권한이 있는 역할) 또는 MANAGE GRANTS 권한이 있는 역할만 향후 권한 부여를 포함하여 스키마의 오브젝트에 대한 권한을 부여하거나 취소할 수 있습니다.

OWNERSHIP

서비스

서비스가 list_service() 함수에서 자동 캡처를 활성화했는지 여부를 나열하는 데 필요합니다. OWNERSHIP은 오브젝트에 대한 특수 권한으로 오브젝트를 생성한 역할에 자동으로 부여되지만 GRANT OWNERSHIP 명령을 사용하여 소유하는 역할(또는 MANAGE GRANTS 권한을 보유한 역할)에 의해 다른 역할로 이전될 수도 있습니다. 관리형 액세스 스키마에서 스키마 소유자(예: 역할 스키마에 대한 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

이전 명령으로 생성된 모델에는 빈 추론 테이블이 있습니다. 자동 캡처 활성화에 대한 자세한 내용은 자동 캡처 활성화 섹션을 참조하세요.

기존 모델 버전에서 모델 버전을 생성할 수도 있습니다. 자세한 내용은 베리언트 구문 섹션을 참조하십시오.

모델을 복제한 후 :ref:`label-autocapture-activate`의 단계에 따라 자동 캡처를 활성화할 수 있습니다.

자동 캡처 활성화

새 모델을 생성하거나 기존 모델을 복제한 후 Python SDK를 사용하여 모델 서비스에 대해 자동 캡처를 활성화합니다. 모델 서비스에 대한 자세한 내용은 실시간 추론을 위한 모델 배포(REST API) 섹션을 참조하세요.

다음 Python 코드를 사용하여 자동 캡처를 활성화합니다.

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

mv 변수는 모델 버전 오브젝트입니다. 모델 레지스트리에 모델을 기록할 때 정의했습니다.

자동 캡처의 기본값은 :code:`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개의 게이트웨이로만 제한됩니다.

데이터 잘림 논리

시스템 성능을 유지하기 위해 각 추론 이벤트에 대해 1MB의 제한이 있습니다. 요청과 응답이 제한에 도달하면 Snowflake는 다단계 잘림 프로세스를 적용하여 최대한 많은 유용성을 유지합니다.

다음 테이블은 잘림 프로세스를 보여줍니다.

스테이지

트리거

취한 조치

1: 점진적 감소

> 700 KB

원시 바이트가 제거되고, 2KB보다 큰 문자열이 잘리고, JSON 오브젝트가 TRUNCATED 상태로 대체됩니다.

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``입니다.