最近在使用单机多卡进行分布式(DDP)训练时遇到一个错误:ERROR: torch.distributed.elastic.multiprocessing.api:failed。
而实际报错的内容是:ValueError: sampler option is mutually exclusive with shuffle.
报错的详细内容如下截图所士:
在这里插入图片描述
出现这种错误的原因是,在分布式训练时使用了sampler,并且dataloader时参数shuffle设置成True。由于sampler在分配数据给gpu时已经自动打乱了数据,所以dataloader无需重复打乱数据,二者是相冲的。
因此,使用分布式训练时,会使用sampler,在dataloader时参数shuffle默认False即可。

最近在使用单机多卡进行分布式(DDP)训练时遇到一个错误:ERROR: torch.distributed.elastic.multiprocessing.api:failed。而实际报错的内容是:ValueError: sampler option is mutually exclusive with shuffle.
1、Runtime Error : CUDA out of memory. Tried to allocate 592.00 MiB (GPU 3; 10.76 GiB total capacity; 9.08 GiB already allocated; 296.56 MiB free…… 2、 torch . distributed . elastic .multiprocessiong.erroes.Child Failed Error
Traceback (most recent call last): File "my_train.py", line 194, in <module> main(parser.parse_args()) File "my_train.py", line 75, in main backbone = torch .nn.parallel. Distributed DataParallel( File "/roo 在参加一个分类比赛的时候down了一套demo用来做比赛,但是在导入from apex.parallel import Distributed DataParallel as DDP的时候提示错误: Attribute Error : module ‘ torch . distributed ‘ has no attribute ‘deprecated‘ 解决 方法:Attribute Error : module ‘ torch . distributed ‘ has no attribute ‘deprecated‘
PyTorch Elastic PyTorch 分布式训练框架 Torch Elastic Torch Elastic 允许您以容错和弹性的方式启动分布式 PyTorch 作业。 有关最新文档,请参阅我们的网站。 要求 torch elastic 需要 python 3 (3.6+) torch etcd 安装 pip install torch elastic Quickstart 容错在 4 个节点上,8 个训练器/节点,总共 4 * 8 = 32 个训练器。 在所有节点上运行以下命令。 python -m torch elastic . distributed .launch --nnodes=4 --nproc_per_node=8 --rdzv_id=JOB_ID --rdzv_backend=etcd --rdzv_endpoint=ETCD_HOST:ETCD_PORT YOUR_TRAINING_SCRIPT.py (--arg1 ...训练脚本参数.. .) 弹性在 1 ~ 4 个节点上,8 个训练器/节点,总共 8 ~ 32 个训练器。 作业在 1 个节点健康后立即开始,您
value error : error initializing torch . distributed using tcp:// rendezvous: rank parameter missing
<h3>回答1:</h3><br/>这个错误提示是在使用 PyTorch 分布式训练时出现的,其中rank参数缺失导致初始化失败。在分布式训练中,每个进程都需要有一个唯一的rank值,用于区分不同的进程。建议检查代码中是否正确设置了rank参数,或者尝试使用其他的初始化方式。 <h3>回答2:</h3><br/>value error : error initializing torch . distributed using tcp:// rendezvous: rank parameter missing 是一个错误信息,说明在使用 PyTorch 的分布式训练功能时,缺少 "rank" 参数导致初始化失败。分布式训练是指将一个大型 深度学习 模型划分为多份,每份分配给不同的GPU或计算节点进行训练,最后将结果合并得到最终的模型。这样做可以显著减少训练时间和计算资源。而 PyTorch 提供了简便的分布式训练处理来帮助我们简单地完成这个操作。 通常在分布式训练过程中,需要设置每个进程的排名(rank),以便使各个进程能够相互通信和同步,并且知道自己在整个分布式训练过程中扮演的角色。缺少这个参数就会出现这个错误信息。因此,我们需要在初始化时手动指定每个进程的rank。 有两种方法可以指定rank参数。一种是在命令行中使用参数 --rank 或在代码中明确设置rank变量。例如: ``` python python -m torch . distributed .launch --nproc_per_node=2 --nnodes=2 --node_rank=0 --master_addr='192.168.1.1' --master_port=12345 your_training_script.py --rank=0 另一种方法是使用 torch . distributed .init_process_group 方法: ``` python torch . distributed .init_process_group(backend='nccl', rank=0, world_size=2) 其中,backend 指定通信后端,rank 指定进程的排名,world_size 指定总进程数。这个方法需要在每个进程中执行。 为了避免出现 value error : error initializing torch . distributed using tcp:// rendezvous: rank parameter missing 错误,我们需要注意设置好每个进程的rank参数,并且在初始化时对其进行明确设置,这样才能在分布式训练中顺利运行。 <h3>回答3:</h3><br/>value error : error initializing torch . distributed using tcp:// rendezvous: rank parameter missing 是 PyTorch 分布式训练过程中可能遇到的错误,其意思是在使用 tcp:// rendezvous 初始化 torch . distributed 时缺少了 rank 参数。 分布式训练是指将单个模型的参数划分成多块进行训练,可以极大地加速模型训练的速度,从而更快地得到训练结果。而 PyTorch 是一款能够较好地支持分布式训练的 深度学习 框架。 对于上述的错误,产生可能原因有以下几种: 1. 命令行运行命令时没有传递 rank 参数。 2. 同时运行多个分布式训练任务,导致端口占用的 问题 ,建议修改端口号。 3. 计算节点之间网络连接异常。 针对这个错误,可以针对性的采取以下几种方法: 1. 当使用命令行运行命令时,确保传递了 rank 参数。 2. 检查端口是否被占用,并更换端口号,避免端口冲突。 3. 确保计算节点之间的网络连接正常。 最后,如果以上 解决 方法均无效,可参考 PyTorch 的官方文档或者到 PyTorch 用户社区寻求答案。采用正确的方法 解决 问题 ,可以使得分布式训练更加高效,得到更好的训练结果。