首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火炬dist.all_gather_object悬挂

火炬dist.all_gather_object悬挂
EN

Stack Overflow用户
提问于 2022-03-22 07:52:19
回答 1查看 588关注 0票数 1

我使用dist.all_gather_object (PyTorch版本1.8)从所有GPU收集示例ids:

代码语言:javascript
复制
for batch in dataloader:
    video_sns = batch["video_ids"]
    logits = model(batch)
    group_gather_vdnames = [None for _ in range(envs['nGPU'])]
    group_gather_logits = [torch.zeros_like(logits) for _ in range(envs['nGPU'])]
    dist.all_gather(group_gather_logits, logits)
    dist.all_gather_object(group_gather_vdnames, video_sns)

dist.all_gather(group_gather_logits, logits)正常工作,但程序挂在dist.all_gather_object(group_gather_vdnames, video_sns)行。

我想知道为什么这个程序挂在dist.all_gather_object()上,我该如何修复它呢?

额外信息:我在一个带有多个GPU的本地机器上运行我的ddp代码。开始脚本是:

代码语言:javascript
复制
export NUM_NODES=1
export NUM_GPUS_PER_NODE=2
export NODE_RANK=0
export WORLD_SIZE=$(($NUM_NODES * $NUM_GPUS_PER_NODE))

python -m torch.distributed.launch \
       --nproc_per_node=$NUM_GPUS_PER_NODE \
       --nnodes=$NUM_NODES \
       --node_rank $NODE_RANK \
       main.py \
       --my_args
EN

回答 1

Stack Overflow用户

发布于 2022-03-22 09:28:35

结果,我们需要手动设置设备id,就像文档串 of dist.all_gather_object() API中提到的那样。

添加

代码语言:javascript
复制
torch.cuda.set_device(envs['LRANK']) # my local gpu_id

密码起作用了。

我一直认为GPU是由PyTorch dist自动设置的,结果不是。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71568524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档