Я пытаюсь использовать cuda в Goolge Colab, но при запуске моей программы я получаю следующую ошибку:
RuntimeError: Невозможно инициализировать CUDA без библиотеки ATen_cuda.PyTorch разделяет свой бэкэнд на две общие библиотеки: библиотеку ЦП и библиотеку CUDA;эта ошибка произошла из-за того, что вы пытаетесь использовать некоторые функции CUDA, но библиотека CUDA по какой-то причине не была загружена динамическим компоновщиком.НЕОБХОДИМО загрузить библиотеку CUDA, ДАЖЕ ЕСЛИ вы не используете символы из библиотеки CUDA напрямую!Одним из распространенных виновников является отсутствие -Wl, - нет необходимости в аргументах ссылки;многие динамические линкеры удаляют динамические библиотечные зависимости, если вы не зависите ни от одного из их символов.Вы можете проверить, произошло ли это с помощью ldd в вашем двоичном файле, чтобы узнать, есть ли зависимость от библиотеки * _cuda.so.
У меня установлены следующие библиотеки.
from os.path import exists
from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag
platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())
cuda_output = !ldconfig -p|grep cudart.so|sed -e 's/.*\.\([0-9]*\)\.\([0-9]*\)$/cu\1\2/'
accelerator = cuda_output[0] if exists('/dev/nvidia0') else 'cpu'
!pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.4.1-
{platform}-linux_x86_64.whl torchvision
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
import time
import torch
from torch import nn
from torch import optim
import torch.nn.functional as F
from torchvision import datasets, transforms, models
!pip install Pillow==5.3.0
# import the new one
import PIL
И я пытаюсь запустить следующий код.
for device in ['cpu', 'cuda']:
criterion = nn.NLLLoss()
# Only train the classifier parameters, feature parameters are frozen
optimizer = optim.Adam(model.classifier.parameters(), lr=0.001)
model.to(device)
for ii, (inputs, labels) in enumerate(trainloader):
# Move input and label tensors to the GPU
inputs, labels = inputs.to(device), labels.to(device)
start = time.time()
outputs = model.forward(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
if ii==3:
break
print(f"Device = {device}; Time per batch: {(time.time() - start)/3:.3f} seconds")