개발자 블로그 82

[MLOps] BentoML - Adaptive Batching

오늘은 Adaptive Batching에 대해서 알아보려고 합니다. 왜 필요한 지 먼저 알아볼건데, infernce의 경우 하나의 input을 inference 하는 것 보다, batch로 inference하면 훨씬 빠르고 효율적으로 추론을 할 수 있습니다. 하지만 api를 서빙을 하는 경우에는 batch로 inference가 매우 어렵습니다. 예시를 들어보면 챗봇이라고 생각을 하면 intent(의도)를 분류하는 모델을 api로 서빙을 할 텐데, 하나의 질문에 대한 intent만 분류하면 되기 때문에 api에 batch로 inference를 요청할 수 없습니다. api server 입장에서는 한 문장씩 입력이 들어오더라도, 비슷한 시간에 들어오는 문장들을 묶어서 infernce를 해서 결과를 반환해주면 ..

SQLAlchemy ORM & async 활용 (2.0.X)

SQLAlchemy에서 2.0 버전이 나와서 문법이 꽤 많이 변경되었습니다. 그래서 오늘은 변경된 ORM 문법과 함께 async로 접근하는 방법을 알아보았습니다. 변경된 ORM 문법을 바로 보도록 하겠습니다. from datetime import datetime from sqlalchemy import String, BIGINT from sqlalchemy.dialects.mysql import DATETIME from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): type_annotation_map = { int: BIGINT, datetime: DATETIME } class User(Ba..

python/SQLAlchemy 2023.02.26

글또 8기 다짐

글또 8기를 또 신청하여 다짐글을 남기게 되었습니다. 글또 덕분에 2022년도 조금 돌아보고, 2023년 계획도 세워보는 것 같습니다. 2022년은 이직을 하면서 MLOps라는 직군으로 전환하며 새해를 맞았었는데 벌써 1년이 조금 넘었네요. NLP개발자, 서버개발자를 거쳐서 MLOps로 일을 하고 있고 이제 전체 일한 기간도 만으로 5년도 훌쩍 넘어가게 되었습니다. 이제는 주니어라고 하긴 힘든 경력이 되었네요ㅎㅎ 5년을 넘게 일을 했다는 건 나이도 그만큼 들었단 건데, 그러다보니 사회초년생 때랑 커리어에 대한 고민이 많이 달라졌습니다. 처음에는 기술을 많이 공부하고 경험치를 빨리 쌓는 것에 대해 고민이 많았다면, 지금은 '내가 팀에 기여를 어떻게 해야할까?' 혹은 '어떻게 시스템을 디자인해야 서비스를 잘..

나의 이야기 2023.02.12

글또 7기 회고

벌써 글또 7기가 끝날 시점이 되어, 글또 7기 회고를 해보게 되었습니다. 7기에서 썼던 글 리스트를 확인해보니 다짐글을 시작으로, 아래와 같이 여러 주제로 글을 작성했네요. - 글또 7기 다짐글 - huggingface/transformers에 컨트리뷰트 해보기 - [ML OPS] mlflow 로컬에서 사용해보기 - [ML OPS] transformers inference (ft. colab, onnx, gpu) - [ML OPS] quantization을 활용한 인퍼런스 최적화 (ft. ONNX, TensorRT) - SQLAlchemy 소개 및 활용법 - SQLAlchemy에서 ORM 활용하기 - argo workflow 구성해보기 - argo workflow - cron workflow MLOPS..

나의 이야기 2022.10.14

argo workflow - cron workflow

지난 글(https://seokhyun2.tistory.com/86)에서 argo workflow를 로컬에 세팅하는 방법에 대해서 알아보았었는데요. 오늘은 설치한 argo workflow에서 cron workflow를 생성하는 방법에 대해서 한 번 알아보도록 하겠습니다. cron workflow 생성 cron workflow는 정해진 시간에 주기적으로 실행이 되는 workflow입니다. 기본적으로 웹 화면에서, ui로 간단하게 실행할 수 있습니다. 아래에서 왼쪽에 4번째에 시계 아이콘을 선택하면 Cron Workflows 탭에 들어갈 수 있고 그러면 CREATE NEW CRON WORKFLOW 버튼을 눌러서 간편하게도 생성할 수 있습니다. 버튼을 눌러보면, 아래의 내용이 기본 예제로 이미 입력이 되어 있..

ML OPS 2022.10.02

argo workflow 구성해보기

ML ops에서 workflow를 활용하는 구성이 많아지고 있는데요. 오늘은 argo workflow를 로컬에 구성해보았습니다. kubernetes 설정 argo workflow는 kubernetes 상에서 활용할 수 있습니다. 로컬에서는 docker를 설치하여, Enable Kubernetes를 활용하여 쉽게 kubernetes를 세팅할 수 있습니다. apply 후에 error가 발생하는 경우 Clean / Purge data, Reset to factory defaults를 시도해보시는 것을 추천드립니다. argo workflow 구성 namespace 생성 argo workflow를 설치해 줄 namespace를 아래의 명령어로 생성해주시면 됩니다. kubectl create ns argo argo..

ML OPS 2022.09.18

SQLAlchemy에서 ORM 활용하기

이전 글(https://seokhyun2.tistory.com/84)에서 SQLAlchemy에 대해서 소개를 해보았는데요. 오늘은 ORM을 활용하는 방법을 준비해보았습니다. ORM을 사용하기 위해서는, table에 매핑되는 class를 선언해서 사용하면 되는데요. 바로 예제 코드를 보도록 하겠습니다. from sqlalchemy.orm import declarative_base from sqlalchemy import Column, Integer, String, DateTime from sqlalchemy.sql import func Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary..

python/SQLAlchemy 2022.09.04

SQLAlchemy 소개 및 활용법

딥러닝 모델을 서비스에 적용하다보면, 실시간 서빙 뿐만 아니라 데이터베이스를 활용하여 데이터베이스에 딥러닝 모델의 인퍼런스 결과를 저장해두고 저장된 결과를 활용하여 서비스를 제공하기도 합니다. 자연어처리에서 예를 들면, 미국 신문 기사에 대한 번역 서비스를 제공한다고 할 때, 미국 신문 기사를 데이터베이스에 저장하면서 번역 결과도 같이 저장을 해둔다면 유저가 접속할 때 마다 번역할 필요가 없겠죠? 그래서 딥러닝 모델을 서비스에 제공하다보면, 데이터베이스에 대한 지식도 필요하게 됩니다. SQLAlchemy? SQLAlchemy는 그 자체가 데이터베이스 클라이언트는 아닙니다. 데이터베이스 클라이언트 라이브러리는 별도로 활용하고, 오늘 소개드릴 SQLAlchemy는 ORM(Object Relational Ma..

python/SQLAlchemy 2022.08.21

[ML OPS] quantization을 활용한 인퍼런스 최적화 (ft. ONNX, TensorRT)

오늘은 quantization을 활용하여 인퍼런스를 최적화하는 방법을 소개하려고 합니다. 이전 글(https://seokhyun2.tistory.com/82)을 같이 보시는 것을 추천드립니다. 0. quantization quantization은 한국말로는 양자화라고 하는데요. 신호처리 수업을 들으신 분들은 이미 익숙하실 수도 있을 것 같습니다. 신호처리에서는 숫자들을 큰 숫자 셋에서 작은 숫자 셋으로 매핑하는 것을 양자화라고 합니다. 예를 들면, 1~1000을 10으로 나누고 정수만을 취해서 1~100으로 변경한다고 생각해보겠습니다. 511, 519가 동일하게 51이 되겠죠? 그러면 우리는 기존 데이터를 더 적은 숫자 셋(100개)으로 표현할 수 있지만, 511과 519가 동일한 데이터가 되면서 511..

[ML OPS] transformers inference (ft. colab, onnx, gpu)

자연어처리에서는 transformers가 pretrained 모델도 많이 제공하고 있다보니 정말 많이 활용되는 것 같습니다. ML ops의 역할 중에 하나가, 인퍼런스 속도를 최적화하는 것이라는 생각이 되는데요. transformers를 간단하게 인퍼런스 해보는 코드에서 시작하여, 실시간 서비스에서 활용할 수 있는 수준까지 개선해보는 과정을 소개해보도록 하겠습니다. 0. colab 오늘 소개하는 내용들은 GPU도 활용해야 하는데, 노트북을 사용하다보니 GPU가 없어서 colab(https://colab.research.google.com/)을 사용해보도록 하겠습니다. colab에서는 무료로도 간단하게 GPU를 테스트 정도는 해볼 수 있도록 제공하고 있습니다. colab을 기본적으로 켰을 땐, GPU가 할..