전체 글 78

Kafka 개요 / 설치

자연어처리만 하다가, 최근에는 회사에서 개발한 자연어처리 기술을 활용하는 서비스를 개발하는 역할도 맡게 되면서, 메시징 큐에도 관심이 생겨서 여러가지 찾다보니 카프카라는 것을 알게 되었습니다. 그래서 카프카에 대해서 한번 알아보고자 합니다. 1. 카프카란? 카프카는 대용량의 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼으로 링크드인에서 출발해, 2011년 초 아파치 공식 오픈소스로 등록되었으며 현재는 넷플릭스, 에어비앤비, 마이크로소프트, 카카오 등에서 데이터 파이프 라인으로 사용되고 있습니다. 위 그림은 카프카 개발 이전의 링크드인 시스템 구조입니다. 링크드인의 시스템이 커지면서, 동일한 메시지를 여러 곳에 보내줘야하고 점점 연결이 많아져 확장도 어려워져서 고안하게 된 것이 카프카입니다. 카프..

ETC/Kafka 2020.07.19

NLP개발자의 2020년 상반기 회고

글또라는 블로그 모임을 하면서, 글또 다짐글을 작성했었습니다. 글또에서 이번 블로그 마감은 상반기 회고록을 작성해보는 아이디어를 공유해주셔서 회고록을 처음으로 작성해보게 되었습니다. 2020년 상반기가 끝나는 현재 시점은 사실 저에게는 지금 회사를 다닌지 만 3년을 딱 채운 시점이기도 합니다. 그래서 상반기 회고를 하고 또 3년 동안의 회고도 조금 같이 해볼까 합니다. 회고를 시작하기에 앞서 제가 어떤 일을 하는지 소개드리면, NLP 개발자로 회사에 재직 중에 있습니다. 2020년 상반기 회고 2020년은 사실 29살이 되면서, 아홉 수에 대한 걱정과 두려움에다가 내년에는 서른이라는 압박감을 많이 느꼈습니다. 글또 다짐글에서는 2020년 목표로 1일 1커밋, 영어공부, 블로그 활성화라는 3개의 목표를 적..

나의 이야기 2020.07.05

[Python] python 예외처리 try, except, else, finally

실제 서비스를 개발하다보면, 예외처리가 점점 중요해집니다. 서비스가 갑자기 죽어서도 안되고, 에러에 대해서 잘 기록해둬서 버그를 수정해야하니까요. 그래서 이번엔 Python에서의 예외처리를 어떻게 하는지 한번 공부해보았습니다. 1. Python 예외처리 Python에서는 try, except, else, finally라는 4개의 구문이 있고, 이 4가지를 활용하여 예외처리를 수행합니다. 우선 4개의 구문에 대해서 간단하게 알아보겠습니다. - try 절에서는 기본적으로 실행할 소스코드를 작성합니다. - except는 try에서 실행한 소스코드에서 에러가 났을 경우에 실행되는 코드를 작성합니다. - else 절은 try 절에서 실행한 코드가 에러 없이 정상적으로 동작한 경우에 실행될 코드를 작성합니다. - ..

python 2020.06.20

annoy 라이브러리 소개 (nearest neighbor search, 벡터 유사도 검색)

오늘은 annoy라는 라이브러리를 소개해볼까 합니다. annoy는 딥러닝을 직접적으로 활용하지는 않지만, 딥러닝을 활용함에 있어서 벡터 유사도 검색에 매우 유용한 라이브러리 입니다. 개발자에 의하면 annoy는 Approximate Nearest Neighbors Oh Yeah의 줄임말이라고 합니다. 먼저 nearest neighbor는 많이 아실거라 생각합니다. 우리말로는 최근접 이웃이라고도 하는 이 알고리즘은 공간에서 가장 가까운 벡터를 찾는 알고리즘입니다. nearest neighbor 알고리즘은 최근 딥러닝과 연관된 분야에서도 많이 활용되고 있습니다. 예를 들면, word2vec에서 유사한 단어를 검색할 때, vector간의 거리를 계산하거나 sentence vector 간의 거리를 계산할 때도 ..

