Kubeflow 란?

  • 2017년 KubeCon USA 에서 첫 발표
  • 2018년 Kubeflow v0.1 릴리즈
  • 2020년 Kubeflow v0.1 릴리즈

Kubeflow MSA 구조로 개발되어 역할마다 쪼개서 개발되었다고 하니 아키텍처를 설계하는 분이 엄청난 내공의 소유자일거라는 생각이 들었다.

누구나 머신러닝 모델을 개발하고 싶어하겠지만 현실은 머신러닝 모델을 개발하는 업무는 극히 적고 대부분은 데이터 정제, 변수 가공, 환경셋팅 등에 시간을 소요한다는... 그러기에 프레임워크, 도구가 정말 중요하다! 망치로도 못을 박을 수 있지만 스패너로도 못을 박을 수 있겠으나 머신러닝의 세계에서는 그런 방법은 통하지 않을거다...

Kubeflow로 업무를 할 수 있는 날이 오기를 바라며 오늘도 데일리 미션을 한다!!!

혼자였으면 멀리갈 수 없었을 텐데 강사님, 패스트캠퍼스와 같이 하니(패스트캠퍼스 챌린지에 참여해서 데일리 미션을 수행중이므로 앞광고 맞습니다) 이렇게 꾸준히 하루하루 강의를 듣게 되는구나. 내가 매일매일 블로그에 글을 남기는 것은 태어나서 처음겪는 일이다. 데일리 미션이 끝나고 나서도 계속 할 수 있는 관성이 생기기를 바란다!

과연 누가 내가 쓴 이 블로그를 방문하게 될런지는 모르겠으나 나같은 이과생에 초보자도 이렇게 매일 매일 하는 모습을 보고 용기를 얻을 수 있기를 바란다 ㅎㅎ 댓글로 응원해주시면 더욱 감사하겠습니다! 복 받으실 거에요 :)

 

그럼 일단 Kubeflow의 미션을 알아볼까?!

 

https://www.kubeflow.org/docs/started/introduction/

The Kubeflow mission

Our goal is to make scaling machine learning (ML) models and deploying them to production as simple as possible, by letting Kubernetes do what it’s great at:

우리의 목표는 Kubernetes가 뛰어난 기능을 수행하도록 하여 머신 러닝(ML) 모델을 확장하고 프로덕션에 배포하는 것을 가능한 한 간단하게 만드는 것입니다.

  • Easy, repeatable, portable deployments on a diverse infrastructure (for example, experimenting on a laptop, then moving to an on-premises cluster or to the cloud): 다양한 인프라에서 쉽고 반복 가능하며 이식 가능한 배포(예: 랩톱에서 실험한 다음 온프레미스 클러스터 또는 클라우드로 이동)
  • Deploying and managing loosely-coupled microservices: 느슨하게 연결된 마이크로서비스 배포 및 관리
  • Scaling based on demand: 수요에 따른 확장

 

https://www.kubeflow.org/docs/started/architecture/

ML 워크플로우란 뭘까? 어떻게 구성되어 있을까?

Introducing the ML workflow

When you develop and deploy an ML system, the ML workflow typically consists of several stages. Developing an ML system is an iterative process. You need to evaluate the output of various stages of the ML workflow, and apply changes to the model and parameters when necessary to ensure the model keeps producing the results you need.

For the sake of simplicity, the following diagram shows the workflow stages in sequence. The arrow at the end of the workflow points back into the flow to indicate the iterative nature of the process:

ML 워크플로 소개
ML 시스템을 개발 및 배포할 때 ML 워크플로는 일반적으로 여러 단계로 구성됩니다. ML 시스템 개발은 반복적인 프로세스입니다. ML 워크플로의 다양한 단계의 출력을 평가하고 필요한 경우 모델과 매개변수에 변경 사항을 적용하여 모델이 계속해서 필요한 결과를 생성하도록 해야 합니다.
단순화를 위해 다음 다이어그램은 워크플로 단계를 순서대로 보여줍니다. 워크플로 끝에 있는 화살표는 프로세스의 반복적인 특성을 나타내기 위해 다시 흐름을 가리킵니다.

