Pytorch断言错误:Torch未启用CUDA编译

18

我正在尝试运行这个库中的代码。 我通过更改main.py中第39/40行来禁用cuda。

parser.add_argument('--type', default='torch.cuda.FloatTensor', help='type of tensor - e.g torch.cuda.HalfTensor')

parser.add_argument('--type', default='torch.FloatTensor', help='type of tensor - e.g torch.HalfTensor')

尽管如此,运行代码会给我以下异常:

Traceback (most recent call last):
  File "main.py", line 190, in <module>
    main()
  File "main.py", line 178, in main
    model, train_data, training=True, optimizer=optimizer)
  File "main.py", line 135, in forward
    for i, (imgs, (captions, lengths)) in enumerate(data):
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 201, in __next__
    return self._process_next_batch(batch)
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 221, in _process_next_batch
    raise batch.exc_type(batch.exc_msg)
AssertionError: Traceback (most recent call last):
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 62, in _pin_memory_loop
    batch = pin_memory_batch(batch)
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 123, in pin_memory_batch
    return [pin_memory_batch(sample) for sample in batch]
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 123, in <listcomp>
    return [pin_memory_batch(sample) for sample in batch]
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 117, in pin_memory_batch
    return batch.pin_memory()
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/tensor.py", line 82, in pin_memory
    return type(self)().set_(storage.pin_memory()).view_as(self)
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/storage.py", line 83, in pin_memory
    allocator = torch.cuda._host_allocator()
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/cuda/__init__.py", line 220, in _host_allocator
    _lazy_init()
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/cuda/__init__.py", line 84, in _lazy_init
    _check_driver()
  File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/cuda/__init__.py", line 51, in _check_driver
    raise AssertionError("Torch not compiled with CUDA enabled")
AssertionError: Torch not compiled with CUDA enabled

我花了一些时间在Pytorch的Github上查找问题,但仍然没有结果。 求助!


你确定在 def forwarduse_cuda 确实是 False 吗? - Mr Tsjolder
是的,我手动将其更改为 use_cuda = False(尽管在我上面所做的更改后逻辑上也会产生 False)。 - Lakshay Sharma
get_iterator(...) 函数中添加 pin_memory=False,代码如下: get_iterator(..., pin_memory=False)。该函数在以下两个位置被调用:https://github.com/eladhoffer/captionGen/blob/master/main.py#L96-L105 - timbmg
@blckbird 那个方法有效了,谢谢! - Lakshay Sharma
6个回答

11

在 macOS 上,去掉 .cuda() 对我有用。


在 Linux 中也是这样。 - Debashis Sahoo

6
如果您查看data.py文件,您可以看到以下函数:
def get_iterator(data, batch_size=32, max_length=30, shuffle=True, num_workers=4, pin_memory=True):
    cap, vocab = data
    return torch.utils.data.DataLoader(
        cap,
        batch_size=batch_size, shuffle=shuffle,
        collate_fn=create_batches(vocab, max_length),
        num_workers=num_workers, pin_memory=pin_memory)

main.py文件中调用两次,以获取训练和开发数据的迭代器。如果您查看pytorch中的DataLoader类,则有一个名为pin_memory(bool,optional)的参数:

pin_memory(bool,optional) - 如果为True,则数据加载器将在返回它们之前将张量复制到CUDA固定内存中。

在get_iterator函数中,默认情况下为True。因此,您会收到此错误。当您调用get_iterator函数时,可以将pin_memory param值简单地传递为False,如下所示。
train_data = get_iterator(get_coco_data(vocab, train=True),
                          batch_size=args.batch_size,
                          ...,
                          ...,
                          ...,
                          pin_memory=False)

5
在我的情况下,我并没有在Anaconda环境中启用Cuda安装PyTorch。请注意,您需要使用支持CUDA的GPU才能使其正常工作。
请点击以下链接,为您的特定版本的Cuda安装PyTorch:https://pytorch.org/get-started/locally/ 在我的情况下,我安装了这个版本:conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch。

这个和第一个一样好。有帮助! - Aaron John Sabu

2
当使用Detectron2时遇到此问题,添加以下代码即可解决问题。
cfg.MODEL.DEVICE = "cpu"

2

我正在使用Mac电脑,尝试使用cuda创建神经网络,就像这样:

net = nn.Sequential(
    nn.Linear(28*28, 100),
    nn.ReLU(),
    nn.Linear(100, 100),
    nn.ReLU(),
    nn.Linear(100, 10),
    nn.LogSoftmax()
).cuda()

我的错误在于我试图创建nn,而Macs没有CUDA。所以如果有人遇到同样的问题,只需删除.cuda(),你的代码就应该能够运行。
编辑:
如果没有CUDA,就无法进行GPU计算。不幸的是,对于拥有英特尔集成显卡的人来说,CUDA无法安装,因为它仅与NVIDIA GPU兼容。
如果你有NVIDIA显卡,很可能CUDA已经安装在你的系统上,如果没有,你可以安装它。
你可以购买与你的电脑兼容的外部显卡,但这本身就需要花费约300美元,更不用说连接的问题了。
否则,你可以使用: Google-Colaboratory、Kaggle Kernels(免费) AWS、GCP(免费学分)、PaperSpace(付费)

那么之后你建议如何在GPU上进行这些计算呢?我的意思是我不使用Mac,但我的PC有Intel集成显卡,我只使用Google Colab来完成我的项目。所以,我是否需要在我的设备上安装CUDA呢? - Shashank Shukla

0
  • 激活安装了 Torch 的正确环境。 例如:conda activate "环境名称"

您的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认您的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - moken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接