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
'AI > TensorFlow, PyTorch, Keras, Scikit' 카테고리의 다른 글
TensorFlow를 공용 GPU에서 사용 할 때 메모리 절약 방법 (0) | 2018.08.02 |
---|---|
TensorFlow GPU 버전 우분투 16.04에 설치 하기 (10) | 2018.07.31 |
학습 모델의 재사용 (Transfer Learning) (0) | 2017.12.09 |
TensorFlow 모델을 저장하고 불러오기 (save and restore) (3) | 2017.12.09 |
Batch 크기의 결정 방법 (6) | 2017.12.07 |