本地深度学习编程在服务器调试有什么好的方法吗

2018-11-13 17:42:34 +08:00
 kinghero
情况大概是这样子的目前我在使用一些深度学习框架,包括但不限于 pytorch, mxnet, torsorflow.

环境:个人手头上的工作机有 macbook pro 和 windows10 的 PC、服务器为 ubuntu 系统

需求:在个人机上使用 vs code 编辑器写完 python 一些训练模型、脚本之后需要在服务器上使用显卡来进行训练,调试。代码最好能在 PC 与 mbp 之间进行同步。

尝试过以下的一些方法,但是感觉都不是特别满意
1. 直接 ssh 远程连接,用 vim 编辑文本(缺点:相比于 vs code 目前还是不习惯全部使用 vim 来编辑)
2. 使用 pycharm 的远程调试功能(缺点:感觉用 pycharm 来写有点笨重)
3. 使用 sshfs 将服务器目录映射到本地使用 vs code 编辑(缺点:本地的环境可能和服务器不同,自动补全等功能可能也会有点问题,还需要手动 ssh 连接到服务器调试)
4. 使用 Dropbox 进行 PC 与 mbp 之间的同步,将写完的代码上传到服务器调试(缺点:debug 过程很麻烦,要反复上传)
5. 使用 jupyter notebook 进行远程调试(缺点:一般作为调试某些函数的时候比较好用,整个项目开发的话感觉还是缺乏许多编辑器可以有的功能)

目前自己使用的以 3、4、5 方法为主,不知道各位 V 友有什么更好的建议吗?
3113 次点击
所在节点    问与答
15 条回复
VisionTheta
2018-11-13 17:51:55 +08:00
额 同步代码的工具等楼下来推荐。不过,如果本地能加一张显卡,哪怕 1080 这种,就可以满足本地调试吧。然后需要大规模训练了,再发布到服务器上。
whileFalse
2018-11-13 19:29:29 +08:00
服务器装个桌面?
试试 cloud9 私有部署?
kinghero
2018-11-13 20:12:31 +08:00
@感谢回复!确实,本地调试好上服务器大规模训练确实是一种比较好的方法。还有一台 PC 机是有 1070 显卡的,基本上 debug 是没问题的。但是 Ubuntu 下桌面办公还是没 windows 和 macos 好用,所以基本上也是远程连接这台机子。或者有时候需要用笔记本连接到这个机器,又会遇到一样的问题。

@whileFalse 好的,我了解一下,感谢!
kinghero
2018-11-13 20:13:13 +08:00
@VisionTheta 感谢回复!确实,本地调试好上服务器大规模训练确实是一种比较好的方法。还有一台 PC 机是有 1070 显卡的,基本上 debug 是没问题的。但是 Ubuntu 下桌面办公还是没 windows 和 macos 好用,所以基本上也是远程连接这台机子。或者有时候需要用笔记本连接到这个机器,又会遇到一样的问题。
tankeco
2018-11-13 20:14:04 +08:00
方案 1,学好 vim...
yemenchun1
2018-11-13 20:51:10 +08:00
我是这样做的:
1. 我用 Jupyter Notebook 写我要调用的功能, 但实现功能的函数本身写在 py 文件里.
2. py 文件用 Jupyter Notebook 的前端文本编辑器编辑, 虽然可以, 但功能有限, 补全, 批量修改都用不了; 用 SSH 和 Vim 虽然也可以, 但是相比常用的 Pycharm, Sublime Text, 少了一些直观的感受. 所以我在 Linux 的机器上开了一个 samba 的服务, 共享 Linux 的文件夹, 再在路由器开端口映射, 最后用 MacBook 的 Finder 连接服务器的功能加载这个远程文件夹, 这样就可以用 MacBook 的 Sublime Text 或其它文本编辑器实时的编辑了.
3. py 文件每次修改了以后, 在 Jupyter Notebook 执行程序块, 但 Jupyter Notebook 导入的还是老的 py 文件, 需要添加一行%load_ext autoreload 和%autoreload 2, 这样只有写新函数的时候才需要重新执行 import 的代码块, 其余时候直接执行 py 文件修改过的函数所在的代码块就可以了.
4. Dropbox 不是不行, 而是做不到实时修改实时变化, 因为 dropbox 的同步需要一定时间, 而 samba 就完美解决了这个问题, 因为你改的代码是在远程机器上的.
5. 代码同步的问题, 你在远程 Linux 机器调好以后, 开启 Dropbox. 这也仅仅是起到备份的功能而已.
kinghero
2018-11-14 00:02:18 +08:00
@tankeco hh 总想学,但老感觉用起来不顺手

