win10在cuda10.1下安装tensorflow-gpu 和theano配置gpu

@小菜菜子的安装血泪心得

2021年2月9日
因为新买了笔记本,所有的东西都要从头开始,就这样记录一下自己磕磕碰碰的安装心路历程。
为了配置成功看了很多很多博客、资料、视频一堆一堆的,最后就自己成功安装的各步骤总结一下。
学习并不可怕,可怕的是环境配置啊啊啊啊啊啊~

写在之前的版本信息

在安装所有的东西之前,一定要先去tensorflow官网看看想安装的tensorflow-gpu对应的python、cuda和cudnn版本!!!
https://tensorflow.google.cn/install/source_windows#install_python_and_the_tensorflow_package_dependencies.
tensorflow
我选择安装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.]]

成功

完结撒花,我的快乐回来了!!!

自编译tensorflow: 1.python3.5,tensorflow1.12; 2.支持cuda10.0,cudnn7.3.1,TensorRT-5.0.2.6-cuda10.0-cudnn7.3; 3.无mkl支持; 软硬件硬件环境:Ubuntu16.04,GeForce GTX 1080 TI 配置信息: hp@dla:~/work/ts_compile/tensorflow$ ./configure WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown". You have bazel 0.19.1 installed. Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python3 Found possible Python library paths: /usr/local/lib/python3.5/dist-packages /usr/lib/python3/dist-packages Please input the desired Python library path to use. Default is [/usr/local/lib/python3.5/dist-packages] Do you wish to build TensorFlow with XLA JIT support? [Y/n]: XLA JIT support will be enabled for TensorFlow. Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: No OpenCL SYCL support will be enabled for TensorFlow. Do you wish to build TensorFlow with ROCm support? [y/N]: No ROCm support will be enabled for TensorFlow. Do you wish to build TensorFlow with CUDA support? [y/N]: y CUDA support will be enabled for TensorFlow. Please specify the CUDA SDK version you want to use. [Leave empty to default to CUDA 10.0]: Please specify the location where CUDA 10.0 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: /usr/local/cuda-10.0 Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7]: 7.3.1 Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda-10.0]: Do you wish to build TensorFlow with TensorRT support? [y/N]: y TensorRT support will be enabled for TensorFlow. Please specify the location where TensorRT is installed. [Default is /usr/lib/x86_64-linux-gnu]://home/hp/bin/TensorRT-5.0.2.6-cuda10.0-cudnn7.3/targets/x86_64-linux-gnu Please specify the locally installed NCCL version you want to use. [Default is to use https://github.com/nvidia/nccl]: Please specify a list of comma-separated Cuda compute capabilities you want to build with. You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus. Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 6.1,6.1,6.1]: Do you want to use clang as CUDA compiler? [y/N]: nvcc will be used as CUDA compiler. Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: Do you wish to build TensorFlow with MPI support? [y/N]: No MPI support will be enabled for TensorFlow. Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]: Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: Not configuring the WORKSPACE for Android builds. Preconfigured Bazel build configs. You can use any of the below by adding "--config=" to your build command. See .bazelrc for more details. --config=mkl # Build with MKL support. --config=monolithic # Config for mostly static monolithic build. --config=gdr # Build with GDR support. --config=verbs # Build with libverbs support. --config=ngraph # Build with Intel nGraph support. --config=dynamic_kernels # (Experimental) Build kernels into separate shared objects. Preconfigured Bazel build configs to DISABLE default on features: --config=noaws # Disable AWS S3 filesystem support. --config=nogcp # Disable GCP support. --config=nohdfs # Disable HDFS support. --config=noignite # Disable Apacha Ignite support. --config=nokafka # Disable Apache Kafka support. --config=nonccl # Disable NVIDIA NCCL support. Configuration finished 编译: bazel build --config=opt --verbose_failures //tensorflow/tools/pip_package:build_pip_package 卸载已有tensorflow: hp@dla:~/temp$ sudo pip3 uninstall tensorflow 安装自己编译的成果: hp@dla:~/temp$ sudo pip3 install tensorflow-1.12.0-cp35-cp35m-linux_x86_64.whl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值