모델 학습시키기

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 작업 섹션을 참조하세요.

With Snowflake Experiments, you can compare your trained models in an organized manner. Use information logged during model training to evaluate the results and select the best model for your needs. For more information, see Run an experiment to compare and select models.

오픈 소스로 학습시키기

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

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

딥 러닝 모델 학습시키기

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

다음 예제에서는 모델을 학습시킵니다.

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

복잡한 학습 작업 처리

모델에 대규모 데이터 세트, 복잡한 모델 아키텍처 및 하이퍼 매개 변수를 학습시키려면 상당한 시간과 비용이 들며 이러한 복잡한 처리를 용이하게 하는 리소스에 액세스할 수 있어야 합니다. 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를 사용하여 대규모로 기능 전처리 실행

  • 기본 제공 실험 추적으로 실험 관리

  • 학습된 모델 등록 및 관리

  • 등록된 모델에 대해 추론 파이프라인 실행

  • 배포된 모델의 드리프트 및 정확도 모니터링

다음 단계

모델을 학습시킨 후 다음을 수행할 수 있습니다.