Container Runtime for ML의 Notebooks

개요

ML용 Container Runtime에서 Snowflake Notebooks를 실행할 수 있습니다. Container Runtime for ML은 Snowpark Container Services 를 기반으로 하며, 다양한 워크플로를 구축하고 운영할 수 있는 유연한 컨테이너 인프라를 Snowflake 내에서 완전히 지원합니다. Container Runtime for ML은 고급 데이터 과학 및 머신 러닝 워크로드를 지원하기 위한 소프트웨어 및 하드웨어 옵션을 제공합니다. 가상 웨어하우스 에 비해, Container Runtime for ML은 여러 소스에서 패키지를 설치하고 GPU 머신 유형을 비롯한 컴퓨팅 리소스를 선택할 수 있는 더욱 유연한 컴퓨팅 환경을 제공하며, 최적의 성능을 위해 웨어하우스에서 SQL 쿼리를 계속 실행할 수 있습니다.

이 문서에서는 Container Runtime for ML 에서 노트북을 사용할 때 고려해야 할 몇 가지 사항을 설명합니다. 개발에서 Container Runtime for ML을 사용하는 방법에 대해 자세히 알아보려면 Snowflake Notebook Container Runtime 시작하기 빠른 시작을 참조하십시오.

전제 조건

Container Runtime for ML에서 Snowflake Notebooks를 사용하기 전에 ACCOUNTADMIN 역할이 필요한 리소스를 생성하고 해당 리소스에 대한 권한을 부여하기 위한 노트북 설정 단계를 완료해야 합니다. 자세한 단계는 Snowflake Notebooks 사용자 설정 지침 섹션을 참조하십시오.

Container Runtime for ML에서 노트북 만들기

Container Runtime for ML에서 노트북을 생성할 때, 노트북을 실행할 리소스를 제공할 웨어하우스, 런타임 및 컴퓨팅 풀을 선택합니다. 선택한 런타임에 따라 사용 사례에 따라 다양한 Python 패키지에 액세스할 수 있습니다. 웨어하우스 크기나 컴퓨팅 풀에 따라 비용과 성능에 미치는 영향이 다릅니다. 이러한 모든 설정은 필요한 경우 나중에 변경할 수 있습니다.

참고

ACCOUNTADMIN, ORGADMIN 또는 SECURITYADMIN 역할이 있는 사용자는 Container Runtime for ML에서 노트북을 직접 생성하거나 소유할 수 없습니다. 이러한 역할이 생성하거나 직접 소유한 노트북은 실행되지 않습니다. 하지만 ACCOUNTADMIN, ORGADMIN 또는 SECURITYADMIN 역할이 권한을 상속받는 역할(예: PUBLIC 역할)이 노트북을 소유하고 있는 경우에는 해당 역할을 사용해 해당 노트북을 실행할 수 있습니다.

Container Runtime for ML에서 실행할 Snowflake 노트북을 생성하려면 다음 단계를 따릅니다.

  1. Snowsight 에 로그인합니다.

  2. Notebooks 를 선택합니다.

  3. + Notebook 를 선택합니다.

  4. 노트북의 이름을 입력합니다.

  5. 노트북을 저장할 데이터베이스와 스키마를 선택합니다. 노트북을 만든 후에는 변경할 수 없습니다.

    참고

    데이터베이스와 스키마는 노트북을 저장하기 위한 용도로만 필요합니다. 사용자는 노트북 내에서 역할에 액세스 권한이 있는 모든 데이터베이스와 스키마를 쿼리할 수 있습니다.

  6. Python 환경으로 Run on container 를 선택합니다.

  7. CPU 또는 GPU의 Runtime 유형을 선택합니다.

  8. Compute pool 을 선택합니다.

  9. 선택한 웨어하우스를 변경하여 SQL 및 Snowpark 쿼리를 실행할 수 있습니다.

    사용할 웨어하우스 크기에 대한 지침은 Snowflake Notebooks 실행을 위한 웨어하우스 추천 섹션을 참조하십시오.

  10. 노트북을 생성하고 열려면 Create 를 선택합니다.

Runtime:

이 미리 보기는 두 가지 유형(CPU 및 GPU)의 런타임을 제공합니다. 각 런타임 이미지에는 Snowflake에서 검증하고 통합한 Python 패키지 및 버전의 기본 세트가 포함되어 있습니다. 모든 런타임 이미지는 데이터 분석, 모델링, 훈련에 Snowpark Python, Snowflake ML, Streamlit을 지원합니다.

