I want to move certain values outside GPU. How do I do it?
The following code is not working .
loss.backward()
optimizer.step()
scheduler.step()
loss = criterion(outputs, labels)
acc = binary_acc(outputs, labels)
epoch_val_loss += loss.item().detach()
epoch_val_acc += acc.item().detach()
It is throwing the following error :
AttributeError: ‘float’ object has no attribute ‘detach’
I even tried this but it is not working
epoch_val_loss += loss.item().cpu()
epoch_val_acc += acc.item().cpu()
This throws the error :
AttributeError: ‘float’ object has no attribute ‘cpu’
Please help!
tensor.item()
is returning a Python scalar value, which is already detached and on the CPU.
This call will fail if tensor
contains more than a single value and thus cannot be represented by a Python scalar.
1 Like
I have another doubt… the output of a neural network is stored in CPU or GPU? what should I do to get it out of GPU if its in GPU?
If depends if the parameters and also input were previously pushed to the GPU.
If so, you can push the tensor back to the host via tensor.cpu()
or tensor.to('cpu')
.
1 Like
The reason why i want to move these to CPU is because of limited memory in GPU. I have 2 more doubts
- Will using
torch.cuda.empty_cache()
at the end of every epoch during training help with that?
- Will using
torch.cuda.empty_cache()
at the end of every epoch affect the way the loss is backpropagated?
-
No, as it will only free the cache and thus force PyTorch to re-allocate the memory via synchronizing malloc
calls, which will slow down your code. You won’t avoid out-of-memory issues, but would allow other applications to use the freed GPU memory.
-
No, freeing the cache will not have any functionality impact (besides slowing down your code).
Moving the output to the CPU will also not move the entire computation graph to it, but only this single value (which won’t save a lot of memory).
If you are running out of memory, you could decrease the batch size, use torch.utils.checkpoint
, the new CPU-offloading util., mixed-precision training, etc.
1 Like