V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kinghero
V2EX  ›  问与答

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

  •  
  •   kinghero · 2018-11-13 17:42:34 +08:00 · 3118 次点击
    这是一个创建于 2211 天前的主题,其中的信息可能已经有所发展或是发生改变。
    情况大概是这样子的目前我在使用一些深度学习框架,包括但不限于 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 友有什么更好的建议吗?
    第 1 条附言  ·  2018-11-14 10:01:40 +08:00
    各位 V 友,如果有什么工具适合代码同步、不同环境切换使用的小 Tips 也欢迎分享。
    这里没有嫌弃哪种工具代码的好坏,只是单纯出于我个人的喜好而言,没有想引战的意思。
    欢迎大家分享一下自己的经验!
    第 2 条附言  ·  2018-11-14 10:03:31 +08:00
    关于使用 VS Code 进行 python 的编程,如果有什么好用的插件配置也欢迎分享!
    15 条回复    2018-11-14 10:13:23 +08:00
    VisionTheta
        1
    VisionTheta  
       2018-11-13 17:51:55 +08:00
    额 同步代码的工具等楼下来推荐。不过,如果本地能加一张显卡,哪怕 1080 这种,就可以满足本地调试吧。然后需要大规模训练了,再发布到服务器上。
    whileFalse
        2
    whileFalse  
       2018-11-13 19:29:29 +08:00 via iPhone
    服务器装个桌面?
    试试 cloud9 私有部署?
    kinghero
        3
    kinghero  
    OP
       2018-11-13 20:12:31 +08:00
    @感谢回复!确实,本地调试好上服务器大规模训练确实是一种比较好的方法。还有一台 PC 机是有 1070 显卡的,基本上 debug 是没问题的。但是 Ubuntu 下桌面办公还是没 windows 和 macos 好用,所以基本上也是远程连接这台机子。或者有时候需要用笔记本连接到这个机器,又会遇到一样的问题。

    @whileFalse 好的,我了解一下,感谢!
    kinghero
        4
    kinghero  
    OP
       2018-11-13 20:13:13 +08:00
    @VisionTheta 感谢回复!确实,本地调试好上服务器大规模训练确实是一种比较好的方法。还有一台 PC 机是有 1070 显卡的,基本上 debug 是没问题的。但是 Ubuntu 下桌面办公还是没 windows 和 macos 好用,所以基本上也是远程连接这台机子。或者有时候需要用笔记本连接到这个机器,又会遇到一样的问题。
    tankeco
        5
    tankeco  
       2018-11-13 20:14:04 +08:00
    方案 1,学好 vim...
    yemenchun1
        6
    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
        7
    kinghero  
    OP
       2018-11-14 00:02:18 +08:00
    @tankeco hh 总想学,但老感觉用起来不顺手

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

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

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

    @SeaRecluse 嗯嗯,确实本地先调试好是第一个步骤,但是本地有多台电脑,实验室的机子和个人的笔记本可能会来回切换使用,所以这之间也需要代码同步的工作。
    kinghero
        15
    kinghero  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.