Central Dashboard: 처음에는 UI를 통한 제어가 접근하기 쉽다

 

 


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

Prometheus & Grafana 실습하기!

역시 고성능, 고사양의 환경이 중요함을 또 느낀다 ㅠㅠ

이번에 청구된 AWS 청구서를 보면 과연 클라우드 서비스가 좋은 것인가 라는 생각이 든다. 일단 큰 장비를 마련할 수 있는 상황이라면 마련해서 내 맘대로 장비를 사용할 수 있고 비용에 대한 부담은 전혀 없을 터인데말이다.

결국에는 모르고 사용하면 요금폭탄을 맞게 될거라는.. 뭐든지 알고 써야 한다. 사용한 것에 대한 책임은 나에게 있으니 말이다.

강의를 한 번 들어서는 온전히 내 것으로 만들기 어렵다는 생각이 든다. 그래도 데일리 미션을 매일 해야겠지!!

내 옆에 같이 공부하는 동료가 있다면 너무나도 좋겠다 ㅠ 다음에 패스트캠퍼스에서 챌린지 모집을 할 때에는 동료도 엮어주면 재밌을 것 같다는 생각이다. 요즘에는 코로나19 시국이여서 스터디 모임에 나가기도 조심스러우니 온라인 상의 활동으로 동기부여를 해주면 호응이 있지 않을까.

그러면 다음에 새로운 강의에 데일리 미션에 또 도전하고 싶다!! 저와 같은 생각을 하는 분 어디에 계시나요?!

스터디 동료를 모아서 같이 나아가려면 모두가 초보자면 대략 난감할 테니, 일단 내가 어느 정도 기본기는 갖춘 상태에서 참여해야 한다는 게 단점일 수도 있겠다.. 프리라이더는 금지! 내가 다른 사람에게 가르칠 수 있는 수준이 될 수 있도록 오늘도 나아간다!

 

Prerequisites

  • k8s (쿠버네티스) 환경: minikube v1.22.0
  • helm binary: helm v3

 

설치하기

  • minikube(사양에서 눈물이 난다 ㅠㅠㅠ): minikube start --driver=docker --cpus='4' --memory='4g'
  • kube-prometheus-stack Helm Repo 추가
  • kube-prometheus-stack 설치

 

어떻게 사용하지?

  • 포트포워딩: 새로운 터미널을 열어 포트포워딩
    • Grafana 서비스: kubectl port-forward svc/prom-stack-grafana 9000:80
    • Prometheus 서비스: kubectl port-forward svc/prom-stack-kube-prometheus-prometheus 9091:9090
  • Prometheus UI Login
  • Grafana UI Login
    • localhost:9000 으로 접속
    • 디폴트 접속 정보
    • Configuration - Data sources 탭 클릭: Prometheus 가 default 로 등록되어 있음
    • Dashboards - Manage 탭 클릭: 다양한 대시보드가 default 로 등록되어 있음

 


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

 

모델 모니터링을 위한 툴 중 Prometheus와 Grafana를 알아보자!

계속 언급되는 쿠버네티스.. 결국 쿠버네티스가 기본이 된다는 생각이 든다.

나중에는 더 좋은 개념, 툴이 나오겠지만 기본기를 잘 다지면 그 변화를 금방 따라잡을 수 있을 거다!

 

Prometheus

Prometheus 란?

Prometheus is a free software application used for event monitoring and alerting - Wikipedia

  • 쿠버네티스에 종속적이지 않고, binary 혹은 docker container 형태로도 사용하고 배포 가능
  • 쿠버네티스 생태계의 오픈소스 중에서는 사실상의 표준
    • 구조가 쿠버네티스와 궁합이 맞고, 다양한 플러그인이 오픈소스로 제공

