简介
我只想说用tensorflow搞好的老项目,没事!!!千万!!!别动它的环境!
事情是这样的,本来这个服务是部署在我们本地服务器的。
但是甲方由于各种原因(速度和安全)要把这个用tensorflow写的计算接口移植到甲方服务器上。
我本来以为把docker直接打包个镜像就过去了,但是事实告诉我你想多了!
灾难来了
由于项目比较古老(之前还有用caffe做的),我本地服务器配置如下:
Cuda:9.0
Cudnn:7.5
python:3.6
tensorflow:1.10-gpu
显卡:1080ti
甲方让我给配置单,不出意外的情况下出意外了,我特意强调一定30以下的显卡结果买的是3080ti,哎无语!!!!那咋整干吧!所以遇到了一下问题:
- 由于30以上的显卡采用了全新的架构所以最低
cuda
版本为11(30以下显卡是老架构)。 cuda11
以上这就导致了必须使用tensorflow2.5
以上,众所周知tensorflow
v1和v2简直就是两个东西!- 最致命的来了
tensorflow2.5
以上不仅pyhon3.9
并且keras
要用最新的!
我本着侥幸心理将打包好的docker镜像加载之后,果不其然因为虽然是虚拟环境,但是用的还是主机显卡,所以cuda9
装好了也是缺少各种东西不能调用!。
于是老老实实的重新建立docker
容器,环境如下:
Cuda:11.0
Cudnn:8.5
python:3.9
tensorflow:2.5-gpu
显卡:3080ti
看起来是不是十分完美,但是代码运行报错。
在我不断地修改下,发现错误的源头居然是keras
!!!,回想起来当时项目还是在tensorflow
最牛逼的时候,当时tensorflow-keras
配合起来就是王炸!
由于维护的问题模型加载有个东西是用了keras2.0.8
才有这个功能,此刻我已经要死了!keras2.0.8
必须要用tf1.10
左右的版本!
搞了三天最终得出结论这是死结,没法破!
最后找到了一个tensorflow1.15
版本,这个版本是维护的最后一个版本,同时也做了很多兼容可以用keras2.0.8
,但是显卡就是用不了,无奈和甲方沟通,最后用cpu版本,测试下来速度大差不差(任务简单),就这样的解决了。
总结
对于古老的tensorflow
项目,千万别动,如果要动一定注意显卡版本,对于代码用老框架的可以用tensorflow1.15
版本,这是做了最后优化兼容的版本,如果这个不行那么就别挣扎了。如果纯tensorflow
代码可以用工具直接转化新版本,但是如果和keras
搭配使用,那么只能祝你好运,大概率要重构模型了哈哈哈哈!