如何在tensorflow中使用指定gpu

  介绍

如何在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中设置选项:

如何在tensorflow中使用指定gpu