说实话,在使用GPU训练模型的过程中踩了不少坑,最主要是在环境配置上的问题。
在此,详细说下GPU环境的配置。
安装CUDA
首先需要安装CUDA,详细的文档参考:https://docs.nvidia.com/cuda/archive/10.0/index.html
直接到此下载地址下载CUDU:
注意版本,Paddle最新GPU版本只支持10.0 (截止2020-08-25情人节夜晚):
这个地方一定得小心了,我是踩过坑的,不按照文档中的版本来是会出问题的。
下载注意选择本地版,网络版我试过,安装时下载奇慢。
下载后,安装完,检查安装的版本是否正确:
PS C:\Users\quanzaiyu> nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:04_Central_Daylight_Time_2018
Cuda compilation tools, release 10.0, V10.0.130
以及环境变量是否配置正确 (安装时会自动配置):
安装cuDNN
安装cuDNN,详细的文档参考:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/#install-windows
直接到此下载地址下载cuDNN:
同样需要注意版本,Paddle需要cuDNN7.6+
下载完后,是一个压缩包,将其包内的三个文件夹拖到CUDA的安装目录即可:
安装Paddle GPU版本
根据官网的教程来:https://www.paddlepaddle.org.cn/install/quick
安装命令如下:
pip install paddlepaddle-gpu==1.8.4.post107 -i https://mirror.baidu.com/pypi/simple
安装好后进入python交互式命令行检查安装情况:
(python_37_venv) D:\Workplace\deep_learning>python
Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle.fluid
>>> paddle.fluid.install_check.run_check()
Running Verify Fluid Program ...
W0825 22:07:37.499102 13280 device_context.cc:252] Please NOTE: device: 0, CUDA Capability: 61, Driver API Version: 11.0, Runtime API Version: 10.0
W0825 22:07:37.538996 13280 device_context.cc:260] device: 0, cuDNN Version: 7.6.
Your Paddle Fluid works well on SINGLE GPU or CPU.
W0825 22:07:46.430886 13280 build_strategy.cc:170] fusion_group is not enabled for Windows/MacOS now, and only effective when running with CUDA GPU.
Your Paddle Fluid works well on MUTIPLE GPU or CPU.
Your Paddle Fluid is installed successfully! Let's start deep Learning with Paddle Fluid now
如果CUDA或cuDNN哪个环节安装出了问题,则会出现以下错误提示:
>>> paddle.fluid.install_check.run_check()
Running Verify Fluid Program ...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
......
RuntimeError: cudnn64_7.dll not found.
进行训练时,通过 fluid.CUDAPlace(0)
设置在GPU上进行训练,部分代码如下:
#在使用GPU机器时,可以将use_gpu变量设置成True
use_gpu = True
place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()
with fluid.dygraph.guard(place):
......
观察任务管理器可以看到,已经是在使用GPU进行训练了: