컨테이너 이미지 다이어트 (mlops)

Posted by , September 15, 2024
Dockerpythonpytorch레오

문제제기

AI 모델을 서빙하는 서버 이미지가 고도비만 상태입니다.
필요없는 패키지들과 알수없는 의존성으로 인해 10GB가 넘어가기 시작했습니다.
사람으로 치면 100Kg 정도 되는 수준입니다.

최적화가 필요하다고 느낀 지점은 다음과 같습니다.
기계학습을 위해선 고성능의 gpu와 관련 라이브러리가 필요하지만, 학습이 완료된 모델의 서빙을 위해서는 cpu 성능만으로 충분히 가능합니다.
따라서 gpu가동을 위한 nvidia라이브러리가 불필요하다고 판단하고 제거하기로 했습니다.

상황 요약

  • nvidia/cuda 라이브러리를 저비용 amd기반 아키텍쳐에서 사용할 필요가 없습니다.
  • 미사용중인 nvidia/cuda/triton 관련라이브러리의 크기가 8GB를 넘어가는 문제가 존재합니다.
  • 사용하고 있는 도커파일의 미사용 패키지 설치 문제가 있습니다.

해결방안 제시

  • CUDA라이브러리 문제 (mlops관련)
    • pyproject.toml에 명시된 pytorch 라이브러리를 cpu 전용 옵션으로 설치하여 CUDA 라이브러리를 설치하지 않도록 수정합니다.
  • 미사용 패키지 문제
    • 개발 의존성 라이브러리와 프로덕션 사용 라이브러리를 구분해 내어, 애플리케이션 개발자들이 프로젝트 의존성 파일에 정확하게 명시하지 않은 부분들을 찾아냅니다.
    • 멀티스테이지 빌드를 통해 실제 사용패키지와 단순 의존성 설치도구를 분리합니다.

결과

실행 결과

  • CPU만 사용하도록 torch 라이브러리 설치 옵션 수정

    torch = {version = "^2.4.1", platform = "cpu"}
  • CUDA 관련 라이브러리 제거 후 11GB → 500MB 이미지 사이즈 95% 최적화

    • 최적화 이전

      스크린샷 2024-09-15 오전 11.31.11.png
    • cuda/triton 라이브러리 제거 후

      스크린샷 2024-09-15 오후 2.32.26.png

기대 효과

  • 이미지 사이즈 감소로 인한 빌드/업로드 시간 기존 10분에서 3분으로 약 70% 단축되었습니다.
  • 이미지 사이즈 저장을 위한 저장소 공간 절약, 약 90% 더 저렴한 클라우드 cpu 사용 플랜을 선택 가능해졌습니다. (기존 10$ /month => 1$ /month free tier)