공개 리포지토리에서 추가 패키지를 설치하려면 pip를 사용하면 됩니다. 외부 엔드포인트에서 패키지를 설치하려면 Snowflake Notebooks에 대한 외부 액세스 통합(EAI)이 필요합니다. EAIs를 구성하려면 Snowflake Notebooks 에 대한 외부 액세스 설정 섹션을 참조하십시오. 그러나 패키지가 이미 기본 이미지의 일부인 경우에는 pip install을 사용하여 다른 버전을 설치하여 패키지의 버전을 변경할 수 없습니다. 사전 설치된 패키지 목록은 Container Runtime for ML 섹션을 참조하십시오.

Compute pool:

컴퓨팅 풀은 노트북 커널과 Python 코드에 대한 컴퓨팅 리소스를 제공합니다. 시작하려면 더 작은 CPU 기반 컴퓨팅 풀을 사용하고, 컴퓨터 비전이나 LLMs/VLMs과 같은 집중적인 GPU 사용 시나리오에 최적화하려면 더 높은 메모리의 GPU 기반 컴퓨팅 풀을 선택합니다.

각 컴퓨팅 노드는 한 번에 사용자당 1개의 노트북만 실행하도록 제한됩니다. 노트북용 컴퓨팅 풀을 생성할 때 MAX_NODES 매개 변수를 1보다 큰 값으로 설정해야 합니다. 예를 보려면 컴퓨팅 리소스 만들기 를 참조하십시오. Snowpark Container Services 컴퓨팅 풀에 대한 자세한 내용은 Snowpark Container Services: 컴퓨팅 풀 작업하기 섹션을 참조하십시오.

노트북을 사용하지 않을 때는 노트북을 종료하여 노드 리소스를 확보하는 것이 좋습니다. 연결 드롭다운 버튼에서 End session 을 선택해 노트북을 종료할 수 있습니다.

Container Runtime for ML에서 노트북 실행

노트북을 생성한 후 셀을 추가하고 실행하여 즉시 코드 실행을 시작할 수 있습니다. 셀 추가에 대한 정보는 Snowflake Notebooks 에서 코드 개발 및 실행 섹션을 참조하십시오.

더 많은 패키지 가져오기

노트북을 시작하고 실행하기 위해 사전 설치된 패키지 외에도 외부 액세스가 설정된 공개 소스에서 패키지를 설치할 수 있습니다. 스테이지나 개인 리포지토리에 저장된 패키지를 사용할 수도 있습니다. 특정 외부 엔드포인트 방문을 위한 액세스 권한을 설정하고 부여하려면 ACCOUNTADMIN 역할 또는 외부 액세스 통합을 생성할 수 있는 역할(EAIs)을 사용해야 합니다. 노트북에서 외부 액세스를 활성화하려면 ALTER NOTEBOOK 명령을 사용합니다. 권한이 부여되면 Notebook settings 에 EAIs가 표시됩니다. 외부 채널에서 설치를 시작하기 전에 EAIs를 토글합니다. 자세한 지침은 외부 액세스 통합 프로비저닝 섹션을 참조하십시오.

다음 예제에서는 pip install을 사용하여 코드 셀에 외부 패키지를 설치합니다.

!pip install transformers scipy ftfy accelerate
Copy

노트북 설정 업데이트

Notebook settings 에서 언제든 사용할 컴퓨팅 풀이나 웨어하우스 등의 설정을 업데이트할 수 있으며, 오른쪽 상단의 워크시트에 대한 추가 작업 노트북 작업 메뉴를 통해 액세스할 수 있습니다.

Notebook settings 에서 업데이트할 수 있는 설정 중 하나는 유휴 시간 제한 설정입니다. 유휴 시간 제한의 기본값은 1시간이며, 최대 72시간까지 설정할 수 있습니다. SQL로 이 값을 설정하려면 CREATE NOTEBOOK 또는 ALTER NOTEBOOK 명령을 사용하여 노트북의 IDLE_AUTO_SHUTDOWN_TIME_SECONDS 속성을 설정합니다.

ML 워크로드 실행하기

Container Runtime for ML의 Notebooks는 모델 훈련 및 매개 변수 튜닝과 같은 ML 워크로드를 실행하는 데 적합합니다. 런타임은 일반적인 ML 패키지와 함께 사전 설치되어 제공됩니다. EAI를 설정한 후에는 !pip install 을 사용하여 필요한 다른 패키지를 설치할 수 있습니다.

참고

Python 프로세스는 로드된 모듈을 캐시합니다. 패키지를 코드로 가져오기 전에 설치된 패키지의 버전을 변경합니다. 그렇지 않으면 노트북 세션을 새로 고치려면 연결을 끊었다가 다시 연결해야 할 수도 있습니다.

