CREATE MODEL MONITOR

CREATE MODEL MONITOR

현재 또는 지정한 스키마에 모델 모니터(model monitor)를 만들거나 교체하는 명령이에요. Snowflake는 현재 두 가지 유형의 모델 모니터를 지원해요. 모델 버전 모니터는 ML Observability, 게이트웨이 모델 모니터는 Gateway Monitoring & A/B Testing에서 다뤄요.

출처: 문서

본문

현재 또는 지정한 스키마에 모델 모니터를 만들거나 교체해요. Snowflake는 현재 두 가지 유형의 모델 모니터를 지원해요. 모델 버전 모니터는 ML Observability, 게이트웨이 모델 모니터는 Gateway Monitoring & A/B Testing을 참고해요.

함께 보기: ALTER MODEL MONITOR, SHOW MODEL MONITORS, DESCRIBE MODEL MONITOR, DROP MODEL MONITOR

구문 (Syntax)

모델 버전 모니터 (Model version monitor)

CREATE [ OR REPLACE ] MODEL MONITOR [ IF NOT EXISTS ] <monitor_name> WITH
    MODEL = <model_name>
    VERSION = '<version_name>'
    FUNCTION = '<function_name>'
    SOURCE = <source_name>
    WAREHOUSE = <warehouse_name>
    REFRESH_INTERVAL = '<num> { seconds | minutes | hours | days }'
    AGGREGATION_WINDOW = '<num> days'
    TIMESTAMP_COLUMN = <timestamp_name>
    [ BASELINE = <baseline_name> ]
    [ ID_COLUMNS = <id_column_name_array> ]
    [ PREDICTION_CLASS_COLUMNS = <prediction_class_column_name_array> ]
    [ PREDICTION_SCORE_COLUMNS = <prediction_column-name_array> ]
    [ ACTUAL_CLASS_COLUMNS = <actual_class_column_name_array> ]
    [ ACTUAL_SCORE_COLUMNS = <actual_column_name_array> ]
    [ SEGMENT_COLUMNS = <segment_column_name_array> ]
    [ CUSTOM_METRIC_COLUMNS = <custom_metric_column_name_array> ]
    [ COMMENT = '<string_literal>' ]

게이트웨이 모델 모니터 (Gateway model monitor)

CREATE [ OR REPLACE ] MODEL MONITOR [ IF NOT EXISTS ] <monitor_name> WITH
    MODEL = <model_name>
    GATEWAY = <gateway_name>
    FUNCTION = '<function_name>'
    WAREHOUSE = <warehouse_name>
    REFRESH_INTERVAL = '<num> { seconds | minutes | hours | days }'
    AGGREGATION_WINDOW = '<num> { hours | days }'
    [ GROUND_TRUTH = <ground_truth_table> ]
    [ ID_COLUMNS = <id_column_name_array> ]
    [ PREDICTION_CLASS_COLUMNS = <prediction_class_column_name_array> ]
    [ PREDICTION_SCORE_COLUMNS = <prediction_score_column_name_array> ]
    [ ACTUAL_CLASS_COLUMNS = <actual_class_column_name_array> ]
    [ ACTUAL_SCORE_COLUMNS = <actual_score_column_name_array> ]
    [ COMMENT = '<string_literal>' ]

필수 매개변수 (Required parameters)

모든 모니터 유형 (All monitor types)

monitor_name 모델 모니터의 식별자를 지정해요. 모니터가 만들어지는 스키마 안에서 고유해야 해요.

모니터 식별자가 정규화되어 있지 않다면(db_name.schema_name.name 또는 schema_name.name 형식), 명령은 세션의 현재 스키마에 모델을 만들어요.

또한 식별자는 반드시 알파벳 문자로 시작해야 하며, 전체 식별자 문자열이 큰따옴표로 묶이지 않는 한 공백이나 특수 문자를 포함할 수 없어요 (예: "My object"). 큰따옴표로 묶인 식별자는 대소문자를 구분해요.

자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.

MODEL = model_name 모니터링할 모델의 이름이에요.

