织梦php网站模板修改,网站建设如何做报价,企业网站 wordpress,黄金网站app视频以前代码debug一直用原始的pdb#xff0c;方便好用。最近接触的代码框架使用了ddp加速训练#xff0c;导致pdb不好用了。
具体来说#xff0c;在ddp训练时#xff0c;用单卡训练#xff0c;跟非ddp模式是一致的#xff0c;python -m pdb xxx.py的模式也能正常用pdb。但是…以前代码debug一直用原始的pdb方便好用。最近接触的代码框架使用了ddp加速训练导致pdb不好用了。
具体来说在ddp训练时用单卡训练跟非ddp模式是一致的python -m pdb xxx.py的模式也能正常用pdb。但是常态训练需要用多卡分布式训练执行命令时用非侵入式 python -m pdb xxx.py 的模式无效好像只能使用侵入式的pdb调试方法具体为在想要中断的程序行前预先添加 import pdb; pdb.set_trace() 在实际使用中这种方式确实能在多卡训练时使程序中断但是在中断窗口不能正常键入字母。有时候是键盘按半天屏幕什么也不显示有时候是根本没输入成功直接将其他地方复制的长语句比如某文件路径粘过来也会变成乱七八糟的字母组合根本无法正常用ncb等等正常用的pdb命令。由此找到了remote pdb这个工具。
首先pip安装超时去他们官网下载whl自己安然后是几个简单使用后发现的特点。 1、官网提供了两种用例 实际我在分布式训练使用时发现第二种不太行。ddp训练GPU和节点数≥2在设置断点的地方会同时占用两个端口导致第二种写法中预先定义的一个端口被占用无法分配给第二个节点或者更多报错。所以在ddp中用第一种写法。 2、分布式训练时如果用pdb调试好像会根据预设的节点数量也即GPU数量出现同样多的调试终端窗口在程序运行中需要所有的节点的调试终端的都c或者n到指定位置整个程序才会继续执行下去。 3、如果在程序的不同位置预先设置了remote-pdb断点在程序进行到第一个断点时主程序终端会给出与训练节点数量一致的连接地址和端口 连进去之后就是显示程序停留在预设的断点位置。在所有终端操作完继续执行后程序开始顺序执行一直到下个预设断点这其中主程序原本的输出还是会打印在主终端窗口中一直到运行到下一个断点主终端会再次出现 当你去连接到这两个地址时上面第一次的连接会自动关闭好像被程序注销了一样。完成替代。 4、在主程序的正常执行过程中代表断点的remote终端关闭并不会影响主程序的运行但是当主程序执行到当前断点你在其他终端连接到当前断点的remote 窗口又手动关闭后主程序会自动终止退出。