win10下基于anaconda利用keras开展16系显卡GTX1650的GPU神经网络计算

win10下基于anaconda利用keras开展16系显卡GTX1650的GPU神经网络计算

虽然安装了双系统,但ubantu的确是不太常用,所以还是尝试一下win10下的GPU神经网络计算。从实践看,大体步骤与ubantu下一致,下面进行详细介绍。

软硬件环境

系统:win10 家庭版
GPU: N卡 GTX1650 (注意GPU计算只能用NVIDIA)
PYTHON: Anaconda
neural networks 框架: keras
backend:tensorflow 或 theano

安装anaconda

anaconda目前国内已经没有镜像源了,所以直接去官网下载。

https://repo.anaconda.com/archive/Anaconda3-2019.07-Windows-x86_64.exe

下载完毕后安装即可,这样我们就有了python环境。

注意windows下,不像ubantu下有2.x,3.x版共存,所以python3安装常用pip3。window下anaconda如果用pipy,那么用pip命令。

安装GPU计算支撑环境

  1. 更新nvidia显卡驱动(自己去官网下载,然后更新,不用太多说)

  2. cuda kit下载

从tensorflow的安装测试看,tensorflow 1.13.1 适配cuda kit 10.0(https://tensorflow.google.cn/install/source#linux),所以我们下一个cuda kit 10.0。

下载地址:https://developer.nvidia.com/cuda-toolkit ,完毕后安装即可。

  1. cudnn 下载和安装

cudnn 下载需要注册开发者账户(自行注册)

下载地址:https://developer.nvidia.com/cudnn

或者 https://developer.nvidia.com/rdp/cudnn-download

下载完毕后安装方法,主要是将其解压放到cuda安装目录中。

具体介绍见 https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#install-windows

pip源更换为国内

因为如果利用pip从国外源下载安装python模块实在太慢,所以我们首先把pip源更换为国内的,比如阿里云镜像。

  1. 在我的用户目录下(比如:C:\Users\yourusername)创建一个pip目录

  2. 在pip目录下创建一个 pip.ini文件

  3. 在该文件的内容中填入:

[global] 
index-url = http://mirrors.aliyun.com/pypi/simple/
[install] 
trusted-host=mirrors.aliyun.com 

mingw安装(这是运行theano后发现的)

因为theano需要g++编译器,所以下一个mingw利用其中的g++作为编译器

从 https://sourceforge.net/projects/mingw-w64/ 下的toolchains中下载

解压,然后把bin目录加入到环境变量的path中。

tensorflow、theano、keras安装

  1. 安装一下git(后面安装keras示例用的着),进入anaconda的命令行,运行:
conda install git
  1. 安装tensorflow (cpu计算用,若不使用GPU,那么只要安装这个就好了)
pip install tensorflow
  1. 安装tensorflow-gpu (GPU计算)
pip install tensorflow-gpu
  1. 安装theano
pip install theano

theano后端无论是cpu还是GPU计算用同一个,差别在于设置,要使用GPU计算时,那么做如下设置:

在用户目录(比如:C:\Users\yourusername)下新建一个文件.theanorc.txt,写入内容:

[global]
device = cuda10.0
floatX = float32

[nvcc]
fastmath = True

注意:新的theano不再像以前一样device用gpu0这样表示,而是用cuda的版本号,比如cuda10.0。

由于theano可能需要最新的pygpu和libgpuarray,因此需要安装pygpu

conda install -c conda-forge pygpu

遗憾的是,由于下载的cuda为10.0对于theano来说还是版本太新了,所以基于theano的GPU计算没有成功,最后是用CPU计算的。
还在tensorflow可以做GPU计算。

  1. 安装keras
pip install keras

或者

git clone https://github.com/fchollet/keras
cd keras
python setup.py install

用后一种方法可以测试一些示例。

keras进行计算是的时候可以选择后端是tensorflow或者theano,找到用户主目录下的.keras目录,打开keras.json文件,修改其中的

"backend": "tensorflow",

或者

"backend": "theano",

可以选择之前安装的两个后端。

测试

git 安装的keras有一个目录example,是其自带的示例,我们可以用它来运行。
但有一个问题是,训练和测试所需的数据(比如:数字识别数据集 mnist.npz),需要从keras自己设置的亚马逊地址下载,当然是被墙了的,所以需要自己去找下载。
这里是从Houchaoqun_XMU(https://blog.csdn.net/houchaoqun_xmu/article/details/78492718)处下载得到,测试修改的python示例代码也参考了该文。

我们进入keras中example目录,打开一个数字识别的神经网络示例,做如下两处修改:

#修改1,训练的世代从12改为2,因为测试,我们没必要计算那么多,算2个就够了,特别是用cpu计算时,是相当耗时的。
epochs = 2  #12


# the data, split between train and test sets
#修改2,注释掉从网络下载mnist.npz方式,转而使用下载的文件
#(x_train, y_train), (x_test, y_test) = mnist.load_data()
path='./mnist.npz'
f = np.load(path)
x_train, y_train = f['x_train'], f['y_train']
x_test, y_test = f['x_test'], f['y_test']
f.close()

修改完毕后,可以对其进行计算,结果为(去掉了一堆警告):

(base) D:\work-ai\keras-master\examples>python mnist_cnn.py
Using TensorFlow backend.
x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
WARNING: Logging before flag parsing goes to stderr.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
Train on 60000 samples, validate on 10000 samples
Epoch 1/2
2019-09-02 22:04:15.736650: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-09-02 22:04:15.750412: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library nvcuda.dll
2019-09-02 22:04:16.900282: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties:
name: GeForce GTX 1650 major: 7 minor: 5 memoryClockRate(GHz): 1.56
pciBusID: 0000:01:00.0
2019-09-02 22:04:16.914188: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2019-09-02 22:04:16.925078: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0
2019-09-02 22:04:20.965491: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-09-02 22:04:20.978889: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187]      0
2019-09-02 22:04:20.983601: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0:   N
2019-09-02 22:04:20.990832: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2927 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1650, pci bus id: 0000:01:00.0, compute capability: 7.5)
60000/60000 [==============================] - 23s 385us/step - loss: 0.2743 - acc: 0.9160 - val_loss: 0.0632 - val_acc: 0.9809
Epoch 2/2
60000/60000 [==============================] - 10s 169us/step - loss: 0.0919 - acc: 0.9728 - val_loss: 0.0433 - val_acc: 0.9864
Test loss: 0.04328459591245046
Test accuracy: 0.9864

可以看到计算中的耗时总共33s,相比于非GPU计算至少有几倍的速度提升。

ps:
1.本文所有的命令行操作都是在anaconda的命令行下做的,这样不需要用户自己去设置环境。
2.GPu计算最新的方式是使用docker,本文没有实践,有需要的用户可以自己尝试。
3.安装gpu支撑环境后后tensorflow自动用GPU计算,还没尝试如何设置让其只进行cpu计算。

你可能感兴趣的:(科学计算)