我有一台带有离散GPU和专用GPU的游戏笔记本电脑(NVIDIA GeForce RTX 3070(。
我在tensorflow上训练神经网络的速度非常慢。比另一台CPU和GPU规格极低的笔记本电脑慢很多倍。
我认为速度慢的原因是tensorflow可能在专用GPU上运行,因为当我禁用专用GPU时,训练时间会加快,大约快10倍。这些都是巨大的差异,一个数量级。
我知道默认情况下内核在专用GPU上运行,因为当我在会话中间禁用专用GPU时,内核会死亡。
因此,我认为禁用专用GPU迫使它在CPU(AMD Ryzen 9 5900HX(上运行,这应该会更好。
我用Jupyter笔记本在Anaconda上运行这个。
我如何强制它由CPU而不是我的GPU使用。
编辑:这似乎是一个复杂的问题。更多信息。
-
在禁用专用GPU的情况下,根据任务管理器的说法,训练时GPU使用率为0%(如预期(,CPU使用率为40%。
-
但在启用专用GPU的情况下,训练时,GPU使用率约为10%,CPU使用率约20%。这比上面的慢10倍。为什么它同时使用两者,但CPU更少?
-
根据任务管理器的说法,在启用专用GPU的情况下(即正常情况下(,scikit learn使用CPU而不是GPU。所以这个问题是张量流特有的。
-
在会话中间杀死专用GPU不仅会导致内核崩溃,还会导致打开Jupyter笔记本电脑。
-
强制Anaconda和Jupyter Notebook在Windows设置中使用集成GPU而不是专用GPU并不能解决问题。它仍在使用专用GPU。
只需告诉tensorflow这样做:
with tf.device("/CPU:0"): #name might vary
model.fit(...)