Pycharm은 Python IDE  중 상당한 유저를 보유하고 있는 IDE이다.

본인도 메인 PC를 윈도로 사용하면서 tensorflow를 공부할때 코드를 서버에서 실행시키고 있다. (윈도에서 tensorflow가 GPU를 지원하지 않기 때문...) 

매번 sftp같은 프로토콜로 업로드하고, 올리고, ssh로 커맨드를 입력하기는 까다로운 면이 있다. 

하지만 Pycharm pro버전에는 이를 도와주는 강력한 기능이 있다. 그것이 바로 Remote Interpreter 기능이다.

 


Pycharm에서 프로젝트를 생성할 때 이와 같은 화면을 볼 수 있다. 특히 윈도우를 사용하시는 분들은 프로젝트 이름만 변경하고 바로 Create버튼을 누르셨을 확률이 높다. 

Location 밑의 Interpreter라고 적힌 부분의 오른쪽 톱니모양의 설정버튼을 누른 후, 그 중 Add Remote 버튼을 눌러보자.



나타난 창에서 SSH Credentials 를 누르면 SSH를 설정하는 창이 나온다.

내용을 입력해 준 후 OK 버튼을 누르면 인터프리터가 목록에 추가된다.

이 후 Create 버튼을 눌러 프로젝트를 만들어 보자.


만들어지면 아래처럼 익숙한 화면이 보일것이다. 


여기서 우리는 Deployment 를 추가로 설정해 줄 것이다. (이 과정이 없으면 sftp로 일일히 업로드해야한다)

메뉴에서 Tools -> Deployment -> Configuration에 들어가 보자.

왼쪽 위의 초록색 + 버튼을 누르면 ftp, sftp 등을 추가할 수 있는 창이 나온다.



Name은 자신이 식별하기 편한 이름으로 해 주고, Type은 본인이 선호하는 프로토콜을 선택하면 된다. 

참고로 SSH만  설정해 놓으신 분들은 SFTP를 선택하면 서버에 따로 서비스를 설정할 필요 없이 연결이 된다.


이후 등장한 창에서 역시 필요한 내용들을 채워주면 된다.

더욱 중요한 것은 두번째 Mappings 탭에서 Deployment path on server 항목을 설정해 주는것이다. (밑에 사진의 가운데 입력창)



오른쪽 ...버튼을 누르면 서버 디렉터리를 탐색할 수 있다. 이 중 원하는 폴더를 선택하면 된다. 

다 설정했다면 OK버튼을 눌러 프로젝트 창으로 돌아가 보자.

추가적으로 Tools -> Deployment -> Options 에서 Upload changed files automatically to the default server 를 Always로 설정해 두면 자동을 업로드까지 해 준다.


이까지 설정을 했다면 일반적인 파이썬 코드는 문제없이 동작할 것이다. (로컬 컴퓨터의 프로젝트와 동일하게 Run을 할 수 있다.)



하지만 CUDA를 사용하려고 하면 라이브러리를 찾지 못하는 문제가 발생할 수 있다. 

이는 Pycharm이 .bashrc 파일을 적용시키지 않아서 발생하는 문제이다.

이를 위해 한가지 옵션을 더 설정해 주어야 한다. 


메뉴에서 Run -> Edit Configuration에 들어가면 Environment 에 Environment variables 라는 설정이 있다.

...버튼을 눌러 설정창에 들어간 후 Name에 LD_LIBRARY_PATH, Value에 cuda경로/lib64를 입력해 주면 된다.



이 설정까지 마치고 나면 문제없이 파이썬 코드를 원격에서 Run 할 수 있다.

당연히 AWS의 GPU 인스턴스에도 똑같이 적용할 수 있으므로 조금 더 편하게 코딩할 수 있기를 바란다.




부족한 글 읽어주셔서 감사합니다^^

오타, 오류, 질문등을 발견하시면 댓글 남겨주시면 감사하겠습니다 ㅎㅎ


'AI' 카테고리의 다른 글

딥러닝과 행렬  (4) 2016.06.26
Windows 10 build 14332 에 TensorFlow 설치하기  (12) 2016.05.09

딥러닝을 공부하던 중 막상 코드로 짜보려니 햇갈리는 부분이 많아 결국 키보드 대신 펜을 잡기로 하였고, 펜으로 정리된 것을 이곳에 적어보려 한다.


딥러닝 관련 자료를 보면 많은 경우 이러한 그래프를 보게 된다. 


input layer는 입력 레이어, output layer는 최종 출력값을 내어주는 레이어다.

그런데 이를  식을 이용해서 코드로 구현하자니(손으로 써도 마찬가지..) 입력값만 봐도 8개이며 히든 레이어는 무려 9개씩 3층으로 이루어져 있다. 식도 길어질 대로 길어지고 나중에 알아보기도 힘들어진다.

이를 간단히 표현할 수 있는 방법이 바로 행렬이다. (비록 고등 교과과정에서 삭제되었지만....) 행렬을 간단히 소개하면 다음과 같은 개념이다.

