第5章 CHAPTER 5 显 卡 确 认 图51确认是否有NVIDIA显卡 本章将介绍如何为TensorFlow指定NVIDIA显卡。当前TensorFlow只支持NVIDIA显卡,尚不支持其他品牌显卡。 如果计算机没有NVIDIA显卡,请直接阅读第6章。没有NVIDIA显卡只是运行速度慢,并不影响TensorFlow的使用。 本章介绍的功能需在Windows系统中使用NVIDIA显卡才能实现。可通过Device Manager(设备管理器)确认当前计算机是否有NVIDIA显卡,如图51所示。 Mac系统当前不支持此功能。Linux的Ubuntu可通过Docker轻量虚拟化安装Nvidiadocker来实现该功能,相关细节请参考官网https://www.TensorFlow.org/install/install_linux。 5.1安装NVIDIA的CUDA Toolkit 9.0 推荐使用Windows 10系统版本、Python 3.6.6的64位版本、NVIDIA的CUDA Toolkit 90及NVIDIA的cuDNN v7.2.1、TensorFlowGPU 2.1.0。其他版本的TensorFlow和NVIDIA的SDK(软件开发工具包)有差异,无法正常运行。安装NVIDIA的CUDA Toolkit 9.0的步骤如下: (1) 下载CUDA ToolKit 9.0。在NVIDIA网站上找到CUDA Toolkit 9.0(请勿安装其他版本,以免出现兼容性问题),依次选择Windows、x86_64、10、exe[local]选项, 并单击Download(1.4 GB)按钮下载,如图52所示。 图52下载CUDA ToolKit 9.0 (2) 安装CUDA ToolKit 9.0。下载完成后直接安装,安装方法同普通软件。使用默认选项即可,如图53所示。 图53安装CUDA ToolKit 9.0 安装完毕后需在NVIDIA中注册和登录。 微课视频: 01_GPU_Cuda90_Download.mp4和02_GPU_Cuda90_Install.mp4.mp4。 5.2安装NVIDIA的cuDNN v7.2.1 安装NVIDIA CUDA Toolkit 9.0的cuDNN v7.2.1的步骤如下: (1) 下载NVIDIA CUDA Toolkit 9.0 的cuDNN v7.2.1。输入https://devloper.nvidia.com/rdp/cudnndownload,在打开的网页中依次选择Download cuDNN v7.2.1、cuDNN v7.2.1 Library for Windows 10选项,如图54所示。 图54下载NVIDIA CUDA Toolkit 9.0的cuDNN v7.2.1 (2) 解压缩。将下载的压缩文档解压缩。 (3) 复制文档。分别将解压缩后的bin、include和lib这3个路径下的文档复制到之前安装的CUDA ToolKit 9.0的路径位置,如图55所示。 图55复制文档 注意: 复制文档即可,请勿删除CUDA ToolKit 9.0 原有的文档。 微课视频: 03_GPU_cuDNN721_Download_CopyFiles.mp4。 5.3安装Python 的TensorFlowGPU函数库 在命令提示符窗口中输入以下命令安装Python的TensorFlowGPU函数库2.1.0版本: pip3 install TensorFlow-gpu==2.1.0 结果如图56所示。 图56安装Python的TensorFlowGPU函数库 微课视频: 04_GPU_TensorFlowgpu.mp4。 5.4运行TensorFlowGPU程序 测试TensorFlowGPU能否顺利运行,在命令提示符窗口中输入以下命令打开Python 3: C:\> Python 3 输入以下命令测试TensorFlowGPU程序是否安装完成(实例4——01_hellogpu.py): 1. import TensorFlow as tf 2. hello = tf.constant('Hello, TensorFlow!') 3. sess = tf.Session() 4. print(sess.run(hello)) 出现如图57所示的内容即代表安装成功。 图57运行GPU版的TensorFlow 如果出现如图58所示的内容,代表运行的还是TensorFlowCPU的版本,TensorFlowGPU未安装成功。 图58运行的是TensorFlowCPU 微课视频: 05_GPU_RunTensorFlowgpu.mp4。 5.5通过程序指定GPU显卡 安装成功后,系统会自动判断是否有显卡并使用。如需使用特定的GPU显卡,可以通过环境变量CUDA_VISIBLE_DEVICES设置,其值代表CUDA程序可以使用的GPU显卡编号(从0开始)。如只让CUDA程序使用第1张GPU显卡,则输入以下命令(实例5——02_GPU0.py): 1. import os 2. os.environ["CUDA_VISIBLE_DEVICES"] = "0"#使用第1张GPU卡 3. 4. import TensorFlow as tf 5. hello = tf.constant('Hello, TensorFlow!') 6. sess = tf.Session() 7. print(sess.run(hello)) 运行结果如图59所示。 图59实例5运行结果 在Linux平台下也可以输入以下命令: export CUDA_VISIBLE_DEVICES=0 Python 01_hello.py 这样,当Python程序01_hello.py运行时,就只会用到设备上的第1张 GPU显卡。若要指定多张GPU显卡,则用逗号分隔: import os os.environ["CUDA_VISIBLE_DEVICES"] = "0,2"#使用第1张和第3张GPU显卡 在Linux平台下也可以通过以下命令使用第1张与第3张GPU显卡: export CUDA_VISIBLE_DEVICES=0,2 如果在 Linux平台下需要使用固定的GPU显卡,可以将CUDA_VISIBLE_DEVICES的设置写在 ~/.bashrc 中,添加以下命令: CUDA_VISIBLE_DEVICES=0 这样在登录Linux系统时即可自动设置好。如果要在不同程序中指定GPU显卡,可以在该运行程序时直接以CUDA_VISIBLE_DEVICES指定。 微课视频: 06_GPU0.mp4。 5.6指定GPU显卡内存上限 在TensorFlow中,可以使用tf.GPUOptions来调整程序占用的GPU显卡内存上限。 假设只使用20%的GPU显卡内存,可以通过以下程序完成: gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.2) sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 下面来看一个具体的实例(实例6——03_GPU0Memory.py)。 1. import os 2. os.environ["CUDA_VISIBLE_DEVICES"] = "0"#使用第1张GPU显卡 3. import TensorFlow as tf 4. hello = tf.constant('Hello, TensorFlow!') 5. gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.2)#内存占用20% 6. sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 7. print(sess.run(hello)) 另外,系统默认使用全部GPU显卡内存,也可通过以下程序达到使用全部GPU显卡内存的目的: gpu_options = tf.GPUOptions(allow_growth=True) sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 下面来看一个具体的实例(实例7——04_GPU0MemoryAuto.py)。 1. import os 2. os.environ["CUDA_VISIBLE_DEVICES"] = "0" #使用第1张GPU 3. import TensorFlow as tf 4. hello = tf.constant('Hello, TensorFlow!') 5. gpu_options = tf.GPUOptions(allow_growth=True) #使用全部GPU内存 6. sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 7. print(sess.run(hello)) 微课视频: 07_GPU0Memory.mp4和08_GPU0MemoryAuto.mp4。