ML Observability: 시간 경과에 따른 모델 동작 모니터링

모델 동작은 기본 하드웨어 및 소프트웨어의 변경, 트래픽의 유동적인 특성 등 일반적인 요인뿐만 아니라 입력 드리프트, 오래된 학습 가정, 데이터 파이프라인 문제 등으로 인해 시간이 지남에 따라 변경될 수 있습니다. ML Observability를 사용하면 성능, 드리프트, 볼륨 등 여러 차원에서 Snowflake Model Registry를 통해 배포한 프로덕션 모델의 품질을 추적할 수 있습니다. 또한 문자열 범주형 열을 사용하여 데이터의 다양한 세그먼트에서 모델 성능을 모니터링할 수 있습니다.

현재, 모델 모니터는 회귀 및 이진 분류 모델을 지원합니다.

참고

ML Observability를 자세히 살펴보고 사용을 시작하려면 빠른 시작 섹션을 참조하십시오.

ML Observability 워크플로

추론을 위해 Snowflake Model Registry에 로그된 모델을 사용하면 추론 메서드에 전달된 입력 유형 DataFrame 에 따라 Snowpark 또는 pandas DataFrame 의 형태로 결과를 받게 됩니다. 이 데이터는 일반적으로 Snowflake에서 생성됩니다. 추론이 Snowflake 외부에서 실행되는 경우에도 그 결과를 Snowflake에 저장하는 것이 일반적입니다. ML Observability를 사용하면 저장된 추론 데이터로 작업하여 이 두 가지 시나리오에서 모델의 성능을 모니터링할 수 있습니다. 일반적인 워크플로는 아래와 같습니다.

ML Observability 워크플로

모니터링 로그는 추론 데이터와 예측을 저장하여 ML Observability 기능이 시간에 따른 예측의 변화를 관찰할 수 있도록 합니다. 모니터링 로그는 ID, 타임스탬프, 특성, 예측, 그리고 주어진 행이 예측인지 또는 관측된 데이터인지를 나타내는 기준 데이터 레이블이 포함된 테이블에 저장됩니다. 기본 구조는 아래와 같습니다.

ML Observability의 작동 구조

모니터링하려는 각 모델 버전에 대해 모델 모니터 오브젝트를 명시적으로 만들어야 합니다. 각 모델 버전은 정확히 하나의 모니터를 가질 수 있고 각 모니터는 정확히 하나의 모델 버전을 모니터링할 수 있으며 공유할 수 없습니다. 모니터 오브젝트는 원본 데이터를 쿼리하여 모니터 로그를 자동으로 새로 고치고 로그를 기반으로 모니터링 보고서를 업데이트합니다.

각 모니터에는 다음 정보가 캡슐화되어 있습니다.

  • 모니터링할 모델 버전입니다.

  • 모니터 로그가 저장되는 테이블입니다.

  • 데이터가 저장되는 최소 시간 단위(집계 기간)로, 현재 최소 1일입니다.

  • 드리프트와 같은 비교 메트릭 작업을 위한 기준 테이블(선택 사항)입니다.

전제 조건

시작하기 전에 다음이 있는지 확인하십시오.

  • Snowflake 계정.

  • snowflake-ml-python Python 패키지 버전 1.7.1 이상.

  • Snowflake Model Registry 에 익숙해야 함.

모델 모니터 만들기

CREATE MODEL MONITOR 명령을 사용하여 모델 모니터를 만듭니다. 모델 모니터는 모니터링할 모델 버전과 동일한 스키마로 만들어야 합니다. 모니터가 만들어지는 스키마에 대해 CREATE MODEL MONITOR 권한이 있어야 합니다. 계정당 최대 250개의 모델 모니터를 만들 수 있습니다.

CREATE MODEL MONITOR 명령에 대한 자세한 내용은 CREATE MODEL MONITOR 섹션을 참조하십시오.

모델 모니터에 사용할 수 있는 다른 SQL 명령에 대한 자세한 내용은 모델 모니터 명령 섹션을 참조하십시오.

일시적으로 모니터링 중지 및 재개하기

ALTER MODEL MONITOR … SUSPEND 를 사용하여 모델 모니터를 일시 중단(일시 중지)할 수 있습니다. 모니터링을 다시 시작하려면 ALTER MODEL MONITOR … RESUME 을 실행하십시오.

새로 고침 실패 시 자동 일시 중단

