pytorch训练时gpu利用率太低

img


如图 用pytorch训练一个还比较轻量级的目标检测网络,训练图片只有3000张左右。发现GPU利用率几乎一直在10%以下,cpu在40-50%,内存在90%左右。请问该怎么提高GPU利用率减少训练时间?

number work和batch size调大,不过估计没用,你的瓶颈目前在内存,你这内存不够,调整再大也塞不下。至于为什么你的GPU利用率低,原因在于GPU利用率是一段时间内的平均利用率,在计算的时候高,显卡计算比较快,但是等待IO数据的过程相当于空闲,空闲的时间多了,平均利用率不就下来了?

我怀疑你的代码有问题,根本就是在cpu上运行,没有启用gpu

尽量使用较大的批量大小进行训练,这样可以充分利用GPU的并行计算能力,提高GPU利用率

单GPU或者CPU

# 单GPU或者CPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

多GPU请参考下方链接

https://blog.csdn.net/weixin_41012765/article/details/128089337

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客也许可以解决你的问题👉 :详解pytorch实现猫狗识别98%附代码
  • 除此之外, 这篇博客: PyTorch模型训练集正常收敛,但验证集准确率稳定在10%并保持不变中的 最终解决 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    要提高PyTorch训练时的GPU利用率,可以尝试以下优化方法:

    1. 确保模型和数据在GPU上进行计算:使用model.to(device)images.to(device)将模型和数据移动到GPU上进行计算。
    model.to(device)
    ...
    images = images.to(device)
    
    1. 增加batch_size的大小:增加batch_size可以充分利用GPU的并行性能。可以尝试不同的batch_size大小来找到性能最佳值,但要注意不要超过GPU显存的限制。
    train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
    
    1. 简化数据预处理过程:复杂的数据预处理过程可能会导致GPU利用率降低。可以尝试简化数据预处理的步骤以提高GPU利用率。

    2. 使用更高效的模型结构或优化算法:一些模型结构可能不够高效,导致GPU利用率低下。可以尝试使用更高效的模型结构或优化算法来提高GPU利用率。

    3. 减少不必要的数据传输:避免在每个训练迭代中频繁地将数据从GPU传输到CPU,可以减少数据传输开销。可以尝试在每个迭代中尽量减少数据传输的次数。

    for epoch in range(10):
        for images, labels in train_loader:
            images = images.to(device)
            labels = labels.to(device)
    
            optimizer.zero_grad()
            outputs = model(images)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
    
    1. 使用更快的硬件:如果GPU的性能受到限制,可以考虑升级到更快的GPU或使用多GPU并行训练来提高训练速度。

    请注意,优化GPU利用率可能需要根据具体情况进行尝试和调整,因为不同的模型和数据集可能有不同的最佳优化策略。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^