모델 학습시키기¶
Snowflake ML을 사용하여 인기 있는 오픈 소스 프레임워크로 머신 러닝 및 딥 러닝 모델을 개발할 수 있습니다. Snowflake ML은 관리 오버헤드 없이 유연한 개발 환경, 효율적인 데이터 액세스, 강력한 컴퓨팅 리소스를 제공합니다.
Snowflake Notebook 또는 Snowflake ML Job 내에서 모델을 학습시킬 수 있습니다.
Snowflake Notebook은 머신 러닝에 사용할 수 있는 대화형 환경입니다. 머신 러닝 워크플로에 Snowflake Notebook을 사용하는 방법에 대한 자세한 내용은 Container Runtime for ML의 Notebooks 섹션을 참조하세요.
Snowflake ML Job을 사용하면 모든 환경에서 ML 워크플로를 실행할 수 있습니다. Snowflake ML Jobs를 사용하는 방법에 대한 자세한 내용은 Snowflake ML 작업 섹션을 참조하세요.
Snowflake 실험을 사용하면 학습된 모델을 체계적으로 비교할 수 있습니다. 모델 학습 중에 기록된 정보를 사용하여 결과를 평가하고 요구 사항에 가장 적합한 모델을 선택합니다. 자세한 내용은 실험을 실행하여 모델 비교 및 선택하기 섹션을 참조하십시오.
오픈 소스로 학습시키기¶
Snowflake Notebook 또는 ML Job을 사용하는 경우 ML용 Container Runtime에 액세스할 수 있습니다. ML용 Container Runtime는 모델 학습에 사용할 수 있는 인기 있는 패키지와 프레임워크가 있는 환경입니다. 패키지에는 scikit-learn, numpy 및 scipy가 포함됩니다. 자세한 내용은 Container Runtime for ML 섹션을 참조하십시오.
다음 예에서는 scikit-learn을 사용하여 로지스틱 회귀 모델을 학습시킵니다.
import pandas as pd
from snowflake.ml.data.data_connector import DataConnector
from snowflake.snowpark.context import get_active_session
from sklearn.linear_model import LogisticRegression
# Get the active Snowpark session
session = get_active_session()
# Specify training table location
table_name = "TRAINING_TABLE" # Replace with your actual Snowflake table name
# Load table into DataConnector
data_connector = DataConnector.from_dataframe(session.table(table_name))
# Convert to pandas DataFrame
pandas_df = data_connector.to_pandas()
# Assuming 'TARGET' is the label column in your Snowflake table
label_column_name = 'TARGET'
# Separate features (X) and target (y)
X, y = pandas_df.drop(label_column_name, axis=1), pandas_df[label_column_name]
# Initialize and fit a Logistic Regression model
logistic_regression_model = LogisticRegression(max_iter=1000) # Increased max_iter for convergence
logistic_regression_model.fit(X, y)
scikit-learn 외에도 XGBoost 및 LightGBM 라이브러리를 사용하여 강력한 분류, 회귀 및 순위 모델을 개발할 수 있습니다.
다음 예에서는 Snowflake DataConnector를 사용하여 Snowflake 테이블에서 데이터를 로드하고, pandas DataFrame로 변환하고, XGBoost 모델을 학습시킵니다. DataConnector는 데이터 로딩 및 pandas 데이터 프레임 변환을 가속화합니다. DataConnector에 대한 자세한 내용은 Snowflake 테이블에서 정형 데이터 로드 섹션을 참조하세요.
from snowflake.ml.data.data_connector import DataConnector
from snowflake.snowpark.context import get_active_session
import xgboost as xgb
session = get_active_session()
# Specify training table location
table_name = "TRAINING_TABLE"
# Load table into DataConnector
data_connector = DataConnector.from_dataframe(session.table(table_name))
pandas_df = data_connector.to_pandas()
label_column_name = 'TARGET'
X, y = pandas_df.drop(label_column_name, axis=1), pandas_df[label_column_name]
clf = xgb.Classifier()
clf.fit(X, y)
딥 러닝 모델 학습시키기¶
GPU 기반 컨테이너 런타임 이미지를 사용하여 PyTorch, TensorFlow 및 기타 프레임워크로 딥 러닝 모델을 학습시킬 수 있습니다. 사전 설치된 라이브러리를 사용하거나 공용 또는 개인 리포지토리의 패키지로 기본 이미지를 확장할 수 있습니다.
사용 가능한 컴퓨팅 풀에서 온디맨드로 GPU 컴퓨팅을 얻을 수 있습니다. 사용한 리소스에 대해서만 비용을 지불하면 됩니다.
GPU 컨테이너 런타임 이미지를 사용하면 분산 학습과 같은 기능을 사용하여 대규모 모델 개발을 가속화할 수 있습니다.
DataConnector 및 분산 학습을 사용한 효율적인 데이터 로딩의 예는 `Snowflake에서 분산 PyTorch 모델 실행: 엔드투엔드 ML 솔루션<https://www.snowflake.com/en/developers/solutions-center/running-distributed-pytorch-models-on-snowflake-an-end-to-end-ml-solution/>`_을 참조하세요.
다음 예에서는 데이터를 효율적으로 로드합니다.
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from snowflake.ml.data.data_connector import DataConnector
example_snowpark_dataframe = session.table("EXAMPLE_TRAINING_DATA")
# Connector from a Snowflake table
data_connector = DataConnector.from_dataframe(example_snowpark_dataframe)
# Load as a torch dataset
torch_dataset = data_connector.to_torch_dataset(batch_size=32)
train_loader = DataLoader(torch_dataset, batch_size=None)
label_col = 'TARGET'
feature_cols = ['FEATURE1', 'FEATURE2']
for batch_idx, batch in enumerate(dataloader):
y = batch_data.pop(label_col).squeeze()
X = torch.stack(
[tensor.squeeze() for key, tensor in batch.items() if key in feature_cols]
)
다음 예제에서는 모델을 학습시킵니다.
# ------------------------
# Tiny MLP for binary classification
# ------------------------
input_dim = X.shape[1]
class MLP(nn.Module):
def __init__(self, d_in):
super().__init__()
self.net = nn.Sequential(
nn.Linear(d_in, 64), nn.ReLU(),
nn.Linear(64, 32), nn.ReLU(),
nn.Linear(32, 1) # logits
)
def forward(self, x):
return self.net(x).squeeze(1)
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = MLP(input_dim).to(DEVICE)
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.BCEWithLogitsLoss()
# ------------------------
# Train
# ------------------------
EPOCHS = 5
for epoch in range(1, EPOCHS + 1):
model.train()
for xb, yb in train_loader:
xb, yb = xb.to(DEVICE), yb.to(DEVICE)
logits = model(xb)
loss = criterion(logits, yb)
opt.zero_grad()
loss.backward()
opt.step()
acc = evaluate(val_loader)
print(f"epoch {epoch} val_acc={acc:.3f}")
복잡한 학습 작업 처리¶
모델에 대규모 데이터 세트, 복잡한 모델 아키텍처 및 하이퍼 매개 변수를 학습시키려면 상당한 시간과 비용이 들며 이러한 복잡한 처리를 용이하게 하는 리소스에 액세스할 수 있어야 합니다. Snowflake ML을 사용하면 이러한 모델을 확실히 학습시킬 수 있습니다.
완전 관리형 학습 인프라¶
Snowflake ML은 Container Runtime에서 Notebook 및 ML Job을 통한 완전 관리형 학습 인프라를 제공합니다. 사용자 지정 이미지를 관리하거나 리소스를 프로비저닝할 필요가 없습니다. 워크로드를 가져와 관리자가 결정한 목록에서 적절한 컴퓨팅 노드를 선택하고 학습을 시작할 수 있습니다.
효율적이고 가속화된 데이터 이동¶
학습 패키지로 처리하기 위해 대량의 데이터를 메모리에 로딩하게 되면 속도가 느려질 수 있으며, 특히 pandas 데이터 프레임과 같은 오브젝트로 직접 읽으려고 할 때 이러한 현상이 두드러집니다. Snowflake ML은 기본 컴퓨팅 풀의 분산 처리를 사용하여 데이터를 효율적으로 로딩할 수 있도록 합니다. Data Connector를 사용하여 Snowflake 테이블과 스테이지에서 pandas 데이터프레임, PyTorch 데이터 세트, TensorFlow 데이터 세트와 같은 오픈 소스 오브젝트로 로드할 수 있습니다.
분산 학습 및 하이퍼 매개 변수 튜닝¶
대규모 데이터 세트에 대한 ML 모델 학습은 단일 노드의 리소스를 초과할 수 있습니다. Snowflake의 분산형 APIs를 사용하면 여러 노드에 걸쳐 특성 공학 및 학습 워크플로를 확장하여 성능을 향상할 수 있습니다. 분산된 APIs를 사용하여 다음을 수행할 수 있습니다.
``snowflake.ml.modeling.preprocessing``에서 분산 전처리 함수를 활용합니다.
APIs 에서 최적화된 학습 :doc:`/developer-guide/snowflake-ml/container-runtime-ml`를 사용하여 하나 이상의 노드에 걸쳐 모델 학습을 확장하십시오.
Snowflake에 저장된 데이터에 최적화된 Snowflake ML의 분산 HPO</developer-guide/snowflake-ml/container-hpo>`로 하이퍼 매개 변수 튜닝을 가속화합니다. :code:`hyperopt 또는 :code:`optuna`와 같은 오픈 소스 라이브러리를 사용할 수도 있습니다.
Snowflake의 배포된 API를 사용하여 워크플로를 확장하는 것 외에도 Ray를 사용할 수도 있습니다. Ray는 Python 애플리케이션을 확장할 수 있는 간단하고 유연한 방법을 제공하는 오픈 소스 프레임워크입니다. 여러 노드에서 코드를 병렬로 실행할 수 있습니다. Snowflake ML 과 함께 Ray를 사용하는 방법에 대한 자세한 내용은 Ray 시작하기 가이드 를 참조하십시오.
MLOps와 통합¶
Snowflake는 Snowflake Notebook 및 ML Job을 통해 액세스할 수 있는 완전 통합형 MLOps 플랫폼을 제공합니다. 이를 통해 프로덕션용 기능을 사용하여 모델을 학습시키고, 실험 및 모델을 관리하고, 학습된 모델을 프로덕션에 배포할 수 있습니다.
MLOps 워크플로에 다음 기능을 사용할 수 있습니다.
Feature Store를 통해 기능 생성 및 관리
OSS 및 SnowflakeML APIs를 사용하여 대규모로 기능 전처리 실행
기본 제공 실험 추적으로 실험 관리
학습된 모델 등록 및 관리
등록된 모델에 대해 추론 파이프라인 실행
배포된 모델의 드리프트 및 정확도 모니터링
다음 단계¶
모델을 학습시킨 후 다음을 수행할 수 있습니다.
:doc:`하이퍼 매개 변수를 튜닝</developer-guide/snowflake-ml/container-hpo>`하여 성능 최적화
대규모 모델 학습을 위해 여러 파티션에 걸쳐 학습시키기
모델 레지스트리에 모델 등록
추론을 위해 모델 배포