모델 모니터는 원본 테이블과 관련된 새로 고침 실패가 5회 연속 발생하면 자동으로 새로 고침을 일시 중단합니다. DESCRIBE MODEL MONITOR 명령을 사용하여 새로 고침 일시 중단의 상태와 원인을 볼 수 있습니다. 출력에는 다음과 같은 열이 포함됩니다.

  • aggregation_status: 이 열의 값은 JSON 오브젝트입니다. 모델 모니터가 일시 중단된 경우 이 오브젝트의 값 중 하나 이상은 SUSPENDED 입니다.

  • aggregation_last_error: 이 열의 값은 일시 중단을 일으킨 특정 SQL 오류가 포함된 JSON 오브젝트입니다.

새로 고침 실패의 루트 원인을 해결한 후 ALTER MODEL MONITOR … RESUME 을 실행하여 모니터를 다시 시작하십시오.

모델 모니터에 세그먼트 추가하기

모델 모니터는 세분화를 지원하므로 전체 데이터 세트 모니터링 외에도 데이터의 특정 하위 세트에 대해 시간 경과에 따른 모델 품질을 모니터링할 수 있습니다. 세그먼트는 데이터를 다른 리전 또는 다른 사용자 그룹과 같은 논리 단위로 그룹화하는 데 사용됩니다.

세그먼트가 있는 모니터 만들기

모델 모니터를 생성할 때 SEGMENT_COLUMNS 매개 변수를 사용하여 세그먼트 열을 지정할 수 있습니다. 세그먼트 열은 소스 데이터의 문자열 열이어야 합니다.

중요

숫자 열에 세그먼트를 생성하려면 모니터를 생성하기 전에 세그먼트를 유효한 범주로 분류합니다. 예를 들어, 세그먼트 열로 사용하기 전에 숫자형 TEMPERATURE 열을 ‘COLD’ (< 32°F), ‘MODERATE’ (32-80°F), and ‘HOT’ (> 80°F) 등의 범주형 값으로 변환할 수 있습니다.

CREATE [OR REPLACE] MODEL MONITOR [IF NOT EXISTS] <NAME> WITH
    --- all other existing parameters of CREATE MODEL MONITOR
    SEGMENT_COLUMNS = (<segment_column_name_array>)
Copy

전체 구문 및 매개 변수 세부 정보는 CREATE MODEL MONITOR 섹션을 참조하세요.

기존 모니터 또는 새 모니터에 세그먼트 추가하기

ALTER MODEL MONITOR 명령을 사용하여 기존 모니터에 세그먼트 열을 추가할 수 있습니다.

ALTER MODEL MONITOR <NAME> ADD SEGMENT_COLUMN = <segment_column_name>
Copy

기존 모니터에서 세그먼트 열을 제거할 수도 있습니다.

ALTER MODEL MONITOR <NAME> DROP SEGMENT_COLUMN = <segment_column_name>
Copy

전체 구문 및 옵션은 ALTER MODEL MONITOR 섹션을 참조하세요.

UI의 세그먼트 모니터링에서 세그먼트 정의하기

UI에서 세그먼트 모니터링 설정을 통해 세그먼트를 구성하고 관리할 수 있습니다.

ML Observability 세그먼트 설정

세그먼트 설정 인터페이스를 사용하면 모델에 대해 모니터링할 세그먼트를 정의하고 구성할 수 있습니다.

모델 모니터 대시보드의 세그먼트 선택기에서 세그먼트 선택

모델 모니터 대시보드에서 세그먼트 선택기를 사용하여 데이터의 특정 세그먼트에 대한 메트릭을 볼 수 있습니다.

ML Observability 세그먼트 선택기

세그먼트의 성능 고려 사항

성능은 피처 수, 세그먼트 열 수, 세그먼트 열당 고유 값, 웨어하우스 크기, 웨어하우스 유형, 집계 윈도우, 총 행 수, 집계 윈도우당 행 수와 같은 여러 요소에 따라 달라집니다.

  • SEGMENT_COLUMNS가 있는 CREATE의 성능 영향은 요청의 세그먼트 열 수에 직접 비례합니다.

  • 세그먼트 열이 많을 때 CREATE 성능이 느린 경우 ALTER 명령을 사용하여 세그먼트 열을 하나씩 추가하는 것을 고려하세요.

  • 각 세그먼트 열과 값 조합은 독립적으로 쿼리되며, 일정 및 기타 요인에 따라 데이터가 마지막으로 업데이트된 시점에 시간 차이가 있을 수 있습니다. 그러나 모든 데이터를 동시에 업데이트하려고 최선을 다합니다.

모니터링 보고서 보기

모니터 보고서를 보려면 |sf-web-interface|의 ML 모니터링 대시보드를 방문하세요. 탐색 메뉴에서 :ui:`AI & ML` |raa| :ui:`Models`를 선택합니다. 결과 목록에는 현재 역할이 액세스할 수 있는 모든 데이터베이스와 스키마의 Snowflake Model Registry에 있는 모든 모델이 포함됩니다.

