전체 글 77

[fastapi] lifespan

Lifespan fastapi를 사용하면서, 앱이 시작할 때 혹은 앱이 종료될 때에 실행되어야 하는 로직이 분명 존재하게 됩니다. 저는 모니터링 관련 세팅이 앱 시작할 때 주로 실행되도록 구성을 많이 하고 있는데요. 이런 세팅들을 명시적으로 실행 위치를 정해주는 기능이 fastapi에 존재합니다. lifespan이라는 기능인데, 오늘은 fastapi의 lifespan을 소개해보겠습니다. 먼저 위에서 언급했듯이, 앱이 시작하기 전 혹은 종료 시 실행되어야 하는 로직을 정하고 lifespan 함수를 선언해서 함수 안에 로직들을 작성하고 연결만해주면 됩니다. 바로 예시 코드를 보면서 소개드리겠습니다. 아래 코드는 fastapi 공식 문서에 소개된 코드입니다. (https://fastapi.tiangolo.co..

python/fastapi 2024.03.03

Amazon OpenSearch Service

LLM(Large Language Model)이 발전하면서 RAG(Retrieval Augmented Generation)이 등장하였고, RAG의 방식 중에 하나로 벡터 서치가 굉장히 많이 활용되고 있습니다. 클라우드 서비스들도 벡터 서치를 지원하는 제품을 제공하고 있습니다. AWS는 Amazon OpenSearch Service, Azure는 Congnitive Search, GCP는 Vertex AI라는 제품을 각각 보유하고 있습니다. 오늘은 클라우드 중에 점유율이 제일 높은 AWS의 제품을 한번 리뷰해보려고 합니다. AWS가 제공하는 OpenSearch는 오픈 소스로도 제공되고 있어서, 꼭 AWS에서 사용할 필요는 없습니다. 직접 구축해서 사용하고 싶으시다면 아래 링크로 들어가서 문서를 읽어보고 구..

[Docker] 인터넷 없이 도커 설치하기

회사를 다니다 보면 간혹 인터넷이 안되는 상황이 있을 수 있는데요. 특히 금융권이 내부망은 인터넷을 막아놓기도 합니다. 인터넷이 막혀있으면, 도커를 설치하고 도커 이미지를 집어 넣으면 편하게 개발 환경을 설정할 수 있어서 저는 인터넷이 막혀있을 때는 도커를 설치해서 보통 환경을 세팅합니다. 인터넷 없이 도커를 설치할 땐 그래도 파일은 옮길 수 있는 환경이여야 설치를 할 수 있습니다. 가이드는 아래에 binary로 도커를 설치하는 공식 문서를 참조하시면 됩니다. https://docs.docker.com/engine/install/binaries/

ETC/Docker 2024.02.04

[mysql] docker로 mysql 실행하기

요즘엔 docker가 참 개발을 편하게 해주는 것 같습니다. 오늘은 mysql을 docker로 실행해보도록 하겠습니다. 먼저 이미지를 받아줘야 합니다. 아래 명령어를 활용하여 5.7 버전의 mysql을 받아주겠습니다. docker pull mysql:5.7 이제는 container 실행 명령어를 통해 실행만 하면 됩니다. docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -e TZ=Asia/Seoul -d -p 3306:3306 mysql:5.7 옵션이 좀 많다보니, 옵션을 하나씩 훑어 보겠습니다. 먼저 --name 옵션은 컨테이너의 이름을 지정하는 옵션으로 mysql로 컨테이너 이름을 정해주었습니다. -e 는 환경변수를 집어넣는 옵션인데, root passwo..

ETC/MySQL 2024.01.31

모노 레포(Monolithic Repository)

오늘은 모노 레포 구조에 대하여 소개해보려고 합니다. 회사에서 업무를 하다보면, 프로젝트 별로 레포를 구분하기도 하는데 프로젝트가 점점 많아지면서 레포지토리 갯수가 그만큼 많아지게 되면, 유지보수 측면에서는 점점 복잡하게 됩니다. 프로젝트가 나뉘어져서 레포지토리가 나뉘더라도, 사용하는 라이브러리나 코드는 비슷하다보니 모노 레포를 적용하면 훨씬 관리가 용이해지는 효과를 볼 수 있습니다. 아래의 링크는 'Why Google Stores Billions of Lines of Code in a Single Repository'라는 제목으로 구글에서는 왜 하나의 레포로 관리하고 있는지 설명하는 글입니다. https://dl.acm.org/doi/pdf/10.1145/2854146 위의 글에서 설명하는 모노 레포의..

ETC/Git 2024.01.21

[Python] contextvars

fastapi가 등장한 이후로, python에서도 비동기로 구현하는 방식이 많이 활성화되고 있습니다. 멀티 스레딩으로 구현할 때는, thread의 context를 활용해서 로그를 남겨서 쉽게 모니터링 할 수 있었는데 비동기에서는 thread context가 없어서 해당 부분을 해소하기 위해서 등장한 것이 contextvars입니다. contextvars는 파이썬 표준 라이브러리로 따로 설치를 해야하는 것은 없습니다. 사용법은 매우 간단합니다. ContextVar를 한 번 선언을 하고, set 함수를 호출하여 context를 설정해주면 get 함수를 호출해서 가져다 쓸 수 있습니다. 바로 예시 코드를 보겠습니다. import asyncio import contextvars import random impo..

python 2024.01.07

[MLOps, LLMOps] In-flight batching

서빙에서 batch 최적화 기법으로 Adaptive batching을 소개한 적이 있습니다. https://seokhyun2.tistory.com/91 [MLOps] BentoML - Adaptive Batching 오늘은 Adaptive Batching에 대해서 알아보려고 합니다. 왜 필요한 지 먼저 알아볼건데, infernce의 경우 하나의 input을 inference 하는 것 보다, batch로 inference하면 훨씬 빠르고 효율적으로 추론을 할 수 있 seokhyun2.tistory.com Adaptive batching의 경우, 아래 이미지와 같이 batch 하나에 대해서 longest 기준에 맞춰 padding을 해서 inference를 하게 됩니다. Transformer의 encoder..

[MLOps, LLMOps] PagedAttention, vLLM 소개

chatGPT 이후로 LLM에 대한 연구가 많이 활성화되었고, 그에 따라 최근에는 LLM 서빙을 다루는 경우가 많아지고 있는 것 같습니다. vLLM은 LLM을 더 효율적으로 서빙하기 위한 PagedAttention이란 기술을 적용하였다고 하는데, 오늘은 이 부분들을 소개해보도록 하겠습니다. PagedAttention의 원리 vLLM을 개발한 팀은 아래의 논문을 통해 PagedAttention을 먼저 소개했고, 직접 개발하여 vLLM 라이브러리를 출시했습니다. - 논문 제목: Efficient Memory Management for Large Language Model Serving with PagedAttention - 링크: https://arxiv.org/pdf/2309.06180.pdf Key-V..

ML OPS 2023.12.09

글또 8기 회고

어느덧 또 글또 8기가 마지막 제출만 남겨두어 오늘은 글또 8기를 회고하려고 합니다. 우선 8기에 작성했던 글들을 보니 mysql, fastapi에 관한 글을 주로 썼었네요. 상반기에 있었던 chatGPT의 등장 이후로, 저도 회사에서 chatGPT를 활용한 서비스를 개발하여 출시를 했는데 그러다보니 MLOps보다는 아무래도 backend 직군에 가깝게 일을 했던 것 같습니다. 8기 다짐글에서, 시스템 설계에 대한 고민이 많다는 글을 적었었는데 새로운 서비스를 개발하느라 바빴고 그 서비스에서는 복잡한 설계가 필요없었다보니 그런 고민을 좀 깊게 못 했고 관련된 공부도 못 했고 그래서 관련 글도 하나 작성하지 못했던 것 같습니다. 서비스를 개발하면서 fastapi 사용에 아직 조금 미숙하다보니, fastap..

나의 이야기 2023.07.16

[fastapi] Middleware

오늘은 fastapi의 middleware에 대해서 알아보려고 합니다. https://fastapi.tiangolo.com/tutorial/middleware/ Middleware - FastAPI FastAPI framework, high performance, easy to learn, fast to code, ready for production fastapi.tiangolo.com fastapi의 middleware를 활용하면, 모든 request에 대해서 전/후 처리를 추가해줄 수 있습니다. 바로 예시 코드를 보도록 하겠습니다. import time from fastapi import FastAPI, Request app = FastAPI() @app.middleware("http") async..

python/fastapi 2023.07.02