杭州网站设计精选柚v米科技,免费的简历制作,wordpress织梦哪个好,网站标题和描述优化参考#xff1a;https://blog.51cto.com/u_16099172/7398948 问题#xff1a;用小数据集训练显存使用率、GPU使用率正常#xff0c;但是用大数据集训练GPU使用率一直是0. 小数据#xff1a; 大数据#xff1a; 1、我理解GPU内存占用率显存使用率#xff0c;由模型的大小…参考https://blog.51cto.com/u_16099172/7398948 问题用小数据集训练显存使用率、GPU使用率正常但是用大数据集训练GPU使用率一直是0. 小数据 大数据 1、我理解GPU内存占用率显存使用率由模型的大小以及batch size的大小来影响这个指标。模型结构固定的情况下尽量将batch size设置大充分利用GPU的内存。但是代码中有val部分val时会只使用gpu0bs太大可能导致val时候out of memory。 2、gpu利用率。GPU在等待数据从CPU传输过来当从总线传输到GPU之后GPU逐渐起计算来利用率会突然升高但是GPU的算力很强大0.5秒就基本能处理完数据。所以利用率接下来又会降下去等待下一个batch的传入。因此这个GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。最好当然就是换更好的四代或者更强大的内存条配合更好的CPU。硬件都固定的情况下尝试调节参数优化gpu使用率。 在PyTorch这个框架里面数据加载Dataloader上做更改和优化包括num_workers线程数pin_memory会提升速度。解决好数据传输的带宽瓶颈和GPU的运算效率低的问题。
torch.utils.data.DataLoader(image_datasets[x],batch_sizebatch_size, shuffleTrue,num_workers8,pin_memoryTrue)为了提高利用率首先要将num_workers线程数设置得体4,8,16是几个常选的几个参数。本人测试过将num_workers设置的非常大例如2432,等其效率反而降低因为模型需要将数据平均分配到几个子线程去进行预处理分发等数据操作设高了反而影响效率。当然线程数设置为1是单个CPU来进行数据的预处理和传输给GPU效率也会低。其次当你的服务器或者电脑的内存较大性能较好的时候建议打开pin_memory打开就省掉了将数据从CPU传入到缓存RAM里面再给传输到GPU上为True时是直接映射到GPU的相关内存块上省掉了一点数据传输时间。 3. CPU的利用率问题 很多人在模型训练过程中不只是关注GPU的各种性能参数往往还需要查看CPU处理的怎么样利用的好不好。这一点至关重要。但是对于CPU不能一味追求超高的占用率。如图所示对于14339这个程序来说其CPU占用率为2349%我的服务器是32核的所以最高为3200%。这表明用了24核CPU来加载数据和做预处理和后处理等。其实主要的CPU花在加载传输数据上。此时来测量数据加载的时间发现即使CPU利用率如此之高其实际数据加载时间是设置恰当的DataLoader的20倍以上也就是说这种方法来加载数据慢20倍。当DataLoader的num_workers0时或者不设置这个参数会出现这个情况。