
들어가며
회사에서 LLM 관련 서비스를 구축하며, 프롬프트와 모델 관리, 로그 관리 등이 필요해졌습니다. 그러던 중 MLFlow가 3버전대로 올라오면서 서비스 LLMOps를 지원한다는 것을 알게 되었고, 회사에서는 Databricks를 사용하고 있기에 Managed MLFlow 환경이 구축되어 있어서 MLFlow로 LLMOps 환경으로 채택했습니다. 실제 사용해봤을 때, 충분히 활용할 수 있을 정도로 기능이 많이 업데이트되었기에 해당 내용을 정리하고, 공유하면 좋을 것 같아서 포스팅을 진행하게 되었습니다.
MLFlow란?
우선, MLFlow를 처음 접하시는 분들을 위해 간단하게 알아보고 가겠습니다. MLFlow는 머신러닝(ML) 모델 개발의 전체 수명주기를 관리하고 간소화하기 위한 오픈소스 플랫폼입니다. 좀 더 쉽게 말씀드리면 복잡한 머신러닝 실험을 체계적으로 추적하고, 재현성을 보장하며, 모델을 효율적으로 배포 및 관리할 수 있도록 돕는 도구 모음이라고 할 수 있습니다. MLFlow는 크게 다음과 같은 4가지 기능을 제공합니다.
- MLflow Tracking (실험 추적) 머신러닝 모델을 학습시킬 때 사용되는 파라미터, 코드 버전, 평가지표(metrics), 그리고 결과물(artifacts) 등 모든 실험 정보를 기록하고 추적합니다.
- MLflow Model Registry (모델 레지스트리) 모델의 버전을 관리하고, 'Staging', 'Production' 등 배포 단계를 체계적으로 관리하는 중앙 저장소 역할을 합니다. 이를 통해 모델의 전체 수명주기를 추적하고, 팀원들과 협업하여 모델을 배포 및 롤백하는 과정을 원활하게 만듭니다.
- MLflow Projects (프로젝트 관리) 코드를 실행하는 데 필요한 환경과 종속성(dependencies)을 코드와 함께 패키징하여 다른 환경에서도 동일한 결과를 재현할 수 있도록 보장합니다.
- MLflow Models (모델 관리) 학습된 모델을 표준화된 형식으로 저장하고 관리합니다. 이렇게 저장된 모델은 다양한 서빙 환경(예: 배치 추론, 실시간 API 서빙 등)에 쉽게 배포할 수 있는 장점이 있습니다.
해당 서비스는 오픈소스이기에 Docker 등을 통해서 개인이 활용할 수도 있지만, 기업 환경에서는 Databricks라는 클라우드 기반 데이터 플랫폼에서 '관리형 (Managed)'으로 제공되는 Managed MLFlow를 사용하실 수도 있습니다. (이번 포스팅에서는 Docker로 MLFlow를 구성해서, LLMOps를 사용하는 예시를 보여드리도록 하겠습니다)
LLMOps가 필요한 이유?
다음으로, LLMOps가 필요한 이유에 대해서도 간단하게 말씀드리겠습니다. LLM 서비스의 경우, GPT나 Gemini, Claude와 같이 성능이 좋은 모델들이 나와있어서 그냥 가져다 쓰면 되기에 관리가 필요하다고 생각하실 수 있습니다. 하지만, LLM 서비스를 개발하시는 과정에서 프롬프트 수정이나, Agent Flow 수정 등 모델 서비스에 영향을 주는 변경 사항들이 발생합니다. 또한, 실제 서비스가 잘 동작하고 있는지 확인하거나 실제 서비스의 추론 현황을 살펴봐야 합니다.
다음은 LLM 서비스 개발 시 발생할 수 있는 몇 가지 이슈 사항과 LLMOps를 적용한다면 어떻게 해당 이슈를 해결할 수 있는지를 간단히 정리한 표입니다.
| LLM 서비스 개발 시 발생할 수 있는 이슈 | LLMOps를 적용한다면 |
| 프롬프트 변경이나 모델 변경 기록 필요 | 프롬프트 레지스트리 및 모델 레지스트리로 모델 관리 가능 |
| 프롬프트 변경이나 모델 변경에 따른 성능 비교 필요 | Experiments를 통해 성능 기록 및 비교 가능 |
| 모델과 서비스 모니터링 결과를 하나의 플랫폼에서 관리 필요 | 배포한 모델과 연관된 모니터링 지표를 하나의 플랫폼에서 확인 가능 |
| 모델 Rollback 필요 | model-registry 태그를 통해 배포함으로써 빠른 Rollback 가능 |
MLFlow for Generative AI
MLflow 공식 Docs를 살펴보면, LLM을 활용한 서비스(이하, GenAI) 에 대해서 다음과 같은 Flow로 설명하고 있습니다.

