모델 학습시키기

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)
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를 사용하여 대규모로 기능 전처리 실행

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

  • 학습된 모델 등록 및 관리

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

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

다음 단계

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