DeepLearning/Service 6

도커를 활용한 TensorRT 환경 세팅하기

TensorRT 란? TensorRT에 대해 간단하게 설명드리면 TensorRT는 NVIDIA platform에서 최적의 Inference 성능을 낼 수 있도록 Network compression, Network optimization 그리고 GPU 최적화 기술들을 대상 Deep Learning 모델에 자동으로 적용합니다. 딥러닝 모델을 GPU로 서비스를 할 때, TensorRT(https://developer.nvidia.com/tensorrt)로 모델을 변환하면 속도가 훨씬 빨라집니다. 그러면 물리 서버를 줄일 수 있어서, 운영 비용을 훨씬 절감할 수 있습니다. TensorRT가 모델을 최적화 할 때 사용하는 방법은 위 그림에 언급된 Layer & Tensor Fusion, Precision Cali..

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 예제를 ..

Tensorflow 2.0과 flask를 활용한 딥러닝 모델 서빙하기

이전 포스팅에선 Tensorflow에서 제공하는 tensorflow-serving 모듈을 활용하여 딥러닝 모델을 서빙해보았습니다. 오늘은 flask를 활용하여 서빙을 해보도록 하겠습니다. 지난 포스팅이 궁금하시면 아래를 참조하시기 바랍니다. https://seokhyun2.tistory.com/39 그 전에, 어떤 차이 점이 있는지 알고 넘어가면 좋겠죠? tensorflow-serving 모듈을 활용할 경우에는 전처리가 불가능하다는 것이 제일 큰 문제점입니다. mnist 데이터를 학습할 때, 불러온 픽셀 데이터를 0~1사이의 값으로 변환하기 위하여 255로 나눠서 학습하죠. 그래서 서버에 요청하기 전에 255를 나눠주어야만 합니다. 특히, 자연어 처리의 경우에는 텍스트 문장이 들어오면 해당 문장을 형태소..

Tensorflow 2.0을 활용한 딥러닝 모델 서빙하기

Tensorflow 2.0에서는 케라스와 통합하고 eager execution (즉시실행)을 지원하게 되면서 훨씬 쉬워졌습니다. 딥러닝을 서비스에 실제로 적용하는 사례가 점점 많아짐에 따라, 서빙을 잘하는 방법에 대해서도 많은 시도를 하고 있습니다. 그래서 딥러닝 모델 서빙에 대하여 제일 쉬운 방법부터 시작해서 하나하나 소개해보려고 합니다. 오늘 소개드리는 방법은 텐서플로우에서 제공하는 텐서플로우 서빙과 도커를 활용하는 방법입니다. 서빙을 하려면 모델부터 있어야겠죠? 아래의 소스코드를 활용해서 간단한 모델을 한번 만들어보도록 하겠습니다. """ example of train mnist dataset with Tensorflow 2.0 """ import tensorflow as tf """ load mn..