- 성공적인 MLOps 시스템을 구축하기 위해서는 다양한 구성 요소들이 필요한데, 각 요소들이 유기적으로 운영되기 위해서는 인프라 레벨에서 수 많은 이슈를 해결해야 된다.
- 이를 위해 Container & Container Orchestration System의 필요성이 등장한다.
- 쿠버네티스와 같은 컨테이너 오케이스트레이션 시스템 도입 시 실행 환경의 격리와 관리를 효율적으로 수행할 수 있다.
머신러닝 모델을 개발하고 배포하는 과정에서 다수의 개발자가 소수의 클러스터를 공유하면서
‘1번 클러스터 사용 중이신가요?’, ‘GPU 사용 중이던 제 프로세스 누가 죽였나요?’,
‘누가 클러스터에 x 패키지 업데이트했나요?’ 와 같은 상황을 방지할 수 있습니다.
Container
- Application의 표준화된 이식 가능한 패키징
- 머신러닝에서는 모델들이 OS, Python 환경, 패키지 버전 등에 따라 다르게 동작할 수 있다.
- 이를 방지하기 위해 사용된 소스코드와 함께 종속적 실행환경 전체를 하나로 패키징해서 공유하고, 실행하는데 활용할 수 있는 기술이 Containerization 기술이다.
- 이렇게 패키징된 형태를 컨테이너 이미지라고 부르며 이 이미지를 공유하면서 사용자들은 어떤 시스템에서든 같은 실행 결과를 보장할 수 있게 된다.
Container Orchestration System
- 수 많은 컨테이너가 있을 때 컨테이너들이 서로 조화롭게 구동될 수 있도록 지휘하는 시스템이다.
- 컨테이너 기반 시스템에서 서비스는 컨테이너 형태로 User에게 제공되므로 적은 수의 컨테이너라면 운영 담당자 한 명이서도 충분히 모든 상황에 대응할 수 있다. 하지만, 수 백개 이상의 컨테이너가 수 십대의 클러스에서 돌고 있다면 거의 대응이 불가능하다고 볼 수 있다.
- 예를 들어 모든 서비스가 정상 동작 중인지를 모니터링해야하고, 특정 서비스가 장애를 일으키면, 여러 컨테이너 로그를 확인해가며 문제를 파악해야한다. 또한 특정 컨테이너에 작업이 몰리지 않도록 스케줄링, 로드 밸런싱 및 스케일링 등의 수 많은 작업을 담당해야 한다.
- 이렇게 수 많은 컨테이너들이 상태를 지속해서 관리, 운영하는 과정을 조금이나마 쉽고 자동으로 할 수 있는 기능을 제공해주는 소프트웨어가 바로 컨테이너 오케스트레이션 시스템이다.
- 머신러닝에서는 GPU가 있어야하는 딥러닝 학습 코드가 사용가능한 GPU가 있는 클러스에서 수행되고, 많은 메모리를 필요로하는 데이터 전처리 코드가 패키징된 컨테이너는 메모리 여유가 많은 클러스터에서 수행되어야하며 학습 중 클러스터에 문제가 생기면 자동으로 같은 컨테이너를 다른 클러스터로 이동시켜 다시 학습을 진행하는 등의 작업을 사람이 아니라 자동으로 관리하는 시스템을 개발한 뒤 맡기는 것이다.
- CNCF에서 발표한 2018년 서베이에서 이미 78%가 Production Level에서 사용하고 있다는 것을 알 수 있다.