FUNCTION = 'function_name' 모니터링할 모델 함수의 이름이에요. 모델 버전 모니터의 경우 지정된 모델 버전의 함수여야 해요. 게이트웨이 모델 모니터의 경우 지정된 모델을 뒷받침하는 게이트웨이 뒤의 각 활성 추론 서비스가 노출하는 함수와 일치해야 해요.

WAREHOUSE = warehouse_name 모니터의 내부 컴퓨팅 작업에 사용할 Snowflake 웨어하우스의 이름이에요.

REFRESH_INTERVAL = 'num { seconds | minutes | hours | days }' 모니터가 내부 상태를 새로 고치는 간격이에요. 값은 '1 day' 같은 시간 기간을 나타내는 문자열이어야 해요. 최소 새로 고침 간격은 '60 seconds'예요. 지원되는 단위는 초·분·시·일이에요. 간격 이름에 단수("hour") 또는 복수("hours")를 사용할 수 있어요.

AGGREGATION_WINDOW = 'num { hours | days }' 모니터가 데이터를 집계하는 창(window)이에요. 값은 '1 day' 같은 시간 기간을 나타내는 문자열이어야 해요. 모델 버전 모니터는 일(days)만 지원하고, 게이트웨이 모델 모니터는 시(hours)와 일(days)을 모두 지원해요. 간격 이름에 단수("day") 또는 복수("days")를 사용할 수 있어요.

모델 버전 모니터

VERSION = 'version_name' 모니터링할 모델 버전의 이름이에요.

SOURCE = source_name 피처(feature)·추론(inference)·실측 값(ground truth) 라벨을 포함하는 소스 테이블 또는 뷰의 이름이에요.

TIMESTAMP_COLUMN = timestamp_name 소스 데이터에서 타임스탬프를 포함하는 컬럼의 이름이에요. TIMESTAMP_NTZ 유형이어야 해요.

게이트웨이 모델 모니터

GATEWAY = gateway_name 라우팅된 추론 서비스를 모니터링할 Snowflake 게이트웨이의 이름이에요.

선택 매개변수 (Optional parameters)

모든 모니터 유형

COMMENT = 'string_literal' 모델 모니터에 대한 설명(comment)을 지정해요.

ID_COLUMNS = id_column_name_array 함께 결합해 소스 데이터의 각 행을 고유하게 식별하는 문자열 컬럼 이름의 배열이에요. ARRAY 상수(ARRAY constants)를 참고해요.

게이트웨이 모델 모니터의 경우 ID_COLUMNSGROUND_TRUTH를 함께 지정해 성능 메트릭 모니터링을 활성화하거나, 둘 다 생략해요. 컬럼 이름은 실측 값 테이블을 자동 캡처된 추론 로그와 조인하기 위해 추론 요청의 extra_columns에 나열된 필드 이름과 일치해야 해요.

예측·실측 컬럼에 대한 참고

  • 모델 버전 모니터: 예측 컬럼(예측 점수 또는 예측 클래스)이 최소 하나 필수예요.
  • 게이트웨이 모델 모니터: 단일 출력 모델에서는 생략하면 자동 캡처된 추론 로그에서 예측 컬럼을 추론해요. GROUND_TRUTH를 지정하면 생략 시 실측 값 테이블에서 실측 컬럼을 추론해요. 다중 출력 모델에서는 예측·실측 컬럼을 명시적으로 지정해야 해요.
  • 모델 작업별 규칙:
    • 이진 분류(Binary classification): 예측은 점수 또는 클래스일 수 있고, 실측은 클래스여야 해요.
    • 다중 클래스 분류(Multi-class classification): 예측과 실측 모두 클래스여야 해요.
    • 회귀(Regression): 예측과 실측 모두 숫자여야 해요.

PREDICTION_CLASS_COLUMNS = prediction_class_column_name_array 모델 버전 모니터의 경우 SOURCE에 있는 모든 예측 클래스 컬럼의 이름을, 게이트웨이 모델 모니터의 경우 자동 캡처된 추론 로그의 출력 피처 이름을 지정하는 문자열 배열이에요. ARRAY 상수를 참고해요.