Models 목록에서 해당 행을 선택하여 모델의 세부 정보 페이지를 엽니다. 세부 정보 페이지에는 모델의 설명, 태그, 버전, 모니터 등 주요 모델 정보가 표시됩니다.

세부 정보 페이지의 Monitors 목록에는 모델 모니터 목록, 연결된 모델 버전, 상태 및 생성된 시기가 표시됩니다.

모니터 목록에서 해당 행을 선택하여 모델 모니터 대시보드 페이지를 엽니다. 대시보드에는 시간 경과에 따른 모델의 주요 메트릭을 표시하는 그래프가 채워집니다. 표시되는 정확한 그래프는 모니터의 기반이 되는 모델 유형(이진 분류 또는 회귀)에 따라 달라집니다.

대시보드에서 다음 작업을 수행할 수 있습니다.

  • 시간 범위 선택기를 클릭하여 그래프의 범위를 변경할 수 있습니다.

  • Settings 버튼을 클릭하여 표시되는 그래프를 변경합니다. (자세한 정보를 보려면 메트릭 이름 위에 마우스를 올려놓습니다.)

  • Compare 모델 선택기 드롭다운을 클릭하여 모델 모니터를 비교하십시오.

  • Display monitor details 를 선택하여 모델 모니터에 대한 자세한 정보를 표시합니다.

모니터링 결과 쿼리하기

생성하는 각 모델 모니터에는 다음과 같은 메트릭이 있습니다.

  • 드리프트 메트릭: 분포 변화 또는 데이터 이동

  • 성능 메트릭: 배포 변경 또는 데이터 이동

  • 통계 메트릭: 카운트 또는 null 값

모니터에서 계산한 메트릭을 쿼리하려면 모니터 메트릭 함수 를 사용합니다. 메트릭 함수는 모델 모니터 오브젝트에서 메트릭을 가져옵니다. 메트릭 함수의 결과를 사용하여 Streamlit 또는 기타 중앙 집중식 모니터링 도구에서 사용자 지정 대시보드를 만들 수 있습니다.

중요

모델 모니터 오브젝트로 작업하려면 다음 권한이 있어야 합니다.

명령

필수 권한

CREATE MODEL MONITOR

  • 모델을 만들려는 스키마에 대한 CREATE MODEL MONITOR 권한이 필요합니다.

  • 데이터 원본(테이블 또는 뷰)에 대한 SELECT

  • 데이터베이스, 스키마, 웨어하우스 및 모델에 대한 USAGE

SHOW MODEL MONITORS

모델 모니터에 대한 모든 권한

DESCRIBE MODEL MONITOR

모델 모니터에 대한 모든 권한

ALTER MODEL MONITOR

모델 모니터에 대한 MODIFY

DROP MODEL MONITOR

모델 모니터에 대한 OWNERSHIP

다음 SQL 템플릿을 사용하여 모델 모니터에서 드리프트 메트릭을 가져옵니다.

SELECT *
FROM TABLE(MODEL_MONITOR_DRIFT_METRIC (
                                        <model_monitor_name>,
                                        <drift_metric_name>,
                                        <column_name>,
                                        <granularity>,
                                        <start_time>,
                                        <end_time>,
                                        <extra_args>
                                      )
          )
Copy

다음 SQL 템플릿을 사용하여 모델 모니터에서 성능 메트릭을 가져옵니다.

SELECT *
FROM TABLE(MODEL_MONITOR_PERFORMANCE_METRIC (
                                        <model_monitor_name>,
                                        <metric_name>,
                                        <granularity>,
                                        <start_time>,
                                        <end_time>,
                                        <extra_args>
                                      )
          )
Copy

다음 SQL 템플릿을 사용하여 모델 모니터에서 통계 메트릭을 가져옵니다.

SELECT *
FROM TABLE(MODEL_MONITOR_STAT_METRIC (
                                        <model_monitor_name>,
                                        <metric_name>,
                                        <granularity>,
                                        <start_time>,
                                        <end_time>,
                                        <extra_args>
                                      )
          )
Copy

세그먼트별 메트릭 쿼리하기

특정 세그먼트에 대한 메트릭을 쿼리하려면 세그먼트 열과 값을 지정하는 JSON 형식과 함께 <extra_args> parameter with a JSON format that specifies the segment column and value. The `` 매개 변수를 사용합니다. <extra_args>`` 매개 변수는 선택 사항입니다. 제공하지 않는 경우 쿼리는 모든 데이터(비세그먼트 쿼리)에 대한 메트릭을 반환합니다.

참고

