본문 바로가기
C.W.K.
Stream
Lesson 03 of 12 · published

모델 테스트

~11 min · model, testing, drift

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

모델은 비결정적이다. 테스트도 그래야 해

로컬에서 학습하거나 파인튜닝한 모델을 테스트할 때는 프롬프트 회귀와는 다른 문제를 다뤄야 해. '이 프롬프트가 올바른 형태를 만들어내는가?'가 아니라 '모델이 홀드아웃 평가 세트에서 회귀를 일으켰는가?'를 확인하는 거지.

표준 모델 테스트

  • 홀드아웃 정확도 — 고정된 테스트 세트에서 점수를 매긴다.
  • 지연 시간 / 처리량 — 요청당 추론 예산을 확인한다.
  • 출력 형식 — 모델이 합의된 스키마를 여전히 잘 만들어내는지 본다.
  • 슬라이스 지표 — 하위 그룹 정확도(한국어 입력, 엣지 케이스 토큰, 긴 문맥)를 잰다.
  • 이탈 — 최근 트래픽 샘플의 점수 분포를 기준선과 비교한다.

CI 구성

모델 테스트는 보통 GPU 러너와 모델 가중치가 필요해. 세 가지 옵션이 있어:

  1. 자체 호스팅 GPU 러너 — 매 PR마다 전체 평가를 돌린다.
  2. 호스팅 클라우드 GPU(Modal, RunPod) — 평가마다 과금하고, 0으로 스케일한다.
  3. CPU 전용 스모크 + 예약된 GPU 전체 평가 — 저렴한 중간 지점이다.

머신러닝에 macOS 러너는 쓰지 마. Linux의 10배 비용에다 GPU도 못 써.

Code

모델 테스트 작업 — CPU 스모크 + 예약 GPU 전체 평가·yaml
name: model-eval
on:
  pull_request: { paths: ['models/**', 'src/**'] }
  push: { branches: [main] }
  schedule: [{ cron: '0 6 * * *' }]

jobs:
  smoke:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest    # CPU
    steps:
      - uses: actions/checkout@v4
      - run: pip install -e '.[dev]'
      - run: pytest tests/model/test_smoke.py    # tiny held-out, CPU-runnable

  full:
    if: github.event_name != 'pull_request'
    runs-on: [self-hosted, gpu, linux-x64]
    timeout-minutes: 60
    steps:
      - uses: actions/checkout@v4
      - run: pip install -e '.[dev]'
      - run: pytest tests/model/test_full.py    # GPU-required held-out

External links

Exercise

CI에 모델이 있다면 테스트를 분류해 봐. 어떤 게 CPU로 가능한 스모크 테스트이고 어떤 게 GPU가 필요한지. 2단계 구조(PR엔 스모크, 일정엔 전체 평가)로 설정해서 비용이 떨어지는 걸 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.