상세 컨텐츠

본문 제목

MLOps인프라와 도구 (Container)

데이터 과학

by Taeyoon.Kim.DS 2024. 1. 3. 20:47

본문

Conda & Virtualenv

Conda와 Virtualenv를 이용해서 가상환경을 만들고 원하는 패키지 및 라이브러리를 다운로드 받아서 격리된 개발환경을 만들고, 개인별로 업무할 수 있다. 사실 개발환경을 동일한 pipfile 또는 requirements.txt등으로 package dependency를 일정하게 유지하는 것은 팀내의 모든 개발자가 어떤 pc에서 작업을 하더라도 동일한 환경에서 업무하여 나중에 있을 crash를 방지하는 데에 있는데, 이 강의에서는 아직 개별 pc에서 개별 환경을 개발하는 것만 우선적으로 가정한다.

 

1. Anaconda download

2. conda --version : 버전 알아보기 23.1.0

3. conda update -n base -c defaults conda : 콘다 최신버전으로 업데이트하기. 23.11.0으로 업데이트 진행.

4. conda create --name fastcampus_mlops_python_env : PowerShell이 cmd의 기본값으로 되어있는 경우 conda 실행 불가능. Anacoda terminal로 실행할 것.

5. conda env list를 통해서 설치되어진 conda env를 알 수 있음.

6. conda info --envs fastcampus_mlops_env 또는 conda info --envs

7. conda env export 를 통해서 무엇이 설치되어있는지 확인.

8. conda env export > environment_mycoworker.yml

9. conda env list를 통해서 동료의 env file을 열어보고 export가능.

10. conda env export > environment_my.yml

11. cat environment_my.yml --> Unix 명령어 이므로 type environment_my.yml로 실행.

12. vim Dockerfile 실행시 Windows환경의 terminal에서는 vim 설치가 되어있지 않고, conda를 통한 vim설치는 불가능에 가까우므로 직접 설치를 해줘야한다. https://www.vim.org/download.php

에서 gvim_0.1.0000_x86.exe 를 설치 후 실행하여 next를 누르다가 Create .bat files라는 체크박스에 체크를 해준다. https://meganad.github.io/2020-07-10-powershell-cmd-vi/

 

Powershell, Cmd 에서 Vi 사용

요즘 윈도우즈 터미널을 써보고 있는데, 여러가지 면에서 꽤 편리하다. WSL도 그렇고 점점 개발을 위해 맥을 사야할 이유가 줄어드는것 같다. 그런데, Powershell이나 cmd 를 사용하다보면 가끔 vi 가

meganad.github.io

 

MLOps인프라와 도구 (Container)

Container란 코드를 실행하기 위해 모든 요소를 포함하는 소프트웨어 패키지. 운영체제를 가상화한 형식이기 때문에, 클라우드나 개인 노트북 어디서나 실행이 가능함. 컨테이너화를 통해서 인프라를 효율적으로 구성하고 소프트웨어를 배포할 수 있다. Container에서는 애플리케이션과 필요한 모든 것을 포함하는 표준화된 단위로 보여지고 어떠한 컴퓨팅 환경에서도 일관되게 실행된다. 이미지 기반으로 모든 파일을 포함한다. 

 

Container의 구성 요소는 1. Image 2. Registry 3. Container Runtime으로 구성된다.

Image

Docker 이미지는 Dockerfile로 정의되고, 코드/라이브러리/종속성/환경 설정 등이 포함된다.

 

Registry

Container Image가 저장되고 공유되는 곳. Docker Hub 처럼 image를 다운로드하고 업로드할 수 있다.

 

Container Runtime

Container를 실행하기 위한 환경 제공. Docker, rkt 등이 있음.

 

Container의 필요성

환경 일관성 제공 - 소프트웨어 환경 유지

자원효율성 증가 - 적은 리소스 사용

배포 및 확장 용이성 - CI/CD 파이프라인과 잘 통합되어 빠른 개발 및 배포를 가능하게 한다.

 

