@小菜菜子的安装血泪心得
2021年2月9日
因为新买了笔记本,所有的东西都要从头开始,就这样记录一下自己磕磕碰碰的安装心路历程。
为了配置成功看了很多很多博客、资料、视频一堆一堆的,最后就自己成功安装的各步骤总结一下。
学习并不可怕,可怕的是环境配置啊啊啊啊啊啊~
写在之前的版本信息
在安装所有的东西之前,一定要先去tensorflow官网看看想安装的tensorflow-gpu对应的python、cuda和cudnn版本!!!
https://tensorflow.google.cn/install/source_windows#install_python_and_the_tensorflow_package_dependencies.
我选择安装tensorflow-gpu 2.3.0
CUDA -10.1
cuDNN v7.6.5
anaconda3 - 2020.11
visual studio 2019
安装Anaconda
网上教程很全,很容易安装,我看的是以下两篇:
https://zhuanlan.zhihu.com/p/75717350
https://blog.csdn.net/ITLearnHall/article/details/81708148
我下载的版本(网盘)
https://pan.baidu.com/s/1SGiD2cg2gkSsbc7ijQnoEA
提取码:rrwz
简单来讲,安装过程中第一点选择“all Users”,第二点注意要选择自己安装环境变量的那个选项(一般是默认情况),一路安装到完。
环境变量配置我是在环境变量里添加了下边四个(我把Anaconda安装到了D盘里),教程里有一个我也找不到,但是亲测无影响。
D:\Anaconda3
D:\Anaconda3\Scripts
D:\Anaconda3\Library\mingw-w64\bin
D:\Anaconda3\Library\bin
打开CMD,输入
conda --version
conda info
activate
python
如图出现版本信息,及python就成功了
可以看到,按照教程直接在CMD中输入python会有warning,这是因为Anaconda建立的是虚拟环境,没有激活(activate),激活后就好了。
最后打开Anaconda Prompt,输入
conda upgrade --all #不要这一步也可以
打开Anaconda Navigator,就可以看到了。就此安装成功。
安装VS2019
我下载的版本(网盘)
https://pan.baidu.com/s/1HvqYrDXSkTroD_7UdVQlYA
提取码:919c
还是无脑安装,基本上一路next,据说是CUDA安装的时候要用,我是装了,建议搜索以下教程。
安装CUDA和cudnn
查看自己适合安装的CUDA版本,打开NVIDIA Control Panel,
按图选择——>帮助——>系统信息——>组件
可以看到对应的是CUDA 11.2,这说明可以安装11.2版本及以下的CUDA版本,下面就可以开始安装CUDA和cuDNN了
如果查看的版本低于想装的CUDA版本,上NVIDIA官网下载更新
https://www.nvidia.cn/Download/index.aspx?lang=cn
安装CUDA v10.1
在官网上下载CUDA Toolkit 10.1(需要哪个下那个)
https://developer.nvidia.com/CUDA-toolkit-archive
按图选择下载
我下载好的在这里(度盘)
https://pan.baidu.com/s/1P8HvWQDGhupNlTdBSds4MA
提取码:e5d5
接下来就是安装,我没有选择自定义,就是无脑一路Next,如果你C盘的内存够用,其实这样也是可以的。懒人必备,不需要自己添加环境变量。
安装成功以后,打开CMD,输入
nvcc -V
nvidia-smi
如下图,第一个是以后运行的CUDA版本(10.1),第二个是支持的最高版本,两者不一样没有任何问题
安装cuDNN
在官网上下载对应版本,同时结合tensorflow-gpu的cuDNN要求
https://developer.nvidia.com/rdp/cudnn-archive
网盘链接
https://pan.baidu.com/s/1LrX5YthJS1emuv3P96NB4w
提取码:kjg5
cuDNN下载下来解压,会看到bin, include和lib,打开刚刚安装的CUDA的安装路径(如果是自定义安装,就在自己的安装路径下找),分别把上述三个文件夹中的内容,移到该路径下对应的bin, include和lib中,以bin中内容为例
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
移动完毕以后,打开Anaconda Powershell Prompt,定位到demo_suite文件夹中,分别运行bandwidthTest和deviceQuery,命令如下
cd "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite"
.\bandwidthTest.exe #一定不要忘记'.\'
.\deviceQuery.exe
如图,两个PASS即为成功
CUDA和cuDNN安装完毕。
安装theano
安装theano真的非常血泪,一会儿觉得CUDA版本太高不支持,一阵觉得又可以,出现的每个错误一个个解决,下面就我亲身经历总结一下。一定要大胆尝试,拥有重新来过的勇气!!!
这里推荐一篇,我是照着来的,但是有的地方错误不一样,自己尝试了一下成功了,我下边会说到。
https://www.cnblogs.com/citycomputing/p/11615104.html
首先,打开Anaconda Prompt,建立一个名为theano的新虚拟环境,然后激活
conda create -n theano python=3.8 #我用的是python3.8的版本,想用别的也可以,只要满足tensorflow-gpu中对应关系的要求
conda activate theano
直接安装theano
conda install theano #这个不行就用后两种
pip3 install theano
pip install theano
上边完成以后如果终止,那么程序在运行时使用的是CPU,要想使用GPU,就要在根目录下创建一个文档 .theanorc.txt
,根目录就是打开CMD显示的C:\Users\****
使用记事本打开就可以编写了,写好保存就行,下面是上边推荐教程里给出的(我也这么用了)
[global]
device = cuda
floatX=float32
[nvcc]
flags=--machine=64
[cuda]
root = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
[dnn]
library_path = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64
include_path = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include
[lib]
cnmem=100
然后激活pythoon,再import theano
就会报错,不管有多长,最后一句话才是重点,最后一句说没有什么,我们就要创造什么!
pygpu.gpuarray.GpuArrayException: b'Could not load "nvrtc64_70.dll": \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3\r\n'
根据上边我提到的教程,大家进去下载gpuarray.dll
用VS编译gpuarray.vcxproj 工程生成新的 gpuarray.dll (我编译好一个,下载请解压。)
下载好以后,把它覆盖**你创建的theano环境下Library/bin
目录下的同名文件!!!**创建的新环境在envs
里可以看见,我的覆盖路径是D:\Anaconda3\envs\theano\Library\bin
完成后退出重新python,import theano
,会出现新的问题
pygpu.gpuarray.GpuArrayException: b'Could not load "nvrtc64_112.dll": The specified module could not be found.\r\n'
注意!!!
我之前一直装不下去的原因,就是因为我的报错和所有的教程从这里开始就不一样了,教程里是 b'Could not load "nvrtc64_101.dll"
,而我是 b'Could not load "nvrtc64_112.dll"
,后来我发现,不管后边的数字是什么,都是异曲同工,只是命名不一样而已!!!
缺失的内容到哪里找?
到你安装的CUDA文件目录下找,比如我在
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
在这个bin
下,可以找到名为nvrtc64_***.dll
的内容,复制粘贴到虚拟环境theano的D:\Anaconda3\envs\theano\Library\bin
中重命名为报错显示没有的那个名称即可。
按这种方法,不管爆出什么错误,看错误的最后一行是缺少什么文件,到CUDA中找到复制粘贴重命名成报错的那个名称就好了!!!
最后在重新import一下,会出现
pygpu.gpuarray.GpuArrayException: (b'Missing Blas library', 5)
和上述一下,去CUDA里找 cublas64_***.dll
,复制粘贴重命名。这样就完成了,最后验证一下啊~
from theano import function, config, shared, tensor
import numpy
import time
vlen = 10 * 30 * 768 # 10 x #cores x # threads per core
iters = 1000
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], tensor.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, tensor.Elemwise) and
('Gpu' not in type(x.op).__name__)
for x in f.maker.fgraph.toposort()]):
print('Used the cpu')
else:
print('Used the gpu')
出现结果为下边的就是成功了(我不管warning怎么说,只要他说我用了GPU就可以啦)
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, vector)>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.232379 seconds
Result is [1.2317803 1.6187935 1.5227807 ... 2.2077181 2.2996776 1.623233 ]
Used the gpu
安装lasagne
这个也很简单,我安装的版本是 0.2.dev1
,是从github上直接下载的,贴出这篇:
https://github.com/Lasagne/Lasagne
其实只要用一个命令就好了,那就是:
pip install https://github.com/Lasagne/Lasagne/archive/master.zip
安装tensorflow-gpu
安装完theano,tensorflow-gpu真的就太太太太简单了!因为需要,我把它直接装在了刚刚创建的虚拟环境theano里边。
打开Anaconda Prompt
conda activate theano
pip3 install tensorflow-gpu==2.3.0
至于我为什么直接用pip3
安装呢,其实之前我使用过conda install
但是经过测试,我的程序仍然使用的是CPU,我查看pip3 list
,发现并没有tensorflow-gpu
的信息,所以直接使用pip3
亲测有效。
没错,至此就安装完成了!
来测试一下,首先看设备
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
出现GPU的字样就是对的,我的是这样
##所有的‘*’号都是数字哦,这样只是给数字打了个码
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: ********
locality {
}
incarnation: ************************
, name: "/device:XLA_CPU:0"
device_type: "XLA_CPU"
memory_limit: **********
locality {
}
incarnation: ************************
physical_device_desc: "device: XLA_CPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: **********
locality {
bus_id: 1
links {
}
}
incarnation: *************************
physical_device_desc: "device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5"
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: ********
locality {
}
incarnation: *************************
physical_device_desc: "device: XLA_GPU device"
]
不放心再查查
import tensorflow as tf
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))
运行结果
Device mapping:
/job:localhost/replica:0/task:0/device:XLA_CPU:0 -> device: XLA_CPU device
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5
/job:localhost/replica:0/task:0/device:XLA_GPU:0 -> device: XLA_GPU device
成功
再试试
import tensorflow as tf
# Creates a graph.
#with tf.device('/gpu:0'):
tf.compat.v1.disable_eager_execution()
sess= tf.compat.v1.Session()
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.compat.v1.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))
# Runs the op.
with tf.compat.v1.Session() as sess:
print(sess.run(c))
结果
Device mapping:
/job:localhost/replica:0/task:0/device:XLA_CPU:0 -> device: XLA_CPU device
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5
/job:localhost/replica:0/task:0/device:XLA_GPU:0 -> device: XLA_GPU device
[[22. 28.]
[49. 64.]]
成功