最近在使用单机多卡进行分布式(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
用户社区寻求答案。采用正确的方法
解决
问题
,可以使得分布式训练更加高效,得到更好的训练结果。