모델 작업이 TABULAR_BINARY_CLASSIFICATION 또는 TABULAR_REGRESSION이면 컬럼은 NUMBER 유형이어야 해요. TABULAR_MULTI_CLASSIFICATION이면 컬럼은 STRING 유형이어야 해요.

PREDICTION_SCORE_COLUMNS = prediction_column_name_array 모델 버전 모니터의 경우 SOURCE에 있는 모든 예측 점수 컬럼의 이름을, 게이트웨이 모델 모니터의 경우 자동 캡처된 추론 로그의 출력 피처 이름을 지정하는 문자열 배열이에요. ARRAY 상수를 참고해요. 컬럼은 NUMBER 유형이어야 해요.

ACTUAL_CLASS_COLUMNS = actual_class_column_name_array 모델 버전 모니터의 경우 SOURCE에 있는 모든 실측 클래스 컬럼의 이름을, 게이트웨이 모델 모니터의 경우 GROUND_TRUTH에 있는 실측 클래스 컬럼의 이름을 지정하는 문자열 배열이에요. ARRAY 상수를 참고해요.

모델 작업이 TABULAR_BINARY_CLASSIFICATION 또는 TABULAR_REGRESSION이면 컬럼은 NUMBER 유형이어야 해요. TABULAR_MULTI_CLASSIFICATION이면 컬럼은 STRING 유형이어야 해요.

ACTUAL_SCORE_COLUMNS = actual_column_name_array 모델 버전 모니터의 경우 SOURCE에 있는 모든 실측 점수 컬럼의 이름을, 게이트웨이 모델 모니터의 경우 GROUND_TRUTH에 있는 실측 점수 컬럼의 이름을 지정하는 문자열 배열이에요. ARRAY 상수를 참고해요. 컬럼은 NUMBER 유형이어야 해요.

모델 버전 모니터

BASELINE = baseline_name 드리프트(drift)를 계산하는 데 사용하는 SOURCE와 유사한 데이터 스냅샷을 포함하는 기준(baseline) 테이블의 이름이에요. 이 데이터의 스냅샷은 모니터 객체 안에 포함돼요. 이 매개변수는 선택 사항이지만 설정하지 않으면 모니터가 드리프트를 감지할 수 없어요.

SEGMENT_COLUMNS = segment_column_name_array 데이터 소스의 모든 세그먼트 컬럼의 이름을 지정하는 문자열 배열이에요. ARRAY 상수를 참고해요.

세그먼트 컬럼은 소스 데이터에서 STRING 유형이어야 해요. 모니터당 최대 5개의 세그먼트 컬럼을 지정할 수 있어요. 최적의 성능을 위해 각 세그먼트 컬럼은 25개 미만의 고유 값을 가져야 해요.

세그먼트에 대한 자세한 내용은 ML Observability: 시간에 따른 모델 동작 모니터링을 참고해요.

CUSTOM_METRIC_COLUMNS = custom_metric_column_name_array 사용자 지정 메트릭에 사용되는 소스 데이터의 컬럼 이름을 지정하는 문자열 배열이에요. 이 컬럼은 피처로 취급되지 않아요. ARRAY 상수를 참고해요. 컬럼은 NUMBER 유형이어야 해요.

게이트웨이 모델 모니터

GROUND_TRUTH = ground_truth_table 게이트웨이 모델 모니터의 성능 메트릭 라벨을 포함하는 실측 값 테이블의 이름이에요. 테이블은 ID_COLUMNS의 모든 컬럼(STRING 유형)과, ACTUAL_CLASS_COLUMNS 또는 ACTUAL_SCORE_COLUMNS를 명시적으로 지정하지 않는 한 실측 라벨 또는 점수를 위한 추가 컬럼 하나를 정확히 포함해야 해요.

접근 제어 요구 사항 (Access control requirements)

이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.

모델 버전 모니터

권한 (Privilege) 객체 (Object) 비고
OWNERSHIP Model monitor OWNERSHIP은 객체를 만든 역할에 자동으로 부여되지만, 소유 역할(또는 MANAGE GRANTS 권한이 있는 역할)이 GRANT OWNERSHIP 명령으로 다른 역할에 이전할 수도 있어요.
CREATE MODEL MONITOR Schema
SELECT SOURCE 매개변수가 지정한 테이블 또는 뷰
USAGE WAREHOUSE 매개변수가 지정한 웨어하우스
USAGE MODEL 매개변수가 지정한 모델

