关于TensorFlow在GPU中的使用规则.doc

上传人:白大夫 文档编号:3387841 上传时间:2019-08-20 格式:DOC 页数:4 大小:23KB
返回 下载 相关 举报
关于TensorFlow在GPU中的使用规则.doc_第1页
第1页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《关于TensorFlow在GPU中的使用规则.doc》由会员分享,可在线阅读,更多相关《关于TensorFlow在GPU中的使用规则.doc(4页珍藏版)》请在三一文库上搜索。

1、关于TensorFlow在GPU中的使用规则支持的设备在一套标准系统中通常有多台计算设备。TensorFlow 支持CPU和GPU这两种设备。它们均用strings表示。例如:/cpu:0:机器的 CPU/device:GPU:0:机器的 GPU(如果有一个)/device:GPU:1:机器的第二个 GPU(以此类推)如果 TensorFlow 指令中兼有 CPU 和 GPU 实现,当该指令分配到设备时,GPU 设备有优先权。例如,如果matmul同时存在 CPU 和 GPU 核函数,在同时有cpu:0和gpu:0设备的系统中,gpu:0会被选来运行matmul。记录设备分配方式要找出您的指令

2、和张量被分配到哪个设备,请创建会话并将log_device_placement配置选项设为True。# Creates a graph.a = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=2, 3, name=a)b = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=3, 2, name=b)c = tf.matmul(a, b)# Creates a session with log_device_placement set to True.sess = tf.Session(config=

3、tf.ConfigProto(log_device_placement=True)# Runs the op.print(sess.run(c)您应该会看到以下输出内容:Device mapping:/job:localhost/replica:0/task:0/device:GPU:0 - device: 0, name: Tesla K40c, pci busid: 0000:05:00.0b: /job:localhost/replica:0/task:0/device:GPU:0a: /job:localhost/replica:0/task:0/device:GPU:0MatMul:

4、 /job:localhost/replica:0/task:0/device:GPU:0 22. 28. 49. 64.手动分配设备如果您希望特定指令在您选择的设备(而非系统自动为您选择的设备)上运行,您可以使用with tf.device创建设备上下文,这个上下文中的所有指令都将被分配在同一个设备上运行。# Creates a graph.with tf.device(/cpu:0): a = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=2, 3, name=a) b = tf.constant(1.0, 2.0, 3.0, 4.0, 5

5、.0, 6.0, shape=3, 2, name=b)c = tf.matmul(a, b)# Creates a session with log_device_placement set to True.sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)# Runs the op.print(sess.run(c)您会看到现在a和b被分配到cpu:0。由于未明确指定运行MatMul指令的设备,因此 TensorFlow 运行时将根据指令和可用设备(此示例中的gpu:0)选择一个设备,并会根据要求自动复制设备

6、间的张量。Device mapping:/job:localhost/replica:0/task:0/device:GPU:0 - device: 0, name: Tesla K40c, pci busid: 0000:05:00.0b: /job:localhost/replica:0/task:0/cpu:0a: /job:localhost/replica:0/task:0/cpu:0MatMul: /job:localhost/replica:0/task:0/device:GPU:0 22. 28. 49. 64.允许增加 GPU 内存默认情况下,TensorFlow 会映射进程

7、可见的所有 GPU 的几乎所有 GPU 内存(取决于CUDA_VISIBLE_DEVICES)。通过减少内存碎片,可以更有效地使用设备上相对宝贵的 GPU 内存资源。在某些情况下,最理想的是进程只分配可用内存的一个子集,或者仅根据进程需要增加内存使用量。TensorFlow 在 Session 上提供两个 Config 选项来进行控制。第一个是allow_growth选项,它试图根据运行时的需要来分配 GPU 内存:它刚开始分配很少的内存,随着 Session 开始运行并需要更多 GPU 内存,我们会扩展 TensorFlow 进程所需的 GPU 内存区域。请注意,我们不会释放内存,因为这可能

8、导致出现更严重的内存碎片情况。要开启此选项,请通过以下方式在 ConfigProto 中设置选项:config = tf.ConfigProto()config.gpu_options.allow_growth = Truesession = tf.Session(config=config, .)如要真正限制 TensorFlow 进程可使用的 GPU 内存量,这非常实用。在多 GPU 系统中使用单一 GPU如果您的系统中有多个 GPU,则默认情况下将选择 ID 最小的 GPU。如果您希望在其他 GPU 上运行,则需要显式指定偏好设置:# Creates a graph.with tf.de

9、vice(/device:GPU:2): a = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=2, 3, name=a) b = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=3, 2, name=b) c = tf.matmul(a, b)# Creates a session with log_device_placement set to True.sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)# Ru

10、ns the op.print(sess.run(c)如果您指定的设备不存在,您会看到InvalidArgumentError:InvalidArgumentError: Invalid argument: Cannot assign a device to node b:Could not satisfy explicit device specification /device:GPU:2 Node: b = Constdtype=DT_FLOAT, value=Tensor, _device=/device:GPU:2()当指定设备不存在时,如果您希望 TensorFlow 自动选择现有

11、的受支持设备来运行指令,则可以在创建会话时将配置选项中的allow_soft_placement设为True。# Creates a graph.with tf.device(/device:GPU:2): a = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=2, 3, name=a) b = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=3, 2, name=b) c = tf.matmul(a, b)# Creates a session with allow_soft_placement

12、 and log_device_placement set# to True.sess = tf.Session(config=tf.ConfigProto( allow_soft_placement=True, log_device_placement=True)# Runs the op.print(sess.run(c)使用多个 GPU如果您想要在多个 GPU 上运行 TensorFlow,则可以采用多塔式方式构建模型,其中每个塔都会分配给不同 GPU。例如:# Creates a graph.c = for d in /device:GPU:2, /device:GPU:3: with

13、 tf.device(d): a = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=2, 3) b = tf.constant(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, shape=3, 2) c.append(tf.matmul(a, b)with tf.device(/cpu:0): sum = tf.add_n(c)# Creates a session with log_device_placement set to True.sess = tf.Session(config=tf.ConfigProto(log_de

14、vice_placement=True)# Runs the op.print(sess.run(sum)您会看到以下输出内容:Device mapping:/job:localhost/replica:0/task:0/device:GPU:0 - device: 0, name: Tesla K20m, pci busid: 0000:02:00.0/job:localhost/replica:0/task:0/device:GPU:1 - device: 1, name: Tesla K20m, pci busid: 0000:03:00.0/job:localhost/replica:

15、0/task:0/device:GPU:2 - device: 2, name: Tesla K20m, pci busid: 0000:83:00.0/job:localhost/replica:0/task:0/device:GPU:3 - device: 3, name: Tesla K20m, pci busid: 0000:84:00.0Const_3: /job:localhost/replica:0/task:0/device:GPU:3Const_2: /job:localhost/replica:0/task:0/device:GPU:3MatMul_1: /job:loca

16、lhost/replica:0/task:0/device:GPU:3Const_1: /job:localhost/replica:0/task:0/device:GPU:2Const: /job:localhost/replica:0/task:0/device:GPU:2MatMul: /job:localhost/replica:0/task:0/device:GPU:2AddN: /job:localhost/replica:0/task:0/cpu:0 44. 56. 98. 128.cifar10 教程就是个很好的例子(https:/tensorflow.google/tutorials/images/deep_cnn?hl=zh-CN),演示了如何使用多个 GPU 进行训练。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1