Linux服务器 TensorFlow找不到GPU

article/2025/7/24 6:51:44

记录一下这次长达两天的心累Debug:Could not find cuda drivers on your machine, GPU will not be used.,先说一下我的项目情况

使用VSCode ssh连接实验室服务器,无root权限,不能使用sudo指令,Linux系统,Jupyter项目

使用Anaconda创建虚拟环境

主要抗争的内容是Cuda,cudnn,TensorFlow

先直接说痛点,和我情况类似的朋友出问题的方向可能有两个

1.1 cuda,cudnn,TensorFlow版本不匹配

我最终跑通的版本是cuda11.8,cudnn8.9,tensorflow2.10

验证手段:CodeCell输入

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())

显示如下

[] [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)])

尤其这个部分

可以卸载当前的cuda,cudnn重新下载试一下

参考Could not find cuda drivers on your machine, GPU will not be used. - 知乎 (zhihu.com)

1.2VS Code 启动的 Jupyter/Python 进程并不会再次 source ~/.bashrc,所以拿不到那些环境变量

在 VS Code 的 Interactive(Code Cell)里,Python 进程往往并不会走你在终端里“登录时”自动加载的 ~/.bashrc(或 ~/.bash_profile)那一套流程。换句话说,即使你在 ~/.bashrc 里把 CUDA 11.8/CuDNN 8.8 路径都导出了,VS Code 启动的 Jupyter/Python 进程并不会再次 source ~/.bashrc,所以拿不到那些环境变量,自然就“看不到”GPU。

验证的方法也很简单,在相应虚拟环境的终端里跑以下代码

python - <<EOF
import tensorflow as tf
print("Built with CUDA:", tf.test.is_built_with_cuda())
print("Physical GPUs:", tf.config.list_physical_devices('GPU'))
EOF

然后若显示True以及有GPU,则验证CodeCell,跑以下代码,结果发现没有GPU的话,说明大概率就是这个问题

import tensorflow as tf
print("Built with CUDA:", tf.test.is_built_with_cuda())
print("Physical GPUs:", tf.config.list_physical_devices('GPU'))

1.2.1 找到虚拟环境的根目录

我的虚拟环境叫Karyo_env,在终端输入

conda activate Karyo_env
echo $CONDA_PREFIX

假设输出/data5/chensx/downEnv/Anaconda/envs/Karyo_env

下面我都以我的环境为例,具体使用的时候需要替换掉其中的内容

1.2.2 创建 activate.d 目录

mkdir -p /data5/chensx/downEnv/Anaconda/envs/Karyo_env/etc/conda/activate.d
mkdir -p /data5/chensx/downEnv/Anaconda/envs/Karyo_env/etc/conda/deactivate.d

1.2.3 在 activate.d 里写一个脚本,把所有 export 放进去

建议文件名叫 env_vars_cuda.sh,内容示例:

#!/bin/bash
# ~/.conda/envs/Karyo_env/etc/conda/activate.d/env_vars_cuda.shexport CUDA_HOME=/data5/chensx/cuda11.8
export PATH=$CUDA_HOME/bin:$PATHexport CUDNN_HOME=/data5/chensx/cudnn-linux-x86_64-8.8.1.3_cuda11-archiveexport LD_LIBRARY_PATH=$CUDA_HOME/lib64:$CUDNN_HOME/lib64:/data5/chensx/downEnv/Anaconda/lib
export CPATH=$CUDNN_HOME/include:$CPATH

然后保存,并确保它可执行:

chmod +x /data5/chensx/downEnv/Anaconda/envs/Karyo_env/etc/conda/activate.d/env_vars_cuda.sh

1.2.4 在 deactivate.d 里写一个脚本,清理这些变量

否则当你切换到其他环境时,上一次的路径还会留在 LD_LIBRARY_PATH 里。可以在 deactivate.d 下新建 env_vars_cuda_cleanup.sh,内容:

#!/bin/bash
# ~/.conda/envs/Karyo_env/etc/conda/deactivate.d/env_vars_cuda_cleanup.shunset CUDA_HOME
unset CUDNN_HOME
unset CPATH
# 如果你需要保留 Anaconda/lib 路径,可以不用去掉
unset LD_LIBRARY_PATH

chmod +x

chmod +x /data5/chensx/downEnv/Anaconda/envs/Karyo_env/etc/conda/deactivate.d/env_vars_cuda_cleanup.sh

1.2.5 验证

关闭所有 VS Code 窗口,重新打开一个 Remote-SSH 会话,打开任何一个终端,执行:

conda activate Karyo_env
echo $LD_LIBRARY_PATH
  • 确保里面包含 /data5/chensx/cuda11.8/lib64/data5/chensx/cudnn-linux-x86_64-8.8.1.3_cuda11-archive/lib64,且没有 /data5/chensx/cuda12.1/lib64

  • 在同一个 VS Code 里,重新选一次 Python Interpreter(点左下角 “Python: …”,选对 Karyo_env)。

  • 新开一个 Jupyter Notebook 或者 Code Cell,执行:

  • import tensorflow as tf
    print("GPU 列表:", tf.config.list_physical_devices('GPU'))
    

如果输出里包含 GPU:0, GPU:1,证明 VS Code 的 Python Process(Jupyter Kernel)已经拿到了和终端里一模一样的环境变量。

关于前面环境具体怎么配,之后再补坑吧,先去睡觉了

cuDNN Archive | NVIDIA Developer

CUDA Toolkit Archive | NVIDIA Developer


http://www.hkcw.cn/article/dtlVFxIiSd.shtml

相关文章

xdma 驱动测试与分析

目录 1. 简介 2. 基本测试 2.1 H2C 测试 2.1.1 MRRS 2.1.2 抓取 H2C 数据 2.1.3 数据位宽 2.1.4 数据对比 2.1.5 写入地址测试 2.1.6 带宽测试 2.1.6.1 x86_Gen2x4 2.1.6.2 x86_Gen3x4 2.1.6.3 x86_Gen3x8 2.1.6.4 ZCU102_Gen2x1 2.1.6.5 AGX_Gen3x4 2.1.7 带宽…

基因编辑首次临床救人,罕见病婴儿绝处逢生 医学奇迹搬进现实

得了绝症竟然能靠“改写基因”治好?2025年5月,患有罕见病CPS1的婴儿KJ通过基因编辑重获新生,这场医学奇迹直接把科幻片情节搬进现实。当科学家用“分子剪刀”剪断遗传病的枷锁,我们正站在改写生命规则的转折点——未来癌症、衰老甚至农作物都能被重新编码,但这把双刃剑也藏…

郎永淳儿子哥大双硕士家里蹲:360万换月薪8000,学历还值钱吗? 精英教育的困境

北京的五月,蝉鸣未起,但社交媒体上关于“前央视名嘴郎永淳儿子找不到工作”的话题已经沸沸扬扬。25岁的郎俣,顶着哥伦比亚大学经济统计学和哲学双硕士的光环回国一年,却以“家里蹲”的状态成了网友口中的“高配版躺平青年”。郎俣的故事像一部现实版《变形记》。14岁赴美留…

26岁女孩骨质疏松上热搜!竟然是因为这个习惯……很多人都有,快自查 过度防晒导致维生素D缺乏

随着天气逐渐变热,日晒也变得越来越强烈,很多人开始重视防晒。然而,最近有一则新闻引起了广泛关注:一名26岁的女孩因为长期全面防晒,竟然被确诊为骨质疏松。这让人不禁疑惑,防晒和骨质疏松之间到底有什么联系?过度防晒会导致人体缺乏维生素D。维生素D是一种脂溶性维生素…

“芒种不过午,三伏棉衣捂”,今年芒种在何时? 芒种三大特点解析

2025年6月5日17点57分将迎来芒种节气。这个节气在农事上具有重要意义,有“芒种芒种,连收带种”的说法,意味着北方忙着收麦子,南方忙着种稻子,全国进入“夏收、夏种、夏管”的忙碌模式。今年的芒种被认为不一般,有三个特点。首先是芒种在端午后。2025年的端午节是5月31日,…

SSRF 接收器

接收请求 IP.php <?php // 定义日志文件路径 $logFile hackip.txt;// 处理删除请求 if (isset($_POST[delete])) {$ipToDelete $_POST[ip];$lines file($logFile, FILE_IGNORE_NEW_LINES);$newLines array();foreach ($lines as $line) {$parts explode( | , $line);…

UCS(Universal Control System)能成为下一代通用控制系统吗?

UCS&#xff08;Universal Control System&#xff09;是下一代革命性通用控制系统。它以 “云 - 网 - 端” 极简架构&#xff0c;以及软件定义、全数字化、云原生等特性&#xff0c;号称颠覆了应用近 50 年的传统 DCS 技术架构。具体介绍如下&#xff1a; 架构组成&#xff1a…

卢伟冰称竞争从来不是小米未来的关键 挑战在于自身

近日,小米集团ceo卢伟冰发博回答投资者提问:小米未来困难或挑战是什么。他表示:“竞争从来不是,未来也不会是关键。我一直深信: 不可胜在己,可胜在敌”责任编辑:zx0176

南通成苏超榜一大哥 自称“南哥” 三连胜领跑积分榜

江苏省城市足球联赛第三轮比赛中,南通队以4:0客场战胜泰州队,赢得了“苏中德比”,并取得三连胜。目前,南通队在积分榜上排名第一,继续领跑“苏超”。比赛上半场双方互有攻守,但比分一直保持在0:0。下半场开始后,南通队在短短25分钟内连进3球,最终在比赛结束前再入一球,…