다음 예제에서는 ML 워크로드에 사용 가능한 라이브러리 중 일부를 사용하는 방법을 보여줍니다.

OSS ML 라이브러리 사용

다음 예제는 OSS ML 라이브러리인 xgboost 및 활성 Snowpark 세션을 사용하여 훈련용 데이터를 메모리로 직접 가져오는 예제입니다.

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
X = df_pd[['feature1', 'feature2']]
y = df_pd['label']
# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)
# Train in memory
model = xgb.XGBClassifier()
model.fit(X_train, y_train)
# Predict
y_pred = model.predict(X_test)
Copy

Snowflake ML 모델링 APIs 사용

Snowflake의 ML Modeling APIs를 Container Runtime for ML에서 사용하면 모든 실행(훈련 및 예측 포함)이 쿼리 웨어하우스가 아닌 컨테이너 런타임에서 직접 수행됩니다. Container Runtime의 Snowflake ML은 데이터를 더 빠르게 가져올 수 있으며 대규모 훈련에 권장됩니다. GPU 런타임을 사용하면 Snowflake ML은 기본적으로 모든 GPUs를 사용하여 훈련을 가속화합니다.

다음 코드 블록 예제에서는 모델링에 XGBoost를 사용합니다.

from snowflake.snowpark.context import get_active_session
from snowflake.ml.modeling.xgboost import XGBClassifier
from snowflake.ml.modeling.metrics import accuracy_score

session = get_active_session()
df = session.table("my_dataset")
feature_cols=['FEATURE1', 'FEATURE2']
label_col = 'LABEL'
predicted_col = [PREDICTED_LABEL]
df = df[features_cols + [label_col]]
# Split is pushed down to associated warehouse
train_df, test_df = df.random_split(weights=[0.85, 0.15], seed=34)

model = XGBClassifier(
    input_cols=feature_cols,
    label_cols=label_col,
    output_cols=predicted_col,
    # This will enable leveraging all GPUs on the node
    tree_method="gpu_hist",
)
# Train
model.fit(train_df)
# Predict
result = model.predict(test_df)

accuracy = accuracy_score(
df=result,
y_true_col_names=label_cols,
y_pred_col_names=predicted_col)
Copy

다음은 Light Gradient Boosting Machine(LightGBM)을 사용하는 예제입니다.

from snowflake.snowpark.context import get_active_session
from snowflake.ml.modeling.lightgbm import LGBMClassifier
from snowflake.ml.modeling.metrics import accuracy_score

session = get_active_session()
df = session.table("my_dataset")
feature_cols=['FEATURE1', 'FEATURE2']
label_col = 'LABEL'
predicted_col = [PREDICTED_LABEL]

df = df[features_cols + [label_col]]
# Split is pushed down to associated warehouse
train_df, test_df = df.random_split(weights=[0.85, 0.15], seed=34)

model = LGBMClassifier(
    input_cols=feature_cols,
    label_cols=label_col,
    ouput_cols=predicted_col,
    # This will enable leveraging all GPUs on the node
    device_type="gpu",
)

# Train
model.fit(train_df)
# Predict
result = model.predict(test_df)

accuracy = accuracy_score(
df=result,
y_true_col_names=label_cols,
y_pred_col_names=predicted_col)
Copy

새 컨테이너 최적화 라이브러리 사용

Container Runtime for ML은 컨테이너 환경에서 ML 훈련을 위해 특별히 맞춤화된 새로운 APIs를 사전 설치합니다.

데이터 커넥터 APIs

데이터 커넥터 APIs는 Snowflake 데이터 소스(테이블, DataFrames, 데이터 세트 등)를 널리 사용되는 ML 프레임워크(예: PyTorch 및 TensorFlow)에 연결하기 위한 단일 인터페이스를 제공합니다. 이러한 APIs는 snowflake.ml.data 네임스페이스에서 제공됩니다.

snowflake.ml.data.data_connector.DataConnector

Snowpark DataFrames 또는 Snowflake ML 데이터 세트를 TensorFlow 또는 PyTorch DataSets 또는 Pandas DataFrames에 연결합니다. 다음 클래스 메서드 중 하나를 사용하여 커넥터를 인스턴스화합니다.

  • DataConnector.from_dataframe: Snowpark DataFrame을 받습니다.

  • DataConnector.from_dataset: 이름과 버전으로 지정된 Snowflake ML 데이터 세트를 받습니다.

  • DataConnector.from_sources: 소스 목록을 받으며, 각 소스는 DataFrame 또는 데이터 세트일 수 있습니다.

