Snowflake ML (Notebooks, Feature Store, Model Registry)
Snowflake 안에서 모델을 학습하고 배포하는 Snowflake ML 의 구성, Workspaces 의 Notebooks 와 Container Runtime, Feature Store 와 Online Feature Store, ML 실험 추적, Model Registry 와 추론, 비용과 흔한 실수를 정리합니다.
구성 한눈에 보기
Snowflake ML 은 데이터를 밖으로 빼지 않고 준비, 학습, 실험 추적, 등록, 추론, 모니터링까지 이어 주는 기능 묶음입니다. 파이썬 패키지 snowflake-ml-python 이 대부분의 API 를 제공합니다.
| 단계 | 기능 | 2026-10 기준 |
|---|---|---|
| 개발 환경 | Workspaces 의 Notebooks | GA (2026-02-05) |
| 실행 환경 | Container Runtime (CPU, GPU 컴퓨트 풀) | GA |
| 피처 관리 | Feature Store, Online Feature Store | GA (2026-10-20) |
| 실험 추적 | ML Experiments | GA (2026-02-19) |
| 모델 관리 | Model Registry | GA |
| 추론 | 웨어하우스 추론, Snowpark Container Services 서빙 | GA |
| 감시 | ML Observability (모델 모니터) | GA |
Notebooks 의 변화
2026년 Snowflake 노트북은 두 갈래가 되었습니다.
- Workspaces 의 Notebooks (2026-02-05 GA): 파일 기반 노트북으로 Git 연동, 여러 파일 프로젝트, Container Runtime 실행을 기본으로 합니다. 새로 만드는 노트북은 이쪽을 씁니다.
- Legacy Notebooks: 예전 Snowsight 노트북은 2026년 3월 16일부터 Legacy Notebooks 라고 부릅니다. 계속 열 수 있지만 새 기능은 Workspaces 쪽에 들어갑니다.
- 2026년 8월 3일 Notebook Project Objects 는 Code Bundles 로 이름이 바뀌었습니다. 노트북과 코드를 묶어 태스크로 예약 실행할 때 씁니다.
Container Runtime
Container Runtime 은 컴퓨트 풀 위의 컨테이너에서 노트북과 학습 작업을 돌리는 실행 환경입니다. 인기 ML 라이브러리와 GPU 드라이버가 미리 들어 있고, pip install 로 패키지를 더할 수 있습니다 (외부 접근 통합 필요).
-- GPU 컴퓨트 풀 예 (인스턴스 패밀리 이름은 클라우드와 리전에 따라 다름)
CREATE COMPUTE POOL ml_gpu_pool
MIN_NODES = 1 MAX_NODES = 2
INSTANCE_FAMILY = GPU_NV_S
AUTO_SUSPEND_SECS = 600;
-- PyPI 접근 허용 (Snowflake 제공 통합을 쓰거나 직접 만듦)
GRANT USAGE ON INTEGRATION pypi_access_integration TO ROLE ml_engineer;주의 컴퓨트 풀은 노드가 떠 있는 동안 계속 크레딧을 씁니다. 노트북 세션을 닫아도 풀의
AUTO_SUSPEND_SECS가 지나기 전까지는 과금되니, 실험이 끝나면ALTER COMPUTE POOL ... SUSPEND를 습관처럼 실행합니다.
Feature Store
Feature Store 는 피처 정의를 엔티티(조인 키)와 피처 뷰 객체로 관리하고, 학습용 데이터셋을 시점 정확(point-in-time correct)하게 만들어 줍니다. 피처 뷰는 내부적으로 Dynamic Table 이나 뷰로 만들어집니다.
from snowflake.ml.feature_store import FeatureStore, Entity, FeatureView, CreationMode
fs = FeatureStore(session, database="ML", name="FS", default_warehouse="ML_WH",
creation_mode=CreationMode.CREATE_IF_NOT_EXIST)
customer = Entity(name="CUSTOMER", join_keys=["CUSTOMER_ID"])
fs.register_entity(customer)
df = session.sql("""
SELECT customer_id, event_ts,
COUNT(*) OVER (PARTITION BY customer_id ORDER BY event_ts
RANGE BETWEEN INTERVAL '30 DAYS' PRECEDING AND CURRENT ROW) AS orders_30d
FROM sales.orders""")
fv = FeatureView(name="CUSTOMER_ORDERS", entities=[customer], feature_df=df,
timestamp_col="EVENT_TS", refresh_freq="1 hour")
fv = fs.register_feature_view(fv, version="v1")
train = fs.generate_training_set(spine_df=labels_df, features=[fv])- Online Feature Store (2026-10-20 GA) 는 실시간 추론에 필요한 최신 피처 값을 낮은 지연으로 돌려줍니다. 배치 학습용 오프라인 저장과 같은 정의를 쓰므로 학습과 서빙의 피처가 어긋나는 문제를 줄입니다.
- 피처 뷰의 갱신 주기는 Dynamic Table 의 TARGET_LAG 처럼 비용과 직결됩니다. 실시간이 필요 없는 피처는 길게 잡습니다.
실험 추적과 학습
ML Experiments (2026-02-19 GA) 는 실행(run)마다 매개변수, 지표, 산출물을 기록하고 Snowsight 에서 비교하게 해 줍니다.
from snowflake.ml.experiment import ExperimentTracking
exp = ExperimentTracking(session=session)
exp.set_experiment("churn_xgb")
with exp.start_run():
exp.log_params({"max_depth": 6, "n_estimators": 300})
model.fit(X_train, y_train)
exp.log_metric("auc", auc_score)- 큰 데이터는 Container Runtime 의 분산 학습 API(XGBoost, LightGBM, PyTorch 등)를 쓰면 여러 노드에 나눠 학습합니다.
snowflake.ml.modeling의 scikit-learn 호환 클래스는 웨어하우스에서 전처리와 학습을 돌립니다. 데이터가 작고 단순한 모델이라면 충분합니다.- API 이름과 인자는
snowflake-ml-python버전마다 바뀌므로, 위 코드는 흐름을 보여 주는 예시로 보고 설치한 버전의 문서를 확인합니다.
Model Registry 와 추론
from snowflake.ml.registry import Registry
reg = Registry(session=session, database_name="ML", schema_name="MODELS")
mv = reg.log_model(model, model_name="CHURN", version_name="V3",
sample_input_data=X_train.head(100),
target_platforms=["WAREHOUSE", "SNOWPARK_CONTAINER_SERVICES"],
metrics={"auc": auc_score})
# 웨어하우스에서 배치 추론
preds = mv.run(score_df, function_name="predict_proba")-- SQL 에서 바로 추론
SELECT customer_id,
CHURN!PREDICT_PROBA(*) AS p
FROM ml.features.customers_today;- 모델은 스키마 객체(
MODEL)이고 버전, 별칭(default, production 등), 태그, 지표를 가집니다. 권한도 일반 객체처럼 역할로 줍니다. - 실시간 API 가 필요하면 Snowpark Container Services 에 추론 서비스를 띄웁니다. GPU 가 필요한 대형 모델도 이 경로입니다.
- 모델 모니터를 붙이면 예측 분포와 성능 지표의 변화를 추적합니다.
비용
| 항목 | 과금 | 줄이는 법 |
|---|---|---|
| Notebooks, 학습 | 컴퓨트 풀 노드 시간 (인스턴스 종류별 크레딧) | 작은 노드로 시작, 자동 일시 중지 짧게 |
| 웨어하우스 추론 | 웨어하우스 크레딧 | 배치로 모아서, 필요한 열만 |
| 컨테이너 추론 서비스 | 서비스가 떠 있는 시간 | 최소 노드 수 조정, 야간 중지 |
| Feature Store | 피처 뷰 갱신 (Dynamic Table) 과 저장 | 갱신 주기 늘리기 |
컴퓨트 풀 인스턴스 종류별 크레딧은 Service Consumption Table 의 Snowpark Container Services 표에 있습니다.
트러블슈팅
증상: 노트북에서
pip install이 시간 초과로 실패합니다.원인: 노트북에 외부 접근 통합이 연결되지 않아 PyPI 로 나갈 수 없습니다.
해결: 관리자가 PyPI 용 네트워크 규칙과 외부 접근 통합을 만들고 역할에 USAGE 를 준 뒤, 노트북 설정에서 그 통합을 켭니다.
증상: 학습할 때는 성능이 좋았는데 운영 예측이 엉망입니다.
원인: 학습 데이터에 미래 정보가 섞였거나(시점 누수), 학습과 서빙의 피처 계산이 다릅니다.
해결: Feature Store 의 시점 정확 조인으로 학습 세트를 다시 만들고, 서빙도 같은 피처 뷰에서 값을 읽게 합니다.
증상: 컴퓨트 풀 비용이 생각보다 큽니다.
원인: 실험 뒤 풀이 계속 떠 있거나, 최소 노드 수가 1 이상으로 고정되어 있습니다.
해결:
SHOW COMPUTE POOLS로 상태를 보고, 쓰지 않는 풀은 일시 중지합니다. 자동 일시 중지 시간을 줄입니다.