특징

  • 수집하는 Metric 데이터를 다차원의 시계열 데이터 형태로 저장
  • 데이터 분석을 위한 자체 언어 PromQL 지원
  • 시계열 데이터 저장에 적합한 TimeSeries DB 지원
  • 데이터 수집하는 방식이 Pull 방식(Server 가 직접 정보를 가져가는 Pull 방식)
  • 다양한 시각화 툴과의 연동 지원
  • 다양한 방식의 Alarming 지원

아키텍처

  • Prometheus Server:시계열 데이터를 수집하고 저장
  • Service Discovery: Monitoring 대상 리스트를 조회
  • Exporter
    • Prometheus 가 metrics 을 수집해갈 수 있도록 정해진 HTTP Endpoint 를 제공하여 정해진 형태로 metrics 를 Export
    • Prometheus Server 가 이 Exporter 의 Endpoint 로 HTTP GET Request 를 보내 metrics 를 Pull 하여 저장한다.
    • 하지만, 이런 pull 방식은 수집 주기와 네트워크 단절 등의 이유로 모든 Metrics 데이터를 수집하는 것을 보장할 수 없기 때문에 Push 방식을 위한 Pushgateway 제공
  • Pushgateway: 보통 Prometheus Server 의 pull 주기(period) 보다 짧은 lifecycle 을 지닌 작업의 metrics 수집 보장을 위함
  • AlertManager: PromQL 을 사용해 특정 조건문을 만들고, 해당 조건문이 만족되면 정해진 방식으로 정해진 메시지를 보낼 수 있음
  • Grafana: Prometheus 와 항상 함께 연동되는 시각화 툴, Prometheus 자체 UI 도 있고, API 제공을 하기에 직접 시각화 대시보드를 구성할 수도 있음
  • PromQL: Prometheus 가 저장한 데이터 중 원하는 정보만 가져오기 위한 Query Language 제공

Grafana

  • The open and composable observability and data visualization platform. - grafana
  • 쿠버네티스에 종속적이지는 않고 docker 로 쉽게 설치할 수는 있지만, 여러 Datasource 와의 연동성이 뛰어나고 특히 Prometheus 와의 연동이 뛰어나 함께 발전


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

 

Model Monitoring 이란 무엇인가?!

모델 서빙 이후 Model Monitoring 이 필요하며 이를 위한 도구는 무엇이 있을까?

 

The ML Test Score: A Rubric for ML Production Readiness and Technical Debt Reduction, IEEE, Google

(ML 테스트 점수: ML 생산 준비 및 기술 부채 감소를 위한 루브릭, IEEE, Google)

Monotor 1: Dependency changes result in notification. 종속성 변경으로 인해 알림이 표시됨

Monotor 2: Data invariants hold in training and serving inputs. 데이터 불변량은 학습 및 제공 입력에 유지

Monotor 3: Training and serving features compute the same values. 학습 및 제공 기능은 동일한 값을 계산

Monotor 4: Models are not too stale. 모델이 너무 오래되지 않음

Monotor 5: The model is numerically stable. 모델이 수치적으로 안정적

Monotor 6: The model has not experienced dramatic or slow-leak regressions in training speed, serving latency, throughput, or RAM usage. 모델은 훈련 속도, 서빙 대기 시간, 처리량 또는 RAM 사용량에서 극적이거나 느린 누출 회귀를 경험하지 않음

Monotor 7: The model has not experienced a regression in prediction quality on served data. 모델은 제공된 데이터에 대한 예측 품질의 회귀를 경험하지 않음

 

서비스 제공 방식

  1. ML 관련
    • Input Data Distribution
    • Feature Distribution
    • Output Data Distribution
    • Performance (Evaluation)
    • Model Stability
      ...
  2. Ops 관련
    • Request Latency
    • Request Error Rate
    • CPU, Memory Utilization
    • Disk I/O
    • Network Traffic

