网站开发公司组织架构,株洲网站设计公司,益阳高端网站建设,公司网站如何更改内容1. 基本概念
在使用DistributedDataParallel时有一些概率必须掌握
多机多卡含义world_size代表有几台机器#xff0c;可以理解为几台服务器rank第几台机器#xff0c;即第几个服务器local_rank某台机器中的第几块GPU
单机多卡含义world_size代表机器一共有几块GPUrank第几…1. 基本概念
在使用DistributedDataParallel时有一些概率必须掌握
多机多卡含义world_size代表有几台机器可以理解为几台服务器rank第几台机器即第几个服务器local_rank某台机器中的第几块GPU
单机多卡含义world_size代表机器一共有几块GPUrank第几块GPUlocal_rank第几块GPU与rank相同
2. 使用方法
2.1. 修改主函数
在运行的时候DistributedDataParallel会往你的程序中加入一个参数local_rank所以要现在你的代码中解析这个参数如
parser.add_argument(--local_rank, typeint, default1, helpnumber of cpu threads to use during batch generation)2.2. 初始化
torch.distributed.init_process_group(backendnccl)os.environ[CUDA_VISIBLE_DEVICES] 0, 1, 2 # 有几块GPU写多少
2.3. 设定device
local_rank torch.distributed.get_rank()
torch.cuda.set_device(local_rank)
global device
device torch.device(cuda, local_rank)我没用arg.local_rank新定义了一个local_rank变量是因为我更信任distributed.get_rank()这个函数 这里用torch.device来写并且加了global是因为后面模型和数据都要用到这个device不会出错
2.4. 模型加载到多gpu
model.to(device) # 这句不能少最好不要用model.cuda()
model torch.nn.parallel.DistributedDataParallel(model, device_ids[local_rank], output_devicelocal_rank, find_unused_parametersTrue) # 这句加载到多GPU上2.5. 数据加载到gpu
数据.to(device)2.6. 启动
torchrun --nproc_per_node4 --rdzv_endpointlocalhost:12345 train_cylinder_asym.py
参考文献
Pytorch并行计算(二): DistributedDataParallel介绍_dist.barrier_harry_tea的博客-CSDN博客
DistributedDataParallel多GPU分布式训练全过程总结 跟着做90%成功_BRiAq的博客-CSDN博客