직접 코딩한다거나 셸 명령을 내릴 때는 그나마 괜찮지만 다른 모듈 가져다 쓸 때 프락시 설정하려면 조금 당황스러울 때가 많습니다.


우선 에러 메시지를 잘 보고 urllib을 쓰는지 urllib2를 쓰는지 확인합니다.


urllib을 쓰는 경우라면 다음과 같은 코드를 적당히 집어넣어 줍니다.


import urllib.request


proxy_support = urllib.request.ProxyHandler({'http' : 'http://proxy.info', 

                                             'https': 'https://proxy.info'})

opener = urllib.request.build_opener(proxy_support)

urllib.request.install_opener(opener)


urllib2를 쓰는 경우에도 크게 다르진 않습니다.


proxy = urllib2.ProxyHandler({'http' : 'http://proxy.info', 'https': 'https://proxy.info'})

opener = urllib2.build_opener(proxy)

urllib2.install_opener(opener)


끝.

이런 건 정리해 두지 않으면 나중에 꼭 처음부터 다시 삽질하게 된다.


여기 적혀있는 내용은 2017년 12월 19일 기준이며, Anaconda로 Python 3.6을 깔아놓은 윈도우 7 시스템에 CUDA를 지원하는 그래픽 카드가 설치된 경우를 기준으로 한다. 그리고 텐서플로우 1.4를 깔아서 사용하기로 했다.


혹시 방화벽 때문에 프록시 설정이 필요하다면 conda, pip, git 등에 대해 각각의 프록시 지정 방법을 숙지하고 작업해야 한다.