각 Workflow에 대해서 조금 더 풀어서 해당 Flow에서 MLFlow가 어떤 기능을 제공하는 지 살펴보도록 하겠습니다.
- 🚀 Production App: 배포된 GenAI 앱은 사용자에게 서비스를 제공하며, 각 상호 작용의 모든 단계, 입력, 출력이 포함된 상세한 실행 정보를 통해 추적을 생성합니다.
- 👍 👎 Feedback: 최종 사용자는 각 추적에 연결되는 피드백(엄지 손가락 위로/아래로, 등급)을 제공하여 품질 문제를 식별하는 데 도움을 줍니다.
- 🔍 Monitor & Score: 프로덕션 모니터링은 추적 기록에 대한 LLM 판단기 기반 평가기를 자동으로 실행하여 품질을 평가하고 각 추적 기록에 피드백을 첨부합니다.
- ⚠️ Identify Issues: 추적 UI 를 사용하여 최종 사용자 및 LLM 판사 피드백을 통해 점수가 낮은 추적에서 패턴을 찾습니다.
- 👥 Domain Expert Review: 필요에 따라 자세한 레이블 지정 및 품질 평가를 위해 검토 앱을 통해 도메인 전문가에게 추적 샘플을 보냅니다. 부분 사용 가능 (기능 불완전)
- 📋 Build Eval Dataset: 문제가 있는 추적과 고품질 추적을 모두 평가 데이터 세트 로 큐레이팅하여 양호한 추적을 유지하면서 나쁜 문제를 해결할 수 있습니다
- 🎯 Tune Scorers: 필요에 따라 전문가 피드백을 사용하여 득점자와 심판을 인간의 판단에 맞게 조정하여 자동화된 득점자가 인간의 판단을 잘 반영하도록 합니다.
- 🧪 Evaluate New Versions:평가 하네스 를 사용하여 평가 데이터 세트에 대해 향상된 앱 버전을 테스트하고, 모니터링에서 동일한 득점자를 적용하여 품질이 개선되었는지 또는 회귀되었는지 평가합니다. 필요에 따라 버전 및 프롬프트 관리를 사용하여 작업을 추적합니다.
- 📈 Compare Results: 평가 도구에서 생성된 평가 실행을 사용하여 버전 간에 비교하여 성능이 가장 뛰어난 버전을 식별합니다.
- ✅ Deploy or Iterate: 회귀 없이 품질이 향상되면 배포하고, 그렇지 않으면 반복하고 다시 평가합니다.
정리하며
이번 포스팅에서는 MLFlow와 LLMOps에 대해 간단히 살펴보고, MLflow에서 제공하는 LLMOps 관련 기능들을 알아보았습니다. 다음 포스팅에서는 실제 MLflow 환경을 Docker로 구성해서 모델 실행 결과를 추적하고, 모델 레지스트리와 프롬프트 레지스트리를 관리하고, 이를 평가하는 기능을구현해보도록 하겠습니다.
'기술 견문록 > MLOps' 카테고리의 다른 글
| [LLM]???: 누가 바이브 코딩으로 코인 자동화 같은 거 만드냐... (0) | 2025.10.02 |
|---|---|
| [MLFlow] MLFlow의 LLMOps-2 (LLMOps 기능 알아보기) (1) | 2025.08.28 |
| [RunPod] RunPod로 나만의 DeepSeek-R1 올려보기 (0) | 2025.02.01 |
| [OpenSearch] OpenSearch를 알아보자 (1) | 2025.01.04 |
| [RunPod] RunPod (비용 및 Pycharm SSH 연결 방법) (0) | 2024.11.24 |