Tensorflow、Pytorch、Keras的多GPU的并行操作

方法一 :使用深度学习工具提供的 API指定

1.1 Tesorflow

tensroflow指定GPU的多卡并行的时候,也是可以先将声明的变量放入GPU中(PS:这点我还是不太明白,为什么其他的框架没有这样做)

with tf.device("/gpu:%d"%i):

with tf.device("cpu:0")

在创建Session的时候,通过指定session的参数,便可以指定GPU的数量和使用率

ConfigProto()类提供有对GPU使用率的函数方法:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 设置使用率,占用GPU90%的显存
session = tf.Session(config=config)

还可以指定GPU的数量是否增长

# os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"(其中0.1是选择所调用的gpu id)
gpu_options = tf.GPUOptions(allow_growth=True
config = tf.ConfigProto(gpu_options=gpu_options)
config.gpu_options.allow_growth = True  session = tf.Session(config=config)

个人认为最好的方式:

import os # 建议使用这种方式
import tensorflow as tf
os.environ["CUDA_VISIBLE_DEVICES"] = "" # python 的方式指定GPU id
from keras.backend.tensorflow_backend import set_session # 如果不是使用Kears的话,可以不用写这句话
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3 # 指定GPU 利用率
set_session(tf.Session(config=config))

1.2 Pytorch

Pytorch 是目前比较方便的一种深度学习框架,在指定GPU的方法上,也是比较简洁。PyTorch提供有torch.cuda.set_device() 方法

import torch
torch.cuda.set_device(id)

这种方式只能制定一个GPU,不太建议使用

1.3 Keras

由于Kears是作为Tesorflow或者Theano的前端出现的,从某种方式上也是可以用后端深度学习框架进行多GPU的指定的,比如 1.1小节中就是调用的kears的多GPU并行的方式,但这种方式写的代码不美观

Kears本身提供有 keras.utils.multi_gpu_model(model=xxx,gpus=nums) 函数来指定使用多少GPU进行编译

 from keras.utils import multi_gpu_model
model=SegNet() # 构建model
parralle_model = multi_gpu_model(model,gpus=3) # 指定gpu的数量
parralle_model.compile(loss='mse', optimizer=optimizer, loss_weights=[1,1]) # 模型编译

方法二: 在终端指定

2.1 显式的在终端指定

这种方法与深度学习工具无关了,无论是Keras tensorflow 还是Pytorch都是可以使用的

CUDA_VISIBLE_DEVICES=0,2,3  python your_file.py

这里的0,1,3是通过nvidia-smi 命令查看的GPU编号.

2.2 在Python代码中指定

这种方法也是与深度学习工具无关的方法。仔细看看这种方式其实和方法二类似,关键字都是一样的

import os

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "" # 多个GPU下使用的方法是“0,1,2,3”

总结

目前,很多深度学习框架已经把多GPU的并行操作封装的很好了,基本上可以满足开发者的应用需求。

需要注意的是,第二种方法在有些时候是无法起到作用的;比如我今天就遇到到这种情况: 用Kears的时候指定了多个GPU,但还是出现OOM异常,最后请教了一位厉害的程序媛小姐姐才知道Kears需要使用 keras.utils.multi_gpu_model(model=xxx,gpus=nums) 函数来指定使用多少GPU; 非常感谢

15:09:15

Tips:

1. 如何实时的查看GPU 的变化?实时的查看GPU可以使用watch, 相关的命令解释和使用方式可以使用whatis watch 和 man watch 查看

whatis watch
watch (1) - execute a program periodically, showing output fullscreen man watch
WATCH(1) User Commands WATCH(1) NAME
watch - execute a program periodically, showing output fullscreen SYNOPSIS
watch [options] command DESCRIPTION
watch runs command repeatedly, displaying its output and errors (the first screenfull).
This allows you to watch the program output change over time. By default, the program is
run every 2 seconds. By default, watch will run until interrupted. OPTIONS
.... -n, --interval seconds
Specify update interval. The command will not allow quicker than 0.1 second inter‐
val, in which the smaller values are converted. ....

通过man 可以知道watch -n 可以指定时间 ,因此可以使用

watch -n 3 nvidia-smi

同时也可以使用nvidia-smi -l

也能达到相同的效果

Tensorflow、Pytorch、Keras的多GPU使用的更多相关文章

  1. Anaconda安装tensorflow和keras(gpu版,超详细)

    本人配置:window10+GTX 1650+tensorflow-gpu 1.14+keras-gpu 2.2.5+python 3.6,亲测可行 一.Anaconda安装 直接到清华镜像网站下载( ...

  2. TensorFlow+Keras 03 TensorFlow 与 Keras 介绍

    1 TensorFlow 架构图 1.1 处理器 TensorFlow 可以在CPU.GPU.TPU中执行 1.2 平台 TensorFlow 具备跨平台能力,Windows .Linux.Andro ...

  3. tensorflow/pytorch/mxnet的pip安装,非源代码编译,基于cuda10/cudnn7.4.1/ubuntu18.04.md

    os安装 目前对tensorflow和cuda支持最好的是ubuntu的18.04 ,16.04这种lts,推荐使用18.04版本.非lts的版本一般不推荐. Windows倒是也能用来装深度GPU环 ...

  4. 『计算机视觉』Mask-RCNN_推断网络其二:基于ReNet101的FPN共享网络暨TensorFlow和Keras交互简介

    零.参考资料 有关FPN的介绍见『计算机视觉』FPN特征金字塔网络. 网络构架部分代码见Mask_RCNN/mrcnn/model.py中class MaskRCNN的build方法的"in ...

  5. 使用Keras进行多GPU训练 multi_gpu_model

    使用Keras训练具有多个GPU的深度神经网络(照片来源:Nor-Tech.com). 摘要 在今天的博客文章中,我们学习了如何使用多个GPU来训练基于Keras的深度神经网络. 使用多个GPU使我们 ...

  6. windows安装TensorFlow和Keras遇到的问题及其解决方法

    安装TensorFlow在Windows上,真是让我心力交瘁,想死的心都有了,在Windows上做开发真的让人发狂. 首先说一下我的经历,本来也就是起初,网上说python3.7不支持TensorFl ...

  7. Ubuntu18.04 安装TensorFlow 和 Keras

    TensorFlow和Keras是当前两款主流的深度学习框架,Keras被采纳为TensorFlow的高级API,平时做深度学习任务,可以使用Keras作为深度学习框架,并用TensorFlow作为后 ...

  8. win10+anaconda安装tensorflow和keras遇到的坑小结

    win10下利用anaconda安装tensorflow和keras的教程都大同小异(针对CPU版本,我的gpu是1050TI的MAX-Q,不知为啥一直没安装成功),下面简单说下步骤. 一 Anaco ...

  9. 深度学习基础系列(五)| 深入理解交叉熵函数及其在tensorflow和keras中的实现

    在统计学中,损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数.假设某样本的实际输出为a,而预计的输出为y,则y与a之间存在偏差,深度学习的目的即是通过不断地 ...

随机推荐

  1. 数据库事务ACID特性及隔离级别

    数据库ACID特性介绍 1.原子性(Atomic)一个事务被视为一个不可分割的最小工作单元,这个事务里的所有操作要么全部成功执行,要么全都不执行,不能只执行其中的一部分操作.实现事务的原子性,要支持回 ...

  2. iframe空白

    优酷网页上复制的通用代码用来播放视频,浏览器和谷歌模拟器正常,但是发布后手机上打开一片空白,一直以为是苹果手机不支持iframe,最后发现是由于iframe播放链接是http的,而我们网页是https ...

  3. debug?用对拍!

    很多人考noip之类的比赛永远会发生一些奇怪的问题 比如说下面这两位(来自我的两位学长) sliver n:spli,考得怎样啊? spli:就那样啦,day1T1没推出来规律,别的还好 silver ...

  4. 20181031noip模拟赛T1

    思路: 我们会发现不合法的位置只有两种情况 要么在前半边,要么在后半边 那么,我们将序列劈两次 使两次的长度分别为: (n为偶数时要特判一下,因为根本不可能) (n/2),(n/2+1) (n/2+1 ...

  5. Ubuntu install 错误 E:Unable to locate package

    今天在 Ubuntu 上执行 sudo apt install sl 命令,结果报错:E:Unable to locate package sl 上网查询了一下,先更新一下 apt-get,执行:su ...

  6. 结对编程总结by黄柏欣李斌

    在十一国庆期间(当然,还有国庆之前的几天),我们进行了一个结对编程的项目.对我受益良多,在伙伴面前发现自己的渺小,在知识面前,始终输给这浩瀚的海洋,及时发现了自己的不足,这次项目,对我来说就相当于一个 ...

  7. react脚手架环境搭建流程

    1.安装与配置node.js:1.1软件下载地址:https://nodejs.org/en/,推荐下载.msi文件,其中npm已经集成在了node.js中.1.2 双击下载的.msi文件进行安装,安 ...

  8. 基于 pyMongo 和 wxPython 实现的 MongoDB Schema Analyser

    MongoDB 作为文档型 NoSql 数据库,它的集合表结构往往不像关系型数据库那么固定和统一,同一个集合下的文档(document)的字段变化和差异可能很大,特别是在数据模型缺乏良好规划和规范的数 ...

  9. CRLF注入学习

    预备 <CRLF>是换行符,CRLF注入顾名思义就是把换行符写入,那么要把换行符写入到哪里呢?看看下面的http头 可以看到,每一行都包含特定的头部信息,然后以换行为标志写入其他的头部信息 ...

  10. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...