레이블이 setup인 게시물을 표시합니다. 모든 게시물 표시
레이블이 setup인 게시물을 표시합니다. 모든 게시물 표시

2017년 5월 14일 일요일

WannaCry 랜섬 웨어 예방하기

요즘 랜섬웨어가 유행한다고 하네요 아래의 처치로 일차적으로 보안 취약점 하나를 막을 수 있으니 따라해보시길 권합니다.

1. 랜섬웨어 방지 대국민 행동


1) PC를 켜기 전 네트워크 단절
 - 랜선 뽑기
 - 와이파이 끄기

2) 감염 경로 차단
 - 방화벽 설정 변경

3) 인터넷 재연결 후 보안 업데이트
 - 윈도우 보안 패치 실행
 - 백신 프로그램 업데이트

2. 파일 공유 기능 해제 - 방화벽 설정


Window 방화벽에서 SMB에 사용되는 포트 차단

1) 제어판 -> 시스템 및 보안
2) Windows 방화벽 -> 고급 설정
3) 인바운드 규칙 -> 새규칙 -> 포트 -> 다음
4) TCP -> 특정 로컬 포트 -> 139,445 -> 다음
5) 연결 차단 -> 다음
6) 도메인, 개인, 공용 체크 확인 -> 다음
7) 이름 설정 -> 마침

출처: 한국인터넷진흥원





2017년 2월 8일 수요일

Docker나 가상머신 없이 Window에서 TensorFlow 설치하기: TensorFlow를 Python IDE에서 사용하기

앞선 글을 따라서 TensorFlow도 잘 깔았고, 이제 본격적으로 코딩을 해보고 싶은데 돌아가는지 확인했듯이 명령창에서 python을 실행하여 코딩을 할 수도 없는 노릇이고...원래 코딩을 하듯이 jupyter notebook에서 코드를 실행하거나 pycharm과 같은 IDE에서 돌리고 싶은데 어떻게 해야하는가?.....를 오늘 알아보겠습니다. 일단 저는 IDE를 새로 깔지는 않은 관계로 Anaconda를 깔면 같이 딸려오는 spyder를 사용하겠습니다.

Anaconda 가상환경에서 IDE 실행하기 

명령창에 activate (가상환경이름) 을 실행하여 가상환경으로 들어가고 난 후, 원래 IDE를 실행하던대로 더블클릭해서 spyder를 켰는데 import tensorflow as tf 라고 한 것을 전혀 인식하지 못하고 import error가 뜰 것입니다. 

아니 뭐지?!

..라 하시겠지만 당연한 결과입니다. 가상환경 "위에서spyder를 실행해주지 않았기 때문에 그런 문제가 생기는데요 사실 Anaconda에서 가상환경으로 따로 설정을 해주지 않고 global에 바로 TensorFlow를 설치했다면 위와 같이 IDE를 실행하셨더라도 별다른 오류가 나지 않았을 것입니다. 이미 global(default 환경)에 TensorFlow가 깔려있기 때문이죠.

즉, 가상환경에 들어가신 후, 명령창에서 spyder 라고 실행시켜서 들어가시면 아무 문제 없이 TensorFlow가 import되는 것을 보실 수 있습니다. 혹은 자주 이렇게 실행하다보면 Window 검색에 뜨더군요. 아래 그림과 같이 spyder의 경우는 가상환경 path preference가 고정된 채로 바로 클릭하여 실행하실 수도 있습니다.


그러면 귀찮게 왜 굳이 virtualenv를 만들어서 설치를 하는지에 대해 의문이 들 수 있겠죠. 뭐 추가로 윈도우에서 Python을 이용한 다른 응용을 개발하지 않고 기존 시스템과의 충돌이 걱정되지 않는다면 global에 설치하셔도 아무 문제 없습니다. 

다만, 가상환경을 만들면 기존 시스템과의 충돌을 막을 수 있고 (Python version 등) 가상환경을 지워주기만 하면 깔끔하게 모든 dependency가 삭제되므로 가상환경 위에서 설치하는 것을 권장하는 것으로 보입니다. 

