Skip to main content

3. 모델 학습 (Training)

Databricks Runtime ML

Databricks Runtime ML은 표준 런타임에 ML/DL 라이브러리가 사전 설치된 특수 런타임 입니다. 직접 라이브러리를 설치하고 버전 충돌을 해결하는 고통을 없애줍니다. 주요 사전 설치 라이브러리는 다음과 같습니다.
카테고리라이브러리
Classic MLscikit-learn, XGBoost, LightGBM, CatBoost
Deep LearningPyTorch, TensorFlow, Keras
분산 학습Horovod, DeepSpeed, PyTorch Distributed
실험 관리MLflow (Workspace에 자동 연결)
데이터 처리pandas, NumPy, SciPy, Spark MLlib
시각화matplotlib, seaborn, plotly
GPU 지원CUDA, cuDNN (GPU 클러스터 선택 시)
Runtime ML 버전은 Databricks Runtime 버전과 동일한 넘버링을 따르며 (예: DBR 16.x ML), 분기마다 새로운 버전이 출시됩니다.

AutoML

왜 등장했는가: 데이터 사이언티스트가 새 데이터셋에 대해 적합한 알고리즘, 하이퍼파라미터, 전처리 방법을 찾는 데 수일~수주가 걸립니다. AutoML은 이 탐색 과정을 자동화합니다. Databricks AutoML의 차별점: Google AutoML, AWS SageMaker Autopilot 등 대부분의 AutoML 도구는 결과 모델만 반환하는 블랙박스 방식입니다. Databricks AutoML은 근본적으로 다릅니다 — 각 시도(trial)가 완전한 실행 가능 노트북 으로 생성되고, 모든 전처리/학습/평가 코드가 투명하게 공개됩니다. 이 노트북을 기반으로 도메인 지식을 반영한 수정이 가능하므로, AutoML이 출발점(starting point) 역할을 하고 데이터 사이언티스트가 전문성을 더하는 워크플로가 됩니다. 내부 탐색 과정: AutoML은 내부적으로 다음 단계를 자동 수행합니다.
  1. 데이터 프로파일링: 각 컬럼의 타입, 분포, 결측률을 분석하여 데이터 탐색 노트북 생성
  2. 전처리 자동화: 수치형 컬럼의 결측치를 중앙값/평균으로 대체, 범주형 컬럼에 원-핫 인코딩, 날짜 컬럼에서 요일/월/시간 등 파생 피처 추출
  3. 알고리즘 탐색: LightGBM, XGBoost, RandomForest, LogisticRegression/ElasticNet 등을 순차적으로 시도
  4. 하이퍼파라미터 최적화: Hyperopt(TPE 알고리즘, Tree-structured Parzen Estimator) 기반으로 각 알고리즘의 최적 하이퍼파라미터를 탐색
  5. 앙상블 시도: 상위 모델들의 가중 투표(Weighted Voting) 앙상블도 자동 시도
아래 표는 Databricks AutoML의 주요 기능을 정리한 것입니다.
기능설명
지원 문제 유형분류, 회귀, 시계열 예측 (Prophet, ARIMA 포함)
탐색 알고리즘LightGBM, XGBoost, sklearn (RandomForest, LogisticRegression 등) + Hyperopt TPE
자동 전처리결측치 처리, 범주형 인코딩, 날짜 피처 추출, 텍스트 피처 TF-IDF
출력물베스트 모델 노트북 + MLflow Experiment + 데이터 탐색 노트북
사용 방법UI (Experiments > Create AutoML Experiment) 또는 Python API
제한사항딥러닝 모델은 탐색하지 않음, 이미지/텍스트 전용 태스크 미지원, 대규모 데이터셋(수백GB 이상)에서는 샘플링 필요
from databricks import automl

summary = automl.classify(
    dataset=train_df,
    target_col="failure",
    primary_metric="f1",
    timeout_minutes=30
)

# 최고 성능 모델의 노트북 경로
print(summary.best_trial.notebook_path)
참고 AutoML은 baseline 모델 을 빠르게 확보하는 용도로 가장 효과적입니다. 생성된 노트북을 기반으로 도메인 지식을 반영한 피처 추가, 커스텀 전처리 등을 수행하는 것이 일반적인 워크플로입니다.

분산 학습