게이트웨이 모델 모니터

권한 (Privilege) 객체 (Object) 비고
OWNERSHIP Model monitor OWNERSHIP은 객체를 만든 역할에 자동으로 부여되지만, 소유 역할(또는 MANAGE GRANTS 권한이 있는 역할)이 GRANT OWNERSHIP 명령으로 다른 역할에 이전할 수도 있어요.
CREATE MODEL MONITOR Schema
SELECT GROUND_TRUTH 매개변수가 지정한 테이블
USAGE WAREHOUSE 매개변수가 지정한 웨어하우스
OWNERSHIP MODEL 매개변수가 지정한 모델
USAGE GATEWAY 매개변수가 지정한 게이트웨이

스키마 안의 객체를 작업하려면 상위 데이터베이스에 대한 권한이 최소 하나, 상위 스키마에 대한 권한이 최소 하나 필요해요.

지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.

사용 메모 (Usage notes)

다음 요구 사항이 매개변수에 적용돼요.

  • 한 문에서 VERSIONGATEWAY를 둘 다 지정할 수 없어요. 모니터 유형을 나타내려면 하나를 지정해요.
  • 모델 작업은 tabular_binary_classification, tabular_regression, tabular_multi_classification이어야 해요.
  • 다중 출력(multiple-output) 모델은 현재 지원되지 않아요. 예측·실측 컬럼은 배열이지만 배열은 최대 하나의 요소를 가져야 해요.
  • 컬럼은 모든 매개변수에서 한 번만 지정할 수 있어요 (예: ID 컬럼은 예측 컬럼이 될 수 없어요).

모델 버전 모니터의 경우:

  • 예측 컬럼이 최소 하나 지정되어야 해요.
  • 실측 컬럼은 선택 사항이지만 지정하지 않으면 정확도 메트릭이 계산되지 않아요.

게이트웨이 모델 모니터의 경우:

  • 예측 컬럼은 단일 출력 모델에서는 생략할 수 있지만, 다중 출력 모델에서는 최소 하나를 지정해야 해요.
  • 실측 값과 ID 컬럼은 선택 사항이지만 지정하지 않으면 정확도 메트릭이 계산되지 않아요.
  • 실측 값 테이블에 단일 비-ID 컬럼이 있으면 실측 컬럼을 생략할 수 있지만, 비-ID 컬럼이 여러 개 있으면 지정해야 해요.

같은 모델·게이트웨이·함수 조합에 대해 여러 모니터를 만들 수 있어요. 각 모니터 이름은 스키마에서 여전히 고유해야 해요.

추가 게이트웨이 모델 모니터 요구 사항:

  • 모델을 뒷받침하는 활성 서비스가 최소 하나 게이트웨이에 포함되어야 해요.
  • 모델 작업과 컬럼을 추론하기 위해 게이트웨이의 엔드포인트 목록 순서에 따라 대표 서비스가 선택돼요.
  • 게이트웨이 뒤의 모든 서비스는 모니터링되는 함수에 대해 동일한 출력 피처 이름을 가져야 해요. 그렇지 않으면 메트릭이 불완전하거나 올바르지 않을 수 있어요. 입력 피처 이름은 달라도 돼요.
  • 모니터링되는 피처 수는 500으로 제한돼요.

세그먼트 컬럼 요구 사항:

  • 세그먼트 컬럼은 STRING 유형이어야 해요.
  • 모니터당 최대 5개의 세그먼트 컬럼 (하드 한도).
  • 각 세그먼트 컬럼은 25개 미만의 고유 값을 가져야 해요 (권장 한도).
  • 세그먼트 값은 대소문자를 구분하며, 세그먼트 쿼리에는 특수 문자가 지원되지 않아요.

MODEL MONITOR 인스턴스의 기본 구성(모니터링하는 모델, 사용하는 소스 테이블 또는 실측 값 테이블 포함)은 모니터를 만든 뒤에는 변경할 수 없어요. ALTER MODEL MONITOR로 수정할 수 있는 옵션은 몇 가지뿐이에요. 모니터 구성을 변경하려면 인스턴스를 삭제하고 새로 만들어요.

