PyCharm Pro로 TensorFlow 원격 빌드 환경설정
- 클라이언트 환경:
Windows-10
,PyCharm Pro
- 서버 환경:
UbunTu 16.04 LTS
,NVIDIA GTX-1080
,TensorFlow 1.4
포인트는 SFTP
와 SSH
를 사용 해야 한다는 것이다. 이것을 도와주는것이 Remote Interpreter
기능이다.
단, Pycharm pro
버전만 된다. comunity
는 Remote interpreter를 지원하지 않는다.
하지만 jetbrain은 좋은 회사라서 대학생&대학원생이면 학교 이메일로 grant를 받을 수있다.
Grant관련해서는 이전 포스트를 참조 한다.
원격 인터프리터 설정
메뉴항목에서 File
-> Settings
-> project Interpreter
를 선택 톱니바퀴
모양을 눌러서Add Remote..
을 선택한다.
아래와 같은 창이 나오면 SSH Credentials
를 선택
SSH Credentials
입력내용- Host name: IP
- user name:계정
- password: 비밀번호
- python interpreter path: 자신의 python버전에 따라서 적절히 변경한다. python2.7의 경우
/usr/bin/python
이고 python3.5의 경우/usr/bin/python3.5
이다.
- 환경 변수 설정
run
->Edit Configurations
- Environment variables
CUDA_HOME
추가/usr/local/cuda
LD_LIBRARY_PATH
추가$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
코드 동기화 설정
메뉴에서 아래의 항목을 클릭한다.Tools->development->Configuration
Add
를 눌러서SFTP
로 서버 설정을 생성Connection
탭에서 IP 주소와 계정 비밀번호를 차례로 입력Mapping
탭에서Local Path
와Remote Path
를 각각 맞게 입력
자동 파일 업로드
보통 설정 되어 있지만 혹시나 확인해 본다.Tools > Deployment > Automatic Upload
원격 서버에서 실행 하기
Run->Edit Configurations...
를 눌러서 interpreter를 변경해 주자.
테스트 코드
'''
Created on Nov 17, 2015
@author: root
'''
import tensorflow as tf
a = tf.placeholder(tf.int16)
b = tf.placeholder(tf.int16)
# Define some operations
add = tf.add(a, b)
mul = tf.mul(a, b)
with tf.Session() as sess:
print ("Addition with variables: %i" % sess.run(add, feed_dict={a:2, b:3}))
print ("Multiplication with variables: %d" % sess.run(mul, feed_dict={a:2, b:3}))
실행 결과
아래와 같이 원격 PC에서 정상적으로 수행 되는것을 볼 수 있다.
ssh://jemin@xxx.xxx.xxx.xxx:22/usr/bin/python3 -u /home/jemin/tf_examples/
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.797
pciBusID 0000:01:00.0
Total memory: 7.92GiB
Free memory: 7.52GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
Addition with variables: 5
Multiplication with variables: 6
원격으로 이미지 파일 실행하기 (X11 forwarding)
ssh만 이용할 경우 결과가 이미지라면 실행에 에러가 발생한다.
예를들어 matplotlib
를 이용해서 plot
을 생성해서 show
할경우 command line에서는 에러를 발생 시킨다.
이를 해결할 수 있는 방법이 X11 forwarding
기능이다.
윈도우 환경에서 X11 forwarding
을 사용하기 위해서는 아래의 프로그램을 설치해야 한다. 그럼 localhost server를 실행시켜주고 이 서버가 대신 이미지 결과를 받아서 보여주게 된다.
putty를 이용할 경우
pycharm을 이용할 경우
환경변수 탭에 아래와 같이 추가한다.
Run
->Edit Configurations
이다.sudo vi /etc/ssh/sshd_config
python consol 설정
vim ~/.bashrc 설정
DISPLAY=localhost:10.0
실행 코드
import tensorflow
import matplotlib
matplotlib.use('GTKAgg')
import matplotlib.pyplot as plt
import numpy as np
print "Tensorflow Imported"
plt.plot(np.arange(100))
plt.show()
실행결과
실행 결과가 아래와 같이 나오는 것을 알 수 있다.
Troubleshooting
sftp 설정
Tools
-> Developyment
-> Configuration
에서 SFTP
를 설정 한다.
Mapping
tab에서 local과 remote path가 잘 설정 되었는지 확인한다.
자동 갱신 설정
Tools
->Deployment
->OPtions
에서Upload changed files automatically to the default server
를 Always로 설정해 두면 자동으로 업로드까지 해준다.
GPU CUDA 문제
Pycharm이 .barshrc를 찾지 못하면 문제가 발생 할 수도 있다.
메뉴에서 Run
>Edit Configuration
>Environment
에 Environment Variables
라는 설정이 있다.
설정을 Name
은 LD_LIBRARY_PATH
로 정하고Value
를 자신의CUDA 경로/lib64
로 설정한다.
ConnectionRefusedError: [Errno 111] Connection refused
Run Edit Configuration
에서 Path mappings
안의 항목에 Show command line afterwards
가 체크되어 있는 경우
[Errno 111] Connection refused
에러가 발생한다. 해결을 위해서 이것을 해제하고 실행한다.
CONDA Env환경일 경우
python interpreter path
부분을 /usr/local/anaconda3/envs/<CONDA_ENV_NAME>/bin
로 변경한다.
위와 같이 하면 해당 CONDA 환경의 python interpreter로 실행이 가능하다.
참고문헌
Work remotely with PyCharm, TensorFlow and SSH
http://stackoverflow.com/questions/30813370/how-can-i-enable-x-11-forwarding-in-pycharm-when-connecting-to-vagrant-or-a-rem
Using IntelliJ as Remote X Windows App
'Data Science > TensorFlow, PyTorch, Keras, Scikit' 카테고리의 다른 글
TensorFlow를 공용 GPU에서 사용 할 때 메모리 절약 방법 (0) | 2018.08.02 |
---|---|
TensorFlow GPU 버전 우분투 16.04에 설치 하기 (10) | 2018.07.31 |
Pycharm으로 TensorFlow 원격 빌드하기 (7) | 2018.04.25 |
학습 모델의 재사용 (Transfer Learning) (0) | 2017.12.09 |
TensorFlow 모델을 저장하고 불러오기 (save and restore) (3) | 2017.12.09 |
Batch 크기의 결정 방법 (6) | 2017.12.07 |
-
SKC 2017.03.22 17:28
감사합니다. 덕분에 pycharm으로 원격 접속할수 있게 되었습니다. 그런데 X11 forwarding을 통해 plot하는 것이 안되네요. 혹시 글에 기재하신 내용에 추가적으로 설정해주어야하는게 있을까요?
-
김치찌개죠하 2017.09.05 22:59
xming 설치하고 똑같이 했는데, 에러가 납니다.
matplotlib.use('GTKAgg') 때문에 그런거 같은데.. 저게 무슨 기능을 하는지 알려주시면 감사하겠습니다.
ssh://tensor@192.168.201.74:22/home/tensor/dev/anaconda3/envs/py3/bin/python -u /home/tensor/dev/workspace/remoteWorkspace/AnormalyDetection/template.py
Traceback (most recent call last):
File "/home/tensor/dev/anaconda3/envs/py3/lib/python3.6/site-packages/matplotlib/backends/backend_gtk.py", line 15, in <module>
import gobject
ModuleNotFoundError: No module named 'gobject'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/tensor/dev/workspace/remoteWorkspace/AnormalyDetection/template.py", line 7, in <module>
import matplotlib.pyplot as plt
File "/home/tensor/dev/anaconda3/envs/py3/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/home/tensor/dev/anaconda3/envs/py3/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
globals(),locals(),[backend_name],0)
File "/home/tensor/dev/anaconda3/envs/py3/lib/python3.6/site-packages/matplotlib/backends/backend_gtkagg.py", line 14, in <module>
from matplotlib.backends.backend_gtk import gtk, FigureManagerGTK, FigureCanvasGTK,\
File "/home/tensor/dev/anaconda3/envs/py3/lib/python3.6/site-packages/matplotlib/backends/backend_gtk.py", line 19, in <module>
raise ImportError("Gtk* backend requires pygtk to be installed.")
ImportError: Gtk* backend requires pygtk to be installed. -
UZZ 2019.06.04 18:54
저는 파이참으로 로컬에서 tkinter로 gui 띄우려고 시도했던건데요,
위에 방법대로 해놓고,
로컬에서 putty로 x11 forwarding 설정해서 open해놓고,
xming과 함께 다운받아지는 xlaunch 실행시켜서,
multiple windows 옵션에다가 display number에 10 넣고,
start no client 옵션으로 실행시켜놓고,
파이참에서 코드를 실행시키니까 GUI가 뜨네요!