TensorFlow找不到gpu,pytorch能找到的问题
1. 起因
公司换服务器,需要做代码迁移,需要重新安装cuda cudnn等包,我使用scp命令将安装包复制过来,并且conda环境都是打包过来的,但是在部署模型服务时,TensorFlow提示找不到gpu,使用cpu代替。
2. 测试
检测TensorFlow gpu是否可用代码:
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
cpus = tf.config.experimental.list_physical_devices(device_type='CPU')
print(gpus, cpus)
输出结果:
检测pytorch gpu是否可用代码:
import torch
# 检查是否有可用的 GPU
if torch.cuda.is_available():
# 获取 GPU 设备的数量
gpu_count = torch.cuda.device_count()
print(f"Number of available GPUs: {gpu_count}")
# 获取当前 GPU 的名称
current_gpu_name = torch.cuda.get_device_name(torch.cuda.current_device())
print(f"Current GPU: {current_gpu_name}")
# 获取所有 GPU 的名称
all_gpu_names = [torch.cuda.get_device_name(i) for i in range(gpu_count)]
print(f"All GPUs: {all_gpu_names}")
else:
print("No GPU available.")
2. 环境列表
python 3.8.18
tensorflow 2.13.0
pytorch 2.1.0
cuda Driver Version: 535.129.03
cuda release 12.2, V12.2.91 #我本来装的12.2.2版本,找错误过程总逐步重装成了12.2.0
3. 原因探索
pytorch 能找到gpu说明我的cuda安装应该是没有问题的,但是之前的服务器可用,那么这一套环境的兼容性应该也不存在问题,找了各种方法也没用,把tf版本卸载了重装了各个版本仍然不好用,看网上说2.10.0版本的tf怎么怎么样,但是那是基于Windows的,想着破罐子破摔一下,装个2.10的试试,给了我一点不一样的报错信息,有提示,就好办了:
libcudart.so.11.0
libnvinfer.so.7
libnvinfer_plugin.so.7
libcudart.so.11.0
libcublas.so.11
libcublasLt.so.11
libcufft.so.10
libcusparse.so.11
但是这个原因似乎是因为tf2.10.0版本需要11.x的cuda。好像不相关,这个时候已经开始头皮发麻了。。。。无从下手的感觉。
4. 问题解决
破罐子破摔没用,还是要把碎片捡起来,在stackoverflow上看到了相似的情况,一个哥们也是装12.x的cuda,tf找不到gpu
底下的回复让我看到了光:
https://stackoverflow.com/questions/75614728/cuda-12-tf-nightly-2-12-could-not-find-cuda-drivers-on-your-machine-gpu-will
修改测试代码:
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
cpus = tf.config.experimental.list_physical_devices(device_type='CPU')
print(gpus, cpus)
print(tf.sysconfig.get_build_info())
返回结果(此时我的cuda版本是12.0):
[] [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]
OrderedDict([('cpu_compiler', '/usr/lib/llvm-16/bin/clang'), ('cuda_compute_capabilities', ['sm_35', 'sm_50', 'sm_60', 'sm_70', 'sm_75', 'compute_80']), ('cuda_version', '11.8'), ('cudnn_version', '8'), ('is_cuda_build', True), ('is_rocm_build', False), ('is_tensorrt_build', True)])
问题:发现即使我装了12.2版本的cuda,但是tf的info信息提示的仍然是11.8,问题应该出在这
然后底下的哥们说另一个选择是安装11.8的cuda,尝试安装11.8cuda 和 对应的cudnn,问题解决了,泪目!!!!!!!困扰我两天了!!!!!!!!!!!!!!!!!!!!!