뉴스 댓글 분석 프로젝트[0]: 프로젝트를 시작하며

온라인 뉴스 댓글은 정말 사람들의 목소리일까?

“여기 오신 모든 분들 손을 들어주세요.” (모두 손을 든다)

“나는 인터넷 뉴스를 보지 않는다, 하시는 분 손 내려주세요.” (조금 손을 내린다)

“나는 인터넷 뉴스를 보고 댓글은 보지 않는다, 하시는 분 손 내려주세요.” (좀 더 손을 내린다)

“아직도 반이 넘는 많은 분들이 손을 들어주시고 계시네요. 이제 손 내려주셔도 됩니다. 감사합니다.”

– 2018 PyConKR 발표를 시작하며

AWS Lambda Layers로 함수 공통용 Python 패키지 재사용하기

들어가며

올해 AWS Re:Invent에서 새로 발표된 기능 중 AWS Lambda에 새로운 전환점을 가져오는 기능이 발표되었습니다.

바로 Custom Runtime 지원과 Layers 지원이 추가된 것인데요,
이번 글에서는 두가지 기능 중 “Layers” 기능에 대해 알아봅니다.

GPU EC2 스팟 인스턴스에 Cuda/cuDNN와 Tensorflow/PyTorch/Jupyter Notebook 세팅하기

들어가며

Tensorflow나 PyTorch등을 사용하며 딥러닝 모델을 만들고 학습을 시킬 때 GPU를 사용하면 CPU만 사용하는 것에 비해 몇배~몇십배에 달하는 속도향상을 얻을 수 있다는 것은 누구나 알고 있습니다.

그래서 비싼 GPU를 사용하고 낯선 리눅스 환경을 이용하기도 합니다. 하지만 실제로 GPU, 특히 Cuda를 이용한 GPU가속을 세팅하고 cuDNN등을 통해 각 머신러닝 라이브러리에서 속도를 향상시키려고 할 때는 항상 무언가 문제가 발생합니다. 물론 Floydhub혹은 AWS SageMaker와 같이 이미 GPU 가속 환경이 마련되어있는 경우는 필요가 없지만, GPU 인스턴스의 시간당 요금 자체가 상당히 높습니다.

k80 GPU를 제공하는 경우 시간당 약 1~2달러의 비용이 발생합니다.

조금이라도 저렴하게 GPU를 사용하고, 한번 설정된 GPU 인스턴스를 그대로 유지하기 위해 스팟 인스턴스를 사용해 봅시다.

Django: Truncated or oversized response headers received from daemon process 에러 해결법

문제 발생 환경

  • OS: Ubuntu 16.04 LTS
  • Python 3.5.2
  • Django 2.0.2
  • Apache HTTPd 2.4
  • numpy / Pandas / pymssql 등 사용중

문제의 발생

장고 배포를 마친 뒤 배포 서버에 접속시 화면이 뜨지 않고 500에러가 났던 상황.

1
Timeout when reading response headers from daemon process 'djangoproject': /home/ubuntu/djangoproject/djangoproject/wsgi.py

에러 로그로 살펴보면 위와 같이 “Timeout when reading response headers from daemon process”이라는 문제가 발생했다.

PySpark: 손상된 parquet파일 무시하기

문제

PySpark를 이용해 파일을 읽어와 DataFrame 객체로 만드는 경우 읽어오는 파일이 parquet 파일이라면 이 파일이 어떤 형식으로 되어있는지(어떤 Column/Type으로 이루어져있는지)에 대한 정보를 필요로 합니다.

보통 parquet파일에 이 파일에 대한 스키마가 저장되어있어 파일을 읽고 쓰는데 지장이 없습니다. 하지만 간혹 parquet파일이 깨져있는 경우가 있습니다.

DjangoORM에서 SQL Driver 지정해 Query & Pandas DataFrame 얻어내기

들어가며

장고의 매력적인 기능 중 하나는 ORM을 통해 SQL을 직접 작성하지 않아도 된다는 점입니다. 즉, 우리가 파이썬 코드를 작성하면 모델 매니저와 SQL Driver를 거쳐 실제로 SQL문으로 만들어주는 일을 장고가 대신해줍니다.

