TensorFlow 1.9.0虚拟环境无法识别GPU的原因及解决方法咨询
这问题我碰到过好几次,核心就是TensorFlow版本和CUDA版本不兼容,再加上旧TF版本对新GPU的支持不足导致的,给你拆解清楚并给几个可行的解决方案:
为啥会出现这问题?
你的标准环境用的TensorFlow 2.6.2,刚好适配系统的CUDA 11.5,而且支持A100这种计算能力8.0的新GPU,所以能正常识别。但你虚拟环境里的TensorFlow 1.9.0是2018年的老版本,它只支持CUDA 9.0,和你现在的CUDA 11.5差了好几个大版本,根本没法调用系统的CUDA库;另外,TF1.9.0发布的时候A100还没上市,原生就不支持计算能力8.0的GPU,这俩因素加起来,就导致虚拟环境里完全找不到GPU了。
具体怎么解决?给你四个方案选
方案1:虚拟环境内单独装适配的CUDA(最推荐,不影响其他环境)
不用动系统的CUDA,就在虚拟环境里装TF1.9.0要求的CUDA 9.0和cuDNN 7.0就行:
- 如果是conda创建的虚拟环境,直接执行命令一步到位:
conda activate 你的虚拟环境名 conda install cudatoolkit=9.0 cudnn=7.0 - 如果是pip创建的虚拟环境,得手动下载CUDA 9.0的runfile(选择“仅提取不安装”),然后在虚拟环境里设置环境变量
CUDA_HOME指向提取后的路径,再把cuDNN 7.0的文件放到对应的lib/include目录里,最后重启环境就行。
方案2:升级TF1.x到支持CUDA11.5的版本
如果你的项目代码能兼容更高版本的TF1.x,直接升级到TensorFlow 1.15.5(TF1.x的最终稳定版),它支持CUDA 10.1/10.2,也能兼容CUDA 11.x,同时对A100的支持也更好:
pip install tensorflow-gpu==1.15.5
装完之后运行下面的代码验证:
import tensorflow as tf print(tf.test.is_gpu_available()) from tensorflow.python.client import device_lib print(device_lib.list_local_devices())
要是还不行,就再装个cuDNN 7.6.x(对应TF1.15.5的版本)。
方案3:把项目代码迁移到TF2.x(长期最优解)
如果能改代码,直接在标准环境里用TF2.6.2跑是最省心的——毕竟TF2.x的生态和维护性都比TF1.x强太多。大部分TF1.x的代码可以用tf.compat.v1兼容,比如开头加两行:
import tensorflow.compat.v1 as tf tf.disable_v2_behavior()
这样旧代码基本不用大改就能跑,还能直接用你的A100和CUDA11.5。
方案4:降级系统CUDA到9.0(不推荐)
这个方案会破坏你标准环境里TF2.6.2的运行,因为TF2.6.2不支持CUDA9.0,除非你整个系统只用来跑这个TF1.9.0的项目,否则别选这个。
最后验证
不管用哪个方案,配置完之后都在虚拟环境里跑这段代码确认:
import tensorflow as tf print("TF版本:", tf.__version__) print("GPU可用:", tf.test.is_gpu_available()) print("本地设备列表:") from tensorflow.python.client import device_lib print(device_lib.list_local_devices())
要是输出里能看到GPU设备,且GPU可用显示True,就说明搞定了!
内容的提问来源于stack exchange,提问作者SilentCloud

