本介绍了使用PyCharm进行远程debug的方法,实现本地写代码,远程服务器训练模型和调试代码的功能。
有这么一个应用场景,你的代码需要在服务器端运行,因为运行环境安装的依赖库都在远端服务器上,而写代码的工作在本地的平台上更顺手。在此之前都是用Visual Studio Code编辑代码,然后用同步到远端服务器,再通过SSH登录服务器运行程序。这样的工作流程不仅效率低,容易出错(如果代码没同步就悲剧),而且不易debug。
难道没有一个IDE能够实现远程运行调试代码么?本着世界上比我聪明的人多了去了的原则,本人觉得一定有,但是一直没找到。直到今天偶然发现PyCharm支持远程debug,看了下网上的教程发现跟我的需求很像,于是折腾了一番,没想到真的成功了。
我的本地环境:
- ubuntu 16.04
- PyCharm Professional
准备工作
首先你需要安装PyCharm Professional版,Community版是没有远程调试功能的,如果你是学生可以通过学校的edu邮箱申请免费试用,如果不是请购买正版。
PyCharm下载地址: https://www.jetbrains.com/pycharm
安装过程很简单这里就不赘述了,安装流程下一步下一步即可。
准备:
一台装有程序运行环境的服务器并开启ssh服务.可以用本地terminal 通过ssh登录服务器验证.
远程服务器同步配置
- 首先本地代码放在:
F:\Code\Sync\Detectron
- 服务器代码路径在:
/home/xuzhewei/code/Detectron
打开PyCharm,打开Project文件夹F:\Code\Sync\Detectron
首先在Tools>Deployment>Configuration
配置远程服务器地址:
- SFTP host: 是你服务器的地址
- Port: 是端口号
- Root Path: 是远程你期望存放代码的位置
- User name: 是远程服务的登录用户名
- Password: 远程服务器的登录密码
切换到Mappings
标签页
- Local path: 本地代码存放位置
- Deployment path on server Detectron: 服务器端存放Detectron的位置
- Web ...: 这个我们用不上,是web项目需要配置
如果你还有一些文件或文件夹不想同步,那么在配置对话框的第三个tab页Excluded path
里面添加即可,可同时指定本地和远程。
上传下载文件
手动上传方式很简单,选择需要同步的文件或文件夹(注意,要选择整个项目,要选中最外层目录然后点击upload,否则只会上传当前选中的文件.),然后选择 Tools>Deployment>Upload to Detectron
(这个是刚刚配置的部署名称)
比较远程和本地文件
有时候你并不确定远程和本地版本的完全一致,需要去比较看看。PyCharm提供了对比视图来为你解决这个问题。
选择Tools>Deployment>Browse Remote Host
,打开远程文件视图,在右侧窗口就能看到远程主机中的文件
选择一个你想要对比的文件夹,点击右键->Sync with Deployed to Detectron
,打开同步对比窗口,使用左右箭头来同步内容。
PyCharm 选择远程调试器
选择File>Settings>Project>Project Interpreter
,然后在右边,点击那个小齿轮设置,如下
然后点击Add Remote
,选择刚才创建的deployment配置(Detectron),并配置解释器路径.
然后设置你的Python Interpreter,就是你在服务器端运行的python的位置,这里默认是系统python,但是我采用的anaconda的虚拟python环境因此这里的
Interpreter
地址为/home/all/lib/anaconda2/envs/caffe2/bin/python
Sync folders
是服务器上代码放置的地址
远程调试
首先验证在服务器上运行测试代码可以成功运行
cd ~/code/Detectron
python tests/test_spatial_narrow_as_op.py
输出
No handlers could be found for logger "caffe2.python.net_drawer"
net_drawer will not run correctly. Please install the correct dependencies.
E0531 15:09:45.234580 5116 init_intrinsics_check.cc:59] CPU feature avx is present on your machine, but the Caffe2 binary is not compiled with it. It means you may not get the full speed of your CPU.
E0531 15:09:45.234616 5116 init_intrinsics_check.cc:59] CPU feature avx2 is present on your machine, but the Caffe2 binary is not compiled with it. It means you may not get the full speed of your CPU.
E0531 15:09:45.234625 5116 init_intrinsics_check.cc:59] CPU feature fma is present on your machine, but the Caffe2 binary is not compiled with it. It means you may not get the full speed of your CPU.
Found Detectron ops lib: /usr/local/lib/libcaffe2_detectron_ops_gpu.so
...
----------------------------------------------------------------------
Ran 3 tests in 3.146s
OK
然后尝试在PyCharm远程调试
然后注意不要用py.test,应直接用python
运行
输出结果和在SSH里显示的一样
参考教程:https://www.xncoding.com/2016/05/26/python/pycharm-remote.html
参考教程:https://zhuanlan.zhihu.com/p/38591832