[Python] dict 정렬하기

python에선 dict는 제일 많이 쓰는 데이터구조 중 하나죠. dict는 dictionary의 줄임말이며, key-value 구조로 데이터를 저장해줍니다. dict를 정렬하기 위해서는 sorted() 함수를 사용할 수 있습니다. sorted(dict.items()) 이렇게 사용하시면 dict가 정렬이 되며, 이 때 정렬은 key를 기준으로 정렬하게 됩니다. item을 기준으로 정렬하고 싶다면, 아래와 같이 하시면 됩니다. sorted(dict.items(), key=lambda x:x[1]) 그리고, 만약 역순으로 정렬을 하고 싶다면, reverse=True 옵션을 넣어주시면 됩니다. sorted(dict.items(), reverse=True) sorted(dict.items(), key=lambd..

python 2020.05.27

vscode를 활용하여 원격 서버의 docker container에 접속하는 방법

최근에는 도커를 많이 사용하고 있습니다. Tensorflow도 사용하고 Pytorch도 사용하고 있는데, CUDA 버전도 달라야하고 하다보니 자연스럽게 도커를 사용하게 되었습니다. IDE는 vscode를 사용하고 있었는데, 찾아보니 vscode는 remote server에서 돌아가고 있는 docker container에도 접속해서 개발을 할 수 있는 환경을 제공하고 있더군요. 그래서 오늘은 vscode를 활용해서 remote server의 docker container에 접속해서 개발환경을 세팅하는 방법에 대해서 정리해보고자 합니다. 먼저 내 컴퓨터에 vscode와 docker가 설치되어 있어야하고, remote server에도 docker가 설치되어 있어야 합니다. 내 컴퓨터에는 왜 docker가 설치..

ETC/VScode 2020.05.24

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

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

BERT 인퍼런스 속도 비교 pytorch vs tensorflow

최근에는 pytorch 사용자도 많이 늘고 소스코드도 많이 최적화되서 pytorch와 tensorflow를 비교해보면 좋을 듯 해서 pytorch와 tensorflow에서 BERT 인퍼런스 속도를 비교해보려고 합니다. 먼저 pytorch와 tensorflow는 둘 다 딥러닝 프레임워크로, tensorflow는 구글에서 pytorch는 페이스 북에서 개발하고 있습니다. 제가 처음 딥러닝 공부를 시작했던 2016년에는 tensorflow가 많이 압도적이였는데, 학계에서 많이 활용되면서 최근엔 pytorch 사용자가 많이 증가하고 있습니다. 자연어처리에서 BERT는 모르면 간첩이라고 할 수 있을 정도로 유명한 모델이죠. 구글에서 2018년 10월에 공개한 Transformer 기반의 거대한 언어모델입니다. T..

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

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

글또 다짐글

블로그를 좀 더 열심히 관리해보고자, 글또라는 모임을 시작하게 되었습니다. 글또 모임은 2주에 한번 블로그에 공부한 내용 혹은 업무하면서 생겼던 일을 작성하고 공유한 뒤에 서로의 글을 읽어보고 또 코멘트까지 필수로 하는 모임입니다. 블로그를 해보고자 했던건 오래되었는데, 열심히 관리를 잘 안해오다가 이런 모임을 통해서 다른 사람들과 소통하며 블로그를 써보면 피드백도 있고 더욱 동기부여가 될 것 같아서 참가하게 되었습니다. 글또 다짐글을 쓰면서, 2020년 개인적인 목표도 함께 써볼까 합니다. 사실, 얼마 전부터 깃헙계정에 1일 1커밋을 하고 있습니다. 알고리즘을 하루에 한 문제씩 풀어서 커밋을 하고 있는데, 2020년에는 매일 잔디를 심는 것을 목표로 하고있으며 1월 2월에 단 하루도 빠지지 않고 잔디를..

나의 이야기 2020.03.01