• Home
  • Tags
  • All Posts
  • About
PKS, ML Engineer

bentoml

BentoML Custom model, Pickleable Model August 16, 2022 1 minute read

Pickle?

피클 가지고 놀기 : 네이버 블로그

python 자체에서도 흔하게 쓰이는지는 모르겠으나, ML/DL을 하다보면 쉽게 접할 수 있는 압축 확장자이다.

ML을 쉽게 접할 수 있는 Sklearn에서도 지원하고 DL을 쉽게 접할 수 있는 Tensorflow에서도 쉽게 접할 수 있다.

이런 pickle파일을 BentoML🍱에서도 지원하고 있기 때문에 우리는 pickle로 저장할 수 있는 모델이라면 쉽게 묶어서 구현할 수 있을 것이다.

다시 말해서, Tensorflow, sklearn, xgboost 다 pickle로 저장해서 pickle파일을 API로 던져서 컨테이너화(Containerize)된 Docker Image를 얻도록 구현할 생각이다.

BentoML, Custom Model

🔗https://docs.bentoml.org/en/latest/frameworks/picklable.html

예제는 이미 공식 문서에 잘 서술되어 있다.

전략 설정

📡어떻게 pickle파일을 api로 전송해서 BentoML로 할 것인가?

read more
BentoML 예제로 다뤄보기. August 9, 2022 4 minute read

1. 이글의 목적

🔗 https://docs.bentoml.org/en/latest/frameworks/xgboost.html

튜토리얼도 굉장히 쉽게 구성되어 있어서…이 글이 필요할까 싶어요.

그래도 나도 정리할겸. 내가 다뤄본 경험도 넣을겸. 써볼까합니다.

튜토리얼로도 충분히 이해가 될만한 수준이라면 보지마요 부끄러워요.

sklearn에서 제공하는 breast_cancer를 이용하여 Batch Prediction(여러 Row를 한방에 예측해줭.)을 제공하는 API를 만들어 볼거에요.

2. BentoML 설치

2022년 8월 9일 기준 1.0.3 버전이 배포되어있습니다.

pip install --upgrade pip pip install bentoml 

로 설치해봅시다.

3. 모델 학습하기

xgboost로 심장병(Breast Cancer) 이진분류모델(Binary Classification Model) 생성하기

# BentoML 가져와 import bentoml import xgboost  read more
					
What is BentoML? August 8, 2022 3 minute read

1. What is BentoML?

🔗 https://docs.bentoml.org/en/latest/index.html

BentoML은 ML모델을 제공하기 위한 오픈소스 프레임워크입니다.

  • ML모델을 제품화하는것을 가속화합니다.
  • ML모델을 프로덕션하는것을 표준화할 수 있게 합니다.
  • 안정적이고 확장 가능한 고성능 모델을 제공할 수 있게 합니다.
  • 유연한 MLOps 플랫폼을 제공합니다.

간단한 정의

BentoML = ML+ FastAPI + Docker 입니다. 🍱

Getting Started with Docker & Fast API 🚀🚀 - DEV Community

우리가 생각할 수 있는 모델(ML/DL)을 컨테이너화(Containerize) 합니다. 근데 FastAPI로 Back-end End-point를 곁들인.

휴먼강록체, 근데 이제 ~를 곁들인

Docker가 있어서 BentoML이 갖는 장점

  • Docker Daemon이 있으면 어디서든 Server로서 운용할 수... read more

docker

Docker Volume 종류 August 10, 2022 1 minute read

🔗Docker Volume 종류

Host Volumes

  • Ex) ./host/path:/container/path
  • Host에 존재하는 어떤 경로든 컨테이너에 볼륨 바인딩을 할 수 있습니다.
  • uid/gid에 주의 해야 합니다.
    • host에서 먼저 생성하는 것을 권장합니다.
    • uid/gid를 따로 설정하지 않으면 Container는 root로 Directory를 생성하게 되므로 볼륨 삭제에 애를 먹을 수 있어요.

Named Volumes

  • Ex) created_name:/container/path
  • 작성 파일에서 최상위

Anonymous Volumes

tmpfs

read more
Docker로 Env 구성하기, feat.feast August 10, 2022 4 minute read

1. Apple Silicon M2에서 Feast 개발하기

내 Macbook Air M2로….Feast를 개발하고싶은데 어떤 수를 써도 해결방법을 찾지 못했다. 근데 Docker로 개발환경을 구성해서 한다면 어떨까? 라는 생각을 하게됐고 이 생각의 근원은 직장동료가 알려줬다…

우선 나는 Pycharm을 IDE로 쓰고 있고, 다른 IDE도 비슷하겠지만 Docker로 환경을 구성하려면 매번 Dockerfile을 빌드해서 쓰거나 이미지를 사용할 수 있다. 당연히 후자가 덜 귀찮을 것 같아서 후자로 만들어 볼 것이다.

개발환경

image-20220811210042565

  • Device: Macbook Air M2
  • OS: macOS Monterey v12.5
  • CPU: M2
  • RAM: 24gb 로 산 흑우 음머.

2. Docker Image 만들기