@yemenchun1 感谢!其实之前有用 Jupyter Notebook 执行发现每次改完函数都要重新载入整个 notebook 才能导入新文件觉得略麻烦。我试试加上这一行。听你这样子说感觉 samba 和 sshfs 功能类似,这样子的话 MacBook 也要装相应的 python 包才能实现补全等功能吧(我目前是这么实现的)。

其实我感觉 pycharm 远程调试的实现方案其实还不错,将远程目录在本地做一个备份,然后每次是直接修改本地的备份,本地修改完之后会自动上传到远程服务器,然后可以调用远程服务器进行调试。但是感觉其编辑功能还是不及 VS Code 和 Sublime Text 好用。开这个贴的也是想集思广益,看看有没有什么更好的方法。
msg7086
2018-11-14 02:42:50 +08:00
我不是写 AI 的。我们用 Syncthing 同步本地和服务器上的代码。
Rheinmetal
2018-11-14 07:20:14 +08:00
就像普通的应用一样 本地调试 然后用持续集成工具部署训练 不直接访问服务器这样不就方便了?
kinghero
2018-11-14 08:40:56 +08:00
@msg7086 感谢,Syncthing 这种 P2P 的同步方式看起来好像不错,我觉得我可以使用它来同步我不同的本地环境下的代码,调试完毕再上服务器大规模训练。

@Rheinmetal 感谢!但是主要是因为我目前其实本地有好几个环境,macos、windows、ubuntu 所以可能还涉及到了代码同步问题,最终可能都是在本地的 ubuntu 下进行调试好再部署到服务器上训练。macos 和 windows 可能就作为代码编辑器来使用,还有有时候需要在外面编程,而使用过远程桌面感觉不是很好用。
locoz
2018-11-14 08:56:22 +08:00
pycharm 挺好的你又嫌笨重。。那就只能舍弃方便性了
locoz
2018-11-14 08:56:56 +08:00
不过 vscode 应该也有插件可以做到类似效果,可以找一下
SeaRecluse
2018-11-14 09:17:14 +08:00
本地调试完扔上去训练呗。你要是嫌来回改动代码麻烦,你在云端改完难道本地的不也要改吗?要不你就在云端装个桌面(没必要,本来服务器不用桌面环境就是为了避免占用额外的空间
kinghero
2018-11-14 09:58:28 +08:00
@locoz pycharm 确实是一个比较好的方式哈,我不是嫌弃哈。只是单纯讨论一下几种方法,当然每个人可能都有不同的习惯!

@SeaRecluse 嗯嗯,确实本地先调试好是第一个步骤,但是本地有多台电脑,实验室的机子和个人的笔记本可能会来回切换使用,所以这之间也需要代码同步的工作。
kinghero
2018-11-14 10:13:23 +08:00
发现了一款 VS Code 不错的插件,支持各大深度学习框架的 API、操作远程机器的文件、打开 Jupyter Notebook、内建的 TensorBoard
vscode-tools-for-ai: https://marketplace.visualstudio.com/items?itemName=ms-toolsai.vscode-ai
https://github.com/Microsoft/vscode-tools-for-ai

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/507487

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX