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

머신러닝용 Docker

~11 min · docker, ml, cuda

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

머신러닝 환경의 재현성

파이썬 머신러닝 환경은 깨지기 쉬운 걸로 악명이 높아. CUDA 버전, 드라이버 버전, PyTorch wheel 빌드, cuDNN 버전까지 전부 맞물려 돌아가거든. Docker가 이 전체 스택을 이미지 하나로 얼려버리지. 그러면 CI가 매번 실행할 때마다 환경을 재현하려 애쓰는 대신, 그냥 그 이미지를 가지고 빌드하고 테스트하면 돼.

캐시 적중을 위한 레이어 순서

Dockerfile 레이어는 안정성 순으로 정렬해. 가장 안정적인 걸 위에, 가장 변동이 잦은 걸 아래에 둬:

  1. 베이스 이미지 (예: nvidia/cuda:12.4-cudnn-runtime-ubuntu22.04).
  2. 시스템 패키지 (apt-get).
  3. 파이썬 의존성 (requirements.txt / pyproject.toml).
  4. 소스 코드 (마지막 — 가장 자주 바뀜).

앞의 3개 레이어는 몇 주 동안 캐시에 남고, 마지막 레이어는 커밋할 때마다 다시 빌드해. 이렇게 하면 일반적인 PR에서 CI 빌드 시간이 10분에서 30초로 쑥 줄어들어.

슬림한 런타임을 위한 멀티 스테이지

빌드 단계에서는 빌드 도구를 설치하고 의존성을 컴파일해. 런타임 단계에서는 컴파일된 의존성과 소스만 복사하지. 이렇게 하면 최종 이미지 크기가 보통 5~10배나 줄어들어.

CI 주기

  • '머신러닝 의존성' 베이스 이미지는 매일 다시 빌드해서 캐시를 신선하게 유지해.
  • PR마다 빌드할 때는 매일 만든 이미지를 재사용하고, 소스 레이어만 바꿔줘.

Code

머신러닝 서비스용 멀티 스테이지 Dockerfile·dockerfile
# syntax=docker/dockerfile:1
FROM nvidia/cuda:12.4-cudnn-runtime-ubuntu22.04 AS base
RUN apt-get update && apt-get install -y --no-install-recommends \
      python3.12 python3-pip git \
    && rm -rf /var/lib/apt/lists/*
ENV PIP_NO_CACHE_DIR=1

FROM base AS builder
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --frozen --no-install-project

FROM base AS runtime
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
ENV PATH=/app/.venv/bin:$PATH
COPY src/ ./src/
CMD ["python", "-m", "src.app"]

External links

Exercise

머신러닝 서비스 Dockerfile이 있다면 레이어 순서를 점검해 봐. 안정적인 걸 위에, 변동이 잦은 걸 아래에 둬. 빌드 시간을 전후로 비교해 봐 — 그 차이가 캐시 관리의 투자 대비 효과를 보여줄 거야.

Progress

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

댓글 0

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

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