MLOps를 하고자 할 때는 다음의 작업들이 필요하게 된다.
이러한 작업들은 docker와 kubernetes를 활용하면 쉽게 할 수 있다. Docker는 containerization 기술을 담당하고 kubernetes는 container orchestration 기술을 담당하게 된다. Docker와 kubernetes는 이러한 기술들을 수행할 수 있는 가장 유명한 software들이다.
Docker로 얻을 수 있는 이점은 하나의 application을 application이 dependant한 모든 것들을 하나로 묶어 docker 이미지로 build하여 어떠한 OS에서든지 동일하게 실행시킬 수 있다. 만약 우리의 machine learning code를 docker 이미지로 만들었다면, 즉 우리의 code가 dockerize했다면 windows에서 개발이 되었든 Mac에서 개발이 되었든지 간에 상관없이 어디서든 동일하게 실행시키고 동일한 결과를 얻을 수 있다. Machine learning code를 구현하는데 끝내지 않고 service화 시키는데 있어서 이러한 docker를 사용한 containerization 기술의 중요성이 증가하고 있다.
Docker는 linux container 기반의 기술이기 때문에 windows나 mac OS 위에 설치하기 위해서는 선택적으로 virtual machine이 필요하게 된다. 그래서 Docker에서는 virtual machine을 포함한 service를 제공해주고 있으며, 본인의 환경에 맞춰서 Docker를 설치할 수 있지만 만약 어떠한 OS이든지 상관없이 설치하고 싶을 때는 VirtualBox라는 tool을 사용해서 virtual machine을 임의로 만들어 사용할 수가 있다. VirtualBox를 사용하면 기존 local machine의 OS 종류와 상관없이 guestOS를 설치하여 일종의 또 다른 작은 컴퓨터를 만든다고 생각하면 된다. 그래서 먼저 virtual machine을 Ubuntu OS로 띄운 다음에 virtual machine 안에서 Docker를 사용하면 된다. Docker를 사용하기 위해서 다음과 같이 Virtualbox와 Ubuntu를 설치하면 된다.
다운로드를 완료 했으면 Virtualbox를 시작하면 된다.
VirtualBox 클릭 - 새로 만들기 - 이름, 머신 폴더, 종류(Linux), 버전(Ubuntu(64-bit) 설정 - 메모리 크기(8192MB or 4096MB(권장)) 설정 - 하드 디스크(지금 새 가상 하드 디스크 만들기) 설정 - 하드 디스크 파일 종류(VDI) 설정 - 하드 디스크 타입(동적 할당) 설정 - 파일 위치 및 크기(10.00GB) 설정 - 만들기 - 시작(mac의 경우 error 발생 시 보안 및 개인 정보 보호에서 oracle software allow 후 재부팅) - 시동 디스크 선택(폴더 선택 - ADD - 설치된 ubuntu 파일을 찾아 .iso 파일 선택 - choose) - 시작(Start) - 새로운 창이 뜨면서 Ubuntu VM이 시작
이렇게 모든 설정을 마치고 나면 Ubuntu 혹은 Linux라고 부르는 작은 컴퓨터를 가지게 된 것이다. 시간이 조금 지나면 추가적인 설정을 해줘야 한다. 원래 새 컴퓨터를 구매했을 때 개인 정보, 비밀번호, 키보드 배열 등 입력하는 과정과 동일하다고 생각하면 된다.
좌측의 언어 선택 후 우측의 ubuntu 설치(Install Ubuntu) - 키보드 레이아웃(Korean) 설정 - 업데이트 및 기타 소프트웨어(일반 설치 & Ubuntu 설치 중 업데이트 다운로드) - 설치 형식(디스크를 지우고 Ubuntu 설치 or 기타) - 지금 설치(디스크를 지우겠냐는 팝업 창이 뜬 경우 계속하기 선택) - 현재 위치 설정 - 유저 이름, 컴퓨터 이름, 비밀 번호 설정 - 설치 완료시 지금 다시 시작 선택
재부팅 후에는 터미널(terminal)을 열어서 root password를 지정해줘야 한다. Root user인 관리자 user의 비밀번호를 설정해주는 과정이라고 생각하면 된다.
Ctrl+Alt+T로 터미널 창 열기 - root password 설정을 위해서
sudo passwd
입력 - 암호 설정 - 소프트웨어 업데이트
이렇게 설치가 완료 후에는 VM을 사용하다가 종료하고자 할 때는 불필요한 전력과 메모리 소비를 막기 위해서 진짜 컴퓨터처럼 꺼주고 필요할 때 다시 켜서 사용하면 된다. VM의 전원을 꺼버린다고해서 VM 내부에서 작업한 내용이 사라지는 것이 아니기 때문에 흔히 사용하는 컴퓨터와 같이 편하게 사용하면 된다.
VirtualBox에 Ubuntu를 설치하고 사용하다보면 초기 설정으로는 작은 창모드로 화면을 보는데 불편함이 존재한다. 그래서 이후 원활한 작업을 위해서 먼저 간단하게 화면 조절을 마우스 드래그로 자유롭게 할 수 있는 설정을 하고자 한다. VirtualBox 화면 해상도는 다음과 같은 순서로 진행하면 된다.
- 상단 메뉴바에서 "장치"를 클릭한 후에 "게스트 확장 CD 이미지 삽입 메뉴"를 선택한다.
- 가상 CD가 삽입이 되면 팝업창이 하나 뜨는데, 이때 실행(Run) 버튼을 선택한다.
- 이전에 만들어두었던 비밀번호를 입력하고 인증(Authenticate) 버튼을 선택한다.
- 가상의 CD에 포함이 된 geust edition program들이 설치가 되는데 기다리면 된다.
- 설치가 끝나면 파일 아이콘 혹은 탐색기에서 휴지통 아래 가상의 CD가 존재하는데 오른쪽에 삼각형 버튼을 눌러 unmount를 해준다.
- 설정을 위해서 시스템을 종료해준다.
- Virtual Box 관리자에서 해당 OS를 선택하고 상단에 설정 버튼을 선택한다.
- 디스플레이(Display)를 선택하고 그래픽 컨트롤러를 "VBoxVGA"로 변경해준다.
- 이후 다시 시작 버튼을 눌러 실행하면 마우스 드래그를 이용해서 화면 크기를 동적으로 바꿀 수가 있다.
그러면 이제 linux 환경에서 본격적으로 docker를 설치해보려고 한다. 공식 문서를 참고해보면 설치할 수 있는 방법이 여러가지 존재하며, 그중에서 Install using the repository 방법을 사용해서 설치해보도록 하겠다.
먼저 apt라는 package manager update를 해준다. sudo
명령어를 사용하기 때문에 password 입력이 필요하다.
$ sudo apt-get update
완료가 되는대로 docker의 prerequisite package들을 설치해준다.
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
이렇게 package들을 설치해주고 난 뒤에는 docker의 GPG key를 추가해준다.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg
| sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
그리고는 stable version의 repository를 바라보도록 설정해준다.
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
이렇게 repository를 setting 해주고나면 docker engine의 최신 version을 설치해준다. 이 과정은 새롭게 등록한 repository를 업데이트 해주고 관련 package들을 설치해준다.
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
설치가 잘 되었는지 확인해주기 위해서 docker container를 실행시켜서 확인해주면 된다. 다음 명령어는 "hello-world"라는 docker image를 사용해서 docker container를 실행시켜준다.
$ sudo docker run hello-world
Local에는 존재하지 않기 때문에 docker hub에서 다운로드 받아서 다음과 같이 실행이 된다.
지금까지 모든 권한이 root user에게만 존재했기 때문에 명령어 가장 앞쪽에 sudo
를 입력해줬다. 그래서 sudo
를 입력하지 않고 docker 명령어를 실행할 경우에 접근 거부를 당하게 될 것이다. 그렇기 때문에 root user뿐만 아니라 host의 기본 user들까지도 권한을 부여하기 위해서 터미널 창을 새롭게 띄운 다음에 다음 명령어를 입력시켜 준다.
$ sudo usermod -a -G docker $USER
$ sudo service docker restart
이후에 VM을 로그아웃 했다가 다시 접속하게 되면 권한이 기본 user들에게도 부여된 것을 확인할 수 있다. 원래라면 sudo
없이는 거부당했을 명령어지만 이제는 권한이 부여되어 사용할 수 있게 된다.