개발자 블로그 82

[Python] 딕셔너리, Dictionary에서 key를 통해 value를 가져오는 방법

파이썬의 딕셔너리(dictionary)는 key와 value를 쌍으로 가지는 자료형입니다. key를 활용하여 value를 가져올 수 있는 방법이 있는데 그 방법들을 한번 소개해보려 합니다. 1. key를 활용하여 dict[key]로 접근 가장 쉽게 접하는 방식입니다. key를 통해 직접 접근하는 방식입니다. 이 방식의 단점은 존재하지 않는 key에 대해서는 KeyError 에러를 발생시킨다는 것입니다. 예를 들면 이런 식입니다. 2. get 함수 활용 get(key, default=None) 함수는 위와 같은 경우의 단점을 보완합니다. get 함수를 활용하면 key가 존재하지 않는 경우에 대해서 에러를 발생시키지 않고, None 혹은 지정한 default 값을 반환합니다. 아래의 이미지와 같이 활용할 수..

python 2020.08.18

[Python] join 함수, filter 함수

python에서 join 함수는 문자열을 다룰 때 정말 많이 활용하는 함수 중에 하나입니다. python은 join을 활용하면, 아래와 같이 string list를 쉽게 합칠 수 있습니다. strings = ['abc', 'def', 'ghi'] ''.join(strings) # >> abcdefghi join으로 합칠 때, 원하는 문자열을 사이마다 넣어줄 수도 있습니다. strings = ['abc', 'def', 'ghi'] '1'.join(strings) # >> abc1def1ghi 간혹, 문자열 리스트에 빈 문자열이 있는 경우도 있습니다. 그 경우에는 위와 같이 join을 하면 1이 2번 사이에 들어가게 됩니다. 그럴 때는, 아래와 같이 filter 함수를 사용하면 빈 문자열을 제거해줄 수 있습..

python 2020.08.10

도커를 활용한 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..

Producer-consumer pattern

자연어처리에서는 거대한 언어 모델을 학습하기 위해 방대한 양의 학습 데이터를 사용합니다. 학습 데이터의 전처리도 성능에 많은 영향을 끼치면서 전처리를 많이 하고 있는데 학습 데이터의 양이 너무 크다보니 오히려 학습보다 전처리가 더 오래 걸리기도 하여 학습 데이터의 전처리에서는 병렬처리가 필수가 되고 있습니다. 그래서 오늘은 병렬처리를 할 때, 유용한 패턴을 하나 소개해보겠습니다. 병렬처리에 대해서 공부하게 되면, 꼭 빠지지 않고 등장하는 것 중에 하나가 producer-consumer pattern(프로듀서-컨슈머 패턴;생산자-소비자 패턴)입니다. RabbitMQ, Kafka와 같은 메시징 큐를 보면 producer와 consumer는 절대 빠지지 않습니다. producer와 consumer가 무엇인지 ..

ETC/Pattern 2020.08.02

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