Author : Hanyun Zhang
微信公众号:人工智不了能
Github:https://github.com/GitHub-ZHY/icehouse.git
Date : 2020/06/25
Tips : 欢迎关注我滴微信公众号,有相关问题也欢迎发送邮件到 [email protected] 您的邮件我第一时间就会看到,一定会及时阅读和回复!
本文讲的是主流NVIDA显卡(俗称N卡)的Tensorflow-gpu的配置。
所以
相关链接:
查看本机显卡是否支持 CUDA: https://developer.nvidia.com/cuda-gpus
N卡驱动下载:https://www.nvidia.cn/Download/index.aspx?lang=cn
没装 NVIDA GeForce Experience 的哥们儿们建议装一波,不仅LOL段位能提高,主要还能自动更新显卡驱动。
登高必自卑,行远必自迩,先自己动起手来!
在这个承上启下的部分,我先提出一个大重难点,即:
【Python & Tensorflow-gpu & 显卡 & CUDA & cuDNN 的版本对应关系】”
着急看关系的朋友直接拉到最下面第八条
不推荐无脑选择最新版本。毕竟 NVIDA Python Tensorflow 由不同组织来开发和维护。
不用慌,出现问题就解决问题,毕竟只是环境的小问题,接下来我们带着问题,接着往下看”
NVIDIA的显卡驱动程序和CUDA是两个完全不同的概念!
CUDA 是NVIDIA推出的用于自家GPU的并行计算框架,也就是说 CUDA 只能在 NVIDIA的GPU 上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥 CUDA 的作用,所以它就是个工具包(ToolKit)。
CUDA 安装包下载地址:https://developer.nvidia.com/cuda-toolkit-archive
点击链接即可进入如下页面,我们看到,有很多不同版本的 CUDA 。
截止2020/06/25,Tensorflow-gpu 所需的 CUDA 的安装,建议
直接下载 CUDA Toolkit 10.1 (Feb 2019), Online Documentation
即图中标红项。
点进去后有一些对应版本的选择,建议选择 Local Install 本地安装
,下载完了直接傻瓜安装,此处不赘述。假如出现类似安装MySQL安装时的软件依赖
,按提示安装即可,不难,干就完了。
cuDNN是一个SDK,是一个专门用于神经网络的加速包。
注意,cuDNN 跟 CUDA 没有一一对应的关系
即每一个版本的CUDA可能有好几个版本的cuDNN与之对应,但一般有一个最新版本的cuDNN版本与CUDA对应更好。
通俗来讲,CUDA 是 cuDNN的大哥。大哥有很多小弟,但二当家只有一个。
截止2020/06/25,Tensorflow-gpu 所需的 CUDA 的 cuDNN 的安装,建议点击链接
https://developer.nvidia.com/rdp/cudnn-archive
直接下载圈红项 Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.1
如果需要登录,不妨注册个账号。
此处下载为ZIP压缩包,解压到想要的位置,将其bin
路径配置PATH
环境变量即安装完毕。
只要接触过 Python
必然知道 Pycharm
和 Anaconda
,关于 Anaconda
我们不多讲,此处就利用其虚拟环境来配置 Tensorflow-gpu
环境。
为什么要用虚拟环境呢?虚拟环境就相当于一个同学不同科目的笔记本,不同的本子记录不同的东西,自然安排的功能也就不一样。虚拟环境对于不同项目的配置以及各种包的管理十分思路清晰,不会杂乱。
另外,值得一提的是 Anaconda 命令行
的一系列操作。
贴个不错的帖子:
Anaconda虚拟环境管理 https://www.cnblogs.com/chenhuabin/p/10718471.html
按下面一步步来,不要着急。
# 打开 Anaconda 命令行 Anaconda Prompt (Anaconda3)
# 检测目前安装了哪些环境
conda info --envs
# 创建对应Python版本的虚拟环境
conda create --name tensorflow-gpu python=3.8.3
# 激活刚刚创建的环境
activate tensorflow-gpu
# 直接 pip 安装 tensorflow-gpu , 截止目前2020/06/25自动安装 tf 2.2 版本
pip install tensorflow-gpu
另外,关于 windows
下 pip
、conda
的换源,相关帖子已备好,等待君上食用。
点击即可 老狗——Windows os 的 pip & conda 换源(国内源,速度提升!)
Anaconda
的虚拟环境进入Python
交互式命令行,复制粘贴代码运行。Pycharm
,project interpreter
解释器为虚拟环境路径下的 python.exe
,如下图。import tensorflow as tf
import timeit
with tf.device('/cpu:0'):
cpu_a = tf.random.normal([10000, 1000])
cpu_b = tf.random.normal([1000, 2000])
print(cpu_a.device, cpu_b.device)
with tf.device('/gpu:0'):
gpu_a = tf.random.normal([10000, 1000])
gpu_b = tf.random.normal([1000, 2000])
print(gpu_a.device, gpu_b.device)
def cpu_run():
with tf.device('/cpu:0'):
c = tf.matmul(cpu_a, cpu_b)
return c
def gpu_run():
with tf.device('/gpu:0'):
c = tf.matmul(gpu_a, gpu_b)
return c
# warm up
cpu_time = timeit.timeit(cpu_run, number=10)
gpu_time = timeit.timeit(gpu_run, number=10)
print('warmup:', cpu_time, gpu_time)
cpu_time = timeit.timeit(cpu_run, number=10)
gpu_time = timeit.timeit(gpu_run, number=10)
print('run time:', cpu_time, gpu_time)
输出类似下面:
GPU (device: 0, name: GeForce 1060, pci bus id: 0000:02:00.0, compute capability: 6.1)
/job:localhost/replica:0/task:0/device:CPU:0 /job:localhost/replica:0/task:0/device:CPU:0
/job:localhost/replica:0/task:0/device:GPU:0 /job:localhost/replica:0/task:0/device:GPU:0
2020-06-25 22:11:16.634792: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
warmup: 1.4536040000000003 0.4982911999999997
run time: 1.3492356 0.0006344000000000349
测试代码二:
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
a = tf.constant(1.)
b = tf.constant(3.)
print(a+b)
print('GPU:', tf.test.is_gpu_available())
输出:
tf.Tensor(4.0, shape=(), dtype=float32)
.
.# 一大堆乱七八糟
.
1060, pci bus id: 0000:02:00.0, compute capability: 6.1) # GPU不同则不同
GPU: True
测试提示Cannot found
…或是其他不好使的错误。
如果需要卸载重装 CUDA,那么在下图矩形中,除了箭头标识的项目,全部卸载!
如果 cuDNN 又因此不对应了,重新下载解压对应版本,修改环境变量!
Python
是一门动态编程语言。
TensorFlow
是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor (张量)意味着N维数组,Flow (流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
Python
对于 Tensorflow
的支持较为及时到位,截至2020/06/25
,Python 3.8.3
和 Tensorflow 2.2
是完美契合的,且都是最新版。GPU
来计算,水平够自然可以使用 CUDA & cuDNN
。cuDNN 跟 CUDA 没有一一对应的关系。每一个版本的 CUDA
可能有好几个版本的 cuDNN
与之对应,但一般有一个最新版本的 cuDNN
版本与 CUDA
对应更好。Tensorflow
对于 CUDA
也是有要求的,目前Tensorflow
支持 CUDA 10.1
(TensorFlow 2.1.0
及更高版本),具体的我甩个链接,哥们儿们慢慢儿看。另外,关于CUDA 工具包附带的 CUPTI 的相关问题,我安装时没用到,也没研究,等研究完再说吧。
此致,敬礼!