실험을 실행하여 모델 비교 및 선택하기¶
Snowflake ML 실험을 통해 모델 학습 결과의 조직화된 평가인 *실험*을 설정할 수 있습니다. 이를 통해 하이퍼 매개 변수 조정 결과, 다양한 대상 메트릭, 다양한 모델 유형의 동작을 체계적으로 비교하여 요구 사항에 가장 적합한 모델을 선택할 수 있습니다. 각 실험은 일련의 *실행*으로 구성되며, 이는 학습의 메타데이터와 아티팩트입니다. Snowflake는 실행 아티팩트에 대해 의견이 없으며, 모델 평가 프로세스에 유용한 모든 것을 제출할 수 있습니다.
실험을 완료하면 |sf-web-interface|를 통해 결과를 볼 수 있습니다. Python 또는 SQL에서 언제든지 실행 아티팩트를 검색할 수도 있습니다.
참고
Snowflake 실험에는 snowflake-ml-python 버전 1.19.0 이상이 필요합니다.
액세스 제어 요구 사항¶
실험을 생성하려면 실행 아티팩트가 저장된 스키마에 대한 CREATE EXPERIMENT 권한이 필요합니다. 실험을 생성하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한이 필요합니다.
실험 생성하기¶
먼저 실험을 생성합니다. 이를 위해서는 실행 정보를 저장하는 데 사용되는 기존 데이터베이스와 스키마가 필요합니다.
실험 지원은 snowflake.ml.experiment.ExperimentTracking 클래스에서 제공됩니다. set_experiment(name: Optional[str]) 메서드를 사용하여 주어진 이름으로 실험을 열고 로그 및 아티팩트에 대한 활성 실험 컨텍스트로 설정할 수 있습니다. 아직 존재하지 않는 실험이 생성됩니다.
다음 예제에서는 활성 데이터베이스 및 스키마에서 ``My_Experiment``라는 실험을 생성하거나 열고 기존 ``session``을 사용하여 활성 실험으로 설정하는 방법을 보여줍니다.
from snowflake.ml.experiment import ExperimentTracking
exp = ExperimentTracking(session=session)
exp.set_experiment("My_Experiment")
실험 실행 시작하기¶
실험의 각 실행에는 고유한 메트릭, 매개 변수 및 아티팩트 세트가 있습니다. 이 정보는 모델 학습과 해당 결과에 대한 시각화 및 데이터를 제공하기 위해 |sf-web-interface|에서 사용됩니다.
ExperimentTracking 인스턴스에서 start_run(name: Optional[str]) 메서드로 실행을 시작합니다. 이는 with 문에서의 사용을 지원하는 새로운 Run``을 반환합니다. Snowflake는 실행이 깔끔하게 완료되고 실행 범위를 더 쉽게 추론할 수 있도록 ``with 문을 사용하는 것을 권장합니다.
with exp.start_run("my_run"):
# .. Train your model and log artifacts
학습 정보 자동 로깅¶
모델 학습 중 XGBoost, LightGBM 또는 Keras 모델에 대한 학습 정보를 자동으로 로깅할 수 있습니다. 자동 로깅은 실험 및 학습 중인 모델에 대한 정보를 참조하는 콜백을 등록하여 수행됩니다. 매개 변수 또는 메트릭을 조정하는 Model 인스턴스에서 메서드가 호출될 때마다 활성 실행에 대해 실험에 자동으로 로깅됩니다.
다음 예제에서는 지원되는 각 모델 트레이너에 대해 실험의 콜백을 구성한 후 기본 학습 실행을 시작하여 아티팩트를 로깅하는 방법을 보여줍니다.
# exp: ExperimentTracking
from xgboost import XGBClassifier
from snowflake.ml.experiment.callback.xgboost import SnowflakeXgboostCallback
from snowflake.ml.model.model_signature import infer_signature
sig = infer_signature(X, y)
callback = SnowflakeXgboostCallback(
exp, model_name="name", model_signature=sig
)
model = XGBClassifier(callbacks=[callback])
with exp.start_run("my_run"):
model.fit(X, y, eval_set=[(X, y)])
# exp: ExperimentTracking
from lightgbm import LGBMClassifier
from snowflake.ml.experiment.callback.lightgbm import SnowflakeLightgbmCallback
from snowflake.ml.model.model_signature import infer_signature
sig = infer_signature(X, y)
callback = SnowflakeLightgbmCallback(
exp, model_name="name", model_signature=sig
)
model = LGBMClassifier()
with exp.start_run("my_run"):
model.fit(X, y, eval_set=[(X, y)], callbacks=[callback])
# exp: ExperimentTracking
import keras
from snowflake.ml.experiment.callback.keras import SnowflakeKerasCallback
from snowflake.ml.model.model_signature import infer_signature
sig = infer_signature(X, y)
callback = SnowflakeKerasCallback(
exp, model_name="name", model_signature=sig
)
model = keras.Sequential()
model.add(keras.layers.Dense(1))
model.compile(
optimizer=keras.optimizers.RMSprop(learning_rate=0.1),
loss="mean_squared_error",
metrics=["mean_absolute_error"],
)
with exp.start_run("my_run"):
model.fit(X, y, validation_split=0.5, callbacks=[callback])
학습 정보 및 아티팩트를 수동으로 로깅하기¶
자동 로깅을 지원하지 않거나 사전 학습된 모델의 경우 Python에서 실험 정보를 수동으로 로깅하고 아티팩트를 업로드할 수 있습니다. 매개 변수는 학습 모델에 대한 상수 입력인 반면, 메트릭은 모델 *단계*에서 평가됩니다. 학습 epoch를 해당 단계로 나타내도록 선택할 수 있습니다. 다음 예제에서는 매개 변수를 로깅하고, 메트릭을 로깅하고, 아티팩트를 업로드하는 방법을 보여줍니다.
참고
기본 단계 값은 ``0``입니다.
# Logging requires an active run for the exp: ExperimentTracker instance.
# Log model parameters with the log_param(...) or log_params(...) methods
exp.log_param("learning_rate", 0.01)
exp.log_params({"optimizer": "adam", "batch_size": 64})
# Log model metrics with the log_metric(...) or log_metrics(...) methods
exp.log_metric("loss", 0.3, step=100)
exp.log_metrics({"loss": 0.4, "accuracy": 0.8}, step=200)
# Log your model to the experiment's model registry with the log_model(...) method.
exp.log_model(model, model_name="my_model", signatures={"predict": model_signature})
exp.log_model(model, model_name="my_model", sample_input_data=data)
# Log local artifacts to an experiment run with the log_artifact(...) method.
exp.log_artifact('/tmp/file.txt', artifact_path='artifacts')
참고
아티팩트 로깅은 웨어하우스 노트북에서 지원되지 않습니다.
실행 완료하기¶
실행을 완료하면 실행을 변경할 수 없으며 |sf-web-interface|에서 완료된 것으로 표시됩니다.
with 문의 일부로 실행을 시작한 경우 범위를 종료할 때 실행이 자동으로 완료됩니다. 그렇지 않으면 완료할 실행의 이름을 가진 실험의 end_run(name: Optional[str]) 메서드를 호출하여 실행을 종료할 수 있습니다.
experiment.end_run("my_run")
실험 내에서 실행 비교하기¶
실험 평가는 |sf-web-interface|를 통해 수행됩니다. 탐색 메뉴에서 :ui:`AI & ML` |raa| :ui:`Experiments`를 선택하고 목록에서 검사할 실험을 선택합니다.
실험 뷰에는 Run count over time`에 대한 정보, 현재 선택한 메트릭에 대한 표시, 실험에서 사용 가능한 실행 목록이 포함되어 있습니다. 오른쪽 상단의 드롭다운은 검사할 수 있는 메트릭 목록을 제공하며, 실험 뷰의 :ui:`Metric Value Range 차트를 채웁니다.
이 페이지의 실행 목록에는 실행이 Created`인 경우 :ui:`Run name, Status 및 실험에서 사용할 수 있는 각 메트릭에 대한 추가 열이 포함됩니다. 매개 변수 및 모델 버전에 대한 정보는 실행 비교 뷰에서 확인할 수 있습니다.
실험에서 최대 5개의 실행을 선택한 후 Compare 버튼을 선택하여 실행 메타데이터, 매개 변수, 메트릭, 모델 버전 정보를 보여주는 비교 뷰를 표시할 수 있습니다. 각 메트릭은 시각적으로 표시되며, Metrics 섹션에서 토글을 사용하여 Charts 및 Tables 간에 전환할 수 있습니다.
실행에서 아티팩트 검색하기¶
실행 중 또는 실행 후에 언제든지 아티팩트를 검색할 수 있습니다. 다음 예제에서는 실행에서 사용 가능한 아티팩트를 logs 경로에 나열하고, 실험 my_experiment``의 실행 ``my_run``에 대한 ``logs/log0.txt 아티팩트를 로컬 디렉터리 ``/tmp``에 다운로드하는 방법을 보여줍니다.
# exp: ExperimentTracking
exp.set_experiment("my_experiment")
exp.list_artifacts("my_run", artifact_path="logs")
exp.download_artifacts("my_run", artifact_path="logs/log0.txt", target_path="/tmp")
LIST snow://experiment/my_experiment/versions/my_run/logs;
GET snow://experiment/my_experiment/versions/my_run/logs/log0.txt file:///tmp;
실행 및 실험 삭제하기¶
실험을 마친 후에는 실험과 관련된 모든 실행 아티팩트를 제거할 수 있습니다. 다음 예제에서는 my_experiment 실험을 제거합니다.
# exp: ExperimentTracking
exp.delete_experiment("my_experiment")
DROP EXPERIMENT my_experiment;
실험에서 개별 실행을 제거할 수도 있습니다. 다음 예제에서는 my_experiment 실험의 실행 ``my_run``을 제거합니다.
# exp: ExperimentTracking
exp.set_experiment("my_experiment")
exp.delete_run("my_run")
ALTER EXPERIMENT my_experiment DROP RUN my_run;
제한 사항¶
Snowflake 실험에는 다음 제한 사항이 적용됩니다.
각 스키마는 500개의 실험으로 제한됩니다.
각 실험은 500회의 실행으로 제한됩니다.
실행은 최대 1년 동안 저장됩니다.
개별 실행 매개 변수 및 메트릭은 총 200KB로 제한됩니다.
비용 고려 사항¶
Snowflake 실험을 사용하면 표준 Snowflake 사용량 기반 비용이 발생합니다. 다음과 같은 오브젝트가 이에 해당합니다.
실행 아티팩트 저장 비용. 저장소 비용에 대한 일반적인 내용은 저장소 비용 살펴보기 섹션을 참조하십시오.