전체 글 56

특정 포트를 잡고 있는 프로세스 알아내기

개발을 하다가 필요해서 임시로 서버를 띄우다보면 이미 그 포트에 바인드한 프로세스가 있다고 하면서 실행이 되지 않는 경우가 있습니다. 나도 모르게 데몬이 떠있는 경우도 있고, 많은 경우는 스스로 띄워놓고 모르는 경우죠. (왼손이 하는 일을 오른손이 모르게...) 이럴 경우 어떤 프로세스가 포트를 잡고 있는지 알아서 죽여야하는데 이때 사용하기 유용한 명령이 있습니다. 예를 들어 8888 포트를 잡고 있는 프로세스를 찾고 싶다면, $ sudo lsof -i :8888 라고 하면 됩니다. 그럼 이 아니고, 와 같이 친절하게 명령, PID 등을 알려줍니다. 그럼 잔인무도하게 kill 명령을 날려주면 되겠죠?

Linux 2020.04.29

한국어 토큰의 단위는 뭐가 좋을까?

한국어 자연어 처리를 하다 보면 토큰의 단위를 뭐로 할지 고민이 될 때가 있습니다. 토큰을 어떻게 잡느냐에 따라 데이터의 크기도 달라지고, 아마도(?) 최종 시스템의 성능도 달라질 거고요. 그래서 이 아마도를 한번 확인해보기로 했습니다. 토큰에 따라 성능이 달라질까요? 결론은 네 그렇습니다. 두 줄 요약. 어절을 통으로 쓰는 것보다는 형태소나 Subword와 같은 작은 단위가 좋다. 글자를 쓰느냐, 자소를 쓰느냐는 (특히 형태소 단위 토큰에서) 크게 유의미하지 않다. 이번 글의 또다른 목적은 간단한 한국어 자연어 처리기를 나름 최신의 기술들을 사용해서 처음부터 끝까지 만드는 법을 보여드리는 겁니다. 그래서 전체 데이터와 코드를 포함했습니다. 시작하기 전에 이 글은 읽으시는 분께서 Tensorflow, M..

Deep Learning 2020.04.28

텍스트 파일의 특정 줄 주변을 보고 싶을 때 : head & tail

텍스트 파일을 처리하다 보면 데이터 파일의 중간에서 에러가 나는데 이 줄을 확인해보고 싶을 때가 있습니다. 예를 들어 텍스트 파일 전처리를 하고 있는데 데이터 27,354번째 라인에서 무언가 에러가 나면서 전처리 스크립트가 죽어서 27,354번째 줄이 뭔지 확인하고 싶을 수 있습니다. 가장 손쉬운 방법은 에디터로 열어서 27,354번째 줄로 가보는 거죠. 하지만 파일이 수십만에서 수백만 라인이 될 경우 에디터가 매우 힘들어할 수 있습니다. 에디터를 띄우는 것 자체가 번거로울 수도 있고요. 콘솔에서 간편하게 확인하는 방법 중 하나는 head와 tail 명령을 사용하는 겁니다. 기억을 되살려 보자면.. $ head -100 train.txt 이렇게 하면 train.txt 파일의 앞 100줄이 출력이 됩니다...

Linux 2020.04.28

간편한 Progress Bar 모듈 - tqdm

큰 데이터를 다루다 보면 지금 프로세싱이 어디까지 처리됐는지 궁금할 때가 있습니다. 텍스트 파일에서 한 줄씩 읽어서 전처리를 할 때도 그렇고요. 데이터를 여기에서 저기로 옮길 때도 그렇고요. 시간이 너무 오래 걸리다 보면 '어딘가에서 무한루프를 돌고 있는 것은 아닐까', '코드를 잘못 짜서 한번 도는데 너무 오래 걸리는 것이 아닐까' 등등 많은 생각이 듭니다. 불안한 마음에 Ctrl+C를 확 눌러버릴까 유혹도 받지요. 자리를 잠시 비우기도 애매하고요. 꼭 자리를 비울 때 에러를 내고 죽으니까요. 가상의 상황을 가정해서 아래처럼 한번에 0.05초가 걸리는 작업을 100번 돌린다고 생각해보겠습니다. 이 경우야 5초면 끝나겠지만 큰 데이터를 다루다 보면 도대체 언제 끝날지 감이 안 올 때가 많습니다. 그리고 ..

Python 2020.04.26

네트워크를 통해 파일을 빠르게 복사하기: nc 명령어

머신러닝과 같이 큰 데이터를 다루는 일을 하다 보면 한 컴퓨터에서 다른 컴퓨터로 큰 파일을 옮겨야 하는 경우들이 자주 있습니다. 예를 들어 코딩은 내 컴퓨터에서 하고, 모델링을 하기 위해서 코퍼스를 서버로 옮기는 경우가 있겠죠. 외장하드를 이용할 수도 있고, USB 드라이브를 이용할 수도 있고, 플로피... 테이프... 아무튼 여러가지 방법이 있습니다. 1. 묶어서 scp 이때 가장 많이 쓰는 방법 중 하나가 scp를 이용하는 것입니다. 대부분 서버에 ssh 서버가 설치되어있기 때문에 아주 간편하게 파일들을 복사할 수 있습니다. corpus라는 디텍토리가 있고 이 것을 서버로 통째로 보내고 싶다고 가정해보겠습니다. $ tar -cf corpus.tar corpus $ scp corpus.tar ceong..

Linux 2020.04.26

Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자

Ubuntu에 업데이트가 있을 때마다, Tensorflow에 업데이트가 있을 때마다, GPU를 사용할 수 있도록 Tensorflow를 설치하는 일이 여간 어려운 일이 아닙니다. Nvidia 드라이버 버전도 꼬이고, CUDA는 또 호환되는 버전이 따로 있고, Package는 LTS만 지원한다고하고, CuDNN 버전 등등에. 여러분만의 고민이 아닙니다. 이 고민을 Docker를 이용해서 비교적(?) 손쉽게 해결해보겠습니다. 물론 Docker에 대해서 아주 기본 사용법은 아셔야 합니다. (여담이지민 Ubuntu 20.04 LTS가 출시됐다기에 설치해보면서 Tensorflow를 Docker로 설치해봤습니다. 아무래도 이제 막 나온 따끈따끈한 판이다 보니 CUDA와 Tensorflow가 잘 될지도 의문이었고, 무..

Deep Learning 2020.04.25