不同版本tensorflow推理报错解决方法

目录

前言

[1. 版本查看命令](#1. 版本查看命令)

[2. 问题排查步骤](#2. 问题排查步骤)

[1. 报错信息](#1. 报错信息)

[1.1 CUDA库版本不匹配](#1.1 CUDA库版本不匹配)

[1.2 模型加载错误](#1.2 模型加载错误)

[2. 解决方法](#2. 解决方法)

[2.1 CUDA库版本不匹配](#2.1 CUDA库版本不匹配)

[2.2 模型加载错误](#2.2 模型加载错误)

[cannot load library 'libsndfile.so'](#cannot load library 'libsndfile.so')

[1. 在容器里安装 libsndfile](#1. 在容器里安装 libsndfile)

[2. 用 Conda 安装(如果你用的是 conda 环境)](#2. 用 Conda 安装(如果你用的是 conda 环境))


前言

最近使用tensorflow框架开发一个分类算法,模型训练是在A800上进行的,CUDA版本和tensorflow版本都很高,CUDA版本为12.6,tensorflow版本为2.18.1。但是模型推理需要在另外一台机器上进行,该台机器是3060的显卡,CUDA版本才11.4,tensorflow版本才2.4.0。差距很大,所以存在版本冲突的问题。


1. 版本查看命令

A800机器CUDA信息查看:

3060机器CUDA信息查看:

可以通过下述命令查看安装的tensorflow和pytorch版本是否有GPU支持。

python 复制代码
# tensorflow
import tensorflow as tf
print(tf.__version__) 
print("是否有GPU支持:", tf.test.is_built_with_cuda())   # True = GPU版本
print("可见GPU列表:", tf.config.list_physical_devices('GPU'))

# pytorch
import torch
print(torch.__version__)     # 打印版本号
print("是否支持CUDA:", torch.cuda.is_available())   # True = 可以用GPU
print("CUDA版本:", torch.version.cuda)              # 显示编译时的CUDA版本
print("cuDNN版本:", torch.backends.cudnn.version()) # cuDNN版本
print("可见GPU数量:", torch.cuda.device_count())
if torch.cuda.is_available():
    print("GPU名称:", torch.cuda.get_device_name(0))

2. 问题排查步骤

1. 报错信息

使用在A800上训练好的模型去3060显卡上推理时报错:

2025-09-18 15:21:25.507265: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:21:25.507455: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.

2025-09-18 15:25:12.687190: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set

2025-09-18 15:25:12.982810: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1

2025-09-18 15:25:13.701148: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] Found device 0 with properties:

pciBusID: 0000:04:00.0 name: NVIDIA GeForce RTX 3060 computeCapability: 8.6

coreClock: 1.777GHz coreCount: 28 deviceMemorySize: 11.77GiB deviceMemoryBandwidth: 335.32GiB/s

2025-09-18 15:25:13.701980: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] Found device 1 with properties:

pciBusID: 0000:65:00.0 name: NVIDIA GeForce RTX 3060 computeCapability: 8.6

coreClock: 1.777GHz coreCount: 28 deviceMemorySize: 11.77GiB deviceMemoryBandwidth: 335.32GiB/s

2025-09-18 15:25:13.702230: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.702467: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcublas.so.11'; dlerror: libcublas.so.11: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.702645: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcublasLt.so.11'; dlerror: libcublasLt.so.11: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.702811: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcufft.so.10'; dlerror: libcufft.so.10: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.702985: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcurand.so.10'; dlerror: libcurand.so.10: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.703150: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcusolver.so.10'; dlerror: libcusolver.so.10: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.703310: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcusparse.so.11'; dlerror: libcusparse.so.11: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.703466: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudnn.so.8'; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/psd/lib:/usr/local/lib

2025-09-18 15:25:13.703491: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1757] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.

Skipping registering GPU devices...

预测过程中发生错误: ('Unrecognized keyword arguments:', dict_keys(['batch_shape']))

上述一共存在两个错误:

1.1 CUDA库版本不匹配

原因1:3060机器上缺少CUDA 11.0相关的库文件(libcudart.so.11.0等)

原因2:未导入相关环境变量

bash 复制代码
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:$(pwd)/lib

1.2 模型加载错误

('Unrecognized keyword arguments:', dict_keys(['batch_shape']))

这个错误的原因是模型在推理的时候遇到了不兼容的参数,和模型训练推理所使用的tensorflow版本不一致有关。

2. 解决方法

2.1 CUDA库版本不匹配

要么重新安装CUDA版本,要么使用云服务器上现成的环境。

2.2 模型加载错误

这个错误通常是因为模型保存时使用了特定版本的TensorFlow参数,而在不同版本中加载时出现兼容性问题。我尝试修改预测函数,以处理不同类型的模型对象,以及训练保存多种不同的权重格式都不能解决问题,最终还是通过安装对应的tensorflow版本解决问题。

由于tensorflow==2.4.0是非常低的版本,CUDA的要求一般是11,而目前大多数机器都是12的版本,我不想为了这个算法单独安装一遍CUDA,所以考虑在云服务器上进行训练。

云服务器:https://www.gpushare.com/store/hire?create=true

选择了tensorflow==2.5.0版本,我们主要的目的是保持训练和推理的模型参数兼容。

进入之后就可以查看环境:

由于我开发的是音频算法,所以还需要安装 librosa 包,当前环境是没有的:

我们使用下述命令安装:

bash 复制代码
pip install librosa

安装完成,可能会出现一些包的版本冲突,这些可以先不管:

这个时候我们训练模型,可能会出现下述报错:

加载音频文件失败 /root/audio_code/dataset_split/train/1/controlled_leak_061_00.wav: cannot load library 'libsndfile.so': libsndfile.so: cannot open shared object file: No such file or directory

cannot load library 'libsndfile.so'

这说明容器(镜像)里缺少 libsndfile 这个库,导致 Python 的 soundfile 包(或者依赖 libsndfile 的其他库)无法加载音频文件。

解决方法有下面几种:

1. 在容器里安装 libsndfile

如果你能进入容器的 shell,直接运行:

bash 复制代码
apt-get update
apt-get install -y libsndfile1

有些环境可能需要开发包:

bash 复制代码
apt-get install -y libsndfile1-dev
2. 用 Conda 安装(如果你用的是 conda 环境)

这是本人所使用的解决方法。

bash 复制代码
conda install -c conda-forge libsndfile

如果还是找不到 libsndfile.so

Conda 安装的 libsndfile 默认会放到 .../miniconda3/lib/ 里,而不是系统的 /usr/lib/usr/lib/x86_64-linux-gnu/

有些情况下 LD_LIBRARY_PATH 没有指向 conda 的 lib 路径,导致 Python 库(比如 soundfile)调用 ctypes.util.find_library("sndfile") 找不到 libsndfile.so

方法 1:设置环境变量

在运行 Python 之前加上:

python 复制代码
export LD_LIBRARY_PATH=/usr/local/miniconda3/lib:$LD_LIBRARY_PATH

方法 2:软链接 libsndfile.so

确认 conda 里已经有库:

bash 复制代码
ls /usr/local/miniconda3/lib | grep sndfile

通常会有类似 libsndfile.so.1.2.2

给它建个软链接:

bash 复制代码
ln -s /usr/local/miniconda3/lib/libsndfile.so.1.2.2 /usr/local/miniconda3/lib/libsndfile.so

核心问题是 缺少系统库 libsndfile ,只要在镜像里安装 libsndfile1(或通过 conda 装),就能解决。

  1. 修改 Dockerfile(如果你要重新构建镜像)

Dockerfile 里加上:

bash 复制代码
RUN apt-get update && apt-get install -y libsndfile1
  1. 检查 Python 包

确保你安装了 soundfile

bash 复制代码
pip install soundfile

pysoundfile 实际上是 libsndfile 的 Python 绑定,没有系统库会报错。

现在基本上可以正常使用低版本的tensorflow训练模型,同时训练的模型能够正常在3060的机器上跑了。


相关推荐
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 和 GCP 上的混合搜索和语义重排序
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
reasonsummer3 小时前
【办公类-109-05】20250923插班生圆牌卡片改良01:一人2个圆牌(接送卡&被子卡&床卡&入园卡_word编辑单面)
人工智能·python·sklearn
开开心心就好3 小时前
PDF清晰度提升工具,让模糊文档变清晰
java·服务器·前端·python·智能手机·pdf·ocr
AKAMAI3 小时前
部署Linode Kubernetes引擎企业版的三种方式
人工智能·云原生·云计算
wjt1020203 小时前
PyTorch 神经网络工具箱
人工智能·pytorch·神经网络
史锦彪3 小时前
yTorch 神经网络工具箱:核心原理与实践指南
人工智能·深度学习·神经网络
yzx9910133 小时前
对比django,flask,opencv三大
人工智能·后端·python·django·flask
码界筑梦坊3 小时前
194-基于Python的脑肿瘤患者数据分析可视化
开发语言·python·数据分析·sqlite·毕业设计·echarts·fastapi
海底的星星fly3 小时前
【Prompt学习技能树地图】DeepSeek专家模式下的Prompt工程进阶学习实践
人工智能·语言模型·prompt