일단, 행렬은 이와 같이 정의된다.

내용을 보면,  라는 행렬은 i개의 행과 j개의 열을 가지고 있다. 각 항은 i와 j값으로 표현된다.

프로그래밍 언어를 배웠다면 간단히 배열과 비슷한 형태라고 생각할 수 있다.


행렬과 행렬이 더해질 때는 i와 j 값이 같은 항끼리 더해진다. 

특이한 것은 행렬의 곱샘이다. 위키피디아의 정의는 다음과 같다.



예시는 다음과 같다.


따라서, 입력 레이어는 다음과 같이 행렬로 표현할 수 있겠다.



일단 입력 레이어는 행렬로 표현을 하였다. 그런데 우리가 원하는 식은  형태이다. 

여기서 행렬 연산의 특징이 이용된다. 위에서 소개한 행렬의 곱셈 연산 중 B*A 예시에 주목해 보자.

행렬의 정의에서 알 수 있듯이 앞에 행렬의 행이 1행이고, 뒤의 열이 1열일 때, 이를 곱하면 다항식이 도출된다.

다만, 곱할 때 앞 행렬의 행의 수와 뒷 행렬의 열의 수가 같지 않으면 (혹은 반대) 행렬의 곱샘은 정의될 수 없다.

이 점에만 주의하면 행렬로써 딥 러닝 그래프를 표현할 수 있다.



간단한 예제 코드를 살펴보며 행렬로 표현해 보자.



이 코드는 XOR을 학습하는 코드이며 tensorflow를 이용하였다.


XOR을 수행하기 위해서는 2가지의 값이 필요하다. train.txt 에는 해당되는 데이터가 저장되어 있다.


코드에서 6, 7번째 줄이 이 데이터들을 읽어와 x_data와 y_data에 저장해 주는 역할을 한다.


코드의 15번째 줄부터 22번째 줄까지를 보자. 


이부분이 weight값을 행렬로 생성하는 곳이다. tf.random_uniform 함수는 제일 처음 인자의 형태로 행렬을 만들고, 각 항들을 2번째 3번째 인자 사이의 값들 중 임의의 값으로 채운다.

즉, 15번째 줄은 2*5 행렬을 생성하고, 각 항들을 -1부터 +1 사이의 값들 중 임의의 값으로 채운다는 것을 의미한다


처음 2*5 행렬을 생성한 이유는 입력 레이어에서 입력받는 값이 2개임으로 1*2 행렬을 만들어 전달하기 때문이다.

행렬을곱할 때 앞 행렬의 행의 수와 뒷 행렬의 열의 수가 같지 않으면 (혹은 반대) 행렬의 곱샘은 정의될 수 없기 때문이다. 


이제 33번째 줄을 보자. 입력값인 X행렬과 w1행렬을 곱하고, 바이어스 값을 더한 후 이에 대해 relu 연산을 수행한다.

괄호 안쪽부터 차례대로 따라가보자.


우선 행렬의 곱을 수식으로 나타내면 다음과 같다.

이를 연산하면 다음과 같다.



결과적으로 열의 갯수가 5개인 행렬이 생성된다.


다음으로 바이어스 값을 더하게 된다. 바이어스 값은 24번째 줄에서 열의 갯수가 5개인 행렬로 정의되어 있다.

앞서 곱연산 후 나온 행렬의 크기가 1*5임으로 각각의 식에 바이어스 값을 더하려면 바이어스도 1*5 크기여야 한다.


결국 덧샘 연산까지 마친 후 도출되는 행렬은 열이 5개인 행렬이다. 즉 1*5인 행렬이다. 1*2 행렬과 2*5 행렬을 연산하여 1*5 행렬을 얻어낼 수 있게 되었다. 

더불어  형태의 식도 얻을 수 있게 되었다.(물론 연산중에는 실제 값들이기때문에 계산이 완료된 상수값이다)


34~40번째 줄은 각각 16~22 번째 줄과 25~31번째 줄의 weight 와 바이어스 값에 대해 비슷한 연산을 수행한다.

그렇게 출력 레이어 직전에는 100개의 계산결과가 나오게 된다. 그리고 마지막 출력 레이어에서 이를 곱연산을 통해 모든 항을 더한 값을 출력한다.


딥러닝에서는 위와 같이 상당히 많은 weight 와 바이어스 값들을 이용한다. 이때문에 1차식으로 일일히 이를 구현하는것은 노가다도 그런 노가다가 없으며, 나중에 코드를 다시 볼 때에도 상당히 불편해진다. 

어찌된 이유든 딥려닝에서는 행렬을 사용하여 코드를 구현하고, 결국 수학을 모르면 코드를 짜다가도 햇갈린다;;





혹여나 이글을 읽으시는 분들은 햇갈리실 일이 없길 바라며, 서술 중 잘못된 부분이 있으면 지적 부탁드립니다ㅎㅎ

'AI' 카테고리의 다른 글

Pycharm 원격 빌드 설정하기  (8) 2016.07.25
Windows 10 build 14332 에 TensorFlow 설치하기  (12) 2016.05.09

