一、配置代码环境
二、遇见问题
2.1 win 系统运行 sh 文件:用conda 配环境,pytorch配置参数运行sh文件
缺少的库和包直接在conda 里配。
pytorch运行
2.1 查看run.sh 查看主函数在哪
可知主程序为 dbs.py 文件
2.2 打开dbs.py 文件
dbs.py中规定,超参(如batch_size、world_size)都来自args
而args又调用parseA.py中的函数get_parse
2.3 打开parserA.py
parseA.py中的函数get_parse中规定了一些超参的写法
如world_size对应-ws,对应集群数量,由于我的电脑只有一个cpu,因此设为1。按照论文,此处应该设置为4。
这里注意debug对应-d,为true时使用cpu运行,false时使用gpu。由于我的电脑只有cpu,所以这里应设置为true,后期用服务器的时候再调整为false。
2.4 运行dbs.py
在dbs.py的 configuration 中执行超参配置
出现问题
3.1 AttributeError: module ‘torch.distributed‘ has no attribute ‘init_process_group‘
报错原因:
torch1.7 以下版本不支持Windows下的分布式训练,在Linux内核才不会报这个错。
解决办法:
方法1:
换成Linux系统运行代码
方法2:
1)将Windows下的 torch 换成 1.7.0及以上的版本。(1.5~1.8 版本的 torch 代码基本都兼容)
温馨提示:建议离线下载 torch1.7.1 版本,torchvision0.8.2 版本。
下载链接如下:
https://download.pytorch.org/whl/
2)使用conda更换torch和torchvision版本
3)之后,将 init_process_group 函数的参数更改为以下内容:
torch.distributed.init_process_group( backend="gloo",
init_method=r"file:///{your model path}",
world_size=args.world_size, # 本机gpu的数目
rank=args.rank ) # rank是本机gpu的编号列表,如2个gpu即为 [0,1]
3.2 RuntimeError: No rendezvous handler for env://错误(dbs.py文件中)
出问题代码如下:
import torch.distributed as dist
dist.init_process_group(backend="gloo",
world_size=args.world_size,
rank=args.local_rank)
在上述代码中,我们没有对init_process_group函数的参数init_method进行设置,所以参数init_method使用了默认值env://,但是在windows上并不支持env://,所以我们需要增加init_method参数:
import torch.distributed as dist
dist.init_process_group(backend="gloo",
world_size=args.world_size,
rank=args.local_rank,
init_method="file:///sharefile")