• 下面的代码都是在tensorflow版本 1.8 运行的
  • Tensorflow 使用GPU训练的时候一个小说明
1. tensorflow 默认占满所有可用GPU
2. 如果一台机器上有多个GPU,那么默认只会有第一块GPU参与计算,其余的会白白浪费掉
  • 单机单卡
常规操作,省略
  • 单机多卡

    • 各卡执行不同模型训练任务
    # 只需要在代码开头导入os,并指定使用第几块GPU,默认重0开始
    import os
    os.environ["CUDA_VISIBLE_DEVICES"]="0"  # 指定GPU就好了# 如果想查看可用的GPU,可以使用下面的代码
    def get_available_gpus():"""获取可用的GPU设备  --> ['/device:GPU:0', '/device:GPU:1', '/device:GPU:2']"""from tensorflow.python.client import device_lib as _device_liblocal_device_protos = _device_lib.list_local_devices()return [x.name for x in local_device_protos if x.device_type == 'GPU']# 等会用到的代码
    def average_gradients(tower_grads):"""这个代码没变过,都是官网给的"""average_grads = []for grad_and_vars in zip(*tower_grads):grads = []for g, _ in grad_and_vars:expend_g = tf.expand_dims(g, 0)grads.append(expend_g)grad = tf.concat(grads, 0)grad = tf.reduce_mean(grad, 0)v = grad_and_vars[0][1]grad_and_var = (grad, v)average_grads.append(grad_and_var)return average_grads
    • 各卡协同执行训练同一模型任务

      • 异步
    '''异步计算介绍
    1. 多卡计算的时候各自都有权限更新参数
    2. 会导致loss下降不稳定
    '''import os
    os.environ["CUDA_VISIBLE_DEVICES"]="0,1"  # 指定使用前两块GPUdef multi_train():"""异步GPU代码"""with tf.device("/cpu:0"):# 定义输入的占位符X = tf.placeholder(tf.float32, [None, num_input])Y = tf.placeholder(tf.float32, [None, num_classes])opt = tf.train.AdamOptimizer(learning_rate)num_gpu = len(get_available_gpus())tower_grads = []with tf.variable_scope(tf.get_variable_scope()):for i in range(2):with tf.device("/gpu:%d" % i):with tf.name_scope("tower_%d" % i):# step1.划分数据_x = X[i * batch_size:(i + 1) * batch_size]_y = Y[i * batch_size:(i + 1) * batch_size]logits = build_model(_x)  # 调用自己写的构建模型,返回logitstf.get_variable_scope().reuse_variables()  # 重用变量# step2. 计算loss以及gradsloss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=_y, logits=logits))grads = opt.compute_gradients(loss) tower_grads.append(grads)grads = average_gradients(tower_grads)# 这个情况时异步执行train_op = opt.apply_gradients(grads)# 后面的就是一样的代码的了with tf.Session() as sess:sess.run(tf.global_variables_initializer())for step in range(1, num_steps + 1):batch_x, batch_y = mnist.train.next_batch(batch_size * num_gpus)sess.run(train_op, feed_dict={X: batch_x, Y: batch_y})
    
    • 同步
    '''同步计算介绍
    1. 由CPU调度,等待所有GPU计算之后的平均grads更新参数
    2. loss下降稳定,但是效率取决于最慢的那个GPU注意:同步计算,如果初始化不恰到或者初始学习率设置过大,梯度很容易爆炸
    注意:如果查看loss会发现会出一个nan,然后之后loss一直在一个固定的数值
    '''
    import os
    os.environ["CUDA_VISIBLE_DEVICES"]="0,1"  # 指定使用前两块GPUdef multi_train():"""同步GPU代码"""with tf.device("/cpu:0"):# 定义输入的占位符X = tf.placeholder(tf.float32, [None, num_input])Y = tf.placeholder(tf.float32, [None, num_classes])opt = tf.train.AdamOptimizer(learning_rate)num_gpu = len(get_available_gpus())tower_grads = []with tf.variable_scope(tf.get_variable_scope()):for i in range(2):with tf.device("/gpu:%d" % i):with tf.name_scope("tower_%d" % i):# step1.划分数据_x = X[i * batch_size:(i + 1) * batch_size]_y = Y[i * batch_size:(i + 1) * batch_size]logits = build_model(_x)  # 调用自己写的构建模型,返回logitstf.get_variable_scope().reuse_variables()  # 重用变量# step2. 计算loss以及gradsloss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=_y, logits=logits))grads = opt.compute_gradients(loss) tower_grads.append(grads)grads = average_gradients(tower_grads)# 同步代码global_step = global_step=tf.train.get_or_create_global_step()update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)with tf.control_dependencies(update_ops):train_op = opt.apply_gradients(avg_grads, global_step=global_step # 这样子是同步# 后面的就是一样的代码的了with tf.Session() as sess:sess.run(tf.global_variables_initializer())for step in range(1, num_steps + 1):batch_x, batch_y = mnist.train.next_batch(batch_size * num_gpus)sess.run(train_op, feed_dict={X: batch_x, Y: batch_y})
  • 多机单卡

目前查到了一个例子,不过还没有调试过,如果确认能够运行再贴上来
  • 多机多卡
