Cuda работает, но GPU не производит вычислений. Pytorch-Cuda (Jupyter)

Рейтинг: 0Ответов: 1Опубликовано: 04.05.2023

Библиотеки

У меня установлена Cuda 11.8 в соответствии с версиями библиотек. torch.cuda.is_available() дает True и соответственно всего распознает одно устройство GPU, но при запуске нейронной сети CNN в диспетчере задач GPU не нагружается. Код проверен через Collab (т.е. с точки зрения кода все в порядке, вычисляется на GPU). В настройках CUDA используется видеокарта NVIDIA GTX 1070 Ti, драйверы обновлены, ОС - Windows 10. Помогите, пожалуйста!

    def get_default_device():
    if torch.cuda.is_available():
        return torch.device('cuda')
    else:
        return torch.device('cpu')
device =get_default_device()   

def to_device(data, device):
    if isinstance(data, (list,tuple)):
        return [to_device(x, device) for x in data]
    return data.to(device, non_blocking=True)

class DeviceDataLoader():
    def __init__(self, dl, device):
        self.dl = dl
        self.device = device
        
    def __iter__(self):
        for b in self.dl: 
            yield to_device(b, self.device)

    def __len__(self):
        return len(self.dl)

Ну и соответственно

train_dl = DeviceDataLoader(train_dl, device)
val_dl = DeviceDataLoader(val_dl, device)
to_device(model, device)

device(type='cuda')

Информация по ПК


Хочу также добавить, что, по идее, вычисления у меня могут производится, так как
python -c "import torch; print(torch.__version__); print(torch.randn(1).cuda())

дает результат tensor([1.4457], device = 'cuda:0')
Обучение:

@torch.no_grad()
def evaluate(model, val_loader):
    model.eval()
    outputs = [model.validation_step(batch) for batch in val_loader]
    return model.validation_epoch_end(outputs)

def fit(epochs, lr, model, train_loader, val_loader, opt_func=torch.optim.SGD):
    history = []
    optimizer = opt_func(model.parameters(), lr)
    for epoch in range(epochs):
        # Training Phase 
        model.train()
        train_losses = []
        for images, labels in train_loader:
            images = images.to(device)
            labels = labels.to(device)
            loss = model.training_step(images, labels)
            train_losses.append(loss)
            loss.backward()
            optimizer.step()
            optimizer.zero_grad()
        # Validation phase
        result = evaluate(model, val_loader)
        result['train_loss'] = torch.stack(train_losses).mean().item()
        model.epoch_end(epoch, result)
        history.append(result)
    return history

Ответы

▲ 0

ок. начинаем с простых шагов

import torch
import torchvision.models as models

model = models.resnet18().cuda()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
compiled_model = torch.compile(model)

x = torch.randn(16, 3, 224, 224).cuda()
optimizer.zero_grad()
out = compiled_model(x)
out.sum().backward()
optimizer.step()

работает на cuda?