补充:测试Tensorflow是否支持GPU的代码。

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

配环境这个事真的是常看常新,随着package的不断更新,之前配环境的经验都不能用了,所以新开一贴,记录一下最近配环境的曲折之路。

之前博客Windows10 GPU版Tensorflow配置教程+Anaconda3+Jupyter Notebook依然可以用。

#Windows10+GPU+Anaconda3+Pytorch+TensorFlow+Keras配置方法

最近由于人脸检测,接触到了pytorch框架,首先按照深度学习人脸识别系统 DFace移植WIN64环境详解(支持GPU)配置了一下。但是这位博主的经验也有点久远了,我按照他的来做并没有成功。摸索出来的成功配置步骤可以总结如下:

####1.环境信息
操作系统:Windows10
Anaconda3版本:4.2.0
CUDA版本:8.0
cuDNN版本:5.1
假设这些都已经配置好了,没有的话可以参考
Windows10 GPU版Tensorflow配置教程+Anaconda3+Jupyter Notebook

####2.准备配置文件
(1)environment-win64.yml 这是用来创建Anaconda环境的配置文件
用Notepad++打开,文件第一行可以修改自己想要的environment名称,把224行附近的三行代码剪切出来放在别处。

- pytorch=0.3.0=py36_0.3.0cu80
- vc=14.1=h21ff451_0
- vs2017_runtime=15.4.27004.2010=0

然后保存yml文件。主要是因为conda安装这几个package的时候会报错PackageNotFoundError: Package not found xxxx,索性就把它剔除出去,最后结果不影响。等环境配置好之后,用conda list pip list可以查看后两个package是否存在。

(2)pytorch-0.3.0-py36_0.3.0cu80.tar.bz2 密码:8u21
这个文件就是(1)中的第一个package。

####3.正式安装

  1. DOS下进入environment-win64.yml所在目录
  2. 配置conda环境conda env create -f environment-win64.yml
  3. conda install numpy mkl cffi
  4. DOS进入pytorch-0.3.0-py36_0.3.0cu80.tar.bz2文件所在目录
  5. 断开网络连接,断网
  6. conda install –offline pytorch-0.3.0-py36_0.3.0cu80.tar.bz2

如果期间报错,某某package没有安装成功,则
activate 环境名称 在环境里用pipconda install重新装一下。若当前版本号安装不了,换一个版本也可以。

####4.测试安装结果
在命令行中

activate 环境名称
在python中输入
import torch
x = torch.Tensor([1.0])
xx = x.cuda()
print(xx)
#cuDNN TEST
from torch.backends import cudnn
print(cudnn.is_acceptable(xx))

若返回True则证明GPU版的Pytorch安装成功

####5.安装GPU版TensorFlow
上一步安装的pytorch依赖的是CUDA8.0,这就要求我们安装的GPU版tensorflow也必须满足CUDA版本的要求,不然安装成功也会报错
InternalError:failed to create sessionCUDA driver version is insufficient for CUDA runtime version

2018-09-01 01:24:19.278049: E C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\direct_session.cc:168] Internal: cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Program Files\Anaconda3\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1509, in __init__
    super(Session, self).__init__(target, graph, config=config)
  File "D:\Program Files\Anaconda3\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 628, in __init__
    self._session = tf_session.TF_NewDeprecatedSession(opts, status)
  File "D:\Program Files\Anaconda3\envs\Anaconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 473, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InternalError: Failed to create session.

可以在
D:\Anaconda3\envs\pytorch-gpu\Lib\site-packages\tensorflow\python\platform\build_info.py 查看这个版本的TensorFlow采用的CUDA版本

msvcp_dll_name = 'msvcp140.dll'
cudart_dll_name = 'cudart64_90.dll'
cuda_version_number = '9.0'
nvcuda_dll_name = 'nvcuda.dll'
cudnn_dll_name = 'cudnn64_7.dll'
cudnn_version_number = '7'

这几个文件缺了一个都会导致报ImportError的错。

尝试安装tensorflow==1.5.0及以上的版本,支持的cuda都是9.0。所以我们这次还是选择安装tensorflow==1.2.0,另外,1.2.0版的tensorflow是没有这个build_info.py文件的。

在命令行进入conda 环境

activate pytorch-gpu
pip install tensorflow-gpu==1.2.0

安装过程中也有可能报错,比如html5lib-0.9999999或者markdown=2.6.9的wheel不能build之类的错误。我的办法是把这个版本的whl文件下载下来手动安装。

pip install xxx.whl

Anaconda自带的pip下载whl文件产生的缓存都不会自动清除,我们可以找到需要的whl,以便日后再次使用。
在这个位置,注意AppData是隐藏文件夹

C:\Users\用户名\AppData\Local\pip\cache\wheels

有的时候用pip安装package还会报错pip OSError: [Errno 28] No space left on device然后我发现C盘快被他下满了,果断清除一些cache,就可以了。

####6.安装Keras
同样由于版本更新,Keras的老版本和新版本会有一些较大不同,通常报错
在Keras-2.1.6及以上

Traceback (most recent call last):
  File "models.py", line 24, in <module>
    model = NIH()
  File "models.py", line 19, in NIH
    model.add(Activation('softmax'))
  File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/models.py", line 522, in add
    output_tensor = layer(self.outputs[0])
  File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py", line 619, in __call__
    output = self.call(inputs, **kwargs)
  File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/layers/core.py", line 304, in call
    return self.activation(inputs)
  File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/activations.py", line 29, in softmax
    return K.softmax(x)
  File "/home/eric/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 2963, in softmax
    return tf.nn.softmax(x, axis=axis)
TypeError: softmax() got an unexpected keyword argument 'axis'

所以我们选择安装

pip install keras==2.1

第二个因为版本不同带来的问题就是A版本的Keras训练的.h5模型文件可能无法在B版本上导入,目前我没看到什么好办法,只能匹配了版本再训练,不然有功亏一篑的危险。

PS:对tensorflow和CUDA版本匹配的研究,可以看这篇