MLflow로 DSPy 옵티마이저 추적하기
MLflow로 DSPy 옵티마이저 추적하기 (Tracking DSPy Optimizers with MLflow)
이 튜토리얼에서는 MLflow를 사용해 DSPy 최적화 과정을 추적하고 분석하는 방법을 알아볼게요. MLflow의 DSPy 내장 통합은 DSPy 최적화 경험에 추적성(traceability)과 디버깅 가능성(debuggability)을 제공해요. 최적화 중간의 시도(trial)를 이해하고, 최적화된 프로그램과 그 결과를 저장하며, 프로그램 실행에 대한 관찰성(observability)을 제공합니다.
autologging 기능을 통해 MLflow는 다음 정보를 추적해요:
-
옵티마이저 매개변수 (Optimizer Parameters)
- Few-shot 예제 수
- 후보(candidate) 수
- 기타 설정 값
-
프로그램 상태 (Program States)
- 초기 지침 및 few-shot 예제
- 최적화된 지침 및 few-shot 예제
- 최적화 중간의 지침 및 few-shot 예제
-
데이터셋 (Datasets)
- 사용된 학습 데이터
- 사용된 평가 데이터
-
성능 진행 (Performance Progression)
- 전체 지표 진행
- 각 평가 단계에서의 성능
-
트레이스 (Traces)
- 프로그램 실행 트레이스
- 모델 응답
- 중간 프롬프트
출처: 문서
본문
시작하기 (Getting Started)
1. MLflow 설치 (Install MLflow)
먼저 MLflow(버전 2.21.1 이상)를 설치해요:
pip install mlflow>=2.21.1
2. MLflow 추적 서버 시작 (Start MLflow Tracking Server)
다음 명령으로 MLflow 추적 서버를 띄워볼게요. 그러면 http://127.0.0.1:5000/에 로컬 서버가 시작됩니다:
# It is highly recommended to use SQL store when using MLflow tracing
mlflow server --backend-store-uri sqlite:///mydb.sqlite
3. Autologging 활성화 (Enable Autologging)
MLflow가 DSPy 최적화를 추적하도록 구성해요:
import mlflow
import dspy
# Enable autologging with all features
mlflow.dspy.autolog(
log_compiles=True, # Track optimization process
log_evals=True, # Track evaluation results
log_traces_from_compile=True # Track program traces during optimization
)
# Configure MLflow tracking
mlflow.set_tracking_uri("http://localhost:5000") # Use local MLflow server
mlflow.set_experiment("DSPy-Optimization")
4. 프로그램 최적화 (Optimizing Your Program)
수학 문제 풀이기의 최적화 과정을 추적하는 완전한 예제를 살펴볼게요:
import dspy
from dspy.datasets.gsm8k import GSM8K, gsm8k_metric
# Configure your language model
lm = dspy.LM(model="openai/gpt-4o")
dspy.configure(lm=lm)
# Load dataset
gsm8k = GSM8K()
trainset, devset = gsm8k.train, gsm8k.dev
# Define your program
program = dspy.ChainOfThought("question -> answer")
# Create and run optimizer with tracking
teleprompter = dspy.teleprompt.MIPROv2(
metric=gsm8k_metric,
auto="light",
)
# The optimization process will be automatically tracked
optimized_program = teleprompter.compile(
program,
trainset=trainset,
)
5. 결과 보기 (Viewing Results)
최적화가 완료되면 MLflow의 UI를 통해 결과를 분석할 수 있어요. 최적화 실행을 탐색하는 방법을 살펴볼게요.
1단계: MLflow UI 접근 (Access the MLflow UI)
브라우저에서 http://localhost:5000으로 이동해 MLflow 추적 서버 UI에 접근하세요.
2단계: 실험 구조 이해 (Understanding the Experiment Structure)
실험 페이지를 열면 최적화 과정의 계층적 뷰를 볼 수 있어요. 부모 실행(parent run)은 전체 최적화 과정을 나타내고, 자식 실행(child run)들은 최적화 중에 생성된 각 중간 버전의 프로그램을 보여줘요.

3단계: 부모 실행 분석 (Analyzing the Parent Run)
부모 실행을 클릭하면 최적화 과정의 큰 그림이 드러나요. 옵티마이저의 구성 매개변수와 평가 지표가 시간에 따라 어떻게 진행됐는지에 대한 상세 정보를 찾을 수 있어요. 부모 실행은 또한 사용된 지침, signature 정의, few-shot 예제를 포함한 최종 최적화된 프로그램도 저장해요. 추가로 최적화 과정에서 사용된 학습 데이터도 검토할 수 있어요.

4단계: 자식 실행 검토 (Examining Child Runs)
각 자식 실행은 특정 최적화 시도의 상세 스냅샷을 제공해요. 실험 페이지에서 자식 실행을 선택하면 해당 중간 프로그램의 여러 측면을 탐색할 수 있어요. 실행 매개변수 탭이나 아티팩트 탭에서 중간 프로그램에 사용된 지침과 few-shot 예제를 검토할 수 있어요. 가장 강력한 기능 중 하나는 Traces 탭인데, 프로그램 실행의 단계별 뷰를 제공해요. 여기서 DSPy 프로그램이 입력을 처리하고 출력을 생성하는 방식을 정확히 이해할 수 있어요.

6. 추론을 위한 모델 로드 (Loading Models for Inference)
최적화된 프로그램을 MLflow 추적 서버에서 직접 로드해 추론에 사용할 수 있어요:
model_path = mlflow.artifacts.download_artifacts("mlflow-artifacts:/path/to/best_model.json")
program.load(model_path)
문제 해결 (Troubleshooting)
- 트레이스가 나타나지 않으면
log_traces_from_compile=True인지 확인하세요 - 대규모 데이터셋의 경우 메모리 문제를 피하기 위해
log_traces_from_compile=False를 고려하세요 mlflow.get_run(run_id)를 사용해 MLflow 실행 데이터에 프로그래밍 방식으로 접근하세요
더 많은 기능은 MLflow 문서를 참고하세요.