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' 카테고리의 다른 글

Pycharm 원격 빌드 설정하기  (8) 2016.07.25
딥러닝과 행렬  (4) 2016.06.26
Windows 10 build 14332 에 TensorFlow 설치하기  (12) 2016.05.09
  1. 장현진 2016.07.27 11:21

    EC2를 스팟 인스턴스로 사용하다보니, 원격지 IP가 계속 변경되는데, 이럴 때 수정할 수 있는 방법이 있으면 알려주실 수 있을까요??

    • ghatdev 2016.07.27 16:45 신고

      인터프리터 설정에서 기존 인터프리터를 편집하시면 가능하십니다. 혹시 도메인을 가지고 계시다면 ddns를 이용해보세요 ㅎㅎ

  2. astriker 2016.08.22 08:10

    글 잘봤습니다.
    궁금한게 한가지 있는데, pycharm으로 tensorflow 코드 작성시 intelligence기능으로 인한 import관련 오류가 안나는지 궁금합니다. code실행은 서버에서 하더라도 local 소스파일 작성할때 import 오류 강조가 나타날 것 같아서 질문드립니다. windows 10 bash위에서 tensorflow를 깔고 pycharm으로 코드 작성시 import오류가 안보이는 지 궁금합니다.

    • ghatdev 2016.08.28 11:51 신고

      답글이 늦었네요ㅠ 죄송합니다
      파이참에서는 원격 인터프리터라는 기능을 지원해 import 구문에 오류가 나지 않습니다. intelligence 기능도 모두 동작하구요. 윈도우 배시에 같은방법으로 사용하셔도 오류는 없을것 같습니다

  3. Kwak Ji Won 2016.11.25 18:54

    안녕하세요 Tensorflow 사용자입니다.
    좋은 글 감사드립니다.
    그런데 그러자면 서버에 Tensorflow 와 Python 이 설치되어 있어야 합니까?
    피드백 부탁드립니다.

  4. 파이참 사용자 2017.01.20 13:55

    좋은글 감사합니다.
    원격 서버에서 정상적으로 잘 동작합니다. ^^

  5. jinho 2017.11.24 17:21

    도움 많이 되었습니다.

    좋은 글 정말 감사합니다.

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


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


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
딥러닝과 행렬  (4) 2016.06.26
Windows 10 build 14332 에 TensorFlow 설치하기  (12) 2016.05.09
  1. 뚜비뚜밥 2016.07.21 17:54

    딥러닝에서 행렬이 왜 그렇게 중요한지 이해하는데 정말 한방에 이해가 되는 좋은 글인것 같습니다! 덕분에 공부하는데 많은 도움이 되었네요^^ 그런데 한가지 궁금한 점이 있습니다. 40번 라인까지의 계산 결과로는 1x5 행렬이 생성되고, 42, 43 라인을 통해 1x1의 cost 가 계산된 다음 이를 45, 46, 47번 라인에서 학습하는데, 이 때 출력 이전까지의 행렬 크기가 어떻게 100이 되는지가 궁금합니다. 그냥...학습하면 100개의 계산 결과값이 나오는 건가요 아님 출력 결과의 차원을 예측하기 위한 계산 식이 있는 것인지요? 본 글의 취지와는 살짝 어긋나긴 하지만 궁금해서 이렇게 여쭤봅니다 ㅎㅎ

    • ghatdev 2016.07.21 19:26 신고

      출력 직전의 레이어인 L8의 레이어를 보면 W가 10*10의 행렬로 정의되어 있습니다.(21번째 라인을 참고하세요) 또한 이전 레이어인 L7에서 넘어온 행렬의 크기도 10*10입니다. 행렬을 곱할때 크기가 같은 행렬을 곱하게 되면 도출되는 행렬도 같은 크기가 됩니다. 따라서 L8레이어 만 보면 100개의 w_i*x_i + b_i 식을 가지고 있습니다. 이를 10*1크기의 행렬과 곱을 하게 되면 행렬의 곱연산 이후 1*1 크기의 행렬이 도출되게 됩니다.
      원하시는 답이 되었나요?ㅎㅎ

    • 뚜비뚜밥 2016.07.21 19:33

      아! 수식을 위주로 보다보니 그부분이 떡 하니 있는데도 못봤네요ㅎㅎ 감사합니다!

    • ghatdev 2016.07.21 19:35 신고

      넵ㅎㅎ 부족한 글 읽어주셔서 감사합니다!

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
Windows 10 build 14332 에 TensorFlow 설치하기  (12) 2016.05.09
  1. hojak99 2016.05.09 10:37

    감사합니다. 덕분에 잘 설치했네요

    • ghatdev 2016.05.09 21:54 신고

      도움이 되셨다니 다행입니다ㅎㅎ
      부족한 글 읽어주셔서 감사합니다~

  2. Byeonggeon Ko 2016.05.16 13:32

    마소가 Bash 발표하는거 보고 텐서플로우 설치 하는거 생각만 해봤는데 이렇게 직접 해보신분이 있군요. 정말 감사합니다!! 혹시 GPU 버전은 설치하기 전에 CUDA를 윈도우버전으로 설치하셨나요 아니면 우분투 버전으로 설치하셨나요?

    • ghatdev 2016.05.16 18:54 신고

      우분투 버전으로 설치하였습니다.14.04 버전으로 설치하시면 문제없이 사용가능하십니다ㅎㅎ

    • ghatdev 2016.05.16 18:56 신고

      cudnn까지는 문제없이 설치됩니다만 자바설치시 버그가 있어 드라이버가 설치되지 않습니다ㅠ

    • Byeonggeon Ko 2016.05.17 10:46

      아아... 그렇군요 ㅜㅜ 감사합니다!!!

  3. faceonly 2016.08.05 11:43

    안녕하세요
    귀중한 내용을 포스팅 해주셔서 감사합니다.
    8월 3일에 Windows 10 1주년 업그레이드가 릴리즈 되고 드디어 Windows 10 에서 Tensorflow 를 설치할수 있게 되었습니다.
    포스팅 해주신 자료를 참고로 Windows 10 에 Tensorflow 를 설치했습니다.
    그런데 저의 경우 Windows 10 에 Pycharm 을 설치하고 쓰고 있는데 이 환경에서 Tensorflow 를 사용할수 없을까요?
    혹시 해본 경험이 있으시다면 부탁드립니다.

  4. 김태형 2016.12.24 13:54

    많은 도움되었습니다.! 감사합니다!

  5. 문과 2017.01.02 05:42

    가상머신과는 비교할 수 없을 정도로 쾌적하네요
    좋은 정보 감사해요

  6. podong28 2017.02.28 10:00

    글잘읽었습니다....저도 bash에서 ubuntu 16.04 + tensorflow-gpu 버전 설치했으나 nvidia-smi를 실행하면 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. 이런 메시지가 뜨네요. 그리고 예제코드를 실행하면 정상적으로 동작히자 않네요. 혹시 어떤 원인인지 아실까요?
    @podong28@naver.com

    • ghatdev 2017.05.06 12:39 신고

      드라이버를 설치하지 않으신것 같습니다. 엔비디아 공식 홈에서 드라이버를 설치하시면 해결될 것 같습니다

    • ghatdev 2017.05.06 12:40 신고

      아, 그리고 아직 윈도우 bash에서 pci 디바이스 직접 연결을 제공하는지는 모르겠습니다. lspci 명령어가 작동하지 않는다면 다른 리눅스를 사용하셔야 할 것 같습니다.

+ Recent posts