学习的话,用linux还是比较好,但是双系统虚拟机跑的话只能用CPU,太慢了,所以还是要装windows,用上我的两块GPU。
因为是照着别人的搭配选择的版本,整体来说比较简单,除了一些网络问题和等待,没太大的阻碍,比linux下默认自带python3的anaconda弄需要python2的caffe简单多了(手动滑稽)。
过于详细的流水教程就不写了,网上很多了,主要列一些自己遇到的坑。
目录
Anaconda
conda 三方源
CUDA
CUDNN
CUDNN的版本兼容坑
tensorflow GPU版:
测试库导入和显卡信息:
pycharm和conda的兼容:
anaconda导航中jupyter启动路径设置:
使用GPU进行训练,对比CPU、GPU性能表现:
tensorboard
IE内核的浏览器不可用
更新:CUDNN版本被锁定问题
“CUDNN初始化失败,CUDNN没实现”:
Keras
Anaconda就算python发行版,只是自带管理工具,所以,先把win下的python删了比较好弄一些,尤其环境变量之类的
https://www.anaconda.com/distribution/#download-section
anaconda 官网
两个版本,一个命令行,一个graphical,是图形界面,而不是GPU版本
环境变量需要手动加scripts
d:\Anaconda3;d:\Anaconda3\Scripts;
也不行!!!!!!!!!
最新版本的anaconda弄成python3.7了,还得降级或者新建环境。
下载的graphical,却没有navigator,只有一个命令行,命令还没有,安装失败。。
问题来自旧python,删干净之后装成功。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
源搞定之后降级安装一个3.6环境
conda create --name py36 python=3.6
conda activate py36
deactivate
更新:三方源不行了,继续用回老源了。(现在好像能用了,和politics有关吧,没办法,随缘)
https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=7&target_type=exelocal
网络不好,下载会出故障,无论哪个版本,都可能是这样,可能只有几百B的exe,也可能看起来和官网描述的文件大小几乎一样的exe,但都是失败。最好从网上多找下。
显卡驱动支持9.1(新驱动10.1),但是tensorflow的话,有兼容问题,所以CUDA最好先用9.0。
https://developer.nvidia.com/cuda-90-download-archive?target_os=Windows&target_arch=x86_64&target_version=7&target_type=exelocal
CUDA选精简安装的话不只是不能选择安装组件,还不能选路径!!!C盘局促的话需要注意。
再次运行安装程序也不提供卸载旧版本功能,需要自己去控制面板一个一个卸载,坑!因为驱动之类的有一系列耦合问题,会非常麻烦,尤其遇到360的阻挠,更是难上加难!总之,重装比较烦,最好一次选好。
插入式,复制到CUDA的路径下
windows下的文件会少一些,分别复制到 \NVIDIA GPU Computing Toolkit\CUDA\v9.0\对应位置,当然,结构是一样的,整体复制就行了。
路径不要找错,有appdata,有安装目录,正确的操作应该会提示合并,没有替换。
想卸载cudnn就是把这几个文件删掉。
Loaded runtime CuDNN library: 7500 (compatibility version 7500) but source was compiled with 7003
CUDNN不是第一个大版本一致就行,第二个数字也有要求,我以为CUDNN7就可以了,其实必须是7.0,不能是7.5,其实问题不在nvidia,支持CUDA9.0都是支持的,只是tensorflow的版本兼容,可能新版tensorflow会好,但是为了整体兼容,我就不升高级tensorflow了,下载v7.0.5。
选个对应版本
tf版本没太多忌讳,而且我的6700也支持AVX。(但是想要tf使用AVX好像得自己编译了,所以还是利用不上。)
我这套环境其实不适合直接装最新,这会装1.13.1,不支持我现在的CUDA9.0+CUDNN7.0.5!
pip install --ignore-installed --upgrade tensorflow-gpu
直接都卸载了。换个1.5。
如果有互相干扰的问题,最好是用conda来装,别用pip。
pip install tensorflow-gpu==1.5.0
conda install tensorflow-gpu==1.5.0
import tensorflow as tf
tf.test.gpu_device_name()
from tensorflow.python.client import device_lib device_lib.list_local_devices()
剩下就是其他的numpy、pandas、matplotlib之类的都用conda install走一遍。
社区版的免费,直接下就可以。
http://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC
坑1:重装系统不要妄图用原来的当绿色版,至少我是失败了,会有些报错,新装一个就好了。
坑2:别太着急删原版,如果你有些很有用的scratches,其实这是在安装目录下的,需要自己备份。
pycharm需要设置环境,而anaconda有虚拟环境,不可能直接找到。
工程设置,别选new,选已有的。从右边按钮手动添加
确定后,可以看到,自己装的库都加载出来了,说明设置成功
打印测试,我装的TF1.5.0
虽然可以从命令行改路径启动,但是还是导航界面方便些。
但是导航界面的jupyter只是运行,不能设置
他默认在C盘,不能再向上,但是我不在C盘运行
去命令行生成一个配置文件(这个配置是共享的,但是你想运行下边这行,前提还是当前env安装了jupyter)
jupyter notebook --generate-config
放开 c.NotebookApp.notebook_dir这句注释,自己指定dir
成功
jupyter不像linux有多个内核可选了,因为这个jupyter是根据每个虚拟环境单独安装的,就属于py36,选python3即可。
加载成功
还有,快捷方式的用户名后缀%USERPROFILE%删掉,保持裸的.py就好。
如果从Anaconda导航启动notebook,还会有个问题,没有提示你口令是什么:
他会找默认浏览器,比如IE,而你不想用,换个浏览器打开就完蛋:
根据提示,用jupyter notebook list可以看到列表,复制出来就好。
发现又一个问题,已经开了过多进程,却没法简单的靠ctrl+c或者jupyter的shutdown(没这个命令)关闭掉。不知道是不是ANACONDA NAVIGATOR的Bug,他没有一个运行状态反馈机制,只能让你重复的点‘launch’,越开越多,烦。
只能杀掉了。所以还是用命令行启动更方便点,或者启动一次就一直挂着,以后就用口令继续使用之前的进程。
最后,猎豹等浏览器可能会因各种bug打不开jupyter,换个浏览器试试(360、chrome)
使用简单神经网络进行MNIST的训练。
显存爆了,每个卡,3G,只剩下三百M(这里可以通过配置动态增长或者指定显存使用比例来解决)
使用nvidia自带程序
浏览器和音乐播放器都在吃显存。
运行太久了,重新开机,显存足够,发现不是显存的问题,是cudnn的版本问题
换回CUDNN7.0.5之后,先不管吓人但是没卵用的warning,可以正常训练了。
使用MNIST训练,batch_size=50,没有额外优化情况下,双1060 3G对比i7 6700,大概是13倍的关系。
GPU:
虚拟机tensorflow-CPU版:
考虑到虚拟机只分了一半的核,使用windows跑,2000步也是188的时间,和虚拟机几乎一样,说明CPU训练没有多线程优化
为了凸显GPU的价值,加大batch_size到500试一下,21.7倍,batch_size大了就更可能利用到GPU的优势。
CPU
GPU
弊端:
跑测试集,如果一下跑整个数据集,GPU会爆,CPU却不一定爆内存(本机16GB)。
所以进行准确度检测的时候,可以分批次进行,最后求平均。
也专门用conda install了一下,没能解决,报错信息有所不同
pip查询,不知道是不是版本不匹配,把下面这些tensorflow和tensorboard全删掉
之前用pip装的tensorflow,改用conda装,不过没有1.5.0、1.5.1,随便蒙一个试试
conda install tensorflow-gpu==1.9.0,再次运行tensorboard,可用(同样能兼容之前所安装的CUDA9.0+CUDNN7.0)
(应该直接可用的,如果仍然不行?加一个cudatoolkit==8.0).
如下错误提示,360和猎豹都不行,换chrome可以。
--------------------------------------------------
装fakeapp时候运行过两个cudnn的补丁,然后版本就不对了,无论怎么删cuda重装,都是提示版本不对,认为我是7.3。
经排查,发现问题可能出在那个json上。
如图,这个7.3.1的json可能有关系。
尤其这两个文件夹,都带着库呢, 其实就等于独立在pkgs下存了7.3.1的库。可能运行的时候通过json重定向一下就把我在CUDA目录的7.0.5给覆盖了。
删除这些,也没能解决问题,另一个可能是VS2015的runtime,因为fakeapp让安装2015,我把2017删了。
目前没找到解决途径,新建一个conda的env能解决,说明windows系统下的CUDA和CUDNN版本没错,7.3是卡到环境里了,卸载tensorflow重装等都重置不了这个设置。
could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
error retrieving driver version: Unimplemented: kernel reported driver version not implemented on Windows
经验证,CUDA与CUDNN版本都没问题,而且这里提示的不是CUDNN版本不匹配,是没实现,是初始化错误。
2019-07-04 00:42:33.851400: E C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\stream_executor\cuda\cuda_dnn.cc:385] could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
2019-07-04 00:42:33.852400: E C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\stream_executor\cuda\cuda_dnn.cc:389] error retrieving driver version: Unimplemented: kernel reported driver version not implemented on Windows
2019-07-04 00:42:33.852400: F C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\kernels\conv_grad_input_ops.cc:961] Check failed: stream->parent()->GetConvolveBackwardDataAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo(), &algorithms)
handler占用?
1.重启电脑!未解决!
2.重新复制7.0.5的cudnn到指定目录!
未解决!!!!
3.更改pycharm的interpreter,没错,好久没用,有些旧project对应的interpreter还是老的,所以出错。
最好单独建一个conda环境,因为TF有TF相对需要兼容的版本(考虑CUDA和CUDNN等)
如果keras默认安装2.2.4(我目前遇到的版本),实际运行有些兼容问题,所以如下,单独安装一对匹配的版本。
pip install tensorflow==1.2.0
pip install keras==2.0.9
ImportError: Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
解决了版本的问题,还有plot(画计算图的工具)的问题,说graphviz没安装,用pip是不行的,这里有安装方法
https://stackoverflow.com/questions/36886711/keras-runtimeerror-failed-to-import-pydot-after-installing-graphviz-and-pyd
如果用anaconda,最好还是用conda装,实测pip并没有解决问题
conda install graphviz
这俩区别我没明白,目前都能用。就当是iphone和iphone plus吧。
conda install pydotplus
或者
conda install pydot
加法plot效果图
from scipy.misc import imread,imresize
pip install scipy==1.2.1
pip install pillow==6.1.0