当前位置: 首页 > news >正文

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

目录

前言

1. 版本查看命令

2. 问题排查步骤

1. 报错信息

1.1 CUDA库版本不匹配

1.2 模型加载错误

2. 解决方法

2.1 CUDA库版本不匹配

2.2 模型加载错误

cannot load library 'libsndfile.so'

1. 在容器里安装 libsndfile

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支持。

# 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:未导入相关环境变量

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 包,当前环境是没有的:

我们使用下述命令安装:

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,直接运行:

apt-get update
apt-get install -y libsndfile1

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

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

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

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 之前加上:

export LD_LIBRARY_PATH=/usr/local/miniconda3/lib:$LD_LIBRARY_PATH

方法 2:软链接 libsndfile.so

确认 conda 里已经有库:

ls /usr/local/miniconda3/lib | grep sndfile

通常会有类似 libsndfile.so.1.2.2
给它建个软链接:

ln -s /usr/local/miniconda3/lib/libsndfile.so.1.2.2 /usr/local/miniconda3/lib/libsndfile.so

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

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

Dockerfile 里加上:

RUN apt-get update && apt-get install -y libsndfile1

4. 检查 Python 包

确保你安装了 soundfile

pip install soundfile

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

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


http://www.dtcms.com/a/391057.html

相关文章:

  • 嵌入式铁头山羊STM32-各章节详细笔记-查阅传送门
  • 在没有随机对照的情况下如果做实验对比:双重差分法(结合虚拟变量回归)(五)
  • 材质、效率双突破:Rendercool 解决室内渲染核心痛点
  • 【ThreeJs】【材质Material】核心材质参数解析手册
  • 无人机桨叶的材质与工艺对飞行速度的影响
  • PMBOK第六版项目沟通管理总结
  • fatal: Need to specify how to reconcile divergent branches.原因及解决方案
  • 二叉树与二叉搜索树(BST):从基础到应用
  • 【一天一个Web3概念】区块链分叉(Fork)全面解析:类型、案例与影响
  • PHP低代码工作流创新,为企业数字化转型添翼
  • 低代码+AI生态:企业数字化起步阶段的“核聚变”冲击波
  • 【Linux基础知识系列:第一百三十四篇】理解Linux的进程调度策略
  • 主机windows虚拟机centos的hadoop调试mapreduce访问hdfs文件
  • 嵌入式Linux C语言程序设计
  • 【开题答辩全过程】以 基于Python的电影数据爬取及可视化分析为例,包含答辩的问题和答案
  • 推荐一些适合新手的Java项目教程
  • 探索PV操作:并发编程的核心钥匙
  • 一计算机网络基本概念-体系结构-思考题
  • Teslasuit动捕服的实际应用,系统利用电肌肉刺激为用户在VR中提供逼真的感觉和触觉
  • 【DMA】深入解析DMA控制器架构与运作原理
  • wayland 下 带特殊权限的 Qt GUI 程序 部署为 开机自启+守护进程
  • 无事随笔——mp踩坑
  • 根据后端给定的swagger文档生成对应的ts接口
  • 《黑天鹅》
  • docker编写java的jar步骤
  • HDR简介
  • 视觉Slam14讲笔记第4讲李群李代数【更新中】
  • 【无人机】ardupilot事项笔记
  • 大端模式与小端模式
  • Openwrt 平台下移植rk3568 rknn_yolov5_demo 应用程序问题分析