현재, 세그먼트 쿼리는 쿼리당 1개의 세그먼트 열:값 페어만 지원합니다. 단일 함수 호출에서 여러 세그먼트를 동시에 쿼리할 수 없습니다.

세그먼트 쿼리의 경우 <extra_args> 매개 변수에 이 형식을 사용합니다.

'{"SEGMENTS": [{"column": "<segment_column_name>", "value": "<segment_value>"}]}'
Copy

예를 들어 프리미엄 고객에 대해서만 드리프트 메트릭을 가져오려면 다음을 수행합니다.

SELECT *
FROM TABLE(MODEL_MONITOR_DRIFT_METRIC (
                                        'my_customer_monitor',
                                        'PSI',
                                        'FEATURE_1',
                                        'DAY',
                                        '2024-01-01'::TIMESTAMP_NTZ,
                                        '2024-01-31'::TIMESTAMP_NTZ,
                                        '{"SEGMENTS": [{"column": "CUSTOMER_TIER", "value": "PREMIUM"}]}'
                                      )
          )
Copy

세그먼트 쿼리의 결과 테이블에는 두 개의 추가 열이 포함됩니다.

  • SEGMENT_COLUMN: 메트릭이 계산되는 세그먼트 열의 이름(또는 비세그먼트 쿼리의 경우 NULL)

  • SEGMENT_VALUE: 메트릭이 계산되는 세그먼트 값(또는 비세그먼트 쿼리의 경우 NULL)

세그먼트에 대한 자세한 내용은 모델 모니터에 세그먼트 추가하기 섹션을 참조하세요.

모니터링 메트릭에 대한 경고 및 알림을 설정할 수 있습니다. 자세한 내용은 경고 및 알림 섹션을 참조하십시오.

알려진 제한 사항

모델 모니터에는 다음과 같은 제한 사항이 적용됩니다.

  • 모니터는 모델 버전과 동일한 데이터베이스 및 스키마에 있어야 합니다.

  • 단일 출력 회귀 및 이진 분류 모델만 지원됩니다.

  • 하나 이상의 예측 열(클래스 또는 점수)이 필요하면, 실제 열은 선택 사항이지만 정확도 메트릭에 필요합니다.

  • 드리프트 계산에는 기준 데이터가 필요하며, 기준 데이터가 없으면 기준 데이터를 추가하려면 모니터를 제거하고 다시 만들어야 합니다.

  • 각 열은 모니터에서 한 번만 사용할 수 있습니다. 예를 들어 ID 열과 예측 열을 같은 열로 사용할 수 없습니다.

  • 데이터에는 모니터 실패 및 일시 중단을 방지하기 위해 유효하지 않은 값(null, NaNs, +/-Inf, 0~1을 벗어난 확률 점수, 이진수가 아닌 클래스, PREDICTION_CLASS_COLUMNS 열에 2개 이상의 클래스)을 포함할 수 없습니다.

  • 타임스탬프 열은 TIMESTAMP_NTZ 유형이어야 하며, 예측 및 실제 열은 NUMBER 유형이어야 합니다.

  • 집계 윈도우를 일 단위로 지정해야 합니다.

  • 최대 500개의 특성을 모니터링할 수 있습니다.

  • 최대 250개의 모니터를 만들 수 있습니다.

  • 세그먼트 열은 문자열 범주형 열이어야 합니다.

  • 모델 모니터당 최대 5개의 세그먼트 열을 포함할 수 있습니다(강제 제한).

  • 각 세그먼트 열의 고유 값은 25개 미만이어야 합니다(권장 제한).

  • 세그먼트 값은 대/소문자를 구분하며 세그먼트 쿼리에는 특수 문자가 지원되지 않습니다.

  • 세그먼트 쿼리에는 NULL 필터링이 지원되지 않습니다.

비용 고려 사항

가상 웨어하우스 컴퓨팅:

  • 모델 모니터는 가상 웨어하우스를 사용하므로 생성 시와 새로 고칠 때마다 비용이 발생합니다.

  • Snowsight 대시보드를 로딩할 때도 가상 웨어하우스를 사용하므로 추가 요금이 발생합니다.

저장:

  • 모델 모니터는 원본 데이터를 계정에 저장된 테이블로 구체화합니다.

  • 세그먼트 열은 계정에 저장된, 추가적인 구체화된 테이블을 추가합니다.

클라우드 서비스 컴퓨팅:

  • 모델 모니터는 클라우드 서비스 컴퓨팅을 사용하여 기본 오브젝트가 변경되었을 때 새로 고침을 트리거합니다. 클라우드 서비스 컴퓨팅 비용은 일일 클라우드 서비스 비용이 계정의 일일 웨어하우스 비용의 10%를 초과하는 경우에만 청구됩니다.