集群中多节点NCCL分布式通信

部署运行你感兴趣的模型镜像

集群中多节点NCCL分布式通信

需求:在多台linux服务器中,我需要配置分布式通信环境,以适配后续分布式训练大模型的需求。

测试脚本:

import torch
import torch.distributed as dist
from datetime import timedelta

def demo_basic():
    dist.init_process_group("nccl", init_method='env://', timeout=timedelta(seconds=20))
    rank = dist.get_rank()
    print(f"Start running on rank {rank}.")
    
    torch.cuda.set_device(rank % torch.cuda.device_count())

    device_id = rank % torch.cuda.device_count()

    tensor = torch.arange(2) + 1 + 2 * rank
    tensor = tensor.cuda()
    print(f"rank {rank}: {tensor}")
    
    tensor_list = [torch.zeros_like(tensor).cuda() for _ in range(4)]
    dist.all_gather(tensor_list, tensor)
    print(f"after gather, rank {rank}: tensor_list: {tensor_list}")
    
    dist.barrier()
    dist.all_reduce(tensor, op=dist.ReduceOp.SUM)
    print(f"after reduce, rank {rank}: tensor: {tensor}")

if __name__ == "__main__":
    demo_basic()

我有两台服务器,每台服务器中有2张GPU,两台服务器能相互免密登录,在终端中运行脚本:

torchrun --nproc_per_node=2 --nnodes=2 --node_rank=0 --master_addr=172.18.xxx.xx --master_port=29500 mptest.py

在不同服务器上需更改–node_rank=0的值。

服务器0输出:

服务器1输出:在这里插入图片描述

踩坑

若服务器有多个网卡,需要在代码运行前在终端指定网卡,不然会报错!

export NCCL_SOCKET_IFNAME=eno2

每台服务器都需要!且每台服务器的网卡名不同,可通过ipconfig进行查看!

若仍出现无法连接的情况,可以参考:
https://blog.youkuaiyun.com/Komach/article/details/130765773

您可能感兴趣的与本文相关的镜像

Wan2.2-I2V-A14B

Wan2.2-I2V-A14B

图生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值