python - 即使检测到 GPU,Pytorch 也不使用 GPU

标签 python gpu pytorch

我将 Windows 10 jupyter 笔记本制作为服务器并在其上运行一些火车。

我已经正确安装了 CUDA 9.0 和 cuDNN,python 检测到了 GPU。这就是我在 anaconda 提示符下得到的。

>>> torch.cuda.get_device_name(0)
'GeForce GTX 1070'

我还通过 .cuda() 将我的模型和张量放在 cuda 上
model = LogPPredictor(1, 58, 64, 128, 1, 'gsc')

if torch.cuda.is_available():
    torch.set_default_tensor_type(torch.cuda.DoubleTensor)
    model.cuda()
else:
    torch.set_default_tensor_type(torch.FloatTensor)

list_train_loss = list()
list_val_loss = list()
acc = 0
mse = 0

optimizer = args.optim(model.parameters(),
                       lr=args.lr,
                       weight_decay=args.l2_coef)

data_train = DataLoader(args.dict_partition['train'], 
                        batch_size=args.batch_size,
                        pin_memory=True,
                        shuffle=args.shuffle)

data_val = DataLoader(args.dict_partition['val'],
                     batch_size=args.batch_size,
                     pin_memory=True,
                     shuffle=args.shuffle)

for epoch in tqdm_notebook(range(args.epoch), desc='Epoch'):
    model.train()
    epoch_train_loss = 0
    for i, batch in enumerate(data_train):
        list_feature = torch.tensor(batch[0]).cuda()
        list_adj = torch.tensor(batch[1]).cuda()
        list_logP = torch.tensor(batch[2]).cuda()
        list_logP = list_logP.view(-1,1)

        optimizer.zero_grad()
        list_pred_logP = model(list_feature, list_adj)
        list_pred_logP.require_grad = False
        train_loss = args.criterion(list_pred_logP, list_logP)
        epoch_train_loss += train_loss.item()
        train_loss.backward()
        optimizer.step()

    list_train_loss.append(epoch_train_loss/len(data_train))

    model.eval()
    epoch_val_loss = 0
    with torch.no_grad():
        for i, batch in enumerate(data_val):
            list_feature = torch.tensor(batch[0]).cuda()
            list_adj = torch.tensor(batch[1]).cuda()
            list_logP = torch.tensor(batch[2]).cuda()
            list_logP = list_logP.view(-1,1)


            list_pred_logP = model(list_feature, list_adj)
            val_loss = args.criterion(list_pred_logP, list_logP)
            epoch_val_loss += val_loss.item()

    list_val_loss.append(epoch_val_loss/len(data_val))

data_test = DataLoader(args.dict_partition['test'],
                   batch_size=args.batch_size,
                   pin_memory=True,
                   shuffle=args.shuffle)

model.eval()
with torch.no_grad():
    logP_total = list()
    pred_logP_total = list()
    for i, batch in enumerate(data_val):
        list_feature = torch.tensor(batch[0]).cuda()
        list_adj = torch.tensor(batch[1]).cuda()
        list_logP = torch.tensor(batch[2]).cuda()
        logP_total += list_logP.tolist()
        list_logP = list_logP.view(-1,1)


    list_pred_logP = model(list_feature, list_adj)

    pred_logP_total += list_pred_logP.tolist()

mse = mean_squared_error(logP_total, pred_logP_total)

但是在 Windows 的进程管理器上,每当我开始训练时,只有 CPU 使用率上升到 25%,而 GPU 使用率仍然为 0。我该如何解决这个问题???

最佳答案

我在 Cuda 上使用 PyTorch 时遇到了类似的问题。在寻找可能的解决方案后,我发现 Soumith 本人的以下帖子非常有帮助。
https://discuss.pytorch.org/t/gpu-supposed-to-be-used-but-isnt/2883
最重要的是,至少在我的情况下,我无法在 GPU 上放置足够的负载。我的应用程序存在瓶颈。尝试另一个示例,或增加批量大小;应该没问题。

关于python - 即使检测到 GPU,Pytorch 也不使用 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53043713/

相关文章:

opencl - PowerVR SGX530 GPU 设备是否可以使用 OpenCL?

python - 如何加载部分预训练的 pytorch 模型?

python - 如何使用 sqlalchemy 编写自己的聚合函数?

python - 在这种情况下,sorted() 的替代方法是什么?或者这可以管理吗?

python - 从HTML内容获取社交网络信息

python - 'ToPILImage' 对象没有属性 'show'

machine-learning - Pytorch 中的预期双张量(获得浮点张量)

python - 如何在 matplotlib 图形上绘制框架

macos - Metal 中的线程和线程组

python - 在caffe安装中安装python包时出错