복제(replication)는 CUSTOM_CLASSIFIER 클래스의 인스턴스에만 지원돼요.

OR REPLACEIF NOT EXISTS 절은 서로 배타적이에요. 같은 문에서 둘 다 사용할 수 없어요.

CREATE OR REPLACE <object> 문은 원자적(atomic)으로 동작해요. 즉, 객체를 교체할 때 기존 객체는 삭제되고 새 객체는 단일 트랜잭션 안에서 생성돼요.

예시 (Examples)

모델 버전 모니터

기본 예시 — 매일 새로 고쳐지고 단일 예측·실측 점수 컬럼을 사용하는 모델 버전 모니터를 만들어요.

CREATE MODEL MONITOR my_monitor WITH
    MODEL = my_model
    VERSION = 'v1'
    FUNCTION = 'predict'
    SOURCE = mydb.myschema.scoring_data
    WAREHOUSE = compute_wh
    REFRESH_INTERVAL = '1 day'
    AGGREGATION_WINDOW = '1 day'
    TIMESTAMP_COLUMN = event_time
    PREDICTION_SCORE_COLUMNS = ( 'prediction_score' )
    ACTUAL_SCORE_COLUMNS = ( 'actual_score' );

CUSTOM_METRIC_COLUMNS 예시 — 추가 맞춤 메트릭을 계산할 사용자 지정 숫자 컬럼을 지정해요.

CREATE MODEL MONITOR my_monitor_custom WITH
    MODEL = my_model
    VERSION = 'v1'
    FUNCTION = 'predict'
    SOURCE = mydb.myschema.scoring_data
    WAREHOUSE = compute_wh
    REFRESH_INTERVAL = '1 day'
    AGGREGATION_WINDOW = '1 day'
    TIMESTAMP_COLUMN = event_time
    PREDICTION_SCORE_COLUMNS = ( 'prediction_score' )
    ACTUAL_SCORE_COLUMNS = ( 'actual_score' )
    CUSTOM_METRIC_COLUMNS = ( 'latency_ms', 'num_impressions' );

이 예시에서는 latency_msnum_impressions 두 개의 사용자 지정 메트릭을 포함해요. 이들은 모델의 피처가 아니지만 모델의 성능과 함께 추적하면 유용한 소스 데이터 컬럼이에요.

게이트웨이 모델 모니터

기본 예시 — 매시간 메트릭을 집계하고 추론된 예측·실측 컬럼을 사용하는 게이트웨이 모델 모니터를 만들어요.

CREATE MODEL MONITOR my_monitor_inferred WITH
    MODEL = my_model
    GATEWAY = my_gateway
    FUNCTION = 'predict'
    WAREHOUSE = compute_wh
    REFRESH_INTERVAL = '1 minute'
    AGGREGATION_WINDOW = '1 hour'
    GROUND_TRUTH = mydb.myschema.ground_truth_data
    ID_COLUMNS = ( 'request_id' );

명시적 컬럼 예시 — 다중 출력 모델의 예측·실측 컬럼을 지정해요.

CREATE MODEL MONITOR my_monitor_explicit WITH
    MODEL = my_model
    GATEWAY = my_gateway
    FUNCTION = 'predict'
    WAREHOUSE = compute_wh
    REFRESH_INTERVAL = '1 minute'
    AGGREGATION_WINDOW = '1 hour'
    GROUND_TRUTH = mydb.myschema.ground_truth_data
    ID_COLUMNS = ( 'request_id' )
    PREDICTION_SCORE_COLUMNS = ( 'prediction_score' )
    ACTUAL_SCORE_COLUMNS = ( 'actual_score' );

더 알아보기 (Learn more)

  • ML Observability — 모델 버전 모니터 개요
  • Gateway Monitoring & A/B Testing — 게이트웨이 모델 모니터 개요
  • ALTER MODEL MONITOR — 모델 모니터 수정
  • DROP MODEL MONITOR — 모델 모니터 삭제