혼돈에서 일관성으로: AI 워크플로우를 위한 Docker

모델을 학습시켰습니다. 노트북은 잘 돌아갑니다. 데모도 완벽합니다.

그런데 팀원에게 전달하고 40분 뒤, 메시지가 옵니다. CUDA 에러가 발생했다고 합니다. Torch가 임포트되지 않거나, Python 버전이 맞지 않는다는 내용입니다.

모든 엔지니어가 두려워하는 말을 내뱉게 됩니다. "제 컴퓨터에서는 잘 되는데요."

"제 컴퓨터에서는 잘 되는데요"라는 말은 일종의 자백입니다. 당신의 코드가 문서화되지 않은 노트북의 특정 환경에 의존하고 있다는 뜻이기 때문입니다. Python 버전, 시스템 라이브러리, 혹은 CUDA 툴킷을 놓친 것입니다.

Docker는 이런 문제를 방지합니다.

일반적인 웹 앱은 의존성이 적지만, AI 프로젝트는 여러 계층으로 이루어져 있습니다:

• Python 패키지: Torch, Transformers, Numpy. • 시스템 라이브러리: Libgl1 또는 ffmpeg. • CUDA 스택: 드라이버 및 툴킷. • 모델 가중치: 레포지토리에 포함되지 않는 대용량 파일. • Python 버전: 노트북은 3.10, 서버는 3.12.

requirements.txt 파일은 단 하나의 계층만 캡처할 수 있지만, Docker는 그 모든 것을 캡처합니다.

Docker 이미지는 컴퓨터의 스냅샷입니다. OS, Python, 패키지, 그리고 코드가 모두 포함됩니다. 컨테이너는 그 스냅샷을 실행 중인 복사본입니다.

컨테이너는 호스트 머신의 커널을 공유하며, 몇 초 만에 시작됩니다. 하나의 이미지는 노트북과 클라우드 GPU 서버에서 동일하게 작동합니다.

Dockerfile을 사용하여 레시피를 작성하세요. 다음은 PyTorch를 위한 템플릿입니다:

FROM python:3.11-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    libgl1 \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "predict.py"]

실수를 피하려면 다음 규칙을 따르세요:

• 버전을 고정하세요. 단순히 torch라고 쓰는 대신 torch==2.3.1을 사용하세요. 이는 재현성을 보장합니다. • requirements를 먼저 복사하세요. 이는 Docker 캐싱을 활용합니다. 코드가 변경되어도 패키지가 변경되지 않았다면 재설치를 건너뛰므로 빌드 속도가 빨라집니다. • 가중치에는 볼륨을 사용하세요. 5GB 크기의 모델을 이미지 안에 넣지 마세요. 볼륨을 사용하여 로컬 폴더를 컨테이너에 연결하세요. • 컨테이너당 하나의 프로세스만 실행하세요. API와 데이터베이스를 하나의 컨테이너에 넣지 마세요. Docker Compose를 사용하여 이들을 연결하세요.

Docker를 사용하면 팀원에게는 단 두 개의 명령어만 필요합니다:

git clone your-repo
docker compose up

더 이상 환경 에러를 디버깅할 필요가 없습니다. 모든 머신에서 똑같이 작동합니다.

출처: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7

선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi