The value of knowledge lies not in possession, but in share.

0%

使用Pycharm来远程调用GPU服务器资源

一直没有使用Pycharm来写代码的习惯,以往都是习惯了用Sublime Text来写代码,然后通过Transmit (FTP工具)上传到服务器上,在使用SecureCRT运行脚本。

为方便通过断点来参看数据并调试代码,遂考虑使用Pycharm来远程调用云服务器GPU来调试本地代码,一是因为本地Mac本显卡实在无力运行此高计算量的程序,二是怕自己的本本爆掉。

Pycharm有以下几个便利之处:(也是在不断折腾中发现的,🤦‍♂️)

  • 一款专注于Python开发的IDE
  • 远程链接服务器并调用GPU等资源
  • 可以SSH链接到服务器终端
  • 十分方便对服务器上的程序绘图进行显示

新建项目

PycharmWithSever00

通过SFTP链接服务器

  1. 点击Configuration进入Deployment,并新建SFTP

    PycharmWithSever01

    PycharmWithSever02

    PycharmWithSever03
    Root path,我填写的是:/root/wangcong

  2. 点击Mapping,填写期望同步的本地路径与服务器路径

    Deployment path,我填写的是:/

    尤其要注意服务器映射的目录路径!:实际路径 = Root path + Deployment path

    PycharmWithSever04

  3. 在上方菜单栏进入Tools —> Browse Remote Host来打开相应的RemoteHost面板。

    这个面板显示的就是服务器上的文件,显示的范围就是步骤2中Deployment path路径下的文件及文件夹。

    PycharmWithSever05

  4. 可以直接在RemoteHost面板里双击某个文件并且直接进行编辑。

    双击某个文件后你可以看到编辑区域的顶部有一个横条,并且横条的右边有三各按钮,分别是比较、撤销和上传操作。在这里面编辑文件之后,可以直接点击上传按钮,就会提交到服务器了。

    PycharmWithSever06

更改Python解释器为云服务器上的Python解释器

  1. 进入Preference,点击Project Interpreter,选择Add

    PycharmWithSever07

  2. 进入SSH Interpreter进行设置

    PycharmWithSever08
    注意,有时候会出现Next无法点击的情况。

    点击Create copy of this deployment server in IDE settings后,即可选中Next按钮。

  3. Python解释器路径,一般设置默认

    PycharmWithSever09

设置服务器GPU环境变量

一次设置,永久有效!

在终端上执行cat .bashrc命令,查询服务器中设置的CUDA环境变量。

1
2
3
4
5
6
7
8
#export  PATH=/usr/local/cuda-10.0/bin:$PATH
#export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64$LD_LIBRARY_PATH
#export CUDA_HOME=/usr/local/cuda-10.0

上面是.bashrc文件中的配置,下方是Pycharm中的环境变量配置

LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64
CUDA_HOME=/usr/local/cuda-10.0

我仅仅设置了这两条,设置PATH会报错。

  1. 点击Edit Configurations

    PycharmWithSever11

  2. 点击 Templates,设置Python脚本模板的Environment Variables

    PycharmWithSever12

  3. 若已有运行过的文件,在完成上面两步后,记得清空Python下所有已经运行的文件,重新运行程序

    PycharmWithSever12

测试

在Pycharm IDE的右下角的Project Interpreter选为远程SSH的Python解释器。

  1. 新建脚本文件

    testGPU.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    # @Time : 2019-12-16 17:49
    # @Author : WangCong

    import tensorflow as tf
    import os

    os.environ["CUDA_VISIBLE_DEVICES"] = '0'

    # Creates a graph.
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
    c = tf.matmul(a, b)

    # Creates a session with log_device_placement set to True.
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

    # Runs the op.
    print(sess.run(c))
  2. 运行脚本测试

    PycharmWithSever14

通过Pycharm绘图

启用 SSH X11 转发以便使得Pycharm能够进行绘图(Plot),打开配置文件/etc/ssh/sshd_config

shell
1
# X11Forwarding yes

找到上面的代码,并取消注释。

SSH远程链接

通过Pycharm可以建立服务器SSH远程链接,在上方菜单栏点击Tools —> Start SSH seesion即可远程连接到服务器。

若远程Terminal出现乱码:进入Perferrnces点击Tools —> SSH Terminal,在Default encoding选项中选择utf-8即可解决。

需要注意的问题

  1. 报错ImportError: libcublas.so.: cannot open shared object file: No such file or directory

    脚本文件Environment Variables中,配置CUDA参数

  2. 上文中的新建项目路径Mapping中的本地路径等路径要一一对应,服务器中的路径也要一一对应。

  3. 在Pycharm IDE的右下角的Project Interpreter应选为远程的Python解释器。


参考文献:

https://stackoverflow.com/questions/37933890/tensorflow-gpu-setup-error-with-cuda-on-pycharm

🍭支持一根棒棒糖吧!