一、背景
Tensorflow可以在Windows下安装运行,有GPU版本和CPU版本。自行安装Tensorflow的一个主要问题就是版本不匹配。CUDA和Tensorflow的搭配是有特定版本要求的,并非越高越好。因此如果完全去Nvidia官网下载公开驱动,在运行Tensorflow过程中很可能报告找不到xxx.dll等错误,就是因为版本不匹配造成的。网上可以搜索到相关文章。相对于自行安装Python、自行下载CUDA、CUDNN、Tensor等组件并匹配版本,还要配置环境变量,复杂和麻烦。因此,本文推荐使用Anaconda一步到位。
本文是在AWS中国区域 G4实例,选择Windows Server 2019英文版系统安装测试通过,主要版本如下。
- AWS G4 instance – T4 GPU Tesla 442.50
- Anaconda3-2020.02(自带Python3.7.6)
- Python 3.7.7(新建Env自动被Anaconda通过依存性版本安装)
- CUDA 10.1.241(对应官网的Update1)
- CUDNN 10.1-7.6.5
- Tensorflow-gpu 2.1.0
以上组件除Tesla驱动外,均使用Anaconda一键自动安装。
二、安装GPU驱动
1、装GPU驱动
由于只使用GPU做训练,而不是3D图形渲染,因此只需要安装Tesla驱动即可,无需安装Grid图形驱动。而且在这种模式下,可使用Windows默认的RDP终端服务即可用于远程管理,无需安装NICE DCV/VNC等远程管理协议。
从这里下载:
https://s3.cn-north-1.amazonaws.com.cn/lxy-sa-software/EC2-G4-Instance/02_Tesla_Driver/442.50-tesla-desktop-winserver-2019-2016-international.exe
安装完毕后重启。
2、验证安装成功
进入cmd(非Powershell),执行如下命令:
cd "C:\Program Files\NVIDIA Corporation\NVSMI\"
nvidia-smi.exe
查看运行模式正常,返回结果如下。
C:\Program Files\NVIDIA Corporation\NVSMI>nvidia-smi.exe
Sat Jun 20 13:21:01 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 451.22 Driver Version: 451.22 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla T4 TCC | 00000000:00:1E.0 Off | 0 |
| N/A 31C P8 10W / 70W | 0MiB / 15205MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
C:\Program Files\NVIDIA Corporation\NVSMI>
在以上结果中,需要注意Tesla T4这一行显示的信息是TCC模式,即表示安装正常。TCC模式即GPU计算模式,只用于训练和推理,不需要3D图形渲染的状态。
三、安装Anaconda环境
1、下载
从这里下载并安装。
https://s3.cn-north-1.amazonaws.com.cn/lxy-sa-software/Tensorflow/Anaconda3-2020.02-Windows-x86_64.exe
2、安装Tensorflow
进入开始菜单,找到Anacoda3(64bit),点击展开菜单,点击 “Anaconda Prompt(Anaconda3)”,点击进入命令行。
随着Anaconda自动安装好的是一个Python 3.7.6的环境。我们可以通过创建配置文件,在系统上安装多个Python 3.x版本,并可进行版本切换。
查询Anaconda支持的Python版本清单,执行如下命令。
conda search tensorflow-gpu
本文测试了2.1.0通过,因此下边的手册描写为用户创建一个独立环境一个环境。
conda create --name tensorflow1 tensorflow-gpu=2.1.0
此时系统将提示所有依存性版本,可以看到CUDA和CUDNN的对应版本也列在其中。在确认过程中输入yes完成操作。
四、测试运行
1、命令行下运行
进入开始菜单,找到Anacoda3(64bit),点击展开菜单,点击 “Anaconda Prompt(Anaconda3)”,点击进入命令行。
查询上一个步骤配置的环境模式,执行如下命令:
conda info --envs
返回结果如下:
(base) C:\Users\Administrator>conda info --envs
# conda environments:
#
base * C:\ProgramData\Anaconda3
tensorflow1 C:\ProgramData\Anaconda3\envs\tensorflow1
(base) C:\Users\Administrator>
上文已经解释过,Anaconda 自带的 Python 版本是3.7.6,配置文件对应base这个版本。本文另外安装 Tenserflow-gpu 2.1.0 搭配 Python 3.7.7,对应的配置文件是tensorflow1这个名字。
启动 tensorflow1 环境,执行如下命令。
activate tensorflow1
python
执行Hello World测试。
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
hello = tf.constant('hello,tensorflow')
sess= tf.compat.v1.Session()
print(sess.run(hello))
这里需要注意的是,由于本文使用的Tensorflow版本是2.1,原来1.1版本中的Session方法已经过期,因此在2.x上调用Session的方法需要修改为compat.v1.Session。否则会报告方法不可用。
返回如下信息,且最后打出了hello表示配置成功。
(tensorflow1) C:\Users\Administrator>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 tensorflow as tf
2020-06-21 04:02:23.205171: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
>>> tf.compat.v1.disable_eager_execution()
>>> hello = tf.constant('hello,tensorflow')
>>> sess= tf.compat.v1.Session()
2020-06-21 04:02:25.472006: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-06-21 04:02:25.580727: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:
pciBusID: 0000:00:1e.0 name: Tesla T4 computeCapability: 7.5
coreClock: 1.59GHz coreCount: 40 deviceMemorySize: 14.85GiB deviceMemoryBandwidth: 298.08GiB/s
2020-06-21 04:02:25.589145: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-06-21 04:02:25.600717: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-06-21 04:02:25.614987: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-06-21 04:02:25.622689: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-06-21 04:02:25.637295: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-06-21 04:02:25.645685: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-06-21 04:02:25.673263: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-06-21 04:02:25.678463: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-06-21 04:02:25.683543: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2020-06-21 04:02:25.690563: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:
pciBusID: 0000:00:1e.0 name: Tesla T4 computeCapability: 7.5
coreClock: 1.59GHz coreCount: 40 deviceMemorySize: 14.85GiB deviceMemoryBandwidth: 298.08GiB/s
2020-06-21 04:02:25.701724: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-06-21 04:02:25.705676: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-06-21 04:02:25.711700: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-06-21 04:02:25.716021: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-06-21 04:02:25.720220: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-06-21 04:02:25.724584: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-06-21 04:02:25.732739: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-06-21 04:02:25.738786: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-06-21 04:02:26.578678: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-06-21 04:02:26.583080: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] 0
2020-06-21 04:02:26.586153: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0: N
2020-06-21 04:02:26.591704: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14239 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:1e.0, compute capability: 7.5)
>>> print(sess.run(hello))
b'hello,tensorflow'
>>>
2、图形界面运行
首先按上一步在字符界面下命令,切换配置文件,进入Tensorflow1。
然后为本环境安装sypeder支持,命令如下。
conda install spyder-kernels
进入开始菜单,找到Anacoda3(64bit),点击展开菜单,点击 “Spyder(Anaconda3)”,点击进入图形界面。
在图形界面的右下角,可以看到当前Spyder检测到的是base环境的Python 3.7.6,不是前文环境Tensorflow-gpu 2.1.0的Python 3.7.7。因此这里必须修改版本才可以运行。方法如下:
- 启动Spyder;
- 点击窗口的菜单栏,点击Tools;
- 点击第一项Preferences;
- 点击左侧的“Python interpreter”;
- 在右侧上半部分,默认选择是“Default”,修改为“Use the following Python interpreter”
- 在下方目录内,填写上前文配置的profile对应的路径 C:\ProgramData\Anaconda3\envs\tensorflow1\python.exe ,这个版本就是前文的tensorflow1环境对应的的版本;
- 点击OK,完成配置;
- 退出Spyder,重新进入。
现在可以看到右下角的Python版本检测正常。
接下来按照上一步的Hello World脚本,粘贴上,点击运行按钮,即可正常执行。
全文完。