vscode 调试 openmpi 后端的 pytorch 分布式程序

vscode 调试 openmpi 后端的 pytorch 分布式程序

1 验证 openmpi 是否支持 CUDA

ompi_info --parsable --all | grep mpi_built_with_cuda_support:value

输出:mca:mpi:base:param:mpi_built_with_cuda_support:value:true 表示 openmpi 支持 CUDA,否则需要重新编译 openmpi。

2 终端运行 openmpi 后端的 pytorch 分布式程序

pytorch 测试代码 run.py :

import torch
import torch.distributed as dist
import platform

def run(rank, size):
    tensor = torch.zeros(1).cuda(0)
    if rank == 0:
        # Send the tensor to process 1
        tensor += 1
        dist.send(tensor=tensor, dst=1)
    else:
        # Receive tensor from process 0
        dist.recv(tensor=tensor, src=0)
    print('Rank ', rank, ' has data ', tensor[0])

def init_process(fn):
    dist.init_process_group(backend='mpi')
    rank = dist.get_rank()
    size = dist.get_world_size()
    print('I am rank ', rank, ' on ', platform.node())
    fn(rank, size)

if __name__ == '__main__':
    init_process(run)

终端运行 mpirun -np 2 python run.py 输出:

$ mpirun -np 2 python run.py
I am rank  1  on  wh9
I am rank  0  on  wh9
Rank  0  has data  tensor(1., device='cuda:0')
Rank  1  has data  tensor(1., device='cuda:0')

注意:pytorch 默认不支持 openmpi 后端,需要从源码编译 pytorch。

3 vscode 调试 openmpi 后端的 pytorch 分布式程序

  • 安装最新版本的 ptvsd, 同时将 vscode 更新到最新版本
pip install ptvsd
  • 修改 run.py 代码,使支持 ptvsd 调试,每一个进程都添加以下代码:
ptvsd.enable_attach(address =('127.0.0.1', 3000))
ptvsd.wait_for_attach()

127.0.0.1 为本机IP地址,3000为调试端口号,不同的进程设置不同的端口号,用以调试不同的进程。

修改后 run.py 代码为:

import torch
import ptvsd
import torch.distributed as dist
import platform

def run(rank, size):
	ptvsd.enable_attach(address =('127.0.0.1', 3000+rank))
    ptvsd.wait_for_attach()
    tensor = torch.zeros(1).cuda(0)
    if rank == 0:
        # Send the tensor to process 1
        tensor += 1
        dist.send(tensor=tensor, dst=1)
    else:
        # Receive tensor from process 0
        dist.recv(tensor=tensor, src=0)
    print('Rank ', rank, ' has data ', tensor[0])

def init_process(fn):
    dist.init_process_group(backend='mpi')
    rank = dist.get_rank()
    size = dist.get_world_size()
    print('I am rank ', rank, ' on ', platform.node())
    fn(rank, size)
    
if __name__ == '__main__':
    init_process(run)

上述程序中: rank 0 的调试端口为 3000,rank 1 的调试端口为 3001。

  • 运行 mpirun -np 2 python run.py,程序将阻塞到 wait_for_attach() 处,等待 vscode 连接。

  • 打开 vscode, 在 launch.json 文件中新建 python 远程连接任务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里调试端口 3000 表示调试 rank 0,同理,设置为 3001 就可以调试 rank 1。

  • 添加断点

在这里插入图片描述

  • 按 F5 远程调试程序,程序运行到断点处

在这里插入图片描述

注意:vscode 远程调试前,一定要先在终端中运行:mpirun -np 2 python run.py

参考资料

asroy/Debugging Mixed Python C++ code in Visual Studio Code

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Ubuntu 上使用 VS Code 调试 OpenMPI 代码,需要安装以下软件: 1. OpenMPI 2. MPI Debugger (MPIDB) 3. VS Code 4. C/C++插件 5. C/C++ Debug插件 安装 OpenMPI 和 MPIDB 在终端中运行以下命令来安装 OpenMPI 和 MPIDB: ``` sudo apt install openmpi-bin libopenmpi-dev mpich mpich-doc ``` 安装 VS Code和插件 在 Ubuntu 上安装 VS Code 的方式有多种,可以从官网下载 .deb 安装包,也可以通过终端使用 snap 进行安装。安装完成后,在 VS Code 中安装 C/C++ 和 C/C++ Debug 插件。 配置 VS Code 调试 打开 VS Code,新建一个 C++ 工程。在工程根目录下创建一个名为 `.vscode` 的文件夹,并在该文件夹下创建一个名为 `launch.json` 的文件。 在 `launch.json` 中添加以下配置: ``` { "version": "0.2.0", "configurations": [ { "name": "Debug MPI Program", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/<your-binary>", "args": ["-np", "4", "<your-args>"], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "linux": { "MIMode": "gdb", "miDebuggerPath": "/usr/lib64/openmpi/bin/mpirun", "miDebuggerArgs": ["-np", "4", "-hostfile", "${workspaceFolder}/hostfile", "--debugger", "gdb", "--launch", "<your-binary>"] } } ] } ``` 其中: - `program`:指定要调试的可执行文件路径。 - `args`:指定要运行的进程数和其他参数。 - `miDebuggerPath`:指定 MPI 运行器的路径。 - `miDebuggerArgs`:指定 MPI 运行器的参数。 在上面的配置中,将 `-hostfile` 参数设置为 `${workspaceFolder}/hostfile`,则需要在工程根目录下创建一个名为 `hostfile` 的文件,并在该文件中指定要运行程序的主机名和进程数。例如: ``` localhost slots=2 192.168.1.100 slots=2 ``` 运行调试 按下 F5 键运行调试,VS Code 将启动 MPI 运行器,并使用 GDB 进行调试。你可以在调试面板中查看程序的输出和调试信息。 希望这些步骤可以帮助你在 Ubuntu 上使用 VS Code 调试 OpenMPI 代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值