아 참고로 가상환경 삭제는 다음과 같이 하시면 됩니다. 
conda remove tensorflow35

* Pycharm의 경우는 시험해보지 않았습니다만 명령창에서 spyder와 비슷하게 실행하거나 따로 Pycharm을 실행하신 후 가상환경 path 설정을 preference에서 해주면 될 것입니다.
** 구글 검색으로 나온 관련있어 보이는 링크를 하나 첨부하겠습니다. (PyCharm:: virtualenv+pythonz 환경 추가하기)

Anaconda 가상환경에서 jupyter notebook 실행하기

같은 원리로 jupyter notebook도 가상환경 위에서 실행해주시면 아무 문제 없이 import가 되는 것을 보실 수 있습니다. 
(tensorflow35) C:\Users\Jaejun Yoo> jupyter notebook

Trouble shooting

간혹 IDE나 Jupyter notebook에서 다음과 같은 에러가 뜰 경우가 있는데요....
InternalError: Blas SGEMM launch failed : a.shape=(3, 3), b.shape=(3, 1), m=3, n=1, k=3 [[Node: MatMul_3 = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/gpu:0"](_recv_Placeholder_2_0/_1, Variable_3/read)]]



지금까지 제가 겪어본 바를 바탕으로 말씀드리자면 짐작되는 이유가 세 가지 있습니다.
  1. Jupyter notebook과 IDE가 동시에 켜져있을 경우 
  2. kernel restart가 필요한 경우
  3. tf.one_hot(~) 함수를 사용하고 있는 경우

sol1) 첫 번째 경우라면 둘 중 하나를 끄고 사용하셔야합니다. Kernel이 뭔가 충돌을 일으키는 것으로 보입니다.

sol2) 첫 번째 경우가 아닐 경우 다음으로 시도해볼 수 있는 것이 두 번째와 같이 kernel restart를 해보는 것입니다. IDE와 달리 Jupyter notebook에서는 쉽게 restart가 가능하지만 가장 확실한 것은 아예 IDE 혹은 Jupyter notebook을 종료하고 재시작 해보는 것입니다.

* 이 sol3의 경우 tf 1.0.0.rc2에서 버그가 해결되었습니다.!!
sol3) 마지막으로 tf.one_hot() 함수를 사용하고 있을 경우 입니다. 무슨 이유인지는 정확히 모르겠으나 TensorFlow 1.0.0.rc1(2017.02.04 버전)까지 수정 안 되어있는 버그인 것으로 보입니다. gpu 버전의 tensorflow에서 address가 충돌을 일으키거나 assign이 잘 안되는 것 같은데 자세히 살펴보지는 않았습니다. tensorflow github의 issue로도 등록되어있는 문제인데 일단 우회하는 방법들이 몇 추천되어있습니다. 제가 이 것을 몰라서 매우 삽질을 하였는데....orz....스스로 발견한 one_hot encoder function을 안 쓰고 우회하는 방법을 세 가지 정도 정리해보았으니 필요하시면 제 github의 three ways to avoid tf.one_hot function repository를 찾아주시면 됩니다.

error 관련 참고 링크



2017년 2월 2일 목요일

Docker나 가상머신 없이 Window에서 TensorFlow 설치하기: tensorflow-gpu + Window (7,10) 설치 가이드입니다.

Tensorflow Window 버전이 드디어 나왔습니다! (물론 이미 작년 얘기이지만...거의 나오자 마자 깔았으므로 ㅎㅎ) 2016년 11월 29일에 tensorflow 0.12.0-rc0 버전이 릴리즈되면서 Ubuntu에서만 가능하던 GPU 버전이 설치가 가능해졌습니다. 그 이후에 벌써 update가 여러번 진행되어서 현재 (2017.2.10일) 기준 1.00.rc2 버전이 나와있습니다. 그럼 간단히 설치방법부터 동작 확인하는 것까지 정리해보겠습니다.