커넥터를 인스턴스화(예를 들어 data_connector 인스턴스 호출)한 후, 다음 메서드를 호출하여 원하는 종류의 출력을 생성합니다.

  • data_connector.to_tf_dataset: TensorFlow와 함께 사용하기에 적합한 TensorFlow 데이터 세트를 반환합니다.

  • data_connector.to_torch_dataset: PyTorch와 함께 사용하기에 적합한 PyTorch 데이터 세트를 반환합니다.

이러한 APIs에 대한 자세한 내용은 Snowflake ML API 참조 섹션을 참조하십시오.

분산 모델링 APIs

분산 모델링 APIs는 컨테이너 환경의 가용 리소스를 최대한 활용하는 병렬 버전의 LightGBM, PyTorch 및 XGBoost를 제공합니다. 해당 항목은 snowflake.ml.modeling.distributors 네임스페이스에서 제공됩니다. 분산 클래스의 APIs는 표준 버전과 유사합니다.

이러한 APIs에 대한 자세한 내용은 API 참조 섹션을 참조하십시오.

XGBoost

기본 XGBoost 클래스는 snowflake.ml.modeling.distributors.xgboost.XGBEstimator 입니다. 관련 클래스에는 다음이 포함됩니다.

  • snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig

이 API로 작업하는 예제는 Snowflake Container Runtime for ML GitHub 리포지토리에 있는 XGBoost on GPU 예제 노트를 참조하십시오.

LightGBM

기본 LightGBM 클래스는 snowflake.ml.modeling.distributors.lightgbm.LightGBMEstimator 입니다. 관련 클래스에는 다음이 포함됩니다.

  • snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig

이 API로 작업하는 예제는 Snowflake Container Runtime for ML GitHub 리포지토리에 있는 LightGBM on GPU 예제 노트를 참조하십시오.

PyTorch

기본 PyTorch 클래스는 snowflake.ml.modeling.distributors.pytorch.PyTorchDistributor 입니다. 관련 클래스에는 다음이 포함됩니다.

  • snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig

  • snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig

  • snowflake.ml.modeling.distributors.pytorch.Context

  • snowflake.ml.modeling.distributors.pytorch.get_context

이 API로 작업하는 예제는 Snowflake Container Runtime for ML GitHub 리포지토리에 있는 PyTorch on GPU 예제 노트를 참조하십시오.

제한 사항

  • Snowflake ML Modeling API는 Container Runtime for ML에서 predict, predict_proba, predict_log_proba 추론 메서드만 지원합니다. 다른 메서드는 쿼리 웨어하우스에서 실행됩니다.

  • Snowflake ML Modeling API는 Container Runtime에서 sklearn 호환 파이프라인만 지원합니다.

  • Snowflake ML Modeling API는 Container Runtime for ML에서 preprocessing 또는 metrics 클래스를 지원하지 않습니다. 이러한 API는 쿼리 웨어하우스에서 실행됩니다.

  • fit, predictscore 메서드는 Container Runtime for ML에서 실행됩니다. 다른 Snowflake ML 메서드는 쿼리 웨어하우스에서 실행됩니다.

  • sample_weight_cols 는 XGBoost 또는 LightGBM 모델에 대해 지원되지 않습니다.

비용/청구 고려 사항

노트북을 Container Runtime for ML에서 실행하는 경우, 웨어하우스 컴퓨팅SPCS 컴퓨팅 비용 이 모두 발생할 수 있습니다.

Snowflake Notebooks에는 최적화된 성능을 위해 SQL 및 Snowpark 쿼리를 실행하기 위한 가상 웨어하우스가 필요합니다. 따라서 SQL 셀에서 SQL을 사용하고 Python 셀에서 실행되는 Snowpark 푸시다운 쿼리를 사용하는 경우 가상 웨어하우스 컴퓨팅 비용이 발생할 수도 있습니다. 다음 다이어그램은 각 셀 유형에 대해 컴퓨팅이 발생하는 위치를 보여줍니다.

노트북 셀의 계산 분포를 보여주는 다이어그램입니다.

예를 들어, 다음 Python 예제에서는 xgboost 라이브러리를 사용합니다. 데이터는 컨테이너로 가져오고 계산은 Snowpark Container Services 에서 수행됩니다.

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
X = df_pd[['feature1', 'feature2']]
y = df_pd['label']
# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)
Copy

웨어하우스 비용에 대해 자세히 알아보려면 웨어하우스의 개요Snowflake Notebooks 실행을 위한 웨어하우스 추천 섹션을 참조하십시오.