소프트웨어 개발과는 달리 ML 서비스 모니터링은 고려해야 할 사항들이 많다 ㅠㅠ

 

모델 모니터링을 위한 오픈소스: 어떤 문제를 해결할지, 어떤 요구사항을 처리할지, 이해관계자가 중요시하는 것은 등등을 고려해야 한다!

- Prometheus, Grafana, Grafana loki, Thanos

 


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

 

오늘의 목표는 Seldon Core 실습하기!!

윽 Seldon Core를 위한 사전지식으로 쿠버네티스 관련 지식이 필요하단다.

혼자서는 절대로 시도조차 못 했을 거다 ㅠㅠㅠ

일단 한걸음 한걸음 걸어가는 거다!!

 

사전지식 (Prerequisite)

  1. Custom Resource (CR): 쿠버네티스의 API 의 확장판이라고 하는데 아직 감이 오지는 않는다.
    • 공식문서(한글번역본 ㅠㅠㅠ): https://kubernetes.io/ko/docs/concepts/extend-kubernetes/api-extension/custom-resources/
    • 커스텀 리소스 는 쿠버네티스 API의 익스텐션으로, 기본 쿠버네티스 설치에서 반드시 사용할 수 있는 것은 아니다. 이는 특정 쿠버네티스 설치에 수정이 가해졌음을 나타낸다. 그러나 많은 핵심 쿠버네티스 기능은 이제 커스텀 리소스를 사용하여 구축되어, 쿠버네티스를 더욱 모듈화한다.
  2. Operator pattern
    • 공식문서(한글번역본): https://kubernetes.io/ko/docs/concepts/extend-kubernetes/operator/
    • 쿠버네티스에서 기본적으로 관리하는 리소스들에는 Pod, Deployment, Service, PersistentVolume 등이 있다.
    • Controller
    • Operator
    • Operator 개발 방법: Operator 개발에 필요한 부수적인 작업이 자동화되어있는 Framework 를 활용하여 개발
  3. Helm
    • 공식문서(오 마이 영문): https://helm.sh/docs/
    • 쿠버네티스 모듈의 Package Managing Tool. Ubuntu OS 의 패키지 관리 도구 apt, Mac OS 의 패키지 관리 도구 brew, Python 패키지 관리 도구 pip 와 비슷한 역할

Seldon Core 설치



본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

오늘은 모델 서빙을 위한 Flask 활용하기!!

강사님의 코드를 기계적으로 실행하는 것만 하는 것이 아니라 내가 나중에 만들 모델, 서빙할 모델을 위해 Flask를 활용한다는 생각으로 임하자!

 

사전준비: scikit-learn 설치 (나도 scikit-learn 패키지를 활요해서 모델을 만들어봐야 하는데.. 공부할 내용이 많음에 슬프지만 지금 공부하지 않으면 앞으로 공부해야할 내용은 쌓여갈 뿐이라는 걸 명심해야지. 암 티끌모아 태산이다!)

AWS EC2 사양을 좀더 좋은 걸로 했으면 좋았을 걸 하는 아쉬움이다. 유료라는 게 슬프다 ㅠㅠ

머신러닝을 하려면 돈이 많이 드는 건 필연적인 것이라는

pip install scikit-learn==1.0

 

train.py 생성하고

flask_server.py 생성하기

 

새로운 터미널에서 해당 Flask server 에 POST /predict API 를 요청하기

 

 

아래에 Scikit-learn 이란 무엇인지 알아보면!

https://scikit-learn.org/stable/

  • Simple and efficient tools for predictive data analysis
  • Accessible to everybody, and reusable in various contexts
  • Built on NumPy, SciPy, and matplotlib -> 하아 NumPy, SciPy, matplotlib도 공부해야지 ㅋㅋ 한번에 벼락치기하는 것이 아니라 외국어를 배우듯 매일매일 꾸준히 하는 것의 중요함을 절실히 느끼는 중이다. 되고 싶고 하고 싶은게 있다면, 오늘의 내가 무엇을 했는지? 내일은 무엇을 할 것인지?
  • Open source, commercially usable - BSD license -> 이런 도구들을 오픈소스로 만드는 분들 정말 존경스럽다

