问题描述
最近在跑语义分割的经典网络,SegNet,PSPNet等,在github上发现2017年左右的论文代码都是基于tensorflow1.x的,于是使用anaconda新配置了一个虚拟环境,预期使用keras2.1.5+tensorflow1.13.2,前期的keras等基本包使用pip均可以正常安装,可是tensorflow-gpu在安装后无法导入,提示ImportError: DLL load failed: Failed to load the native TensorFlow runtime根本无法使用,尝试重装cuda,降级cuda到9.2(10.1直接降级到9.2这个真的是败笔,当时如果试一下10.0也许就没那么多事儿了),更换tensorflow1.x版本均失败。
问题定位
在tensorflow官网上看到,tensorflow1.3版本要求的cuda版本是10.0,而我的cuda版本是10.1,理论上高版本应该兼容低版本,可是这个出了问题,因此解决这个问题,有两个方案:
- 直接重装cuda为10.0版本,并重装原来的cudnn到相应的匹配版本,这个方法比较麻烦,重装cuda是个技术活儿,并且如果你的显卡最多只支持到cuda9.x的版本,那么此方法是不可行的。
- 安装cuda辅助工具cudatoolkit10.0.130,这个工具可以看作是一个精简版本的cuda,tensorflow在调用cuda包时优先找当前环境下的cudatoolkit,再去调用系统中的cuda模块。(也有一说实际上系统的cuda最终还是通过cudatoolkit的方式供虚拟环境调用)
问题解决
定位到了问题,那么解决就变得容易了,一下为使用cudatoolkit的解决方案:
首先使用如下命令在terminal中查询cudatoolkit的版本:
conda search cudatoolkit
回车后看到查询结果为:
为了和tensorflow1.13.2版本对应,我们需要安装cudatoolkit10.0.130版本,使用以下命令安装:
conda install cudatoolkit==10.0.130
回车后即开始安装,安装完毕后而已正常使用了。