gpt4 book ai didi

ssh - 使用 MPI 后端时,分布式 PyTorch 代码在多个节点上停止

转载 作者:行者123 更新时间:2023-12-02 14:29:37 25 4
gpt4 key购买 nike

我正在尝试使用 openMPI 在三个节点上运行 Pytorch 代码,但代码只是停止而没有任何错误或输出。最终我的目的是在这些节点上分发 Pytorch 图。

我的三个节点连接在同一个 LAN 中,并且无需密码即可相互 SSH 访问,并且具有相似的规范:

  • Ubuntu 18.04
  • 库达 10.0
  • 从源代码构建和安装的 OpenMPI
  • 从源代码构建和安装的 PyTorch

  • 下面显示的代码适用于单个节点 - 多个进程,如:
    > mpirun -np 3 -H 192.168.100.101:3 python3 run.py

    具有以下输出:
    INIT 0 of 3 Init env://
    INIT 1 of 3 Init env://
    INIT 2 of 3 Init env://
    RUN 0 of 3 with tensor([0., 0., 0.])
    RUN 1 of 3 with tensor([0., 0., 0.])
    RUN 2 of 3 with tensor([0., 0., 0.])
    Rank 1 has data tensor(1.)
    Rank 0 has data tensor(1.)
    Rank 2 has data tensor(1.)

    但是当我将代码放在三个节点上并分别在每个节点上运行以下命令时,它什么也不做:
    > mpirun -np 3 -H 192.168.100.101:1,192.168.100.102:1,192.168.100.103:1 python3 run.py

    请对 MPI 的代码或配置进行任何修改以在多个节点上运行给定的 Pytorch 代码提供一些想法?

    #!/usr/bin/env python
    import os
    import torch
    import torch.distributed as dist
    from torch.multiprocessing import Process

    def run(rank, size):
    tensor = torch.zeros(size)
    print(f"RUN {rank} of {size} with {tensor}")

    # incrementing the old tensor
    tensor += 1

    # sending tensor to next rank
    if rank == size-1:
    dist.send(tensor=tensor, dst=0)
    else:
    dist.send(tensor=tensor, dst=rank+1)

    # receiving tensor from previous rank
    if rank == 0:
    dist.recv(tensor=tensor, src=size-1)
    else:
    dist.recv(tensor=tensor, src=rank-1)

    print('Rank ', rank, ' has data ', tensor[0])


    def init_processes(rank, size, fn, backend, init):
    print(f"INIT {rank} of {size} Init {init}")
    dist.init_process_group(backend, init, rank=rank, world_size=size)
    fn(rank, size)


    if __name__ == "__main__":
    os.environ['MASTER_ADDR'] = '192.168.100.101'
    os.environ['BACKEND'] = 'mpi'
    os.environ['INIT_METHOD'] = 'env://'
    world_size = int(os.environ['OMPI_COMM_WORLD_SIZE'])
    world_rank = int(os.environ['OMPI_COMM_WORLD_RANK'])

    init_processes(world_rank, world_size, run, os.environ['BACKEND'], os.environ['INIT_METHOD'])

    注:由于基于 arm64 的硬件,NCCL 不是我的选择。

    最佳答案

    很抱歉回复晚了,但我可以通过添加 来解决这个问题--mca btl_tcp_if_include eth1 标志为 mpirun command .

    暂停的原因是,默认情况下,openMPI 会尝试通过本地环回网络接口(interface)(例如 .我们必须明确指定应该包含(或排除)哪些接口(interface)来定位其他其他节点。

    我希望它能拯救某人的一天:)

    关于ssh - 使用 MPI 后端时,分布式 PyTorch 代码在多个节点上停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53596010/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com