Dockerfile, requirements 등 기초 설정 과정입니다.

Dockerfile

read more
Harbor(Cloud, Server)에 Docker Push(Upload) August 3, 2022 1 minute read

1. docker file로 Custom Image 생성

# Dockerfile-feast FROM python:3.10 RUN pip install --upgrade pip RUN pip install 'feast[redis]' 

docker run 해도 되는데 다른거(환경변수 포트 등등…)설정하기 귀찮으니까 compose로 실행하면서 docker file이 잘 돌아가는지 확인한다.

version: "2.4" services: feast_local: build: context: .. dockerfile: Dockerfile-feast environment: TZ: "Asia/Seoul" restart: always ports: - "6566:7000"... read more
					

druid

Batch Ingestion in Druid, Example October 21, 2022 less than 1 minute read
read more
Apache Druid Tutorial in Docker October 19, 2022 6 minute read

🔗Druid Tutorial in Docker 원본 출처

최대한 개발환경에 제약사항 없이 실행하기 위해서 Docker Compose로 실행해봤습니다.

Docker compose YAML

🔗Apache Druid 24.0.0, Docker compose YAML

version: "2.2" volumes: metadata_data: {} middle_var: {} historical_var: {} broker_var: {} coordinator_var: {} router_var: {} druid_shared: {} services: postgres: container_name: postgres image: postgres:latest volumes: - metadata_data:/var/lib/postgresql/data environment read more
					
What is Druid? October 18, 2022 5 minute read

Druid 소개

OLAP을 위해 설계된 실시간 데이터 분석용 데이터베이스.

  • 클릭스트림 분석
  • 네트워크 성능 모니터링을 포함한 네트워크 분석
  • 서버 메트릭 저장소
  • 애플리케이션 성능 메트릭 저장소
  • 제조 데이터 메트릭 저장소
  • OLAP
  • etc.

“실시간으로 데이터를 만지고 조회할 수 있는게 필요해!” 라면 다 적용 가능 하다는 내용인 것 같습니다. IoT같이 작은 데이터가 실시간으로 무수히 쌓이는 환경이라면 최적이라는 생각입니다.

Druid 특징

  1. 열 저장 형식(Columar DB)
    • 열 조회 쿼리 속도가 크게 향상됩니다.
  2. 확장 가능한 분산 시스템
    • Druid는 수십애에서 수백대까지 클러스터링 할 수 있습니다.
    • 요건에 따라서 클러스터 노드 개수를 조정하면 됩니다.
  3. 대규모 병렬 처리
  4. ... read more

feast

Docker로 Env 구성하기, feat.feast August 10, 2022 4 minute read

1. Apple Silicon M2에서 Feast 개발하기

내 Macbook Air M2로….Feast를 개발하고싶은데 어떤 수를 써도 해결방법을 찾지 못했다. 근데 Docker로 개발환경을 구성해서 한다면 어떨까? 라는 생각을 하게됐고 이 생각의 근원은 직장동료가 알려줬다…

우선 나는 Pycharm을 IDE로 쓰고 있고, 다른 IDE도 비슷하겠지만 Docker로 환경을 구성하려면 매번 Dockerfile을 빌드해서 쓰거나 이미지를 사용할 수 있다. 당연히 후자가 덜 귀찮을 것 같아서 후자로 만들어 볼 것이다.

개발환경

image-20220811210042565

  • Device: Macbook Air M2
  • OS: macOS Monterey v12.5
  • CPU: M2
  • RAM: 24gb 로 산 흑우 음머.

2. Docker Image 만들기

Dockerfile, requirements 등 기초 설정 과정입니다.

Dockerfile

read more
feast 시작하기, What is Feast? August 4, 2022 5 minute read

🔗 출처 : docs.feast.dev

1. What is Feast?

Feast는 Feature Store의 준말로

  1. 기존 Train Data의 보관
  2. 새로운 Stream Data의 실시간 처리 및 저장
  3. 기존 Train Data를 결합 및 가공하여 재사용
  4. etc.

를 제공하는 오픈소스 프레임워크입니다. 현재 stable(1.0.0) 버전은 없습니다. 그들이 정해놓은 Roadmap을 기준으로 개발중이며 2022년 8월 5일 기준 0.23-branch가 배포되었습니다.

img

모델 학습 및 배포에 이용할 데이터를 일관성있게 제공

  • Online-store: 기존 학습데이터와 축적된 데이터를 저장하는 저장소.
  • Offline-store: 모델에 입력으로 넣을 데이터를 짧은 시간동안 갖고 있는 저장소.
    • 저는 데이터 큐처럼 설계하여 이용하고 있습니다.
  • Feature Sever:... read more
Apple Silicon M2, install Feast August 4, 2022 9 minute read

밑에는 뻘짓입니다.

그래도 혹시나해서 남겨놨습니다. 도움이 되어 로컬에서도 환경구성을 할지도 모르잖아요.

🔗 https://kyungseonpark.github.io/feast-docker-env.html

여기로 가세요. docker로 구성하는 방법이 있습니다.

1. 영롱한 내 맥북 에어 M2, 근데 애물단지 옷을 입은.