同多机单卡,多机单卡成功之后,无非是py文件换成单机多卡的py文件而已
  • 参考链接
    https://www.tensorflow.org/tutorials/images/deep_cnn
  • 最后,如果大家有什么说的话可以在下方留言,一起学习探讨

Tensorflow多GPU计算相关推荐

  1. tensorflow的GPU加速计算

    参考    tensorflow的GPU加速计算 - 云+社区 - 腾讯云 一.概述 tensorflow程序可以通过tf.device函数来指定运行每一个操作的设备,这个设备可以是本地的CPU或者G ...

  2. tensorflow cpu和gpu计算速度比较

    摘要: 1.以动态图形式计算一个简单的加法 2.cpu和gpu计算力比较(包括如何指定cpu和gpu) 3.关于gpu版本的tensorflow安装问题,可以参考另一篇博文:https://www.c ...

  3. Win10 TensorFlow(gpu)安装详解

    Win10 TensorFlow(gpu)安装详解 写在前面:TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着 ...

  4. Tensorfow_yolov3 Intel Realsense D435 图像整合(合并)输入GPU计算耗时测试

    以前我们六个摄像头轮询依次输入视频帧给识别函数,识别函数放到GPU计算,640×360下每帧识别耗时为60-80ms,轮一圈下来识别就很慢了,约360-480ms 后来我们讨论这个问题时,我说之前我测 ...

  5. 使用TensorFlow,GPU和Docker容器进行深度学习

    摘要: 数据科学家使用GPU来提高TensorFlow的计算速度,但GPU价格昂贵,也需要对其所占用的资源进行认真的管理.本文将带你来一起解决这一问题. 在过去的几个月中,我和多个企业的数据科学团队进 ...

  6. directx最终用户运行时_WSL将支持GPU计算,并可运行Linux GUI应用

    在刚刚召开的微软 Build 2020 大会上,传来不少有关 WSL 的新消息.这篇文章将一并整理.逐一介绍. 其中,本月就可实现的包括以下这两项: 随着 2020 年 5 月更新的发布,Window ...

  7. gpu跑普通python程序_普通电脑PC怎样跑TensorFlow的GPU模式

    展开全部 首先需要看你的PC配置是否32313133353236313431303231363533e4b893e5b19e31333363373736够,TF的GPU模式只支持N卡,然后计算能力高于 ...

  8. 安装tensorflow的GPU版本(详细图文教程)--CUDA11.6的安装

    文章目录 TensorFlow简介 TensorFlow是什么 tensorflow版本变迁 tensorflow 2.0 架构 安装过程 常用IDE安装 python3.9的安装 Anaconda的 ...

  9. gpu的单位表示_现代企业中的GPU计算!

    从电子工程领域来讲,GPU是一种专门设计,主要用于图形信号处理的单芯片处理器.在独立显卡中, 一般位于PCB板的中心.与之对应的是使用计算机中央处理器的CPU.很久以前,显卡还叫做图形加速器,并不是计 ...

最新文章

  1. cdt规约报文用程序解析_DNS协议(报文解析)
  2. python图片识别-python图像识别
  3. 【数理知识】《数值分析》李庆扬老师-第7章-非线性方程与方程组的数值解法
  4. webpack打包html里的img图片
  5. 用lemon测交互题
  6. Android Studio 中快速提取方法
  7. Android使用Intent实现拨打电话的动作
  8. android开发国内镜像
  9. MultiProcessing中主进程与子进程之间通过管道(Pipe)通信
  10. permgen_打破PermGen神话
  11. 行业大牛都是同时掌握游戏建模和游戏原画的吗?
  12. Mac IDEA 实用快捷键大全(持续更新)
  13. php curl方式网页爬虫爬取原页面数据+simple_html_dom解析方式(php爬虫基础)
  14. 【POJ 3764】 The xor-longest path
  15. Mind+实例5——打地鼠游戏
  16. Unity3D射击游戏的准心
  17. 【教学类-06-01】测20以内加减法的最大数量(优化版 20220122 VS python 20以内加减法)
  18. 三角形质心坐标怎么求_三角形的重心怎么求
  19. onload 属性的作用
  20. 计算机蓝屏代码0xc0000020,Win10打开软件提示“损坏的映像 错误0xc0000020”的解决方法...

热门文章

  1. JsLint 的安装和使用
  2. 日本电商Rakuten:最凶猛的国际扩张者
  3. 制育秧钵机/铲平机/C616数控车床/车床主传动系统/熟料圆锥式破碎机/船舶起重机/龙门铣床/桥式起重机/采煤机摇臂减速箱/圆锥筛/通道穿梭车/车床尾座体/变速器拨叉/刮板输送机/油菜排种器……设计
  4. linux桌面立方体,为Ubuntu 3D立方体每个桌面显示配置不同壁纸的方法[图文]
  5. 谷歌浏览器如何整页截图
  6. 杭州计算机高中分数线,2019年杭州市区高中第一批录取分数线公布!
  7. windows安装Git LFS
  8. js基础-jsAPI-JQ部分总结
  9. Dijit、ExtJS、jQuery UI 异同浅析
  10. PMP是终身有效吗?