代码之家  ›  专栏  ›  技术社区  ›  Lakshay Sharma

Pytorch AssertionError:Torch未在启用CUDA的情况下编译

  •  14
  • Lakshay Sharma  · 技术社区  · 6 年前

    我正在尝试从运行代码 this repo . 我已经禁用了cuda通过改变行39/40的主要。py自

    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中的问题,但没有结果。请帮忙?

    4 回复  |  直到 6 年前
        1
  •  7
  •   jizhihaoSAMA    4 年前

    正在删除 .cuda() 在macOS上为我工作。

        2
  •  5
  •   Wasi Ahmad    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 文件以获取训练和开发数据的迭代器。如果你看到 DataLoader 类中,有一个参数称为:

    pin_内存(bool,可选)如果为True,数据加载器将在返回张量之前将其复制到CUDA固定内存中。

    True get_iterator 作用因此,你会得到这个错误。您只需通过 pin_memory 参数值为 False get\u迭代器

    train_data = get_iterator(get_coco_data(vocab, train=True),
                              batch_size=args.batch_size,
                              ...,
                              ...,
                              ...,
                              pin_memory=False)
    
        3
  •  3
  •   Jimit Mistry    3 年前

    在我的情况下,我没有在我的Anaconda环境中安装启用Cuda的PyTorch。请注意,您需要一个支持CUDA的GPU才能工作。

    按照此链接为您拥有的特定版本的Cuda安装PyTorch: https://pytorch.org/get-started/locally/

    就我而言,我安装了这个版本:

        4
  •  2
  •   Abhishek Yadav    4 年前

    所以我使用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,而Mac没有CUDA。 因此,如果有人面临同样的问题,只需删除 .cuda() 您的代码应该可以工作。

    编辑:

    没有CUDA,你无法进行GPU计算。不幸的是,对于使用英特尔集成图形的用户来说,CUDA无法安装,因为它只与NVIDIA GPU兼容。

    如果你有一个NVIDIA图形卡,很可能我们的系统上已经安装了CUDA,如果没有,你可以安装它。

    你可以购买与电脑兼容的外部图形,但仅此一项就需要大约300美元,更不用说连接问题了。

    Google Colaboratory,Kaggle内核(免费)
    AWS、GCP(免费学分)、PaperSpace(付费)