报错
在运行单机多卡训练与测试的时候,直接执行训练/测试脚本遇到如下报错:
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
主节点( rank
为0
)的r地址。对于单节点多进程训练,可以简单地为127.0.0.1
;IPv6应具有模式[0:0:0:0:0:0:0:1]
--master_port
主节点( rank
为0
)上的端口,用于分布式训练期间的通信--use_env
使用环境变量传递 local rank
。其值默认为False
,如果设置为True
,脚本将不会传递--local_rank
作为参数,而是设置LOCAL_RANK