LLM 엔지니어링19장 · MLOps 와 LLMOps, 워크플로 자동화4 / 23← 이전목차다음 →MetaContents

19장. MLOps 와 LLMOps, 워크플로 자동화

MLOps 의 단계와 흐름

집에서 하는 요리, 동네 분식집, 프랜차이즈 본사는 같은 김밥을 만들어도 일하는 방식이 다릅니다. 집에서는 그때그때 손으로 만듭니다. 분식집은 아침 준비 순서가 정해져 있습니다. 본사는 레시피가 바뀌면 시식과 교육을 거쳐 모든 매장에 한꺼번에 내려보냅니다.

손으로 하는 단계, 학습 파이프라인을 자동화한 단계, 배포까지 자동화한 단계의 세 가지를 견준 비교 그림

그림의 세 카드는 왼쪽에서 오른쪽으로 갈수록 사람 손이 줄어듭니다. 왼쪽은 사람이 노트북을 돌려 모델 파일을 넘깁니다. 가운데는 학습과 평가가 정해진 순서로 저절로 돕니다. 오른쪽은 코드나 데이터가 바뀌면 시험, 학습, 배포까지 이어서 돕니다. 집 요리가 첫 단계, 분식집이 둘째, 프랜차이즈 본사가 셋째입니다.

단계 견주기

단계학습배포맞는 경우
손으로사람이 노트북을 돌린다파일을 복사한다첫 모델, 드물게 바꾸는 모델
학습 자동화일정이나 새 데이터가 오면 파이프라인이 돈다사람이 확인하고 올린다데이터가 자주 바뀌는 서비스
배포까지 자동화파이프라인이 돈다품질 게이트를 넘으면 저절로 바뀐다모델이 많고 자주 바뀌는 곳

요즘의 흐름

  • LLM 이 들어오며 관리할 것이 늘었습니다. 모델 가중치보다 프롬프트, 검색 색인, 평가 묶음이 더 자주 바뀝니다. 이를 LLMOps 라고 부릅니다(다음 절과 5번째 절).
  • 평가가 운영의 중심이 되었습니다. 정답이 하나가 아닌 LLM 은 배포 전에 정해 둔 질문 묶음으로 재는 일이 게이트가 됩니다(20장에서 더 다룹니다).
  • 오픈소스 도구를 조합합니다. 실험 기록과 레지스트리는 MLflow, 워크플로는 Airflow 나 Prefect·Dagster, 배포는 Docker 와 Kubernetes 처럼 역할마다 도구를 고릅니다.
  • 사내 서버(온프레미스)에서 돌리는 수요가 있습니다. 데이터를 밖에 내보낼 수 없는 곳은 같은 도구를 사내에 설치해 씁니다(11장).

다시 학습할 때를 정하기

언제 다시 학습할지는 규칙으로 정해 둡니다. 정한 날짜, 새 데이터의 양, 성능 하락이 흔한 신호입니다.

Python
def need_retrain(days_since, new_rows, live_acc, base_acc):
    """다시 학습해야 하는 까닭을 모두 돌려준다. 하나도 없으면 빈 목록"""
    reasons = []
    if days_since >= 7:
        reasons.append("일주일이 지났다")
    if new_rows >= 40:
        reasons.append("새 데이터가 40개 넘게 모였다")
    if live_acc < base_acc - 0.05:
        reasons.append("운영 정확도가 0.05 넘게 떨어졌다")
    return reasons


# 결과: 사흘째, 새 문의 45개, 정확도는 그대로인 경우
print(need_retrain(3, 45, 0.84, 0.85))

코드에 나오는 함수

코드쉬운 뜻
days_since지난 학습 뒤 며칠이 지났는지(days since)다
new_rows새로 모인 데이터의 줄(row) 수다
live_acc, base_acc운영 중(live)에 잰 정확도와 배포할 때 잰 기준(base) 정확도다. acc 는 accuracy(정확도)의 줄임말이다
reasons.append(…)까닭을 하나씩 목록에 더한다. 여러 까닭이 한꺼번에 맞을 수 있어 if 를 따로따로 쓴다
live_acc < base_acc - 0.05운영 정확도가 기준보다 0.05 넘게 낮으면 참이다

이 코드가 뜻하는 것

자동차 엔진오일을 떠올려 봅니다. 바꾼 지 오래되었거나, 많이 달렸거나, 경고등이 켜지면 바꿉니다. 셋 가운데 하나만 맞아도 정비소에 갑니다. 여기서 지난 기간이 days_since, 달린 거리가 new_rows, 경고등이 정확도 하락입니다.

줄하는 일쉽게 말하면
if days_since >= 7일주일이 지났는지 본다바꾼 지 오래되었나
if new_rows >= 40새 데이터가 40개 이상인지 본다많이 달렸나
if live_acc < base_acc - 0.05정확도가 많이 떨어졌는지 본다경고등이 켜졌나
need_retrain(3, 45, 0.84, 0.85)사흘, 새 문의 45개, 정확도 0.01 하락을 넣는다기간은 남았고 경고등도 꺼져 있지만 많이 달렸다

결과는 까닭 하나 ['새 데이터가 40개 넘게 모였다'] 입니다. 빈 목록이 아니므로 다시 학습할 때입니다. >= 는 "같거나 크다"라서, 새 데이터가 정확히 40개일 때도 이 까닭이 들어갑니다. 비유와 다른 점은, 엔진오일은 바꾸면 끝이지만 모델은 다시 학습한 뒤 게이트를 넘어야 실제로 바뀐다는 것입니다(마지막 절).

주의할 점

  • 처음부터 셋째 단계를 만들 필요는 없습니다. 같은 일을 세 번 손으로 했다면 자동화할 때입니다.
  • 자동으로 배포하는 단계에서는 게이트가 사람의 확인을 대신합니다. 게이트가 허술하면 나쁜 모델도 저절로 나갑니다.
← 이전 절19장 · MLOps 란 무엇인가다음 절 →19장 · 실험 기록