如何在tensorflow中使用指定gpu ?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>一、指定使用某个显卡强>
如果机器中有多块gpu, tensorflow会默认吃掉所有能用的显存,如果实验室多人公用一台服务器,希望指定使用特定某块gpu。
可以在文件开头加入如下代码:
import 操作系统 os.environ [“CUDA_DEVICE_ORDER"],=,“PCI_BUS_ID" os.environ [“CUDA_VISIBLE_DEVICES"],=,, 1,,, #,使用第二块GPU(从0开始)
也可以制定使用某几块GPU
import 操作系统 os.environ [“CUDA_DEVICE_ORDER"],=,“PCI_BUS_ID" os.environ [“CUDA_VISIBLE_DEVICES"],=,“0,, 2,, #,使用第,一,三块GPU
禁用GPU
import 操作系统 os.environ [“CUDA_VISIBLE_DEVICES"],=,“1“
支持的设备
在一套标准系统中通常有多台计算设备.TensorFlow支持CPU和GPU这两种设备。它们均用字符串表示,例如:
“/CPU: 0“:机器的,CPU。 “/设备:GPU: 0“:机器的,GPU(如果有一个)。 “/设备:GPU: 1“:机器的第二个,GPU(以此类推)。
如果TensorFlow指令中兼有CPU和GPU实现,当该指令分配到设备时,GPU设备有优先权,例如,如果matmul同时存在CPU和GPU核函数,在同时有CPU: 0和GPU: 0设备的系统中,GPU: 0会被选来运行matmul。
<强>记录设备分配方式强>
要找出您的指令和张量被分配到哪个设备,请创建会话并将log_device_placement配置选项设为真。
# Creates a 图。 时间=a tf.constant([1.0, 2.0, 3.0,, 4.0, 5.0, 6.0),,=(2, 3),形状,name=& # 39;一个# 39;) 时间=b tf.constant([1.0, 2.0, 3.0,, 4.0, 5.0, 6.0),,形状=3,,2,,name=& # 39; b # 39;) 时间=c tf.matmul (a, b) # Creates a  session with  log_device_placement set 用正确的。 时间=sess tf.Session (config=tf.ConfigProto (log_device_placement=True)) # Runs 从而,op。 print (sess.run (c))
应该会看到以下输出内容:
Device 映射:/工作:localhost/副本:0/任务:0/设备:GPU: 0,→,装置:,0,,名字:,Tesla K40c, pci 总线 id: 0000:05:00.0 b:/工作:localhost/副本:0/任务:0/设备:GPU: 0 ,/工作:localhost/副本:0/任务:0/设备:GPU: 0 MatMul:/工作:localhost/副本:0/任务:0/设备:GPU: 0 [[28,22只。] 64年,[49只。]]
<>强手动分配设备强>
如果您希望特定指令在您选择的设备(而非系统自动为您选择的设备)上运行,您可以使用与tf.device创建设备上下文,这个上下文中的所有指令都将被分配在同一个设备上运行。
#, Creates a 图。 with tf.device (& # 39;/cpu: 0 & # 39;):=,,a  tf.constant([1.0, 2.0, 3.0,, 4.0, 5.0, 6.0),,=(2, 3),形状,name=& # 39;一个# 39;)=,,b  tf.constant([1.0, 2.0, 3.0,, 4.0, 5.0, 6.0),,形状=3,,2,,name=& # 39; b # 39;) 时间=c tf.matmul (a, b) #,Creates a  session with log_device_placement set 用正确的。 时间=sess tf.Session (config=tf.ConfigProto (log_device_placement=True)) #,Runs 从而op。 print (sess.run (c))
您会看到现在a和b被分配到cpu: 0,由于未明确指定运行MatMul指令的设备,因此TensorFlow运行时将根据指令和可用设备(此示例中的gpu: 0)选择一个设备,并会根据要求自动复制设备间的张量。
Device 映射:/工作:localhost/副本:0/任务:0/设备:GPU: 0,→,装置:,0,,名字:,Tesla K40c, pci 总线 id: 0000:05:00.0 b:/工作:localhost/副本:0/任务:0/cpu: 0 ,/工作:localhost/副本:0/任务:0/cpu: 0 MatMul:/工作:localhost/副本:0/任务:0/设备:GPU: 0 [[28,22只。] 64年,[49只。]]
<>强允许增加GPU内存强>
默认情况下,TensorFlow会映射进程可见的所有GPU的几乎所有GPU内存(取决于CUDA_VISIBLE_DEVICES)。通过减少内存碎片,可以更有效地使用设备上相对宝贵的GPU内存资源。
在某些情况下,最理想的是进程只分配可用内存的一个子集,或者仅根据进程需要增加内存使用量。TensorFlow在会议上提供两个配置选项来进行控制。
第一个是allow_growth选项,它试图根据运行时的需要来分配GPU内存:它刚开始分配很少的内存,随着会话开始运行并需要更多GPU内存,我们会扩展TensorFlow进程所需的GPU内存区域。请注意,我们不会释放内存,因为这可能导致出现更严重的内存碎片情况。要开启此选项,请通过以下方式在ConfigProto中设置选项: