pytorch - Torch:Nccl 可用但未使用(?)
问题描述
我使用 PyTorch 1.9.0,但在尝试运行模型的分布式版本时出现以下错误:
File "/home/ferdiko/fastmoe/examples/transformer-xl/train.py", line 315, in <module>
para_model = DistributedGroupedDataParallel(model).to(device)
File "/home/ferdiko/anaconda3/envs/fastmoe/lib/python3.9/site-packages/fastmoe-0.2.1-py3.9-linux-x86_64.egg/fmoe/distributed.py", line 45, in __init__
self.comms["dp"] = get_torch_default_comm()
File "/home/ferdiko/anaconda3/envs/fastmoe/lib/python3.9/site-packages/fastmoe-0.2.1-py3.9-linux-x86_64.egg/fmoe/utils.py", line 30, in get_torch_default_comm
raise RuntimeError("Unsupported PyTorch version")
如果我跑,torch.cuda.nccl.version()
我会得到2708
。开发人员建议运行:
x = torch.rand(10).cuda()
print(torch.cuda.nccl.is_available(x))
这给了我False
。这是否真的意味着 PyTorch 和 NCCL 存在问题?
解决方案
torch.cuda.nccl.is_available
需要一系列张量,如果它们在不同的设备上,希望你会得到True
:
In [1]: import torch
In [2]: x = torch.rand(1024, 1024, device='cuda:0')
In [3]: y = torch.rand(1024, 1024, device='cuda:1')
In [4]: torch.cuda.nccl.is_available([x, y])
Out[4]: True
如果你只给它一个张量,torch.cuda.nccl.is_available
它将遍历它,但同一个张量的不同部分总是在同一个设备上,所以你总是会得到False
:
In [5]: torch.cuda.nccl.is_available(x)
Out[5]: False
In [6]: torch.cuda.nccl.is_available([x])
Out[6]: True
推荐阅读
- c++ - 为什么不能取消引用指向 const 对象的 const 指针的 const 指针来调用 const 对象中的成员函数?
- android - Firebase App Distribution APK 不会安装
- javascript - 使用 node.js 和 express 列出待办事项
- c++ - 如果我使用 new 创建向量并将它们放在向量中,外部向量或内部向量析构函数会删除它们吗?
- slurm - Slurm:默认分配一定数量的 GPU
- python-3.x - Python,第二个函数在n的值大于2991时不运行
- python - 在opencv中计算通道的标准偏差
- javascript - 与 React hooks 相关的潜在问题要求面试
- python - Python二进制搜索查找所有非重复数字
- .htaccess - .htaccess 给出文件未找到(404 错误)