그림 1 TensorFlow Window버전 출시 관련 release note



설치방법

Prerequisites

  1. CUDA 8.0.44 -win 10 설치
  2. CuDNN 5.1 설치
본격적으로 TensorFlow를 설치하기 전에 먼저 설치를 해줘야할 패키지들이 있습니다. 그림 1 TensorFlow Window버전 출시 관련 release note에서도 보실 수 있듯이 Tensorflow 0.12.0 RC0 버전부터는 GPU acceleration을 위해 CUDA 8.0과 cuDNN 5.1(NVIDIA에서 제공하는 Deep learning을 위한 추가 라이브러리 package)을 권장하고 있습니다. 
CUDA 8.0은 Network 버전보다 local 버전으로 1.2기가 정도의 파일을 직접 받아 설치하는 것이 훨씬 빠릅니다.
링크: https://developer.nvidia.com/cuda-downloads
CuDNN은 NVIDIA에서 회원가입을 하고 다운을 받으시면 됩니다. 다운받고 나면 그냥 압축 파일인데 이를 풀어서 CUDA 설치 경로에 붙여넣어 덮어씌워주시면 됩니다.
링크: https://developer.nvidia.com/cudnn
CUDA 설치경로: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

Anaconda Installation

위의 패키지들을 모두 설치하였다면 본격적으로 TensorFlow를 설치할 준비가 된 것입니다. Anaconda를 이용하여 설치를 진행하도록하겠습니다. Anaconda는 Python distribution으로 여러 유용한 패키지들을 포함하고 있습니다. 가상환경을 만들 수도 있는데 이를 통해 Python 버전 간의 충돌을 막을 수도 있고 매우 편리합니다. Python이 아직 깔려있지 않은 분도 Anaconda를 깔면 자동으로 path 정리 등이 되므로 그냥 Anaconda를 깔아서 사용합시다.

사실 Tensorflow.org에서 설치 가이드를 확인하시면 Anaconda installation이란 part가 있고 앞부분은 이를 따라하시기만하면 됩니다만...이 글은 무작정 따라하기 방식으로 포스팅하기로 했으므로 한글로 다시 정리해드리겠습니다.
먼저 크게 다음과 같은 흐름으로 설치가 진행됩니다.

  1. Anaconda 설치
  2. Conda 가상환경 설정
  3. 가상환경을 activate하고 TensorFlow를 설치
  4. 앞으로 TensorFlow 실행하기 전에 가상환경을 먼저 activate
  5. 가상환경에 ipython(jupyter notebook) 등의 부가적 package 설치

1번부터 차근차근 해보겠습니다. Anaconda에도 Python 버전에 따라 두 가지 버전이 있는데 일단 설치링크를 따라가서 Python 3.5 버전을 설치합니다.
* 아직까지는 TensorFlow가 Window에서는 Python 3.5만 지원하기 때문에 Anaconda가 업그레이드 된 경우 아카이브로 들어가셔서 Anaconda3-4.2.0-Windows-x86_64 버전을 받아 깔아주시면 됩니다 (20170206 기준 Anaconda가 Python 3.6으로 업그레이드 되었네요).

2번의 가상환경이 무엇인지는 cs231n 수업 환경설정에 관한 글 중간(3번)에 설명이 되어있습니다.  저는 TensorFlow Python 3.5 버전을 설치를 할 것이기 때문에 tensorflow35라는 이름으로 가상환경을 만들어주었습니다.
conda create -n tensorflow35 python=3.5 anaconda

앞으로는 tensorflow를 사용할 때마다 cmd 창을 열어서
activate tensorflow35
deactivate tensorflow35
라고 명령어를 실행해주시면 가상환경에 접속(activate)하거나 나올 수(deactivate) 있습니다.

