报错

在运行单机多卡训练与测试的时候,直接执行训练/测试脚本遇到如下报错:

Traceback (most recent call last):...torch.distributed.init_process_group(backend="nccl")File "/usr/local/lib/python3.6/dist-packages/torch/distributed/distributed_c10d.py", line 500, in init_process_groupstore, rank, world_size = next(rendezvous_iterator)File "/usr/local/lib/python3.6/dist-packages/torch/distributed/rendezvous.py", line 166, in _env_rendezvous_handlerraise _env_error("RANK")ValueError: Error initializing torch.distributed using env:// rendezvous: environment variable RANK expected, but not set

解决办法

通过python -m torch.distributed.launch执行脚本,报错解决:

python -m torch.distributed.launch xxx.py# xxx.py为要执行的脚本文件名

说明

  • python -m将其后的模块作为脚本来运行,其后的xxx.py是作为位置参数传递给该脚本,以此来启动分布式训练/测试。
  • python -m torch.distributed.launch除了接受待执行脚本作为位置参数,同时支持一些可选参数以配置分布式训练/测试,部分参数及其含义解释如下:
    参数说明
    --nnodes节点数量,或以:形式给出的节点范围
    --nproc_per_node每个节点的进程(worker)的数量,允许的值:[auto, cpu, gpu, int],单机多卡时可将其理解为使用GPU的数量
    --node_rank多节点分布式训练的节点序号(rank
    --master_addr主节点(rank0)的r地址。对于单节点多进程训练,可以简单地为127.0.0.1;IPv6应具有模式[0:0:0:0:0:0:0:1]
    --master_port主节点(rank0)上的端口,用于分布式训练期间的通信
    --use_env使用环境变量传递local rank。其值默认为False,如果设置为True,脚本将不会传递--local_rank作为参数,而是设置LOCAL_RANK