我自己解决了这个问题。这是因为celeba数据集中的图像太多,而我的数据加载器效率很低。数据加载耗时过多,导致速度降低。
但是,这仍然不能解释为什么在同时占用gpu内存的情况下在cpu上运行代码的原因。毕竟我只是转移到pytorch。
我的环境:Windows10,cuda 9.0,cudnn 7.0.5,tensorflow-gpu 1.8.0。
我正在工作一个电单车模型。最初,它在我的玩具数据集上运行良好,并且可以在gpu上运行而没有主要问题(尽管前10次迭代花费的时间非常长,这意味着它可能在cpu上运行)。
我后来尝试使用celeba数据集,只更改了文件夹名称以加载数据(我将数据一次全部加载到内存中,然后使用我自己的next_batch函数和feed_dict训练模型)。然后出现了问题:仍然按照GPU-Z占用了GPU内存,但是GPU负载很低(不到10%),并且训练速度非常慢(是正常值的10倍以上),这意味着代码在CPU上运行。
有人可以给我一些建议吗?谢谢您的帮助。
答案 0 :(得分:0)
您尝试的批量大小是多少?如果对于一个小模型来说它太低了(大约2-8),那么消耗的内存就不会太多。这完全取决于您的批处理大小,模型中的参数数量等。它还取决于模型体系结构以及模型中有多少组件可以并行运行。也许尝试增加批次大小并重新运行它?