- TensorFlow从零开始学
- 侯伦青等
- 1442字
- 2020-08-27 17:02:06
2.4 使用GPU 加速
2.4.1 安装配置GPU环境
1.安装GPU版TensorFlow
在2.2节中我们已经介绍了如何安装CPU版TensorFlow,为了使用GPU来加速计算,我们必须安装GPU版TensorFlow。TensorFlow官网对于Docker的安装方法有较为详细的介绍,感兴趣的读者可以参考官网的教程。本节里我们将介绍如何自己手工来安装和配置相关环境。首先使用pip命令:
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_62.jpg?sign=1739611192-cirZE7VEtoykRDAyeiUPwddypXzhTrmE-0-ee65628fa1e76204c7dcdeb7f8eba186)
安装完成后,我们可以查看一下当前可用的GPU:
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_63.jpg?sign=1739611192-0LmW3gli7KsuFtzvCGNBBc870IHjKvUi-0-03bf77370636294cefc02e52b5179663)
由于作者的机器上有两块GPU,所以输出两块GPU的编号:“[‘/device:GPU:0’,‘/device:GPU:1’]”。
2.安装显卡驱动
根据你的显卡型号到官网下载对应驱动。图2-23所示的是作者机器Tesla P100的显卡对应的驱动程序。这里一定要注意选择正确的版本,要和你的显卡版本、操作系统版本及想要安装的CUDA版本一一对应(关于TensorFlow与CUDA的版本对应关系,在后面CUDA的安装部分有说明)。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_64.jpg?sign=1739611192-GBMOEhOPm3i68plpvQbciIEfHtzIm01o-0-69aff87b98bd7adfecf513f52d7ba7b4)
图2-23 NVIDA驱动下载列表
在图2-23所示的界面中单击“搜索”按钮,弹出如图2-24所示的界面,单击“下载”按钮即可。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_65.jpg?sign=1739611192-4vXpKqb8TnkmCUegmgm9iXleJu2j0izf-0-f9ddbc73959116ebae5fc903536937f3)
图2-24 NVIDA驱动下载提示
安装完成之后可以使用“nvidia-smi”命令查看显卡,图2-25所示的是作者机器上的两块显卡的信息。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_66.jpg?sign=1739611192-dsKq64tD0ONHSfbLuF6cKYZjfy95YiIU-0-81255433c96dd25db655c68208b6b652)
图2-25 作者机器上的两块显卡的信息
3.安装CUDA
在安装CUDA之前,我们一定要先搞清楚TensorFlow各个版本与CUDA版本的对应关系。在TensorFlow官网有说明,其中Linux系统环境下TensorFlow GPU与CUDA的版本对应关系如图2-26所示。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_67.jpg?sign=1739611192-2vQTtFjwiVezbPMiXE5yHHfuvYec4o7b-0-1ec6f6e23dfe8ddbc389670a92e22013)
图2-26 TensorFlow与CUDA的版本对应关系
TensorFlow2.0GPU依赖的NVIDA软件包的官网说明,如图2-27所示。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_68.jpg?sign=1739611192-8XfAN0SKmrf3vAvH8ArvpH3Yt3uKsluz-0-4c051ed811f2c64dcf2a901cba78aa0a)
图2-27 TensorFlow2.0GPU依赖的NVIDA软件包
(1)下载CUDA
首先到NVIDIA官网下载CUDA。作者在撰写本节内容时,CUDA的最新版本是10.1版本,这里提醒读者,一定要按照TensorFlow官网的说明下载10.0版本,否则TensorFlow即使安装好后也是不能正常运行的。后续新的版本可能会支持更高版本的CUDA,读者请根据实际情况下载。
如图2-28所示,选择对应系统环境的CUDA版本。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_69.jpg?sign=1739611192-GsOiAl325mnXrzYhWHP7FtvsMAnrEVAM-0-6d314992adcb561e7f38a95812c789a7)
图2-28 选择对应的CUDA版本
(2)安装CUDA
CUDA下载页面有安装指引,如图2-29所示。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_70.jpg?sign=1739611192-VX0RhMNpl08VBQXLB7nJWa8aeEP2P6nE-0-a7cdaf315dfb36a544a6ad0819a038dd)
图2-29 CUDA的安装步骤
第一步:执行安装命令。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_71.jpg?sign=1739611192-QSIM7Kuqg2YP0YhPe3YQ3VdBMSKqU4y8-0-b15ac9d0cb1729f189cb2368d59e0d9d)
第二步:添加key。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_72.jpg?sign=1739611192-GDJ2BOf5VCszXiJLMEdVSMScorWqaa7z-0-39ed56b3b00ba617ff96e43e07830d7c)
第三步:依次执行。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_73.jpg?sign=1739611192-OBeeLI17NNnIMV6omS6So36eqVlE3vjo-0-954f171f41e37bb910bb58487dfdc2e7)
注意不要使用“sudo apt-get install cuda”,这样默认安装的是最新版,所以一定要指定版本。安装过程中如果有报“libkmod:ERROR”相关错误,那么安装完成后重启一下即可。
安装完成后,在“/usr/local”目录下会生成“cuda”和“cuda-10.0”两个文件夹,如图2-30所示,我们可以使用命令“cat /usr/local/cuda/version.txt”查看CUDA版本。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_74.jpg?sign=1739611192-mpDNA4dSGL8ka1h06XjX8vCrWjyCw0Q8-0-b46af1eac7a2056ed39f3a5baba92454)
图2-30 查看CUDA版本
第四步:设置环境变量。
打开“~/.bashrc”文件,在文件的最后添加如下内容:
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_75.jpg?sign=1739611192-h1dNG0k1CQ89Pesn3QH8Sc94OViadAdz-0-4386b922955d05ed79defcd5503f5aa5)
在终端执行命令“source~/.bashrc”让环境变量生效。
第五步:验证安装是否成功。
① 进入目录“/usr/local/cuda-10.0/samples/1_Utilities/deviceQuery”中打开终端。
② 终端下执行编译命令“sudo make”。
③ 然后执行命令“./deviceQuery”,可以看到两块GPU的信息。
如图2-31所示,检测到作者的两块显卡,图2-31中所示的是其中一块显卡的信息。到这里CUDA已经安装完成了。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_76.jpg?sign=1739611192-5Dv9RK38pyfcjudgzQiR8bY7xXpsDJvc-0-721ce4b011da711eaf2f8ec79dcce5e9)
图2-31 显卡的信息
4.安装cuDNN
(1)下载
这里一定要下载与CUDA10.0对应的版本,如图2-32所示。下载cuDNN需要登录NVIDIA账号,没有的话,可以按照提示创建一个账号。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_77.jpg?sign=1739611192-fIEoCyCYBtY8nWcHsX2QyRxzR2gA0ntV-0-83a6fcfef2df1f13d7fa803ee87aa81e)
图2-32 cuDNN与CUDA的版本对应关系
选择好cuDNN版本后,单击下载“cuDNN Library for Linux”,如图2-33所示。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_78.jpg?sign=1739611192-MVGgrkJ2gI1SquoKZK6tJZr8FUxCjuxq-0-bd9df5ef8999ba857e3715a197437f47)
图2-33 cuDNN下载列表
(2)安装
第一步:使用“tar”命令解压文件。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_79.jpg?sign=1739611192-E3o1u5DAhMkFTozuxVtExW9pHqjiWCtU-0-f6773a8d595d65376fced2b502886bb8)
第二步:拷贝文件,并修改文件权限。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_80.jpg?sign=1739611192-7HXX1ZQOtv1oTtu0ze4UlumwNMSCMGoB-0-3455029076954cc17d35ee077db49575)
到这里TensorFlow2.0的GPU版就安装配置完成了。
2.4.2 使用TensorFlow-GPU
如果我们的机器上安装配置好了GPU版的TensorFlow,那么运行的时候TensorFlow会自行去选择可用的GPU,也可以通过“os.environ["CUDA_VISIBLE_DEVICES"]”来选择我们要使用的GPU:
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_81.jpg?sign=1739611192-O2c8eZZFcaJOV9v61gjUKuHQcVl5tBGn-0-3a8dd99f4e650697d0441c3d46a22ac1)
在第4行代码中,我们选择了编号为“0”的GPU,执行完上面的这段代码后使用“nvidia-smi”命令来查看一下GPU的占用情况,如图2-34所示,编号为“0”的GPU正在被占用。我们可以将第4行代码中的“0”改为“1”来使用另一个GPU。
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_82.jpg?sign=1739611192-xr4SjZFDUnxTsfHaJoXrB2qR89YhVPRi-0-144e6e0bafad7ea155bf56b7ff6d0a5a)
图2-34 查看GPU占用情况
如果我们希望使用多个GPU,例如同时使用“0”“1”两个GPU,可以设置“os.environ ["CUDA_VISIBLE_DEVICES"] = "0,1"”,除此之外还可以使用TensorFlow为“tf.keras”提供的分布式训练策略“tf.distribute.MirroredStrategy”来实现单机环境下的多GPU训练:
![](https://epubservercos.yuewen.com/C60F01/16896237405619506/epubprivate/OEBPS/Images/txt002_83.jpg?sign=1739611192-TgxNPF7CQi02N8qRxTMoJ7CDoO5xHMnE-0-560cd043561af312318b1b109c7ee63f)