Databricks 클러스터의 분산 컴퓨팅 능력을 ML 학습에 활용하는 방법은 여러 가지입니다.
방법적합한 경우작동 방식
Spark MLlib대규모 정형 데이터, 클래식 ML 알고리즘Spark DataFrame 기반 분산 학습
pandas UDF + Spark그룹별 독립 모델 학습 (예: 매장별 수요 예측)applyInPandas()로 그룹별 pandas 모델 병렬 학습
Horovod / TorchDistributor대규모 딥러닝 모델 (CNN, Transformer)데이터 병렬(Data Parallel) 분산 학습
DeepSpeed초대형 모델 (수십억 파라미터)ZeRO 최적화로 메모리 효율적 분산 학습
단일 노드 멀티 GPU중간 규모 DL 모델PyTorch DDP 또는 Horovod 사용
TorchDistributor의 동작 원리: Spark 클러스터는 일반적으로 데이터 처리를 위해 설계되었지만, TorchDistributor는 Spark 워커 노드를 PyTorch 분산 학습 노드로 전환 합니다. 내부적으로 다음 과정이 일어납니다.
  1. Spark 드라이버가 각 워커에 PyTorch 학습 프로세스를 시작하도록 지시
  2. 각 워커에서 torch.distributed 백엔드(NCCL for GPU, Gloo for CPU)가 초기화되어 프로세스 간 통신 채널 구성
  3. 데이터 병렬(Data Parallel) 방식으로 각 노드가 전체 모델의 복사본을 보유하고, 미니배치를 분할하여 학습
  4. 그래디언트를 AllReduce 연산으로 동기화하여 모델 파라미터를 일치시킴
이 접근의 핵심 가치는 Spark 클러스터 하나로 데이터 처리와 딥러닝 학습을 모두 수행 할 수 있다는 것입니다. 별도의 Kubernetes 기반 학습 인프라(Kubeflow, Ray Train 등)를 구축할 필요가 없습니다.
from pyspark.ml.torch.distributor import TorchDistributor

def train_fn():
    import torch
    import torch.distributed as dist
    # torch.distributed가 자동으로 초기화됨
    # 일반 PyTorch DDP 학습 코드 작성
    ...

distributor = TorchDistributor(
    num_processes=4,       # 총 GPU 프로세스 수
    local_mode=False,      # True면 드라이버 노드만 사용
    use_gpu=True           # GPU 사용 여부
)
distributor.run(train_fn)
DeepSpeed ZeRO 최적화: 수십억 파라미터 모델(예: Llama 7B 파인튜닝)은 단순 데이터 병렬로는 단일 GPU 메모리에 모델이 들어가지 않습니다. DeepSpeed의 ZeRO(Zero Redundancy Optimizer) 는 3단계로 메모리 사용을 최적화합니다.
ZeRO Stage분산 대상메모리 절감통신 오버헤드
Stage 1Optimizer States (Adam의 momentum, variance)~4x낮음
Stage 2+ Gradients~8x중간
Stage 3+ Model Parameters~N배 (N=GPU 수)높음 (파라미터 수집 필요)
Databricks ML Runtime에 DeepSpeed가 사전 설치되어 있으므로, TorchDistributor와 결합하여 대규모 모델의 파인튜닝을 수행할 수 있습니다.

GPU 클러스터 활용

Databricks는 AWS(p4d, p5, g5), Azure(NC, ND 시리즈), GCP의 GPU 인스턴스를 지원합니다. GPU 클러스터 사용 시 고려사항은 다음과 같습니다.
고려사항권장 사항
인스턴스 선택학습: A100/H100 (고대역폭). 추론: T4/A10G (비용 효율)
Runtime 선택반드시 ML Runtime (GPU 버전) 선택
스팟 인스턴스학습 시 비용 절감 가능. 체크포인트 저장 필수
단일 vs 멀티 노드모델 크기 < GPU 메모리이면 단일 노드로 충분

4. 실험 관리 & 모델 레지스트리

MLflow Tracking

