앱에서 Snowflake ML 모델 생성, 학습 및 사용하기

이 항목에서는 scikit-learn Python 패키지를 사용하여 Snowflake Native App 내에서 Snowflake ML 모델을 학습시키는 방법에 대한 예제를 제공합니다. 이 항목의 예는 컨슈머 또는 공급자 계정의 데이터에 대한 모델을 학습시키는 데 사용할 수 있습니다.

저장 프로시저를 보관할 버전 스키마 만들기

설정 스크립트 내에서 다음 예제와 같이 저장 프로시저를 포함하는 버전이 지정된 스키마를 만듭니다.

  1. 저장 프로시저에 대한 버전 스키마 만들기

    CREATE OR ALTER VERSIONED SCHEMA core;
    GRANT USAGE ON SCHEMA core TO APPLICATION ROLE app_public;
    
    Copy

모델을 만들고 학습시키는 저장 프로시저 만들기

  1. 다음 예제와 같이 모델을 학습시키는 데 사용할 Python 함수에 대한 저장 프로시저를 만듭니다.

CREATE OR REPLACE PROCEDURE core.py_log_model(db STRING, schema STRING, mname STRING, mvname STRING)
RETURNS STRING
LANGUAGE python
RUNTIME_VERSION = 3.11
HANDLER = 'log_model'
PACKAGES = ('snowflake-snowpark-python','scikit-learn', 'snowflake-ml-python >=1.6.2', 'pandas', 'numpy')
AS '
  -- <body of the stored procedure>
';
Copy

이 예에서는 py_log_model 이라는 저장 프로시저를 생성하고 scikit-learn 을 사용하여 모델을 학습시키는 데 필요한 Python 패키지를 선언합니다.

  • snowflake-snowpark-python

  • scikit-learn

  • snowflake-ml-python

  • pandas

  • numpy

  • xgboost

저장 프로시저를 만든 후 저장 프로시저의 본문에 다음 코드를 추가합니다.

  1. 저장 프로시저의 본문에 Python 코드를 추가합니다.

import _snowflake
from snowflake.ml.registry import Registry
import pandas as pd
import numpy as np
from sklearn import datasets
from snowflake.ml.modeling.xgboost import XGBClassifier

def log_model(sp_session, mname, mvname):
    reg = Registry(session=sp_session, schema_name=''stateful_schema'')

    iris = datasets.load_iris()
    df = pd.DataFrame(data=np.c_[iris["data"], iris["target"]], columns=iris["feature_names"] + ["target"])
    df.columns = [s.replace(" (CM)", "").replace(" ", "") for s in df.columns.str.upper()]
    input_cols = ["SEPALLENGTH", "SEPALWIDTH", "PETALLENGTH", "PETALWIDTH"]
    label_cols = "TARGET"
    output_cols = "PREDICTED_TARGET"

    clf_xgb = XGBClassifier(
        input_cols=input_cols, output_cols=output_cols, label_cols=label_cols, drop_input_cols=True
    )
    clf_xgb.fit(df)
    model_ref = reg.log_model(
        clf_xgb,
        model_name=f"{mname}",
        version_name=f"{mvname}",
        options={"enable_explainability": False},
    )
    return "success"
Copy

log_model 함수는 다음을 수행합니다.

  • pandasnumpy 를 사용하여 DataFrame 을 생성하여 모델에 대한 학습 데이터를 제공합니다.

  • 데이터의 학습 알고리즘으로 사용할 XGBoost 인스턴스를 생성합니다.

  • XGBoost 의 fit() 함수를 호출하여 모델을 생성하고 데이터 세트에 대해 학습시킵니다.

  • Snowflake Model Registry의 log_model() 함수를 호출하여 Model Registry에 모델을 추가합니다.

참고

앱에서 만든 모델은 Model Registry에 저장해야 합니다. 앱은 스테이지에 저장된 모델에 액세스할 수 없습니다.

  1. 선택 사항: 컨슈머가 저장 프로시저를 실행하여 모델을 학습시킬 수 있도록 하려면 저장 프로시저에 USAGE 권한을 부여하십시오.

    GRANT USAGE ON PROCEDURE core.py_log_model(STRING, STRING) TO APPLICATION ROLE app_public;
    
    Copy

모델을 실행하는 저장 프로시저 만들기

  1. 모델을 호출하는 데 사용하는 Python 함수에 대한 저장 프로시저를 만듭니다.

  CREATE OR REPLACE PROCEDURE core.py_call_predict(mname STRING, mvname STRING)
  RETURNS TABLE()
  LANGUAGE python
  RUNTIME_VERSION = 3.11
  HANDLER = 'run_model'
  PACKAGES = ('snowflake-snowpark-python','scikit-learn', 'snowflake-ml-python>=1.6.2', 'pandas', 'xgboost')
  AS
'
-- <body of the stored procedure>
';
Copy
  1. 모델을 호출하는 데 사용하는 Python 코드를 추가합니다.

import _snowflake
from snowflake.ml.registry import Registry
import pandas as pd
from sklearn import datasets

def run_model(sp_session, mname, mvname):
  iris = datasets.load_iris()
  df = pd.DataFrame(data=iris["data"], columns=iris["feature_names"])
  df.columns = [s.replace(" (CM)", "").replace(" ", "") for s in df.columns.str.upper()]

  reg = Registry(session=sp_session, schema_name="stateful_schema")
  mv = reg.get_model(mname).version(mvname)

  pred = mv.run(df.head(10), function_name="predict")
  return sp_session.create_dataframe(pred)
Copy

run_model 함수는 다음을 수행합니다.

  • load_iris() 함수를 실행하여 홍채 머신 러닝 데이터 세트를 로딩합니다.

  • pandas 를 사용하여 홍채 데이터 세트를 기반으로 DataFrame 을 생성합니다.

  • get_model() 함수를 실행하여 Model Registry를 가져옵니다.

  • 모델에서 예측 함수를 실행합니다.

  • 결과를 반환합니다.

  1. 선택 사항: 컨슈머가 저장 프로시저를 실행하여 모델을 학습시킬 수 있도록 하려면 저장 프로시저에 USAGE 권한을 부여하십시오.

    GRANT USAGE ON PROCEDURE core.py_call_predict(STRING, STRING) TO APPLICATION ROLE app_public;
    
    Copy

저장 프로시저 실행하기

앱에서 이러한 저장 프로시저에 대한 USAGE 권한을 애플리케이션 역할에 부여하면, 컨슈머는 다음 예시와 같이 저장 프로시저를 호출하여 모델을 학습시키고 실행할 수 있습니다.

CALL my_app.core.py_log_model('md1', 'V1');
Copy

이 명령은 py_log_model 저장 프로시저를 호출하여 모델을 학습시킵니다.

CALL my_app.core.py_call_predict('md1', 'V1');
Copy

이 명령은 py_call_predict 저장 프로시저를 호출하여 모델에서 예측 함수를 호출합니다.