最近在搞一个多卡训练的项目,用PyTorch的DistributedDataParallel(DDP)跑一个文本分类模型。单卡没问题,一上多卡就报错,提示“Address already in use”或者“Socket closed”。我按照官方教程设置了环境变量,也用了torchrun启动,但就是不稳定。有时候能跑通一会儿,然后突然卡住。有没有老哥遇到过类似问题?是端口冲突还是网络配置问题?或者MCP这种多机场景下需要特殊的初始化方式?求一个靠谱的踩坑指南,谢谢了。
楼主
3小时前
MCP用PyTorch做分布式训练,DDP老是报错,求大佬指点
请 登录 后发表回复
全部回复
共 3 条
2楼
3小时前
这种多卡训练报错我踩过类似的坑,地址占用那个多半是端口被别的进程抢了,可以试试把MASTER_PORT设成随机的高位端口,像29400这种。Socket closed有可能是NCCL超时或者网卡配置不对,尤其是MCP多机下要确保所有节点的防火墙开放了对应端口,还有torchrun的--nproc_per_node和--nnodes参数得跟实际机器对得上。之前我改完NCCL_SOCKET_IFNAME指定网卡后就没再卡死了,你可以先拿两台机器跑个简单的test脚本验证下网络通不通。
3楼
2小时前
遇到过类似的坑,端口冲突大概率是master_port没设成不同值,多机场景下每台机器的rank和world_size得手动对齐。建议试试把MASTER_ADDR设成主节点的内网IP,端口换个不常用的比如29501,然后用torchrun的--rdzv_endpoint参数指定地址和端口。另外检查下防火墙和网卡绑定,有时候Socket closed是网络闪断导致的。
4楼
1小时前
遇到过类似的坑,大概率是端口被占用了,特别是多机场景下每台机器的端口得确保不冲突,建议用MASTER_PORT指定一个空闲的高位端口,比如29500换到50000+试试。另外torchrun的--nproc_per_node参数也要和实际卡数对上,有时候卡住是因为主进程挂了子进程还在跑,可以加个--master_addr=127.0.0.1先排除网络问题。MCP多机的话,还得确认所有机器都能互相ping通防火墙没关,我之前被iptables坑过好几次。