Container Runtime for ML에 대한 병렬 하이퍼 매개 변수 최적화(HPO)¶
Snowflake ML Hyperparameter Optimization(HPO) API 는 모델에 구애받지 않는 프레임워크로, 널리 사용되는 튜닝 알고리즘을 사용하여 모델의 효율적이고 병렬화된 하이퍼 매개 변수 튜닝을 가능하게 합니다.
현재, 이 API 는 Snowpark Container Services(SPCS)의 Container Runtime을 사용하도록 구성된 Snowflake Notebook 내에서 사용할 수 있습니다. 그와 같은 노트북을 만든 후 다음을 수행할 수 있습니다.
오픈 소스 패키지를 사용하여 모델을 학습시키고 하이퍼 매개 변수 튜닝 프로세스를 배포하려면 이 API 를 사용할 수 있습니다.
Snowflake ML 분산 학습 API를 사용하여 모델을 학습시키고 HPO 를 확장하면서도 각 학습 실행을 확장할 수 있습니다.
Notebook에서 시작된 HPO 워크로드는 Snowpark Container Services 내에서 CPU 또는 GPU 인스턴스에서 실행되며, SPCS 컴퓨팅 풀의 단일 노드에서 사용 가능한 코어(CPU 또는 GPU)로 확장됩니다.
병렬화된 HPO API 는 다음과 같은 이점을 제공합니다.
여러 리소스에 걸쳐 학습을 배포하는 모든 복잡한 작업을 자동으로 처리하는 단일 API
오픈 소스 ML 프레임워크 또는 Snowflake ML 모델링 API를 사용하여 거의 모든 프레임워크 또는 알고리즘으로 학습할 수 있는 기능
다양한 연속 및 비연속 샘플링 함수와 함께 베이지안 및 무작위 검색 알고리즘을 포함한 다양한 튜닝 및 샘플링 옵션 제공
나머지 Snowflake와의 긴밀한 통합(예: Snowflake Datasets 또는 Dataframes를 통한 효율적인 데이터 수집 및 자동 ML 계보 캡처)
예¶
이 예에서는 먼저 Container Runtime DataConnector API 를 통해 Snowflake 테이블에서 데이터를 수집한 다음 XGBoost 모델을 생성하는 학습 함수를 정의하여 일반적인 HPO 사용 사례를 보여줍니다. Tuner
인터페이스는 주어진 학습 함수와 검색 공간을 기반으로 튜닝 기능을 제공합니다.
from snowflake.ml.modeling.tune import get_tuner_context
from snowflake.ml.modeling import tune
# Define a training function, with any models you choose within it.
def train_func():
# A context object provided by HPO API to expose data for the current HPO trial
tuner_context = get_tuner_context()
config = tuner_context.get_hyper_params()
dm = tuner_context.get_dataset_map()
model = xgb.XGBClassifier(**config, random_state=42)
model.fit(dm["x_train"].to_pandas(), dm["y_train"].to_pandas())
accuracy = accuracy_score(
dm["y_train"].to_pandas(), model.predict(dm["x_train"].to_pandas())
)
tuner_context.report(metrics={"accuracy": accuracy}, model=model)
tuner = tune.Tuner(
train_func=train_func,
search_space={
"n_estimators": tune.uniform(50, 200),
"max_depth": tune.uniform(3, 10),
"learning_rate": tune.uniform(0.01, 0.3),
},
tuner_config=tune.TunerConfig(
metric="accuracy",
mode="max",
search_alg=search_algorithm.BayesOpt(),
num_trials=2,
max_concurrent_trials=1,
),
)
tuner_results = tuner.run(dataset_map=dataset_map)
# Access the best result info with tuner_results.best_result
예상 출력은 다음과 비슷한 형태입니다.
accuracy should_checkpoint trial_id time_total_s config/learning_rate config/max_depth config/n_estimators
1.0 True ec632254 7.161971 0.118617 9.655 159.799091
tuner_results
오브젝트에는 모든 결과, 최적 모델, 최적 모델 경로가 포함되어 있습니다.
print(tuner_results.results)
print(tuner_results.best_model)
print(tuner_results.best_model_path)
API 개요¶
HPO API 는 snowflake.ml.modeling.tune
네임스페이스에 있습니다. 주 HPO API 는 tune.Tuner
클래스입니다. 이 클래스를 인스턴스화할 때 다음을 지정합니다.
모델에 맞는 학습 함수
하이퍼 매개 변수를 샘플링하는 방법을 정의하는 검색 공간(
tune.SearchSpace
)검색 알고리즘, 최적화할 메트릭, 시도 횟수를 정의하는 튜너 구성 오브젝트(
tune.TunerConfig
)
Tuner
를 인스턴스화한 후 데이터 세트 맵(각 입력 데이터 세트에 대해 DataConnector
지정)으로 run
메서드를 호출하여 튜닝 프로세스를 시작합니다.
자세한 내용은 다음 Python 문을 실행하여 각 클래스에 대한 설명서를 검색하십시오.
from snowflake.ml.modeling import tune
help(tune.Tuner)
help(tune.TunerConfig)
help(tune.SearchSpace)
제한 사항¶
베이지안 최적화는 균일 샘플링 함수를 통해서만 작동합니다. 베이지안 최적화는 서로게이트 모델로서 가우스 프로세스에 의존하므로 연속 검색 공간이 필요합니다. tune.randint
또는 tune.choice
메서드를 사용하여 샘플링된 불연속 매개 변수와는 호환되지 않습니다. 이 제한을 해결하려면 tune.uniform
을 사용하여 학습 함수 내에서 매개 변수를 캐스팅하거나 tune.RandomSearch
와 같이 불연속 공간과 연속 공간을 모두 처리하는 샘플링 알고리즘으로 전환하십시오.
문제 해결하기¶
오류 메시지 |
가능한 원인 |
가능한 해결책 |
---|---|---|
유효하지 않은 검색 공간 구성: BayesOpt 에서는 모든 샘플 함수가 ‘Uniform’ 유형이어야 합니다. |
베이지안 최적화는 불연속 샘플이 아닌 균일한 샘플링에서만 작동합니다. (위의 제한 사항 을 참조하십시오.) |
|
CPU 리소스가 부족합니다. 필요한 양: 16, 사용 가능한 양: 8. CPU 또는 GPU 를 지칭할 수 있습니다. 필요한 리소스와 사용 가능한 리소스의 수가 다를 수 있습니다. |
|
전체 오류 메시지에는 시도해 볼 수 있는 몇 가지 옵션이 설명되어 있습니다. |