Reputation: 877
I am trying to run code from this repo. I have disabled cuda by changing lines 39/40 in main.py from
parser.add_argument('--type', default='torch.cuda.FloatTensor', help='type of tensor - e.g torch.cuda.HalfTensor')
to
parser.add_argument('--type', default='torch.FloatTensor', help='type of tensor - e.g torch.HalfTensor')
Despite this, running the code gives me the following exception:
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
Spent some time looking through the issues in the Pytorch github, to no avail. Help, please?
Upvotes: 24
Views: 117812
Reputation: 9
Upvotes: 0
Reputation: 339
When experiencing this problem with Detectron2, adding the below code fixes the problem.
cfg.MODEL.DEVICE = "cpu"
Upvotes: 2
Reputation: 61
In my case, I had not installed PyTorch with Cuda enabled in my Anaconda environment. Note that you need a CUDA enabled GPU for this to work.
Follow this link to install PyTorch for the specific version of Cuda you have: https://pytorch.org/get-started/locally/
In my case I installed this version: conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
Upvotes: 6
Reputation: 21
So I'm using a Mac, trying to create a Neural Net with cuda like
net = nn.Sequential(
nn.Linear(28*28, 100),
nn.ReLU(),
nn.Linear(100, 100),
nn.ReLU(),
nn.Linear(100, 10),
nn.LogSoftmax()
).cuda()
My mistake was that I was trying to create nn, while Macs don't have CUDA.
So if anyone facing the same problem just remove the .cuda()
and you code should work.
Edit:
You can't do GPU computations without CUDA. And unfortunately for people who have Intel integrated graphics, CUDA can't be installed because it's only compatible for NVIDIA GPUs.
If you have a NVIDIA graphic card, it's probably that CUDA is already installed on our system, if not you can install it.
You can buy external graphics compatible with your computer but that alone will take around $300, not to mention the problem of connectivity.
Otherwise you can use :
Google-Colaboratory, Kaggle Kernels (Free)
AWS, GCP(free credits), PaperSpace (Paid)
Upvotes: 2
Reputation: 37741
If you look into the data.py file, you can see the function:
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)
which is called twice in main.py file to get an iterator for the train and dev data. If you see the DataLoader class in pytorch, there is a parameter called:
pin_memory (bool, optional) – If True, the data loader will copy tensors into CUDA pinned memory before returning them.
which is by default True
in the get_iterator
function. And as a result you are getting this error. You can simply pass the pin_memory
param value as False
when you are calling get_iterator
function as follows.
train_data = get_iterator(get_coco_data(vocab, train=True),
batch_size=args.batch_size,
...,
...,
...,
pin_memory=False)
Upvotes: 6