그리고 장고가 DB를 바라보는 방법은 settings.py파일 내 DATABASE설정 통합니다. 그리고 default로 설정된 데이터베이스를 참고해 ORM을 제공합니다. 하지만 이점은 장고 프로젝트 하나에서 여러 데이터베이스를 바라보며 사용할 경우 문제가 발생합니다.

user mode로 설치한 pip 패키지 PATH에 등록하기

이번 글은 macOS 기준입니다.

pip 유저모드?

파이썬 패키지 매니저인 pip를 사용할 때 종종 이용하는 옵션이 --user, 즉 사용자 디렉토리에 패키지 패키지를 설치하는 방법을 통해 sudo처럼 권한 상승 없이 패키지들을 설치해 사용할 수 있습니다.

이때 차이가 나는 부분은 저 패키지들이 어떤 디렉토리(폴더)에 설치되는지입니다.

ubuntu16에 pyldap 설치하기

Problem

pyldap라이브러리를 이용해 AD Proxy/LDAP서버에 연결하기 위해서는 단순히 pip로만 설치하는 것 외에 사전으로 설치해야 하는 항목이 있다.

만약 설치가 되어있지 않으면 아래와 같이 에러가 난다.

1
2
3
4
In file included from Modules/LDAPObject.c:8:0:
Modules/errors.h:7:18: fatal error: lber.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

Solution

1
2
3
4
5
6
sudo apt install python3-dev # python3
sudo apt install python3-pip # python3 pip3
sudo apt install build-essential # for c/cpp build
sudo apt install libsasl2-dev
sudo apt install libldap2-dev
sudo apt install libssl-dev

apt로 위 라이브러리 설치 후 아래와 같이 pip3으로 pyldap을 설치하면 된다.

1
pip3 install pyldap

django에 MSSQL 연결하기

이번 글은 macOS에서 개발하는 경우입니다.

Django와 MSSQL, 그리고 개발 환경이 macOS라면 상당히 연결해 사용하기 어려운 조합입니다.

Django에서 MSSQL을 지원하는 라이브러리는 몇가지 있지만 Django 공식 문서에서 MSSQL을 지원하는 ORM 라이브러리로 소개하는 django-mssql의 경우 django 1.8까지만 지원하는 문제가 있습니다.

하지만 현재(2018-02-02 기준) 가장 최신 장고 버전은 무려 2.0.2입니다. 상당히 오래된 버전만을 지원한다는 문제가 있습니다.

따라서 다른 라이브러리를 사용할 필요가 있습니다. 이번에는 Python3와 Django2.0을 모두 지원하는 django-pyodbc-azure를 사용합니다.

macOS 터미널에서 사용자이름 숨기기

Before

우리가 macOS를 사용하고 터미널을 켜면 다음과 같이 username@computername와 같은 형식으로 나타납니다.

이처럼 계정과 컴퓨터 이름이 나오는 경우 SSH와 같은 원격 접속시에는 어떤 계정으로 어떤 기기에 접속했는지 알 수 있기 때문에 편리하지만 로컬 개발 컴퓨터같은 경우에는 위와같은 정보가 터미널 앞에 붙어있으면 명령어가 길어질 경우 한 줄 내에 나오지 않을 수 있습니다.

macOS의 터미널 기본 너비는 80자(영문)입니다.

After

위의 이유로 아래와 같이 ~ 표시만 나오게 하면 좀 더 사용에 편리합니다.

Solution

만약 여러분이 “beomi”라는 계정명을 사용중이라면 다음과 같이 .zshrc 파일에 코드를 추가해주세요.

1
2
# DEFAULT_USER
DEFAULT_USER="beomi"

만약 여러분이 계정명이 무엇인지 알지 못한다면 다음과 같이 .zshrc 파일에 코드를 추가해주세요.

1
2
# DEFAULT_USER
DEFAULT_USER="$(whoami)"

여러분이 터미널을 종료하고 다시 켜면 After의 스크린샷처럼 ~만 터미널에 나오게 됩니다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×