(conda나 pip는 설정 파일에서 지정해도 되고 아니면 --proxy=https://proxyUsername:proxyPassword@proxy.server.com:port 같은 식으로 명령행 옵션을 줘도 된다. git의 경우는 git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port 같은 식으로 프록시를 설정하면 된다.)


1. CUDA Toolkit 설치

현재 CUDA 툴킷 최신 버전은 9.1이지만, 텐서플로우 1.4에서는 8.0만 지원하므로 (9.1이 깔려있다고 하더라도) 8.0이 안 깔려 있는 컴퓨터라면 8.0을 깔아줘야 한다.

다운로드 주소: https://developer.nvidia.com/cuda-80-ga2-download-archive 여기서 자기 시스템을 클릭클릭하면 다운로드 적합한 버전에 대한 링크가 뜬다.


2. cuDNN 설치

cuDNN도 최신 버전은 7이지만 텐서플로우 1.4에서는 6만 지원하므로 (7이 깔려있다고 하더라도) 6이 안 깔려 있다면 6도 깔아줘야 한다.

다운로드 주소: https://developer.nvidia.com/rdp/cudnn-download 이건 그냥 다운받을 수 없고 nVidia 개발자 프로그램에 가입해야 한다. 뭐 돈 들고 그러는 거 아니니까 잽싸게 가입하고 나서 다운로드 받으면 된다.

설치 방법: zip 파일을 받으면 디렉토리 안에 파일이 몇 개 들어있다. bin 디렉토리에 있는 건 CUDA 툴킷의 bin 디렉토리에 (보통은 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin)에 넣고, include, lib 디렉토리에 있는 것도 마찬가지로 해당되는 디렉토리로 복사해 주면 끝난다.


3. Tensorflow 설치 (https://www.tensorflow.org/install/install_windows 참조)

우선 텐서플로우용 환경을 하나 만든다. 파이썬 3.6을 쓰고 환경 이름은 tensorflow라고 하면 다음과 같은 명령을 쓰면 된다.

conda create -n tensorflow python=3.6

다음과 같이 하여 tensorflow 환경을 활성화한다. (프롬프트 바뀌는 것 확인)

activate tensorflow

그리고 나서 gpu 버전의 텐서플로우를 설치한다.

pip install --ignore-installed --upgrade tensorflow-gpu


4. HDF5, h5py 설치

이건 꼭 필요한 건 아니지만 Keras에서 디스크에 데이터를 저장고 싶다면 설치해야 한다. 그냥 conda 프롬프트나 Anaconda 내비게이터에서 설치하면 된다.

conda install hdf5

conda install h5py


5. graphviz, pydot 설치

이건 시각화에 필요한 모듈인데, 아나콘다에서 바로 설치가 되진 않는다.

pip install graphviz 명령으로 graphviz를 설치한다. 그리고 나서 시스템 PATH에 graphviz의 bin 디렉토리를 추가해야 한다. (그냥 별 옵션 없이 설치하면 C:\Program Files (x86)\Graphviz2.38\bin 이다.)


pydot도 파이썬 3.6에서는 기본 conda로 설치는 안 되고, 대신 pip install git+https://github.com/pydot/pydot-ng.git 라는 명령을 써서 설치해야 한다.


설치가 잘 되었는지 확인하고 싶다면 https://pythonhaven.wordpress.com/tag/pydot/ 여기에 있는 간단한 예제를 실행시켜보자.


6. scipy, matplotlib, PIL, pyyaml 설치

이것저것 하다 보면 PIL이 없어서 에러가 나는 경우가 있다. scipy, matplotlib 같은 건 거의 필수 아이템이니까 설치해야 하고...

scipy, pyyaml은 pip로 케라스를 설치하면 의존성 때문에 자동으로 깔아주는데, 혹시 케라스 설치할 때 UnicodeDecodeError가 나면서 설치가 제대로 되지 않는 문제가 생긴다면 따로 먼저 깔아보자. 나도 UnicodeDecodeError가 나서 잠시 고민했으나, 따로 깔아주니 괜찮았다. 

conda scipy

conda matplotlib

conda install pillow

conda pyyaml


7. Keras 설치

여기까지 하면 케라스 설치를 할 준비가 끝난다. 케라스 설치는 다음과 같은 명령을 내리면 된다.


pip install keras


끝.

간단하게 계산을 한다든가 파이썬 스크립트를 돌릴 때 Jupyter notebook을 띄워서 iPython 환경에서 작업을 할 때가 많습니다. 작업한 내역을 그대로 문서처럼 저장해 뒀다가 나중에 그대로 열어서 보기가 좋기 때문에 노트 겸용으로 쓰기 편하니까요. 


회사에서는 OS 기본 브라우저는 인터넷 익스플로러로 설정해놓고 쓰는데, 이러면 Jupyter notebook을 실행시키면 일단 IE에서 창이 뜨게 됩니다. 안타깝게도 (제가 뭔가 설정을 잘못해서 그런 걸지도 모르지만) IE에서는 Alt-Enter (셀을 실행한 다음 다음 셀에서 삽입 모드로 전환) 기능에 뭔가 문제가 있어서 매번 셀을 실행한 다음에 다음 셀로 내려가서는 한 번 더 엔터 키를 눌러야 삽입 모드로 들어가서 좀 불편합니다. 그래서 크롬에서 새 창이나 탭을 열고 주소를 입력해서 주피터를 시작하는데, 이게 또 하다 보면 귀찮습니다.


그래서 Jupyter notebook 기본 브라우저를 변경하는 방법을 찾아보니 https://stackoverflow.com/questions/35229604/how-to-change-the-default-browser-used-by-the-ipython-jupyter-notebook-in-linux 같은 글이 있더군요. 그래서 그대로 해 봤는데, 파일 경로를 영 못 알아먹는 것 같습니다. 예를 들어 컴퓨터에서 크롬 브라우저 실행파일이 C:\Program Files (x86)\Google\Chrome\Application\chrome.exe 라고 할 때, c.NotebookApp.browser = u'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe' 같은 식으로 설정파일에 지정을 해 줬더니 "No such file or directory: C:/Users/MY_USER_NAME/Files"라는 에러 메시지가 뜹니다. "MY_USER_NAME" 부분은 윈도우 시스템의 사용자 이름이고요. 절대경로 상대경로가 꼬이면서 나타나는 문제가 아닐까 하는 생각은 드는데, 어떻게 해결해야 할지 잘 모르겠더군요.


근데 의외로 간단한 해결책이 있었습니다. 바로 BROWSER라는 윈도우 시스템 변수를 이용하는 거였습니다. 시스템 변수 설정하는 데 가서 BROWSER라는 시스템 변수를 새로 만들고, 그 값으로 iPython에서 사용하길 원하는 기본 브라우저의 주소를 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 같은 식으로 적어주는 거죠. 이렇게 하고 나니 jupyter_notebook_config.py 설정파일에서 따로 브라우저를 지정해주지 않아도 알아서 주피터 노트북이 크롬에서 바로 뜹니다. 물론 webbrowser 모듈의 get 함수 같은 걸로 브라우저에서 뭔가를 띄웠을 때도 마찬가지로 BROWSER 변수에서 지정한 브라우저가 열립니다.


오늘의 삽질기 끝.



어제, 구글에서 TensorFlow라는 딥 러닝 라이브러리를 오픈소스로 공개했습니다. 바퀴를 다시 발명할 필요는 없으니 좋은 도구가 공개되어 있다면 잘 가져다가 쓰면 되겠죠?

저는 파이썬을 깔 때 보통 아나콘다를 주로 사용합니다. 패키지 관리하기도 편하고, 제가 주로 사용하는 패키지가 기본으로 들어가 있기도 해서 편합니다.

아나콘다를 파이썬 3용으로 셋업하셨다면 아마도 파이썬 2용 환경을 만들어야 할 겁니다. Launcher를 실행하시면 창 맨 위에 “Environment: root” 라고 적혀 있을텐데, 여길 클릭하고 “New Environment”를 선택한 다음 Python 2.7을 선택하시고 원하는 환경 이름을 입력합니다. 저는 그냥 “Python2.7”이라는 이름을 선택했습니다.

다행히 벌써 Jonathan Helmuth라는 분이 아나콘다용 텐서플로우 패키지를 만들어 놓았습니다. 주소는 https://anaconda.org/jjhelmus/tensorflow 입니다. 저 페이지에 적혀 있는 명령어를 실행시키면 되는데, 그 전에 파이썬 2 환경으로 설정을 해 놓아야 합니다. 셸에서 "conda-env list" 명령을 내리면 사용할 수 있는 아나콘다 환경 목록이 나오는데, 그 중에서 파이썬 2용 환경을 선택해서 전환하면 됩니다. 저는 "Python2.7"이라는 이름의 환경을 쓰기로 했으니 "source activate Python2.7"이라는 명령을 내렸습니다.

그리고 나서는 그냥 "conda install -c https://conda.anaconda.org/jjhelmus tensorflow" 라는 명령을 실행시키면 알아서 잘 깔아 줍니다.

참 간단하죠?

SciPy는 파이썬용 과학 관련 패키지입니다. 각종 계산에 필요한 라이브러리죠.
SciPy는 보통 배열이나 행렬, 정확한 숫자를 처리하기 위한 NumPy라는 패키지, 각종 플로팅에 유용하게 쓰이는 Matplotlib, Markov chain Monte Carlo용 패키지인 PyMC 같은 패키지들하고 같이 쓰는 경우가 많은데요, http://macinscience.org 블로그 주인장께서 친절하게도 Mac OS X (Leopard 기준)에서 여러 패키지를 함께 빌드해서 설치할 수 있는 셸 프로그램을 배포하고 있습니다. 바로 SciPy Superpack입니다.
http://macinscience.org/?page_id=6 주소로 가셔서 셸 스크립트 파일을 다운로드받은 다음에 터미널에서 실행시키기만 하면 여러 패키지들을 svn에서 최신 빌드를 받아서 설치해 줍니다.
사용자 삽입 이미지

SciPy Superpack을 실행시킨 화면


근데 이걸로 설치하고 나서 syntax highlighting이라든가 자동 인덴테이션 같은 걸 잘 해 주는 iPython 프로그램을 실행시켰을 때 약간 문제가 있습니다. readline 패키지 때문에 생기는 문제인데요, 위에 있는 SciPy Superpack 페이지에 있는 댓글을 뒤져보면 해결책이 있습니다.
저도 그걸 따라하고 나니 iPython을 쾌적하게 실행시킬 수 있게 되더라고요... :)

cd /Library/Python/2.5/site-packages/
mkdir obsolete
mv pyreadline-1.6.svn.dev_r3066-py2.5.egg obsolete/


이렇게 해 주면 끝입니다. 간단하죠?
파이썬은 컴퓨터 프로그래밍 언어의 일종으로, 간단한 스크립트에서 복잡한 프로그램까지 광범위한 영역에서 사용할 수 있는 언어입니다. 만들어진지는 얼마 안 됐지만 매우 빠르게 확산되었고, 프로그램의 OOP-친화성이라든가 코드의 깔끔함 면에서 볼 때 펄보다 더 나은 것 같고, 최적화, 스피드 면에서도 펄 못지 않습니다.

실험실에서 제가 요즘 사용하고 있는 장비는 Windows 98을 OS로 하는 컴퓨터로 제어하게 되어 있습니다. Windows 98을 쓸 수 밖에 없는 (NT kernel로는 실시간 제어가 상당히 힘들고, 이 시스템에 워낙 구형인 EISA 인터페이스를 사용하는 카드를 써야만 하는 관계로 컴퓨터 업그레이드 자체도 거의 불가능한 상황입니다. 이 컴퓨터 죽으면 실험 못 합니다. ㅠㅠ) 시스템이고 그렇다 보니 프로그램도 대부분 Visual C++ 6점대 버전으로 짜야만 합니다. 랩뷰를 쓸 수는 있는데, 랩뷰만 돌려도 시스템이 버벅거리죠...

이 컴퓨터에는 어디선가 주워온 NuDAQ ACL-8111이라는 저가, 저성능의 데이터 수집(DAQ; Data Acquisition) 카드가 하나 달려 있습니다. (NI DAQ 짝퉁스럽습니다ㅠㅠ) 주로 아날로그 신호를 컴퓨터에서 사용할 수 있는 디지털 신호로 바꾸는 ADC 기능만 활용하고 있는데요, 12-bit single ended 신호만 받을 수 있어서 정밀한 실험 정보를 수집하는 용도로 쓰기에는 무리가 있지만 간단하게 압력, 온도 같은 정보를 가져오는 데는 그럭저럭 쓸만합니다.

원래 이 DAQ 카드와 랩뷰를 이용해서 데이터를 기록하고 있었는데, 랩뷰만 돌려도 버벅거리는 어이없는 사양과 시간이 지남에 따라 시스템 클럭이 늦어지는 문제 때문에 시간에 따라 변화하는 값들을 기록하는 데 아쉬움이 많이 느껴져서 뭔가 다른 방법이 없을까 고민을 했습니다.

그렇다고 Visual C++로 프로그램을 따로 짜자니 시간도 좀 아깝고, Visual C# Express 같은 것에 익숙해져버린 상황에서 Visual C++ (그것도 6.0으로 ㅠㅠ) 프로그래밍을 하자니 속이 막 갑갑해졌습니다.

사용자 삽입 이미지

98년도 아니고 08년도에 비주얼 C++ 6.0이라니... ㅠㅠ


그러던 차에 요즘 짬 날 때마다 파이썬도 만지작거려보고 있겠다, 파이썬으로 DAQ 카드를 건드리는 걸 한 번 해 보면 재밌겠다는 생각이 들었습니다.

별 흥미를 못 느끼실 분들을 위해 접습니다. 관심 있으신 분은 아래 "자세히 보기..."를 클릭해서 보세요... :)


+ Recent posts