1. 정의 Deployment는 Pod와 Replicaset(복제본)에 대한 관리를 제공하는 단위로 정의 합니다. 여기서 관리의 의미는 self-healing, scaling(뒤에 소개할 예정), Rollout(무중단 업데이트)와 같은 기능을 포함하며, Pod를 Deployment로 배포함으로써 여러 개로 복제된 Pod와 여러 버전의 Pod를 안전하게 관리를 할 수 있습니다. 2. Deployment 생성하기 YAML을 살펴보면 Pod의 틀과 비슷하지만 조금의 차이점을 볼 수 있습니다.(api version, kind, spec의 replica 등) apiVersion: apps/v1 # kubernetes resource 의 API Version kind: Deployment # kubernetes r..
minikube 1.25.1, kubectl이 개인 환경에 설치되었다고 가정한 이후에 시작합니다. 설치 방법은 여기를 참고하면 좋을 것 같습니다. https://waspro.tistory.com/587 minikube 5분안에 설치하기 본 포스팅에서는 Kubernetes의 경량화 버전인 minikube에 대해 살펴보겠습니다. minikube는 로컬이나 단일 환경에 손쉽게 Kubernetes를 구성하기 위한 방식으로 아래와 같은 몇가지 스텝만으로도 쿠버네티 waspro.tistory.com 1. 정의 Pod는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위 입니다. 쿠버네티스는 Pod 단위로 스케줄링, 스케일링 등 관리 작업을 수행합니다. 쿠버네티스에 어떤 application을..
1. Intro YAML(야밀)은 데이터 직렬화(서비스 간에 Data를 전송할 때 쓰이는 포맷으로 변환하는 작업)에 쓰이는 어떠한 포맷 또는 양식 중 하나를 일컫는 말입니다. XML, JSON과 비슷한 포맷의 형태라고 생각하시면 됩니다. 보통 쿠버네티스 마스터에게 요청을 보낼 때, 쿠버네티스 manifests, docker compose, ansible playbook, github action workflow 명세에 사용됩니다. 2. 특징 가독성이 뛰어납니다. 사람이 읽기 쉽도록 디자인이 되어 있는 것이 YAML입니다. JSON도 나름 읽기 편한데, YAML은 더 읽기 편하다고 볼 수 있습니다. 줄 바꿈과 들여쓰기(Tab, Space)에 조금 strict 한 편인 것도 유의하시면 될 것 같습니다. - ..
Docker로 생성한 많은 container들을 관리하는 Kubernetes에 대해 이야기를 해보려 합니다. 이후에 작성될 글들은 쿠버네티스를 심도 있게 하나하나 구조를 뜯어보는 글을 다루는 것이 아님을 먼저 말씀드립니다. 그 이유는 일단 관리자 입장이 아닌 사용자 입장에서 다루는 게 목표이고, MLOps를 다루는 것이 목표이기 때문에 모든 구조를 다루기엔 분량이 상당히 많기 때문입니다. 1. Intro Kubernetes를 감싼 public cloud(Amazon EKS, Google Kubernetes Engine, Azure Kubernetes Service)를 이용하면 안정된 서비스를 사용할 수 있습니다. 하지만 이 부분은 프리티어 계정이라 할 지라도 특정 기간이 지나면 유료로 전환이 될 것이며,..
이번 시간에는 docker image란 무엇인지, dockerfile를 사용해서 docker image를 만들어 보는 시간 가지겠습니다. docker image는 어떤 application에 대해 단순히 코드뿐만 아니라, 그 application과 dependent한 모든 것을 함께 패키징한 데이터라고 생각하시는 것이 좋습니다. 예를 들면 sklearn에서 svm classification fit 함수를 돌린 코드 만을 뜻하는 것이 아니라 사용한 파이썬 버전, sklearn, pandas, numpy 버전까지 명시된 모든 것을 생각하시면 됩니다. 이러한 docker image를 쉽게 공유하기 위해서는 dockerfile이라는 것이 있습니다. 쉽게 사용자가 docker image를 쉽게 만들 수 있도록 제..
오늘은 다른 블로그에도 많이 있지만, Docker의 기본적인 명령어 위주로 다루어 볼 예정입니다. 대다수의 명령어는 --help를 통해 arguments에 대해 공부하시는 것이 좋고, 저는 예시 위주로 작성 예정입니다. 1) pull : docker hub의 image repo로부터 docker image를 가져오는 커맨드입니다. 예시) docker.io/library 라는 이름의 repo에서 ubuntu:18.04라는 image를 제 로컬에 다운로드를 하게 됩니다. $ docker pull ubuntu:18.04 2) images : 로컬에 존재하는 docker image 리스트를 출력합니다. $ docker images 3) ps : 현재 실행중인 도커 컨테이너 리스트를 전부 출력하는 커맨드입니다. ..
어떤 OS, 환경에서 동일하게 작동시킬 수 있는 것이 Docker입니다. 한 줄로 표현하면 "Build Once, Run Anywhere"과 같습니다. 딥러닝 코드를 어느 OS, 환경에서든 상관없이 도커 이미지화 시키면 어디서든 동일하게 실행 및 결과를 얻을 수 있습니다. 이를 Dockerize 되어있다고 이야길 합니다. 머신러닝을 서비스화 하는데 production하는데 있어서 인프라도 상당히 중요하기 때문에 Docker의 중요성을 두말하면 잔소리 입니다. 1. 실습 환경 그렇다면 간단하게 환경을 구성하고자 합니다. 저같은 경우에는 환경은 VirtualBox + Ubuntu(20.04.3) 조합으로 구성할 예정입니다. 구성하는 방법은 아래 주소에서 참고하시면 좋을 것 같습니다. https://maini..
MLOps에서 크게 작업하는 것들은 다음과 같습니다. - 실행 환경의 일관성 & 독립성 유지(Reproducibility) - 스케줄 관리, 병렬 작업 관리, 유휴 자원 관리(Job Scheduling) - 장애 및 트래픽 대응(Auto-healing & Auto-scaling) 이 작업을 돕게 하는 오픈소스는 대표적으로 containerization이 목적인 Docker와 container orchestration을 하는 Kubernetes가 있습니다. 대략적으로 무엇인지 살펴보도록 하겠습니다. 1. Contatinerization Contatinerization은 Container에 명사화 시킨 단어인데, 그렇다면 Container를 먼저 무엇인지 알아야합니다. Container는 "격리된 공간에서 ..
MLOps에서 큰 범주로 나누면 데이터, 모델, 서빙으로 나눌 수 있습니다. 이번 글에서는 각 범주에 해당되는 SW/오픈소스 등을 언급만 하고 넘어갈 예정입니다. 제가 찍어만 먹어보거나 사용했던 경험이 있는 부분만 진한 글씨로 표시를 해보았습니다. 1. 데이터 요리로 치면 재료에 해당하는 부분입니다. 데이터 수집 Pipeline, 저장, 관리 측면으로 나눌 수 있습니다. - 데이터 수집 Pipeline : Sqoop, Flume, Kafka, Flink, Spark Streaming, Airflow - 데이터 저장 : MySQL, Hadoop, Amazon S3, MinIO - 데이터 관리 : TFDV, DVC, Feast, Amundsen 2. 모델 요리로 치면 조리에 해당하는 부분입니다. 개발, 버전..
1. Intro 전통적인 IT 프로젝트에서의 Software 개발 방식은 Uni-directional 한 방향으로 진행되었습니다. 간단히 다음과 같이 정리할 수 있다. Code 구현 → Build → Deployment 이러한 방식을 이제 벗어나 DevOps라는 하나의 방법론이 정의되기 시작했습니다. 그림에서 볼 수 있듯이 이러한 단계가 하나의 사이클이 이루어지는 개발 방식이 필요하다는 이야기가 나오면서 DevOps라는 개발 방법론이 정의가 되었습니다. 또한 DevOps라는 분야갸 탄생하면서 소프트웨어 개발 프로세스에서 단순한 코드 구현 이외에 여러 가지 구성 요소들이 정리 및 분리가 이루어지면서 많은 기술적 & 문화적 발전이 있었습니다. 2. ML Project와 SW Project 의 유사성 ML을 ..