머신러닝 환경의 재현성
파이썬 머신러닝 환경은 깨지기 쉬운 걸로 악명이 높아. CUDA 버전, 드라이버 버전, PyTorch wheel 빌드, cuDNN 버전까지 전부 맞물려 돌아가거든. Docker가 이 전체 스택을 이미지 하나로 얼려버리지. 그러면 CI가 매번 실행할 때마다 환경을 재현하려 애쓰는 대신, 그냥 그 이미지를 가지고 빌드하고 테스트하면 돼.
캐시 적중을 위한 레이어 순서
Dockerfile 레이어는 안정성 순으로 정렬해. 가장 안정적인 걸 위에, 가장 변동이 잦은 걸 아래에 둬:
- 베이스 이미지 (예:
nvidia/cuda:12.4-cudnn-runtime-ubuntu22.04). - 시스템 패키지 (apt-get).
- 파이썬 의존성 (requirements.txt / pyproject.toml).
- 소스 코드 (마지막 — 가장 자주 바뀜).
앞의 3개 레이어는 몇 주 동안 캐시에 남고, 마지막 레이어는 커밋할 때마다 다시 빌드해. 이렇게 하면 일반적인 PR에서 CI 빌드 시간이 10분에서 30초로 쑥 줄어들어.
슬림한 런타임을 위한 멀티 스테이지
빌드 단계에서는 빌드 도구를 설치하고 의존성을 컴파일해. 런타임 단계에서는 컴파일된 의존성과 소스만 복사하지. 이렇게 하면 최종 이미지 크기가 보통 5~10배나 줄어들어.
CI 주기
- '머신러닝 의존성' 베이스 이미지는 매일 다시 빌드해서 캐시를 신선하게 유지해.
- PR마다 빌드할 때는 매일 만든 이미지를 재사용하고, 소스 레이어만 바꿔줘.