问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用VSCode调试Docker容器内分布式程序的完整指南

创作时间:
作者:
@小白创作中心

使用VSCode调试Docker容器内分布式程序的完整指南

引用
CSDN
1.
https://blog.csdn.net/ermmtt/article/details/138862403

在开发和调试分布式程序时,特别是在Docker容器环境中,如何使用VSCode进行有效的调试是一个常见的技术挑战。本文将详细介绍如何在VSCode中配置远程服务器、Docker环境以及调试设置,帮助开发者轻松实现对Docker容器内分布式程序的单步调试。

vscode连接远程服务器,并在docker中利用torchrun分布式调试代码

遇到的问题:我之前使用的经验是在conda 中调试,并且代码的启动方式是python XX.py 。像这样在docker容器内部并且调试多卡执行的程序着实费了一番功夫,下文主要是解决在vscode中调试分布式程序时的经验

vscode 连接远程服务器准备

远程资源管理器的 SSH配置文件中,添加服务器的用户名和地址

点击小齿轮这里就可以添加啦

docker准备 (略)

在远程服务器中,

  1. 安装docker

  2. 拉取镜像

  3. 创建容器

在vscode中安装docker扩展

安装好之后会看到:

  1. 侧边栏有一个鲸鱼🐳图标

  2. 远程服务器所有的容器以及他们的状态

  3. 远程服务器所有的镜像

从容器中新建VSCode窗口

  1. 在我们想要调试环境的容器中,附加VScode。右键待选择的容器选择 “附加Visual Studio Code”。此操作会新建一个VScode窗口

  2. 会等待一段时间,会新打开一个窗口,在这个窗口中新建的终端都是在容器环境内的

  3. 新建的窗口可能会导致原来安装的插件不可用。

  4. 在新建窗口的资源管理器中打开需要远程调试的文件夹,操作和不在docker里面调试是相同的。

配置文件

  1. 在运行和调试中,编辑launch.json文件。

例如原来启动的shell脚本:

export CUDA_DEVICE_MAX_CONNECTIONS=1
export OMP_NUM_THREADS=1
export CUDA_VISIBLE_DEVICES=4,5
torchrun --nproc_per_node 8 --nnodes 2 --node_rank 0 \
  XXX.test.py \
  --dataset-path xxx \
  --iteration xxx \
  --lr xxx \

则转到launch.json文件的内容为:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "megatron-core",  //名字自定义
            "type": "python",      
            "request": "launch",
            "program": "/usr/local/bin/torchrun",  // torchrun的位置,可在终端中执行which torchrun得到
            "console": "integratedTerminal",
            "env": {
                "CUDA_DEVICE_MAX_CONNECTIONS": "1",
                "OMP_NUM_THREADS": "1",
                "CUDA_VISIBLE_DEVICES": "4,5",
                "PYTHONPATH": "/xxx/xxx/file_path1:/xxx/xxx/file_path2" // 放入自己的文件的路径,冒号分隔
            },
            "args": [
                "--nproc_per_node",
                "8",
                "--nnodes",
                "2",
                "--node_rank",
                "0",
                "XXX.test.py", //建议绝对路径
                "--dataset-path",
                "xxx",
                "--iteration",
                "xxx",
                "--lr",
                "xxx",
            ]
        }
     ]
}  

具体来说,要注意三个地方:

  • “program” 后面是torchrun的位置

  • “env” 后面是环境变量,冒号后面接每个环境变量的值

  • “args” 后面是原来torchrun命令后面的所有的内容,包括节点数量等。每个值用双引号指定。

launch.json中的内容 根据自己的任务修改

调试

在运行和调试中, 选择自己写好的配置,就可以单步调试执行了。

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号