c cuda 指定gpu_一文上手最新Tensorflow2.0系列|使用GPU加速

news/2024/7/1 18:30:13

1. 安装配置GPU环境

1.1. 安装GPU版TF

在之前我们已经安装了CPU版的TensorFlow,为了使用GPU来加速计算,我们必须安装GPU版的TensorFlow。这里我们可以直接使用pip命令来安装:

apip install tensorflow-gpu==2.0.0-alpha0

安装完成后我们后我们可以查看一下当前可用的GPU:

from tensorflow.python.client import device_lib

def get_available_gpus():

local_device_protos = device_lib.list_local_devices()

return [x.name for x in local_device_protos if x.device_type == 'GPU']

print(get_available_gpus())

由于本人机器上有两块GPU,所以输出两块GPU的编号:“[‘/device:GPU:0’, ‘/device:GPU:1’]”。

1.2. 安装显卡驱动

根据你的显卡型号到官网(https://www.nvidia.cn/Download/index.aspx?lang=cn)下载对应的驱动。我的服务器上有两块Tesla P100的显卡,如图所示选择对应的驱动程序。这里一定要注意选择正确的版本,要和你的显卡版本、操作系统版本以及想要安装的CUDA版本一一对应。

b60a915690c036223641d9219e2b71cf.png

NVIDA驱动下载列表

点击搜索,然后点击下载即可。

9b7f3f61f6c68844d487f083da6dff43.png

NVIDA驱动下载提示

安装完成之后可以使用“nvidia-smi”命令查看显卡。

3dc5645617cacb6e10c70555f9496b5d.png

显卡信息

1.3. 安装CUDA

在安装CUDA之前,我们一定要先搞清楚TensorFlow各个版本与CUDA版本的对应关系。在TensorFlow官网有相似的说明(https://tensorflow.google.cn/install/source),其中Linux系统环境下TensorFlow GPU版本与CUDA版本的对应关系如图所示。

7b03dfea9c013181686c67e9c88df538.png

TensorFlow与CUDA的版本对应关系

81fe10952b9e9f3267b5a12e648ef757.png

TensorFlow2.0 GPU版依赖的NVIDA软件包

TensorFlow-GPU的2.0.0-alpha版对应的NVIDA驱动版本、CUDA版本、cuDNN的版本号。

1.3.1 下载CUDA

首先我们到NVIDIA官网(https://developer.nvidia.com/cuda-toolkit)下载CUDA。

ff757dd58be8f03f12fb7ffb1bf298b4.png

选择对应的CUDA版本

选择对应系统环境的CUDA版本,点击下载。

1.3.2 安装CUDA

CUDA下载页面有安装指引,如图所示。

20ef6c9dfa47774d7ad7cd331b91c1d1.png

CUDA的安装步骤

第一步:执行安装命令

 sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb

第二步:添加kay

 sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pubupdate

第三步:依次执行

sudo apt-get updatesudo apt-get install cuda-10.0

注意不要使用“sudo apt-get install cuda”,这样默认安装的是最新版,所以一定要指定版本。

安装完成后,在“/usr/local”目录下会生成“cuda”和“cuda-10.0”两个文件夹,如图所示,我们可以使用命令“cat /usr/local/cuda/version.txt”查看CUDA版本。

575d9edc0a6a8da146ef51d2a3242f6f.png

第四步:设置环境变量

打开“~/.bashrc”文件,在文件的最后最后添加如下内容:

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

在终端执行命令“source ~/.bashrc”让环境变量生效。

第五步:验证安装是否成功

  1. 进入目录“/usr/local/cuda-10.0/samples/1_Utilities/deviceQuery”中打开终端;
  2. 终端下执行编译命令:sudo make
  3. 然后执行命令:./deviceQuery,可以看到两块GPU的信息

如图所示,检测到两块显卡,图中是其中一块显卡的信息。到这里CUDA已经安装完成了。

41e58c0087b5d5f4c48aa72349546024.png

显卡的信息

1.4. 安装cuDNN

1.4.1 下载

(https://developer.nvidia.com/rdp/cudnn-download)

这里一定要下载与CUDA10.0对应的版本。下载CNDNN需要登录NVIDIA账号,没有的话,可以按照提示创建一个账号。

44d11cbcca75435c7fd843376fcaf23c.png

cuDNN与CUDA的版本对应关系

选择好cuDNN版本后,点击下载“cuDNN Library for Linux”,如图所示。

f07108b0471f4de08ad9f213ae825288.png

cuDNN下载列表

1.4.2 安装

第一步:解压文件

 tar zxvf cudnn-10.0-linux-x64-v7.5.0.56.tgz

第二步:拷贝文件,并修改文件权限

sudo cp cuda/include/cudnn.h /usr/local/cuda/includesudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

到这里TensorFlow2.0的GPU版就安装配置完成了。

2. 使用TensorFlow-GPU

如果我们的机器上安装配置好了GPU版的TensorFlow,那么运行的时候TensorFlow会自行去选择可用的GPU。我们也可以通过“os.environ["CUDA_VISIBLE_DEVICES"]”来选择我们要使用的GPU:

import tensorflow as tfimport os# 选择编号为0的GPUos.environ["CUDA_VISIBLE_DEVICES"] = "0"# 创建模型model = tf.keras.Sequential()model.add(layers.Dense(16, activation='relu', input_shape=(10,)))model.add(layers.Dense(1, activation='sigmoid'))# 设置目标函数和学习率optimizer = tf.keras.optimizers.SGD(0.2)# 编译模型model.compile(loss='binary_crossentropy', optimizer=optimizer)# 输出模型概况model.summary()

我们选择了编号为“0”的这个GPU,执行完上面的这段代码后我们使用命令“nvidia-smi”来查看一下GPU的占用情况,如图所示,编号为“0”的GPU正在被占用。我们可以将代码中的“0”改为“1”来使用另一个GPU。

1d44abed3d36e1320fb677e4c730d950.png

查看GPU占用情况

如果我们希望使用多块GPU,例如同时使用“0”、“1”两块GPU,可以设置“os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"”,除此之外我们还可以使用TensorFlow为“tf.keras”提供的分布式训练策略“tf.distribute.MirroredStrategy”来实现单机环境下的多GPU训练:

import tensorflow as tffrom tensorflow.keras import layers strategy = tf.distribute.MirroredStrategy() # 优化器以及模型的构建和编译必须嵌套在“scope()”中with strategy.scope(): model = tf.keras.Sequential() model.add(layers.Dense(16, activation='relu', input_shape=(10,))) model.add(layers.Dense(1, activation='sigmoid'))  optimizer = tf.keras.optimizers.SGD(0.2) model.compile(loss='binary_crossentropy', optimizer=optimizer) model.summary()

http://www.niftyadmin.cn/n/4085541.html

相关文章

正弦波 程序 角度传感器_单相正弦波逆变+正弦波逆变器学习套件

简介:逆变器学习套件是一个单相可调频调幅输出的正弦波逆变平台。主控使用STM32F103,主频72M,分立元件搭建MOS管H桥,便于学习H电路设计。单片机固件支持单极性逆变和双极性逆变。具有按键控制,上位机控制等功能。可检测…

codeblocks改变主题背景颜色

原本的背景颜色是白色的,长时间注视的话,对我们的眼睛极为不好,所以接下来介绍如何改变codeblock的背景颜色。 确保codeblocks已经关闭。 下面介绍这种方法。 亲测有效哦! 第一种方法: 用工具导入配置文件&#xff1a…

UVA532 Dungeon Master

问题链接:UVA532 Dungeon Master。 题意简述:三维空间地牢(迷宫),每个点由.(可以经过)、#(墙)、S(起点)和E(终点)组成。移…

[PC]PHPCMS二次开发指南(上)

------------------------------------------------------------------------------------- PHPCMS本身功能已经很完善,自带的模块可用可不用,松耦合特性使其非常适合企业的二次开发。 PC的默认路由在 phpcms/caches/configs/route.php 中定义&#xff0…

基于单片机的智能手表系统设计_【毕设狗】【单片机毕业设计】基于单片机的室内空气质量检测系统的设计...

前一段时间,做了一个关于基于单片机的室内空气质量检测系统的设计资料下载地址:基于单片机的室内空气质量检测系统的设计-毕设狗​www.bsdog.cn软件安装:① Keil:Keil uvision5 MDK RM v5.29​www.bsdog.cn② Proteus8.8&#xff…

dex是什么的缩写_游戏中的STR CON、 INT、DEX是什么意思?

展开全部1、STR(力量、物理攻击)在游戏中,物理攻击是以拿着钝器、锐器类的器攻击,一切都以为量为主。它是不同于魔法636f70793231313335323631343130323136353331333431353863攻击的一种攻击手段。物理攻击是指由力改变物体的运动状态从而使被攻击物体发…

大学物理上册详细笔记_复旦学霸们是如何做笔记的?清晰严谨的构图,可爱有趣的手绘...再看看你的......

别人家的笔记字迹优美、布局整齐、配图用心赏心悦目、堪比教科书我的笔记...只有自己看得懂复旦大学学生会组织了一场网课笔记大赛收集了几十份复旦学霸们的笔记让我们一起来欣赏下!局部解剖学笔记记笔记的“李书琪”同学说:局部解剖学本来就很难了&…

python类的定义与使用_Python每日一题:类的定义和装饰器@classmethod与@staticmethod...

python中的定义类方法有三种形式普通方法类方法(classmethod)静态方法(staticmethod)1、普通方法的使用class A(): def __init__(self, name, age): self.name name self.age age def get_name(self): print(my name is, self.name) def get_age(self): print(fi am {self.ag…