경량성 및 빠른 시작 - 운영 체제에서 바로 시작 가능.

일관된 환경

효율적인 자원 사용

격리와 분리

 

멀티 클라우드 및 하이브리드 클라우드 환경에서 활용 할 수 있다.

AWS와 GCP 동시에 사용하는 경우가 있을 수 있음. 

 

대규모 머신러닝 파이프라인 최적화

대규모 데이터 처리와 머신러닝 모델 학습을 위한 파이프라인 Container

개발자와 DS가 동일한 환경에서 작업가능하게 되고, 모델 학습 및 배포 과정이 효율적으로 운영된다.

 

지속적 통합 및 배포 (CI/CD)를 위한 활용

MLOps 프로세스의 일환으로 CI/CD 파이프라인에 컨테이너 도입.

 

MLOps에서 Container 인프라

 

Docker image - 모든 파일과 설정을 포함하는 템플릿

Docker Container - Image를 기반으로 실행되는 실행 Instance

Docker Daemon - Image와 Container를 관리하는 Background service.

Docker Registry - 외부 image 저장소.

Docker Client - Daemon과 상호작용하는 Interface.

Docker 볼륨

Docker Compose - 컨테이너를 정의하고 실행하기 위한 도구.

 

Container 실습

Docker는 컨테이너화 기술을 사용하여 패키징 배포하는 데 사용되는 오픈소스 플랫폼. 경량화된 컨테이너를 제공한다. Docker는 위에 나열된 주요 구성 요소를 가지고 있다. Docker File을 작성하고 Build를 하면 Docker image가 생성되고, Run하여 container를 실행한다.

Dockerfile 작성하고, dockerfile 스크립트 실행, 작성하고 image 빌드 후에 이미지 실행한다.

 

우선 Dockerfile작성하기. 기본이미지로 Python 3.8-slim을 기본으로 사용할 것. 작업 디렉토리 설정하고 Python 스크립트를 복사한다. 그리고 실행.

 

Docker 생성 실습

Nginx 기반 서버 컨테이너 생성 및 실습

Scikit-learn으로 모델 생성. 

 

실습환경

1. vim 다운로드 받을 것.

2. vim Dockerfile

3. vim main.py

print("hello dockerworld")

4. docker build -t hello-docker-world . 를 통해서 이미지 생성. 아직 컨테이너가 생성된 것은 아님. run을 통해서 컨테이너 생성가능.

5. Python 3.8이 아닌 3.10으로 변경하고싶다면?

03-06. [실습 2] Continaer 실습에서 local의 python 버전은 3.10이지만 python:3.8-slim으로 Dockerfile을 작성했기 때문에 서로 분리된 작업환경이며, import sys를 통해서 python version을 출력하는 내용을 main.py에 입력해주는 동시에 아마 python:3.10-slim으로 버전을 업그레이드하는 방법으로 docker를 rebuild하여 image를 만들고, 생성된 image를 기반으로 docker run hello-docker-world를 실행해서 python 3.10로 update된 내용을 main.py에서 print되도록 하려고 하신 것.

 

docker rmi 

docker search를 통해서 dockerhub에 있는 image들을 찾을 수도 있음.

 

type 

docker run -it -d -p 8001:80 --name nginxserver nginx:latest &에서 &기호를 제거하고 실행할 것.

curl http://localhost:8001 사용할 것.

38:05 index.html을 변경하기 위해서 docker안으로 들어간 경우에는 WSL 아래 Unix환경이 제공되기 때문에 type index.html대신에 cat index.html을 실행해도 작동됨.

 

'데이터 과학' 카테고리의 다른 글

MLOps platforms  (1) 2024.01.05
MLOps Orchestrator  (0) 2024.01.04
ML LifeCycle  (0) 2023.12.27
iterrows를 활용한 빈 리스트에 결과값 채워넣기  (1) 2023.12.07
Graph Data Model - AWS Neptune Graph DB  (0) 2023.12.06

관련글 더보기