serving 7

[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

[MLOps] BentoML - Adaptive Batching

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

[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] 파이썬으로 딥러닝 모델 서빙하기 (ft. flask)

딥러닝 모델을 서빙하는 방식은 여러가지 방법이 있습니다. 여러가지 방법 중에서, 오늘은 flask를 활용하는 방법을 소개해보도록 하겠습니다. https://github.com/hsh2438/MLops/tree/main/1_flask_rest_api GitHub - hsh2438/MLops Contribute to hsh2438/MLops development by creating an account on GitHub. github.com 코드는 우선 위의 깃헙 레포지토리를 참고하시면 됩니다. 라이브러리 설치 필요한 라이브러리는 requirements.txt 파일에 저장해두었으므로 아래 명령을 실행하여 라이브러리를 설치해주시면 됩니다. pip install -r requirements.txt 서버 구현 f..

nginx와 gunicorn을 활용한 multi gpu 환경에서의 딥러닝 서비스

https://seokhyun2.tistory.com/44 딥러닝 모델 서빙과 병렬처리 저도 회사에서 딥러닝 모델 서빙을 하고 있는데, 서빙을 하다보니까 제일 처음에 부딪히는 문제가 병렬처리였습니다. 그래서 이번 포스팅에서는 딥러닝 모델을 서빙할 때 어떻게 병렬처리를 해줘야 할 지 이야기를.. seokhyun2.tistory.com 위의 글에서, 파이썬에서의 병렬처리와 딥러닝 모델 서빙을 하는 방법에 대해서 다뤘습니다. flask와 gunicorn을 활용하면 쉽게 멀티프로세싱을 활용할 수 있다고 소개해드렸는데, 이번에는 nginx까지 같이 활용하여 multi gpu 환경에서 딥러닝 모델을 서비스하는 방법을 소개해드리겠습니다. nginx는 비동기 이벤트 기반의 웹서버로 reverse proxy 기능을 제공..

딥러닝 모델 서빙과 병렬처리

저도 회사에서 딥러닝 모델 서빙을 하고 있는데, 서빙을 하다보니까 제일 처음에 부딪히는 문제가 병렬처리였습니다. 그래서 이번 포스팅에서는 딥러닝 모델을 서빙할 때 어떻게 병렬처리를 해줘야 할 지 이야기를 해보려고 합니다. 먼저 저희는 쓰레드와 프로세스라는 개념을 살짝 정리하고 가야해요. 먼저 프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이라고 정의되고 쓰레드는 프로세스 내에서 실행되는 흐름의 단위로 정의가 됩니다. 그래서 쓰레드는 프로세스에 포함이 되게 되죠. 리눅스에서 top 명령어를 실행하면, 현재 실행 중인 프로세스의 리스트를 볼 수 있어요. 만약 해당 프로세스가 여러개의 쓰레드를 사용하고 있으면, cpu가 100%을 초과하는 걸 보실 수 있을 거에요. 그래서 병렬처리는 여러 쓰레드..

pytorch와 flask를 활용한 딥러닝 모델 서빙하기

tensorflow 2.0을 활용해서 어떻게 서빙하는지 다뤄봤었는데, 요즘엔 pytorch를 사용하시는 분들도 많으니까 이번엔 pytorch를 서빙하는 방법에 대해서 설명드리려고 합니다! 이전 글들과 똑같이 mnist를 준비했고, 학습은 pytorch 공식 예제 참조하여 학습을 수행하였습니다. 아래 링크 참조하셔서 학습 진행해보시길 추천드려요! https://github.com/pytorch/examples/tree/master/mnist pytorch/examples A set of examples around pytorch in Vision, Text, Reinforcement Learning, etc. - pytorch/examples github.com 이전 포스팅에서 tensorflow 예제를 ..