补充:测试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.正式安装
- DOS下进入
environment-win64.yml
所在目录 - 配置conda环境
conda env create -f environment-win64.yml
conda install numpy mkl cffi
- DOS进入
pytorch-0.3.0-py36_0.3.0cu80.tar.bz2
文件所在目录 - 断开网络连接,断网
conda install –offline pytorch-0.3.0-py36_0.3.0cu80.tar.bz2
如果期间报错,某某package没有安装成功,则
activate 环境名称
在环境里用pip
或conda 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 session
CUDA 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版本匹配的研究,可以看这篇