앱에서 Snowflake ML 모델 생성, 학습 및 사용하기¶
이 항목에서는 scikit-learn
Python 패키지를 사용하여 Snowflake Native App 내에서 Snowflake ML 모델을 학습시키는 방법에 대한 예제를 제공합니다. 이 항목의 예는 컨슈머 또는 공급자 계정의 데이터에 대한 모델을 학습시키는 데 사용할 수 있습니다.
저장 프로시저를 보관할 버전 스키마 만들기¶
설정 스크립트 내에서 다음 예제와 같이 저장 프로시저를 포함하는 버전이 지정된 스키마를 만듭니다.
저장 프로시저에 대한 버전 스키마 만들기
CREATE OR ALTER VERSIONED SCHEMA core; GRANT USAGE ON SCHEMA core TO APPLICATION ROLE app_public;
모델을 만들고 학습시키는 저장 프로시저 만들기¶
다음 예제와 같이 모델을 학습시키는 데 사용할 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> ';이 예에서는
py_log_model
이라는 저장 프로시저를 생성하고scikit-learn
을 사용하여 모델을 학습시키는 데 필요한 Python 패키지를 선언합니다.
snowflake-snowpark-python
scikit-learn
snowflake-ml-python
pandas
numpy
xgboost
저장 프로시저를 만든 후 저장 프로시저의 본문에 다음 코드를 추가합니다.
저장 프로시저의 본문에 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"
log_model
함수는 다음을 수행합니다.
pandas
및numpy
를 사용하여 DataFrame 을 생성하여 모델에 대한 학습 데이터를 제공합니다.데이터의 학습 알고리즘으로 사용할 XGBoost 인스턴스를 생성합니다.
XGBoost 의
fit()
함수를 호출하여 모델을 생성하고 데이터 세트에 대해 학습시킵니다.Snowflake Model Registry의
log_model()
함수를 호출하여 Model Registry에 모델을 추가합니다.참고
앱에서 만든 모델은 Model Registry에 저장해야 합니다. 앱은 스테이지에 저장된 모델에 액세스할 수 없습니다.
선택 사항: 컨슈머가 저장 프로시저를 실행하여 모델을 학습시킬 수 있도록 하려면 저장 프로시저에 USAGE 권한을 부여하십시오.
GRANT USAGE ON PROCEDURE core.py_log_model(STRING, STRING) TO APPLICATION ROLE app_public;
모델을 실행하는 저장 프로시저 만들기¶
모델을 호출하는 데 사용하는 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>
';
모델을 호출하는 데 사용하는 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)
run_model
함수는 다음을 수행합니다.
load_iris()
함수를 실행하여 홍채 머신 러닝 데이터 세트를 로딩합니다.
pandas
를 사용하여 홍채 데이터 세트를 기반으로 DataFrame 을 생성합니다.
get_model()
함수를 실행하여 Model Registry를 가져옵니다.모델에서 예측 함수를 실행합니다.
결과를 반환합니다.
선택 사항: 컨슈머가 저장 프로시저를 실행하여 모델을 학습시킬 수 있도록 하려면 저장 프로시저에 USAGE 권한을 부여하십시오.
GRANT USAGE ON PROCEDURE core.py_call_predict(STRING, STRING) TO APPLICATION ROLE app_public;
저장 프로시저 실행하기¶
앱에서 이러한 저장 프로시저에 대한 USAGE 권한을 애플리케이션 역할에 부여하면, 컨슈머는 다음 예시와 같이 저장 프로시저를 호출하여 모델을 학습시키고 실행할 수 있습니다.
CALL my_app.core.py_log_model('md1', 'V1');
이 명령은 py_log_model
저장 프로시저를 호출하여 모델을 학습시킵니다.
CALL my_app.core.py_call_predict('md1', 'V1');
이 명령은 py_call_predict
저장 프로시저를 호출하여 모델에서 예측 함수를 호출합니다.