왜 필요한가: ML 프로젝트에서는 수십~수백 번의 실험을 수행합니다. 어떤 하이퍼파라미터 조합이 최적이었는지, 어떤 전처리를 적용했는지를 체계적으로 기록하지 않으면 재현이 불가능합니다. Databricks에는 Managed MLflow 가 내장되어 있어 별도 서버 구축 없이 바로 사용할 수 있습니다.
MLflow 구성 요소역할
Experiment관련 실험(Run)의 논리적 그룹. 프로젝트나 문제 단위로 생성
Run하나의 학습 실행. 파라미터, 메트릭, 아티팩트, 소스 코드를 기록
Parameter하이퍼파라미터 (learning_rate, n_estimators 등)
Metric평가 지표 (accuracy, f1, rmse 등). 스텝별 기록 가능
Artifact모델 파일, 그래프, 데이터 샘플 등 모든 바이너리
Tag실행에 대한 메타데이터 (팀, 버전, 환경 등)
import mlflow

with mlflow.start_run(run_name="xgboost-v2"):
    mlflow.log_param("max_depth", 6)
    mlflow.log_param("learning_rate", 0.1)

    model = train_model(...)

    mlflow.log_metric("f1_score", 0.92)
    mlflow.log_metric("auc", 0.95)

    # 모델 + 피처 정보 함께 저장
    mlflow.sklearn.log_model(model, "model")
Databricks MLflow는 오픈소스 MLflow와 호환되면서도, 자동 로깅(Autolog) 기능이 강화되어 있습니다. mlflow.autolog()를 호출하면 scikit-learn, XGBoost, PyTorch, TensorFlow 등의 학습을 자동으로 추적합니다.

Unity Catalog 모델 레지스트리

왜 등장했는가: 기존 Workspace 레벨 모델 레지스트리는 워크스페이스 간 모델 공유가 어렵고, 데이터 거버넌스와 분리되어 있었습니다. Unity Catalog 모델 레지스트리는 모델을 데이터와 동일한 거버넌스 체계 로 관리합니다.
기능Workspace 레지스트리 (Legacy)Unity Catalog 레지스트리
네임스페이스워크스페이스 내catalog.schema.model_name (3-level)
접근 제어워크스페이스 단위Unity Catalog 권한 (GRANT/REVOKE)
크로스 워크스페이스불가동일 메타스토어 내 모든 워크스페이스에서 접근
Lineage제한적데이터 테이블 → 피처 → 모델 → 엔드포인트 전체 추적
스테이지 관리Staging/Production/ArchivedAlias (Champion, Challenger 등 자유 지정)
Unity Catalog 모델 레지스트리의 핵심 개념인 Alias 는 기존의 고정된 스테이지(Staging, Production) 대신 유연한 태그 시스템을 제공합니다. 기존 스테이지 방식은 Staging → Production → Archived라는 고정 경로만 허용했으나, Alias는 임의의 이름 을 자유롭게 부여할 수 있어 다양한 배포 전략을 지원합니다. 예를 들어, Champion(현재 프로덕션 모델)과 Challenger(검증 중인 후보 모델) Alias를 지정하여 A/B 테스트를 구성하거나, region-kr, region-us처럼 지역별 모델을 관리할 수도 있습니다. Model Serving Endpoint가 Alias를 참조하므로, Alias를 다른 버전으로 이동시키면 엔드포인트가 자동으로 새 모델 버전을 로드 합니다 — 제로 다운타임 배포가 가능합니다.
import mlflow

# Unity Catalog에 모델 등록
mlflow.set_registry_uri("databricks-uc")
model_uri = "runs:/abc123/model"
mlflow.register_model(model_uri, "catalog.schema.fraud_detection")

# Alias 지정
from mlflow import MlflowClient
client = MlflowClient()
client.set_registered_model_alias(
    name="catalog.schema.fraud_detection",
    alias="Champion",
    version=3
)

모델 버전 관리 워크플로

아래 표는 일반적인 모델 라이프사이클에서 각 단계별 Databricks 기능 매핑을 보여줍니다.
라이프사이클 단계활동Databricks 기능
실험여러 알고리즘/파라미터 시도MLflow Experiment + Autolog
등록최적 모델을 레지스트리에 등록mlflow.register_model()
검증Challenger 모델과 Champion 비교Alias + 평가 노트북
승격검증 통과 시 Champion으로 변경client.set_registered_model_alias()
배포서빙 엔드포인트에 반영Model Serving (Alias 기반 자동 업데이트)
폐기더 이상 사용하지 않는 버전 정리client.delete_registered_model_alias()