실험을 실행하여 모델 비교 및 선택하기

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")
Copy

실험 실행 시작하기

실험의 각 실행에는 고유한 메트릭, 매개 변수 및 아티팩트 세트가 있습니다. 이 정보는 모델 학습과 해당 결과에 대한 시각화 및 데이터를 제공하기 위해 |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
Copy

학습 정보 자동 로깅

모델 학습 중 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)])
Copy

학습 정보 및 아티팩트를 수동으로 로깅하기

자동 로깅을 지원하지 않거나 사전 학습된 모델의 경우 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')
Copy

참고

아티팩트 로깅은 웨어하우스 노트북에서 지원되지 않습니다.

실행 완료하기

실행을 완료하면 실행을 변경할 수 없으며 |sf-web-interface|에서 완료된 것으로 표시됩니다.

with 문의 일부로 실행을 시작한 경우 범위를 종료할 때 실행이 자동으로 완료됩니다. 그렇지 않으면 완료할 실행의 이름을 가진 실험의 end_run(name: Optional[str]) 메서드를 호출하여 실행을 종료할 수 있습니다.

experiment.end_run("my_run")
Copy

실험 내에서 실행 비교하기

실험 평가는 |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 섹션에서 토글을 사용하여 ChartsTables 간에 전환할 수 있습니다.

실행에서 아티팩트 검색하기

실행 중 또는 실행 후에 언제든지 아티팩트를 검색할 수 있습니다. 다음 예제에서는 실행에서 사용 가능한 아티팩트를 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")
Copy

실행 및 실험 삭제하기

실험을 마친 후에는 실험과 관련된 모든 실행 아티팩트를 제거할 수 있습니다. 다음 예제에서는 my_experiment 실험을 제거합니다.

# exp: ExperimentTracking
exp.delete_experiment("my_experiment")
Copy

실험에서 개별 실행을 제거할 수도 있습니다. 다음 예제에서는 my_experiment 실험의 실행 ``my_run``을 제거합니다.

# exp: ExperimentTracking
exp.set_experiment("my_experiment")
exp.delete_run("my_run")
Copy

제한 사항

Snowflake 실험에는 다음 제한 사항이 적용됩니다.

  • 각 스키마는 500개의 실험으로 제한됩니다.

  • 각 실험은 500회의 실행으로 제한됩니다.

  • 실행은 최대 1년 동안 저장됩니다.

  • 개별 실행 매개 변수 및 메트릭은 총 200KB로 제한됩니다.

비용 고려 사항

Snowflake 실험을 사용하면 표준 Snowflake 사용량 기반 비용이 발생합니다. 다음과 같은 오브젝트가 이에 해당합니다.

  • 실행 아티팩트 저장 비용. 저장소 비용에 대한 일반적인 내용은 저장소 비용 살펴보기 섹션을 참조하십시오.