개인적으로 사용하던 한성게이밍노트북은 사실상 노트북이 아니다. 들고 다닐수 있는 데스크탑이다. 벽돌무게의 어댑터를 가방에 넣느라면 차량없이는 이동을 포기해야한다.

그래서 맥북 에어를 개인용으로 사서 공부를 하겠노라라는 다짐을 몇번이곤 했다. 하지만 M1을 2022년에 와서 산다는 것은 테크충인 내게 용납할 수 없었다. 그래서 얼마전 기다리고 기다리던 MacBook Air M2를 구매했다.

image-20220805223139652

아주 영롱해….이뻐…지문 잘뭍어….잭꽂을때 코팅까질까 무서워….

2. 설치를 해야 Feast를 개발하고 공부하지

회사에서 받은 맥북은 운좋게도(?) intel... read more

git

git, remove untracked files August 24, 2022 less than 1 minute read
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        __init__.py
git clean -f

git에서 untrackef files을 지우는 방법.

git pull하려는데 안되서 찾아본 내용.

read more
일해라 .gitignore August 24, 2022 less than 1 minute read

Docker-compose up을 하고 볼륨을 잡고.

근데 볼륨은 github으로 올라가면 안된다.

.volumes/
volumes/

image-20220824223509804

?

git add .
git commit -m "fix: blah blah"

해야되는데?

git cache를 날려버리자.

git rm -r -f --cached
git add .
git commit -m "fix: blah blah"

편안 짤과 움짤 모음 - 짤봇

read more

gitblog

GitBlog 포스팅 Tips August 2, 2022 6 minute read

1. 앞으로 블로그를 시작하기 위한 글.

나는 Notion으로 블로그를 관리해보려고했다. oopy를 이용하면 호스팅도 굉장히 편했고 Notion의 강력한 임베딩 기능들은 굉장히 매력적이었다. 하지만 oopy구독비용+개인Host DNS비용까지 합하면 한달에 1만원을 사용하기에는 그만한 가치가 있나 생각하게되었다…

흠터레스팅 짤 모음.jpg.gif : 클리앙

자기개발 비용이라고 생각할 수 있지만….닭강정 하나 사먹는게 더 좋아서 gitblog를 시작하게되었다. 근데 markdown으로 하려니 너무 어려워 정리해놓고 틈틈히 컨닝하면서 작성하기 위해 작성하는 글이다.

참고로 Jekyll을 사용해서 포스팅중입니다.

포스팅정보 정리(YAML)

layout: post # 고정하면 됨. post layout을 사용하기 위함인듯. read_time: true # 읽는시간,... read more
					

kubernetes

Kubernetes Object, k8s 오브젝트 September 11, 2022 7 minute read

쿠버네티스 오브젝트란?

쿠버네티스 클러스터를 이용하여 애플리케이션(Application)을 배포하고 운영하기 위해 필요한 모든 쿠버네티스 리소스

쿠버네티스 오브젝트

  • Cluster
    • 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 작업자 시스템 세트
    • 모든 클러스에는 하나 이상의 작업자 노드가 있음
    • 클러스터에는 클러스터를 관리하는 서비스를 실행하는 제어평면도 있음
  • Node, Namespace
    • K8s는 컨테이너를 Pod를 그룹화하고 해당 Pod를 노드에서 실행하도록 할당하여 워크로드를 실행
    • 노드는 클러스터에 따라 가상 머신 or 물리적 머신 일 수 있음
    • 각 노드는 컨트롤 플레인에서 관리
    • Pod를 실행하는 데 필요한 서비스를 포함
    • 어디에 실행할거니? 할 때 고민할 부분
  • Pod
    • 하나 이상의 컨테이너 그룹
    • Pod는 컨테이너를 실행하는 방법에 대한 사양인... read more

python

python basic, 이름 없는 함수 lambda August 29, 2022 3 minute read

간단 설명

  • 이름을 지을 필요없는 간단한 함수
  • 함수이기 때문에 인자(Argument)를 넣을 수 있다.
  • 한줄로 표현가능한 함수 ➡️ 코드가 간결해진다.

간단 예시

# x를 넣어 x의 제곱을 만드는 함수 def square(x): return x**2 
# x 제곱 square = lambda x:x**2 

위에 경우는 둘 다 아래와같이 출력됩니다.

output = square(3) print(output) ##output ## 9... read more
					

spark

RestAPI로 받은 데이터(Json, Dict)를 DataFrame으로 만들기 September 5, 2022 5 minute read

사용한 라이브러리

import os import time import pandas as pd from datetime import datetime from fastapi import FastAPI from pydantic import BaseModel class PredictionItem(BaseModel): data: dict 

dict → Json File → spark.DF

@app.post("/prediction/") async def post_prediction(api_body: PredictionItem): # ms단위로 파일명 작성하여 요청 겹치지 않게 처리... read more
					
  • bentoml (3)
  • docker (3)
  • druid (3)
  • feast (3)
  • git (2)
  • gitblog (1)
  • kubernetes (1)
  • python (1)
  • spark (1)

    2022 © Kyungseon Park

    Posts
    Tags
    About