그럼 이제 이 가상환경을 활성화한 후 이 위에 TensorFlow-GPU 버전을 설치해보겠습니다. conda를 이용하면 이 역시도 매우 편하게 설치가 가능합니다.
conda install tensorflow-gpu
*현재 Anaconda version이 업그레이드 되면서 conda로 install할 경우 package가 없다는 오류가 뜨는 경우가 발생하는 것 같습니다. 그런 경우 pip을 사용하여 깔아줍시다.
pip install tensorflow-gpu
이후에 새로운 버전이 나오면 업데이트해주는 것 역시도 매우 간단합니다. (아래 예시는 2017.02.10 기준 가장 최신인 1.0.0.rc2 업데이트입니다.)
pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.0.0rc2-cp35-cp35m-win_amd64.whl

현재 자신의 TensorFlow 버전을 알고 싶다면 TensorFlow를 설치해준 가상환경으로 들어가서
pip freeze
라고 하면 설치된 프로그램들의 버전이 모두 나옵니다. 이 방법 외에도 cmd에서 python을 실행한 후 import tensorflow as tf; print(tf.__version__)이라고 실행하면 자신의 현재 버전을 바로 알 수 있습니다.

설치 확인

이제 설치가 완료되었으면, TensorFlow가 잘 동작하는지 확인할 필요가 있겠죠? cmd창에서 python을 실행시킨 후에,
python
아래와 같이 script를 실행해 봅니다. 정상적으로 설치가 완료되었다면 다음과 같이 결과가 나올 것입니다.

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42

* (string 앞에 b가 찍히는 이유) Hello, TensorFlow 앞에 'b'가 붙는 것은 는 python 버전 때문인 것 같습니다. 리눅스 python 2.x 버전에서는 그렇지 않다고 하네요.

이로써 TensorFlow GPU 버전 윈도우 설치가 완료되었습니다. 모두 즐거운 코딩되시길 ㅎㅎ 다음 번에는 jupyter notebook과 window IDE에서 python code를 돌리는 것에 대해 글을 작성해보겠습니다.

다음 읽을거리



2017년 1월 5일 목요일

cs231n Convolutional Neural Network for Visual Recognition - 시작하기 (환경설정)

Machine learning 공부를 기초부터 하기 좋은 자료로 stanford의 cs231n 강의가 있습니다. 아주 최근 강좌(2016 winter)까지도 youtube에 공개되어있고 상당히 친절한 강의라서 시작하는 사람들에게 추천해주기 딱 좋습니다.

사이트에 course lecture note들도 아주 충실하고 실제로 assignment들을 다운받아 기본적인 개념에 대한 코딩을 직접해볼 수도 있는데다 워낙 유명한 강의라 이미 다른 사람들이 시도한 solution들도 쉽게 찾아볼 수 있어서 혼자 공부하기에 최적의 강의라고 생각합니다.

그래서 기초를 다질 겸, 나도 한 번 처음부터 material들을 읽고 숙제들을 하나씩 해봐야겠다는 생각을 하고 시작해봤는데...이게 은근히 '시작' 자체를 하기 위해서 필요한 환경설정이 필요해서 조금 고생했습니다 (레딧에서도 내가 겪은 류의 어려움에 대해 질문하는 글들이 있는 걸 보면 나만 그런 것도 아니다...).

딱히 거창한 것은 아니지만 의욕을 가지고 공부를 하려했는데 이래저래 환경설정으로 막히면 힘이 빠질 수 밖에 없죠 (뭐든지 환경설정이 제일 짜증난다.).
그렇다고 또 어떻게 하면 좋을 지 일괄적으로 정리해 둔 자료는 아무리 찾아봐도 없기에 아예 '무조건 따라하기' 방식으로 내가 환경 설정한 것들을 정리해보았습니다 (윈도우 OS 기준).