Scikit-learn is an open source machine learning library that supports supervised and unsupervised learning. It also provides various tools for model fitting, data preprocessing, model selection, model evaluation, and many other utilities.

-> Scikit-learn은 모델 피팅, 데이터 전처리, 모델 선택, 모델 평가 등을 위한 도구

 


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

드디어 대망의 8일차!!! 이것으로 1주차 미션 끝!!! 남은 기간도 잘 해보자!!!

업무에서 당장은 아니지만 Django나 Flask를 해야할 것 같은데 강의에 Flask도 있어서 다행이다.

일단 하나라도 잘 해야할 터인데 너무 분산되는 것은 아닌가하는 불안감도 있지만 필요에 맞게 도구를 골라서 활용하는 것도 필요하니까ㅠㅠ

 

Flask

The python micro framework for building web applications
https://github.com/pallets/flask

https://flask.palletsprojects.com/en/2.0.x/

Micro Service Architecture (MSA) 를 위한 web app framework

가볍고 사용하기 쉽다고 하니 해볼만 할 듯하다.

 

강의, 강의자료에는 명령어가 안 나와 있지만 가상환경을 만들고 해당 가상환경에서 Flask를 설치했다.

(flast로 오타인 건 함정 ㅠㅠ)

얼마전에 Airflow 공부한다고 엄청나게 삽질한 덕분에 이 부분은 금방 해결되었다. 역시 삽질의 힘! 두려워말고 일단 해보는거다! 여러분 일단 해보세요!

 

가상환경 만들기

python3 -m venv 디렉토리명

 

해당 가상환경 활성화

source 디렉토리명/bin/activate

 

가상환경 종료

deactivate

 

실제 업무에서 머신러닝 서비스를 서빙해보는 날이 오기를 바라며 공부는 계속되어야 한다!

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

 

이제 설연휴인데도 매일 조금씩이라도 공부를 하게 해주는 데일리 미션에 감사하다! 그간 무의미하게 보내버린 내 저녁시간, 주말이 너무도 아깝다는 생각이 들게 만들어 준 패캠 챌린지 최고!

흔희들 강의를 들으면 수강시간만큼 내가 공부했다고 생각하는데 중요한 건 해당 내용을 정리하고 반복하고 모르는 부분을 채워나가야 한다는 점. 블로그로 내가 공부한 내용을 정리하는 것은 쉽지만은 않은 일이다. 더욱이 이과생인 나에게 글쓰기란 피해가고 싶은 존재.

하지만 다시 생각해보면 IT 분야의 전문가들이야말로 글을 많이 쓰고, 많이 읽는 사람들이다. 그러기에 글쓰기 훈련까지 겸하게 해주다니 앞으로는 공부하면서 느리더라도 꾸준히 정리해야겠다. 이번 강의자료들도 강사님들의 정성어린 손길로 정리된 걸 보면서 나도 이렇게 해야겠다는 동기부여도 되었다.

 

오늘은 Model Serving!

모델 학습을 했는데 이걸 서비스에 적용하려면 어떻게 해야 하지?! ㅠ

Model Serving: ML Model을 서비스화 하는 것

 

서빙 단계에서 막히는 이유
- 모델 개발과 소프트웨어 개발 방법의 괴리
- 모델 개발과정과 소프트웨어 개발 과정의 파편화
- 모델 평가 방식 및 모니터링 구축의 어려움

 

서빙의 간편화를 도와주는 도구들
Seldon Core, TFServing, KFServing, Torch Serve, BentoML

 

Flask, Rest API도 공부를!!! API 서버를 만들어야지 ㅎㅎ


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 바로가기: https://bit.ly/37BpXiC

 

 

+ Recent posts