Linux conda中Tensorflow GPU安装配置全面梳理(包含cuda、cudnn)

CPU VS GPU

  • CPU: 中央处理单元。由数百万个晶体管组成,可以有多个处理内核,执行计算机和操作系统所需的命令和流程。
  • GPU: 图形处理单元。由许多更小、更专业的内核组成的处理器。 在多个内核之间划分并执行一项处理任务时,通过协同工作,这些内核可以提供强大的性能。

由于其设计目标的不同,它们分别针对了两种不同的应用场景。

CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。

CPU 基于低延时的设计,具有强大的ALU(算术运算单元),它可以在很少的时钟周期内完成算术计算。

CPU 适用于一系列广泛的工作负载,特别是那些对于延迟和单位内核性能要求较高的工作负载。作为强大的执行引擎,CPU 将它数量相对较少的内核集中用于处理单个任务,并快速将其完成。这使它尤其适合用于处理从串行计算到数据库运行等类型的工作。

GPU是基于大的吞吐量设计,有很多的ALU和很少的cache,访问的数据保存在dram中而不是cache里面,自然不能保证低延时。

GPU的虽然有dram延时,却有非常多的ALU和非常多的thread. 为了平衡内存延时的问题,我们可以中充分利用多的ALU的特性达到一个非常大的吞吐量的效果,尽可能多的分配多的Threads。

综上,与CPU擅长逻辑控制,串行的运算和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。

更具体信息请参考文后链接。

确认GPU信息

首先你的机器上要配置有GPU显卡,目前主流厂商是NVIDIA和AMD。

命令:

% lspci | grep -i vga
0000:05:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 41)
0000:38:00.0 VGA compatible controller: NVIDIA Corporation GV102 (rev a1)
0000:41:00.0 VGA compatible controller: NVIDIA Corporation GV102 (rev a1)
0000:48:00.0 VGA compatible controller: NVIDIA Corporation GV102 (rev a1)
0000:50:00.0 VGA compatible controller: NVIDIA Corporation GV102 (rev a1)

可以看到,我的机器上有4块显卡(第一行是集成显卡,忽略),都是NVIDIA的。

以第一列作为参数查看更详细信息:

% lspci -vvs 0000:38:00.0
0000:38:00.0 VGA compatible controller: NVIDIA Corporation GV102 (rev a1) (prog-if 00 [VGA controller])
	Subsystem: NVIDIA Corporation Device 12fa
	Physical Slot: 9
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 305
	NUMA node: 0
	Region 0: Memory at b7000000 (32-bit, non-prefetchable) [size=16M]
	Region 1: Memory at 6ffe0000000 (64-bit, prefetchable) [size=256M]
	Region 3: Memory at 6fff0000000 (64-bit, prefetchable) [size=32M]
	Region 5: I/O ports at 8000 [size=128]
	[virtual] Expansion ROM at b8000000 [disabled] [size=512K]
	Capabilities: <access denied>
	Kernel driver in use: nvidia
	Kernel modules: nvidiafb, nvidia_drm, nvidia

对于NVIDIA显卡,可以通过特定命令查看显卡信息:

% nvidia-smi
Fri Feb 25 13:54:08 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.44       Driver Version: 440.44       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:38:00.0 Off |                  N/A |
| 31%   37C    P8     6W / 250W |  10537MiB / 11019MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce RTX 208...  Off  | 00000000:41:00.0 Off |                  N/A |
| 31%   50C    P2    95W / 250W |   1322MiB / 11019MiB |     35%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce RTX 208...  Off  | 00000000:48:00.0 Off |                  N/A |
| 59%   67C    P2   209W / 250W |   3390MiB / 11019MiB |     71%      Default |
+-------------------------------+----------------------+----------------------+
|   3  GeForce RTX 208...  Off  | 00000000:50:00.0 Off |                  N/A |
| 61%   67C    P2   210W / 250W |   3366MiB / 11019MiB |     67%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     51318      C   /opt/anaconda/envs/test1/bin/python         4487MiB |
|    0     53200      C   /opt/anaconda/envs/test1/bin/python         6039MiB |
|    1     52472      C   /opt/anaconda/envs/test1/bin/python         1311MiB |
|    2     46529      C   /opt/anaconda/envs/test1/bin/python         3379MiB |
|    3     46529      C   /opt/anaconda/envs/test1/bin/python         3355MiB |
+-----------------------------------------------------------------------------+

其中,主要关注:

  • Temp:温度,过高可能是哪里出了问题
  • Memory-Usage:显存使用情况
  • GPU-Util:GPU使用率
  • CUDA Version: 后面要对应到TensorFlow版本

关于显卡更详细的信息可参考相关资料。

确定TensorFlow版本

TensorFlow版本不是随便安装的,对GPU的支持需要对应的驱动库,版本不对应会导致问题。

所以真正开始动手安装之前一定要确认好版本。

确认版本的顺序:

机器上显卡类型 -> 显卡的CUDA版本 -> TensorFlow版本

具体版本间对应关系官网上有:https://tensorflow.google.cn/install/source 。

截图示例:

在这里插入图片描述

对于我的CUDA Version: 10.2来说,可以选择TensorFlow 2.4以下所有版本。

安装TensorFlow 2.3.0

首先确保你的Anaconda环境无误,我对应的python版本为3.6,创建conda虚拟环境命令如下:

conda create -n tf2 python=3.6

需要安装的包:

  • cudatoolkit,版本10.1
  • cudnn:版本7.6
  • tensorflow:2.3.0

注意,如果你已经安装了tensorflow,但没有安装前两个库,使用GPU时会提示找不到CUDA驱动库,无法使用GPU。把前两个库的对应版本安装上即可。

具体的安装步骤(仅四行指令):

conda activate tf2

conda install cudatoolkit=10.1
conda install cudnn=7.6 # 对应的是7.4,但是没有这个版本,装更高版本即可
pip install tensorflow==2.3.0
pip install --upgrade keras # 安装最新版本keras

ok,tensorflow:2.3.0安装完毕,使用下面的测试程序跑一下:

# --coding: utf8--

import tensorflow as tf

if __name__ == '__main__':
    print('tf version: {}'.format(tf.__version__))
    print('keras version: {}'.format(tf.keras.__version__))
    # print('GPU: {}'.format(tf.test.is_gpu_available())) # 1.x版本的TF使用此行
    print('GPU: {}'.format(tf.config.list_physical_devices('GPU'))) # 2.x版本的TF使用

输出如下:

% python show_tf_version.py
tf version: 2.3.0
keras version: 2.4.0
GPU: [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:2', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:3', device_type='GPU')]

ok了。

安装TensorFlow 1.13.1

1.x版本的TensorFlow,cpu和gpu版本是分开的,如果只安装了cpu版本的,无法使用GPU,直接上安装命令:

conda activate tf1

conda install cudatoolkit=10.1
conda install cudnn=7.6 
pip install tensorflow-gpu==1.13.1
pip install keras==2.2.4 # 安装指定版本的keras

输出如下:

tf version: 1.13.1
keras version: 2.2.4-tf
GPU: True
小节

  • 使用conda管理虚拟环境,简单省力,搞错了可以删除再搞一遍
  • 开始安装前确认好版本
  • 如果之前没有安装CUDA驱动库,再安装一下即可
参考

https://tensorflow.google.cn/install/source
https://tensorflow.google.cn/install/pip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值