1. 먼저 사이트의 글을 읽습니다! 
1번 숙제를 하기 위해 http://cs231n.github.io/assignments2016/assignment1/에 들어가면 setup을 하는 법이 꽤 친절히 나와있는 편입니다. 터미널을 사용하는 법에 대해 먼저 소개가 되어있는데 우리는 스탠포드 학생이 아니고 숙제를 다운받아 개별적으로 해볼 것이기 때문에 'Working locally' 항목을 보면 되겠습니다.

먼저 시키는대로 먼저 code zip 파일을 다운 받고, 옵션이 2가지가 주어지는데, 그 중 저는 아나콘다를 사용했습니다. 사이트에서도 이 방법을 추천하는데 아나콘다를 깔고 사용하면 각종 환경설정을 하는 것이 훨씬 간단하고 수월해지기 때문입니다(...라고 설명합니다 ***).

* 사실 파이썬을 모르면 아나콘다도 뭔가 싶은데 이건 그냥 파이썬을 사용하기 위해 편하게 해주는 일종의 도구라고 생각하면 됩니다. 아나콘다에 대한 설명과 까는 방법은 이 글의 목적을 벗어나기 때문에 다음 링크로 갈음하겠습니다. (http://bigdatapy.tistory.com/105)
** 아나콘다에 파이썬 버전을 선택할 수 있는데 저는 3.5버전을 선택했습니다.
*** "Once you install it you can skip all mentions of requirements and you’re ready to go directly to working on the assignment."라고 적혀있지만 정말 그랬으면 내가 이 고생을 했을리가 없지... 

2. Jupyter notebook 설치
다운받은 code zip을 원하는 곳에 풀고 주소를 기억해둡니다.
cmd창을 킨 다음, conda install jupyter 해서 jupyter notebook이란 것을 사용할 수 있도록 설치를 하겠습니다.


저는 이미 깔려있기 때문에 이미 설치가 되어있다는 메시지가 뜹니다. Jupyter notebook은 내 노트북에서 웹페이지를 기반으로 local하게(인터넷이 되지 않아도) python code를 수정하고 실행해볼 수 있게 해줍니다. 기본적으로 모든 assignment 문서가 notebook으로 작성, 실행해보고 제출하게 되어있기 때문에 필수적인 도구입니다.

3. python 2.7버전 가상환경 만들어주기 
cs231n 사이트는 python을 잘 모르는 사람들을 위한 tutorial를 제공합니다. 그 tutorial에도 나와있지만 강좌에서 사용하는 모든 코드는 파이썬 2.7버전에서'만' 돌아가게 되어있습니다. 

웃긴게 프로그램이든 언어든 버전이 한 단계 올라가면 앞에 버전들을 잘 포괄해서 가져가는 것이 보통인데 파이썬은 3.~버전이 2.~버전과 사용하는 문법이 매.우. 다르죠. 따라서 아나콘다를 파이썬 3.5 버전으로 깐 우리는 jupyter notebook에서 python2 kernel로 돌아가게 하기 위해 새로이 환경을 설정해줘야합니다. 
---
There are currently two different supported versions of Python, 2.7 and 3.4. Somewhat confusingly, Python 3.0 introduced many backwards-incompatible changes to the language, so code written for 2.7 may not work under 3.4 and vice versa. For this class all code will use Python 2.7.
You can check your Python version at the command line by running python --version.
---

* 처음부터 아나콘다를 버전에 맞게 설치해주면 되지 않느냐? 하는 사람들은 ... 음 그래도 됩니다. 근데 제가 그렇게 해보지 않았고.... 
** 아나콘다를 파이썬 3.5 버전으로 깔았다고 해도 그냥 중복으로 아나콘다 파이썬 2.7버전을 또 깔면 되는 것이 아니냐? 하실 수 있는데 그러면 안 됩니다. 그냥 설치를 하면 충돌이 난다고 하네요(http://conda.pydata.org/docs/py2or3.html#create-a-python-2-7-environment).

바로 위에 소개한 링크의 글이 알려주는대로만 하면 가상환경 설정이 끝나고 아마도 아무 문제 없이 jupyter notebook에서 코드들이 실행될 것입니다만.... 그래도 무조건 따라하기 형식이니 한 스텝씩 여기에 정리해보겠습니다.

실행창에 
conda create -n py27 python=2.7 anaconda
라고 치면 가상환경의 이름을 py27이라고 만들어줄 것이고 (맘대로 바꿀 수 있다) 설치 후 내가 가지고 있는 가상환경을 다 확인해보고 싶다면
conda info --envs
라고 치면 목록이 쭉 나옵니다. (그 중에 새로 만든 py27이 포함되있는 것을 확인할 수 있습니다.)

이제 만들 가상환경으로 들어가고 싶으면, 
activate py27
이라고 치면 실행창에서 (py27) C:\Users\Jaejun Yoo> 와 같이 앞에 (py27)이 붙는 것을 볼 수 있습니다. 
이제 우리는 python 2.7 버전을 사용하는 가상환경에 들어와 있는 것입니다. 아마도 아나콘다를 2.7버전으로 깔았고 python 3.5 버전이 필요할 경우에도 비슷한 방식으로 할 수 있을 것으로 보입니다. 

4. Jupyter notebook 켜기
단순한 것인데 처음인 사람들은 당황할 수 있는 것이 jupyter notebook을 키는 것입니다. 그냥 명령창을 켜서
jupyter notebook
이라고 치면 내가 원하는 곳이 아닌 'C:\Users\Jaejun Yoo'과 같은 Default 폴더에서 notebook이 실행되는 것을 볼 수 있습니다. 따라서 아까 기억해뒀던 code zip을 풀은 directory 주소로 들어가서(cd ~), jupyter notebook을 켜면 이제 내가 풀고 싶은 assignment1 'knn.ipynb'를 열어서 시작할 수 있는 것을 볼 수 있습니다. 
여기서 말하는 jupyter notebook은 강의에서 제공하는 tutorial 글 중 IPython notebook 사용법과 동일하니 참고하시면 됩니다. 

5. 데이터 받기
마지막으로 데이터를 받아야하는데..!
Download data: Once you have the starter code, you will need to download the CIFAR-10 dataset. Run the following from the assignment1 directory:
cd cs231n/datasets
./get_datasets.sh
윈도우 OS기반이기 때문에 bash shell을 다음과 같이 명령창에서 직접 수행 할 수가 없습니다. (다른 우회적 방법은 있겠지만) 하지만 .sh 파일이 해주는 것이 그냥 링크로 접근하여 다운로드를 시키는 것이므로 해당 get_datasets.sh 파일을 txt 파일로 읽어 링크만 따오면 됩니다. 아마 다음과 같이 보일텐데... 
즉, http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 이 링크를 들어가면 알아서 다운로드가 진행됩니다. cs231n/datasets 폴더 안에 .tar 파일을 받아서 zip 파일 풀 듯이 풀어주면 됩니다. 

6. 기타
혹시나 이러고서도 'knn.ipynb'에서 error가 난다면 보통 패키지가 import가 안 되어 있는 경우일 것으로 보입니다. 흔히 다음과 같이 에러 메시지가 뜨는데
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-3-6d53d297f0cc> in <module>()
3 import random
4 import numpy as np
----> 5 from cs231n.data_utils import load_CIFAR10
6 import matplotlib.pyplot as plt
7
D:\DaumCloud\[3] Study\[0] cs231n CNN for visual recognition - stanford\assignment1\cs231n\data_utils.py in <module>()
2 import numpy as np
3 import os
----> 4 from scipy.misc import imread
5
6 def load_CIFAR_batch(filename):
ImportError: No module named scipy.misc

이 때는 그냥 conda install (없다는 package 이름) 해주면 되겠습니다. 

그러면 모두들 즐거운 공부하시길~

* 만약 이래도 안 되는 것이 있다면 댓글을 남겨주세요 제가 아는 범위라면 최대한 도와드리려고 노력해보겠습니다.