number work和batch size调大,不过估计没用,你的瓶颈目前在内存,你这内存不够,调整再大也塞不下。至于为什么你的GPU利用率低,原因在于GPU利用率是一段时间内的平均利用率,在计算的时候高,显卡计算比较快,但是等待IO数据的过程相当于空闲,空闲的时间多了,平均利用率不就下来了?
我怀疑你的代码有问题,根本就是在cpu上运行,没有启用gpu
尽量使用较大的批量大小进行训练,这样可以充分利用GPU的并行计算能力,提高GPU利用率
# 单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训练时的GPU利用率,可以尝试以下优化方法:
model.to(device)
和images.to(device)
将模型和数据移动到GPU上进行计算。model.to(device)
...
images = images.to(device)
batch_size
的大小:增加batch_size
可以充分利用GPU的并行性能。可以尝试不同的batch_size
大小来找到性能最佳值,但要注意不要超过GPU显存的限制。train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
简化数据预处理过程:复杂的数据预处理过程可能会导致GPU利用率降低。可以尝试简化数据预处理的步骤以提高GPU利用率。
使用更高效的模型结构或优化算法:一些模型结构可能不够高效,导致GPU利用率低下。可以尝试使用更高效的模型结构或优化算法来提高GPU利用率。
减少不必要的数据传输:避免在每个训练迭代中频繁地将数据从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()
请注意,优化GPU利用率可能需要根据具体情况进行尝试和调整,因为不同的模型和数据集可能有不同的最佳优化策略。