Windows 10 이 공식적으로 bash를 지원할 계획이라는 소식을 완전히 잊고 지내고 있을 무렵, 

딥 러닝에 대해 공부해보려고 TensorFlow, Caffe 등을 사용설치해 보고 있었다.
서브시스템인 맥으로 Tensorflow를 공부하고 있던 터라 GPU 가속을 한번 해보고 싶어 우분투를 설치하려 하고 있었다.

그 순간 다시 기억이 났다. 윈도우에서 '곧' bash를 정식으로 지원할 거라고... 그것도 우분투를 통째로 흡수한 형태로..

서론은 여기까지 하고 설치한 과정을 한번 적어보았다.


우선, 빌드 14316 이상의 Windows 10 이 있어야 한다(Pro, Home, Enterprise 등의 에디션은 상관없다고 한다). 

이를 위해서는 Insider Preview Program 에 참가하여 Preview 빌드를 받아야 한다. (여기서 받자)

주의할 점은, Insider Preview 는 말그대로 프리뷰이다. 베타버전임으로 매우 불안정하다. 매인 OS로 쓰기에 적합하지는 않을 터이니 파티션을 하나 더 만들던가, 가상머신을 이용하도록 하자. (필자는 가상머신을 이용하였다.)


 

Preview 빌드를 받는곳에 들어가서 스크롤을 조금 내리면 Select Edition 이라는 드롭다운이 나타난다. 필자는 Pro(아무 글자가 없음)  버전을 사용하였고, 빌드는 가장 최신인 14322버전을 선택하였다. confirm을 누르면 언어 선택하라고 나온다. 원하는 언어를 선택하자. 

다음으로 64bit 인지 32bit인지를 물어본다. 원하는 것을 클릭하면 드디어 다운로드가 시작된다.


 빌드는 ISO 형식으로 다운로드 된다. 별도의 파티션에 설치하여 부팅한다면 일반적인 윈도우 설치 과정과 동일하게 진행하면 된다.

가상머신에서 사용할때도 여타 OS와 다를것 없이 순조롭게 부팅&설치가 된다.


필자는 Hyper-V 와 Virtualbox 가장 최신 버전에서 설치를 해 보았다. 둘 다 무료이니 편한것을 선택하자. (Hyper-V 보다는 VirtualBox가 기능은 많다. 또한 Hyper-V  사용시에는 다른 VM 소프트웨어에서 64bit 게스트 운영체제를 부팅할 수 없으니 주의해야한다.)



운영체제 설치가 순조롭게 끝났다면 윈도우에 bash를 설치해야 한다.

우선, 설정->업데이트 및 복구->개발자용 에 들어가서 '개발자 모드'에 체크해 준다(스샷 참고).


다음으로, 제어판(설정과 다르다)->프로그램 및 기능->Windows 기능 켜기/끄기 에 들어간다


나타난 Windows 기능 이라는 창에서 'Linux용 Windows 하위 시스템(베타)'에 체크하고, 확인을 클릭해 준다.(베타 운영체제의 베타?)

무언가 설치한 후에 PC를 재시작 하고 나면 끝이 아니라(하핳)

cmd(명령 프롬프트)에 들어가서 bash를 입력해 준다.

무언가 ????가 많이 나오는데 글자가 깨지는것 같다. [Y/N]을 물으면 y를 한번 입력해 준다.

잠시 기다리면 설치가 완료되고 bash로 넘어간다. 설치 과정에서 꽤 오래 멈춰있을 수 있는데, 몇 분 정도 걸리는 것이 정상이다.


bash에 들어왔으니 이제 Tensorflow 를 설치해 보자.


다른것들을 설치하기 전에 sudo apt-get update를 한번 해 주고 넘어가자.


공식 가이드 의 방법 중 필자는 pip를 사용하여 설치하였다.


우선 pip와 여타 툴들을 설치한다. (Python은 최신으로 설치되어 있다.)

sudo apt-get install python-pip python-dev


설치가 완료되면 Tensorflow를 설치하자 (cpu only 버전. GPU enabled 버전은 다른 포스트로 공유할 예정이다)

sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl


사실 Tensorflow 설치는 이게 끝이다..

이후 bash에서 python 을 실행한 후 공식 테스트 예제(?)를 따라하면 정상적으로 동작한다

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




MS의 왠지모를 자비(?)덕분에 윈도우에서도 Tensorflow를 사용할 수 있게 되었다. 

참고로, bash의 파일시스템은 윈도우 파일시스템과 동일한 디렉터리를 가리킴으로 여타 IDE를 사용하기에도 별 문제는 없을것이다.  

GPU enabled 버전은 설치는 성공했지만 가상머신인 관계로 디바이스가 없다는 오류가 나타난다. 

다음에 가상머신이 아닌 실제 PC에서 진행한 후 오늘과 같이 글을 적어 볼 예정이다.





'AI' 카테고리의 다른 글

Pycharm 원격 빌드 설정하기  (8) 2016.07.25
딥러닝과 행렬  (4) 2016.06.26

+ Recent posts