券商6月金股出炉 亚钾国际青岛啤酒获最多推荐

根据不完全统计,在各家券商的“金股”名单中,亚钾国际和青岛啤酒获得最多推荐,均被3家券商看好。东鹏饮料、万马科技、巨化股份、沪电股份等7只股票也获得了2家券商的推荐。5月A股市场整体先扬后抑,上证指数累计上涨2.9%,深证成指上涨1.42%,创业板指上涨2.32%。进入6月,…

差分隐私的应用领域

差分隐私作为隐私保护的“黄金标准”&#xff0c;已从理论研究渗透至多个行业的数据全生命周期管理。其核心价值在于通过数学严格性平衡数据开放与隐私保护。 一、政府与公共数据发布 1.场景扩展 宏观统计&#xff1a;人口普查、经济普查、自然灾害损失评估&#xff1b; 公共…

【PowerShell专栏】PowerShell对象的Method方法

PowerShell中的方法Method与属性中的Property一样&#xff0c;默认的Method方法也是从基类继承下来的方法。我们也不能为PowerShell对象创建Method方法&#xff0c;图为Process对象Method方法。 在对象添加任何的Method方法都会出错&#xff0c;提示不能为PowerShell对象添加Me…

未来数日将成加沙停火谈判关键窗口期 谈判僵局待破

加沙地带人道主义危机不断加剧。由于在停火方案上存在分歧,巴勒斯坦伊斯兰抵抗运动(哈马斯)和以色列之间的停火谈判再度陷入僵局。哈马斯官员指责美方提案偏袒以色列。5月31日晚间,哈马斯高级成员巴塞姆纳伊姆再次表达了对美方提出的加沙停火提案的强烈不满,指出美方立场“…

媒体:樊振东留洋是主动走出舒适区 探索新路径

多哈世乒赛落幕,国乒男单冠军虽然保住,但男双创下近半个世纪以来最差战绩,男线断档危机已经浮现。外界期待樊振东回归帮助国乒度过难关,没想到他却宣布加盟德国乒乓球甲级联赛的FC萨尔布吕肯乒乓球俱乐部。北京时间6月1日,FC萨尔布吕肯乒乓球俱乐部官方宣布樊振东将加盟球…

马斯克宣布推出全新XChat 迈向超级应用

自2022年埃隆马斯克收购推特并将其更名为X以来,该平台一直在努力拓展其功能和用户群体。曾经以公开分享观点和制造热点话题为主的X,如今正朝着更加注重隐私和日常应用的方向发展。马斯克的愿景是将X打造成一个类似微信的“超级应用”,涵盖从社交到支付等多方面的功能。X最新…

演员吴京夺环塔拉力赛赛段冠军 安全完赛创佳绩

2025中国环塔国际拉力赛圆满结束,演员吴京不仅安全完赛,还获得了SS9赛段的冠军。他在社交媒体上分享了参赛照片,并表示自己很幸运地赢得了这个赛段的冠军。在难度最大的麦盖提N39赛段中,吴京与领航员配合默契,以1小时53分36秒的成绩夺得T4赛组冠军。责任编辑:zx0176

NBA总决赛6月6日开打 新王即将诞生

北京时间6月1日,2024-2025赛季NBA季后赛继续进行。东部决赛第六战中,印第安纳步行者主场以125:108击败纽约尼克斯队,从而以大比分4:2淘汰对手,获得分区冠军。总决赛中,印第安纳步行者的对手是俄克拉荷马雷霆。印第安纳步行者与纽约尼克斯在东部半决赛中均以下克上。常规赛…

InfluxDB 高级查询技巧:子查询与动态字段选择实战指南

InfluxDB 的强大不仅在于数据存储&#xff0c;更在于其支持 子查询&#xff08;Subqueries&#xff09; 和 动态字段选择&#xff08;Dynamic Field Key Selection&#xff09; 等高级查询能力。本文通过真实代码示例&#xff0c;深入解析如何利用这些功能实现复杂数据分析&…

MyBatis、MyBatis-Plus与MyBatis-Flex的区别

MyBatis、MyBatis-Plus与MyBatis-Flex的区别 MyBatis、MyBatis-Plus和MyBatis-Flex都是Java领域流行的持久层框架&#xff0c;它们基于MyBatis的核心思想发展而来&#xff0c;但在功能、设计理念和使用体验上有显著区别 MyBatis&#xff08;原生框架&#xff09;为基础ORM框架…

源码解析(二):nnUNet

原文 &#x1f600; nnU-Net 是一个用于生物医学图像分割的自配置深度学习框架&#xff0c;可自动适应不同的数据集。可用于处理和训练可能规模庞大的二维和三维医学图像。该系统分析数据集属性并配置优化的基于 U-Net 的分割流程&#xff0c;无需手动参数调整或深度学习专业知…