mlops에 관심을 가지게 되어 패캠의 머신러닝 서비스 구축을 위한 실전 MLOps 올인원 패키지 Online 이라는 강의를 수강하게 되었습니다. 생소한 단어와 개념이 많아서 블로그에 정리를 하고자 합니다. 만일 설명이 틀리거나 수정할 부분이 있다면 수정하도록 하겠습니다! 실습 자료는 아래 링크를 통해 볼수 있습니다.
https://rigorous-firefly-d50.notion.site/MLOps-486a7bcd320b4e9f93a70b5691b88dd1
mlops 수행에 있어서 도커 & 쿠버네티스를 왜 사용해야하는가?
AI 개발을 하다보면 가장 만나는 난관이 패키지의 버전 문제라고 생각한다. 실례로 회사 GPU 서버에 연결하기 위해서 cuda와 pytorch를 설치했는데 버전 문제때문에 시간을 할애해야 했다. 그렇다면 나의 코드를 다른 곳에서 작동시킬려면 다시 패키지를 설치해야 할까? 우리가 불편함을 느끼는 기술은 이미 구축되어 있다. 나의 ML 코드를 작동시키기 위한 패키지를 코드와 함께 묶어서 전달하면 된다. 어떠한 OS 이든 환경이든 상관하지 않은채 내 코드만의 독립된 환경을 구축하는 겁니다(Reproducibility)
그뿐만아니라 ML 학습의 스케쥴링, 병렬작업 관리, 유휴작업관리 등 스케쥴링 기능을 하며(job Scheduling) 자운용중인 서버에서 발새하는 장애, 트랙픽 대응하는 역할(auto-healing & auto-scaling)도 포함됩니다.
위에 언급된 기술들은 Docker와 쿠버네티스로 구축할수 있습니다.
*도커와 쿠버네티스
docker의 containerization, 쿠버네티스의 container Orchestration에 대해서 알아봅시다.
containerization는 위 기술 중 Reproducibility에 해당한다. 아래 그림을 보면
내가 필요한 것들을 한 곳에 모아서 묶어 패키징 하는 것을 containerization이라 합니다. 참고로 도커 이미지란 어떤 애플리케이션에 대해서,단순히 애플리케이션 코드뿐만이 아니라,그 애플리케이션과 dependent 한 모든 것을 함께 패키징한 데이터를 말한다. 다시 본론으로 돌아와서 이러한 containerization이 수십개가 동시에 운용이 되어야 한다면 사람이 일일이 괸리 해야할까? 아닙니다. 복수의 containerization을 사람대신 자동으로 일해주는 기술이 있는데 이를 쿠버네티스의 오케스트레이션이라 합니다.
오케스트레이션을 통해서, 메모리가 많이 필요한 컨테이너는 메모리가 많이 있는 서버로 연결해주는 등 사람이 하는 일을 컴퓨터가 알아서 할수 있도록 돕는다. 말 그대로 컨테이너를 지휘하는 역할입니다.
쿠버네티스는 사용감이 까다롭기 때문에 복잡성을 보완한 서비스가 이용되고 있다. 대표적으로 위 세개의 프로그램인데 데 물론 공짜는 아니고 사용료를 지불해야 합니다. 따라서 오픈형 쿠버네티스 버전을 이용하여 무료로 접근하고자 합니다.
미니큐브라는 것을 통해 "나만의 작은 쿠버네티스"를 구축 할수 있다고 합니다. 그래서 본 강의는 미니큐브를 설치하여 진행하고 있습니다.
코드 알고리즘을 짜게되면 일일이 하나씩 다 지정을 해줘야 하는 번거로움이 존재합니다. 이렇게 하나부터 열까지 모두 명령을 쳐야 하는 것을 명령형 인터페이스 라고 합니다. 하지만 쿠버네티스는 사용자가 무엇을 하고자 하는지 목적만 받으면 내부적으로 어떻게 만들어야 할지는 알아서 진행해줍니다. 위 그림의 예시를 보면 이해가 되실거라 생각됩니다. 그러면 쿠버네티스가 오직 사용자의 목적만 입력 받으면 안에 내부적으로 어떻게 진행이 되는지 대략적으로만 살펴보겠습니다.
필기 크기가 작은 점 양해 바랍니다 ;;
쿠버네티스는 크게 control plane과 node로 나뉩니다. 제가 이해한 것을 예시로 들자면 control plane은 회사에서 부장급이라고 보면 됩니다. node는 실질적으로 일하는 직원입니다. 고객의 요구가 들어오면 부장이 스케쥴링을 하여 효율적으로 직원들에게 일을 뿌려 주는 모습과 흡사합니다.
도커의 컨테이너를 지휘하는 기술은 오케스트레이션 뿐만 아니라 다양하게 있지만 현재 가장 많이 사용되는 것이 바로 이 쿠버네티스입니다.
강의에서는 윈도우,맥 사용자 구분없이 수업에 통일성을 주기위해서 가상머신(Virtual Box)을 설치 한 후에 그위에 우분투(20.004.3 LTS)를 올려서 실습을 진행함을 말씀드립니다.
가상머신의 설치와 환경설정들은 실습자료 사이트를 참고하시면 했으며 아래 내용은 제가 직접 실습하면서 겪었던 오류나 기억해야할만한 과정들만 기록해 두었습니다.(저처럼 초보분들이 당황할만한 내용을 공유하고자)
1. 복붙하기
- 복붙은 언제나 필수 기능입니다. 윈도우에서 복사 후 shift+inert로 가상머신 터미널에 넣으면 되는데, 수행이 되지 않았습니다. 구글링하면서 양방향 설정도 해봤지만 실패 하였습니다. 실질적으로 도움 받았던 블로그는 아래 링크를 걸어두었습니다. 저처럼 복붙이 안되시는 분이 있다면 참고 바라겠습니다.
https://whareview.tistory.com/4
2. vi(편집기)
실습 내용에 따라 Dockerfile을 만들고 vi를 통해서 편집기 모드로 변환했습니다. 해당 모드에서는 명령어를 자유롭게 기술하는 편리함을 제공받을수 있습니다.
2.1 입력모드 진입
- 처음 진입 시 입력어가 먹질 않는다. vi는 명령어모드와 입력모드로 나뉘어 집니다. 처음 들어가게 되면 자동으로 명령어 모드로 셋팅되어 있으며 입력하고자 할때는 "i" or "a" 키를 먼저 눌러주면 입력이 가능합니다. 반대로 입력모드에서 명령어 모드로 갈려면 esc를 눌러주면 됩니다.
그렇다면 명령어모드에서는 어떤걸 할수 있는지 궁금해 집니다. 해당 내용은 https://opentutorials.org/course/730/4561 블로그를 참고 해주시면 될것같습니다. (참고로 편집기를 종료하고자 할때는 명령어모드에서 수행해야합니다)
2.2 입력한 문자를 수정 or 삭제
첫줄에 입력하고 enter를 치면 아랫줄로 변경된다. 첫줄을 수정 할려고 윗쪽 방향키를 누르면 "A"가 나올뿐 첫줄로 옮겨 지지 않았습니다. 이것저것 눌러보니까 자유로운 줄 변경을 위해서는 shift + 왼쪽 or 아래 방향키를 먼저 눌러준 후에 이동 가능합니다.
3. registry(저장소)
- 도커의 이미지를 남들과 공유하기 위해서 저장을 해야합니다. 저장된 저장소로부터 이미지를 다운 받아서 사용할수 있게 됩니다.
-d(백그라운드)에서 실행하여 5000번포트에서 registry라는 이름의 도커 컨테이너스를 run(실행)한다.
- registry라는 곳에 image를 태깅 후 push해준다. 아래 그림 참고바랍니다.