关于tensorflow和tensorboard的版本匹配问题

在启动tensorboard的时候遇到的问题。

一、找不到GPU

这里先放结果,一组正确的匹配的版本

python == 3.6
tensorflow == 2.3.0
tensorboard == 2.3.0
cudatoolkit == 10.1.243
cudnn == 7.6.5
numpy == 1.17.0

报错:Could not find cuda drivers on your machine, GPU will not be used.

虽然是在tensorboard中出现的报错,但是本质还是tensorflow的问题,在python中使用如下代码的检查tensorflow的情况,

import tensorflow as tf
physical_devices = tf.config.experimental.list_physical_devices('GPU')
print("Available GPUs:", physical_devices)

 显示:successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

表面上只是一个警告导致我一开始没有认识到tensorflow的版本依赖项的匹配问题,后来在网络上反复寻找解决方案。最终在

https://zhuanlan.zhihu.com/p/671997917

看到了类似的情况,也看到了解决方案。

问题的本质就是cuda版本和tensorflow的版本不匹配,我的cuda版本为11.6,但是输入测试代码:

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版本为11.8,意味着我当前虚拟环境中的tensorflow版本和我的cuda的版本不匹配,于是我根据代码要求,安装了tf2.3.0的版本。

 再根据测试代码中给出的要求:cuda_version:10.1,cudnn_version:7。

 在虚拟环境中安装了我的cuda和cudnn,该操作请参考:

https://blog.youkuaiyun.com/qq_42194665/article/details/130028584?fromshare=blogdetail&sharetype=blogdetail&sharerId=130028584&sharerefer=PC&sharesource=m0_49571149&sharefrom=from_link

1、虚拟环境中安装cuda

使用

conda search cudatoolkit --info

命令查看支持的cuda版本,然后根据需要下载。

看好需要的版本,cd 到想要的下载目录,然后复制 url 对应的下载链接,然后使用代码下载

wget https://repo.anaconda.com/pkgs/main/linux-64/cudatoolkit-10.1.168-0.conda //(红框中的网址)

 执行如下命令安装 cuda。如不在当前目录下,需在 cuda 包前加上绝对路径。

conda install //下载的安装包

 2、虚拟环境中安装cudnn

大体步骤如上,用如下命令查看 conda 支持的 cudnn 版本,需要注意的是 cudnn 的版本应与 cuda 版本匹配。

conda search cudnn --info

 找到需要的版本,复制 url 对应的下载链接,用如下代码下载:

wget https://repo.anaconda.com/pkgs/main/linux-64/cudnn-7.6.5-cuda10.1_0.conda

 再执行如下命令安装 cudnn。

conda install //下载的安装包

 二、导入库的路径不对

报错:

A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.0.2 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.

If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.

Traceback (most recent call last):  File "/home/ssp/.local/bin/tensorboard", line 8, in <module>
    sys.exit(run_main())
  File "/home/ssp/.local/lib/python3.10/site-packages/tensorboard/main.py", line 38, in run_main
    main_lib.global_init()
  File "/home/ssp/.local/lib/python3.10/site-packages/tensorboard/main_lib.py", line 50, in global_init
    if getattr(tf, "__version__", "stub") == "stub":
  File "/home/ssp/.local/lib/python3.10/site-packages/tensorboard/lazy.py", line 65, in __getattr__
    return getattr(load_once(self), attr_name)
  File "/home/ssp/.local/lib/python3.10/site-packages/tensorboard/lazy.py", line 97, in wrapper
    cache[arg] = f(arg)
  File "/home/ssp/.local/lib/python3.10/site-packages/tensorboard/lazy.py", line 50, in load_once
    module = load_fn()

 我的虚拟环境是python3.6,但是报错出现了3.10,并且这个路径并不是我虚拟环境的路径而是用户路径。

TensorBoard 位置安装在 /home/ssp/.local/bin/ 是 Python 的用户级安装目录,是 pip 的默认安装位置之一。

虽然日志中显示我的环境是 一个 Conda 的虚拟环境py3.6,但 TensorBoard 似乎没有安装到预期的虚拟环境目录 /home/ssp/.conda/envs/py3.6/...。

使用代码

which tensorboard

检查tensorboard的安装位置,明显不在我的虚拟环境中,其实我的确是在虚拟环境中下载的。 

 使用代码

pip show tensorboard

检查pip安装tensorboard的安装位置

这里是对的,由图可见这两个位置不一样,尝试了用pip重新安装tensorboard也不能解决,只想到在py3.6 虚拟环境中设置 PYTHONPATH 环境变量。

使用代码

export PYTHONPATH=/home/ssp/.conda/envs/py3.6/lib/python3.6/site-packages

 这条命令会将虚拟环境中的 site-packages 路径添加到 PYTHONPATH 中,确保 Python 可以找到虚拟环境中的包。

使用代码

echo $PYTHONPATH

验证 PYTHONPATH 是否已经设置成功。

还可以使用代码

nano /home/ssp/.conda/envs/py3.6/etc/conda/activate.d/env_vars.sh

打开虚拟环境的激活脚本,查看环境的配置。如有修改,保存并退出编辑器(按 CTRL + X,然后按 Y 和 Enter)。

三、修改库的Python 解释器路径

报错:ImportError: cannot import name 'cygrpc' from 'grpc._cython' 

明显红框中的这个文件位置不对,这里是tensorboard头文件的问题,没有指向正确的Python 解释器路径,先查看当前虚拟环境正确的Python 解释器路径,使用代码:

which python

复制Python 解释器路径,使用代码

nano ~/.local/bin/tensorboard

打开tensorboard脚本修改解释器路径。 

把黄色的框中的修改成刚刚复制的正确的解释器路径,然后保存并退出编辑器(按 CTRL + X,然后按 Y 和 Enter)。

即可解决。

四、Status: device kernel image is invalid

报错:RuntimeError: CUDA runtime implicit initialization on GPU:0 failed. Status: device kernel image is invalid

这个问题出现的莫名奇妙,在网上检索了几天,排查的好几天的问题。最后把tf的版本从2.3降为2.2解决了。

五、Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

这个问题差点吓死我,我以为是降低了tf的版本后,cudnn不匹配了。其实是显卡的显存爆了。加入了如下代码后即可解决。

import os
import tensorflow as tf

# Set environment variables for GPU
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = "0,1"  # 选择哪一块gpu, 如果是-1,就是调用cpu

# Set GPU options
physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)  # Allow memory growth
tf.config.experimental.set_virtual_device_configuration(
    physical_devices[0],
    [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)])  # Limit GPU memory

# In TensorFlow 2.x, you don't need a session, code runs eagerly by default
# Your TensorFlow code here (e.g., training or inference)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值