本地深度学习编程在服务器调试有什么好的方法吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kinghero
V2EX    问与答

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

  •  
  •   kinghero 2018-11-13 17:42:34 +08:00 3578 次点击
    这是一个创建于 2603 天前的主题,其中的信息可能已经有所发展或是发生改变。
    情况大概是这样子的目前我在使用一些深度学习框架,包括但不限于 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     Solana     5190 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:59 PVG 13:59 LAX 21:59 JFK 00:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86