☰
TensorFlow GPU环境配置:Anaconda+CUDA+cuDNN
2026/10/24 3:17:51 网站建设 项目流程

简介:面向深度学习入门者和TensorFlow环境配置新手,这份PPT系统梳理了从零搭建GPU深度学习环境的完整流程。内容分模块讲解Anaconda安装、CUDA与cuDNN版本匹配及配置、TensorFlow-gpu虚拟环境创建、Keras安装,并附有MNIST手写数字识别的完整Keras示例,既有命令也有界面截图,可按步骤对照操作。资源压缩包共1个PPTX文件,大小4.3MB,篇幅紧凑但步骤完整,适合作为环境配置时的速查手册。目前已有1673人学习下载,说明其对同类需求者有较高参考价值。借助这些内容,读者能够避开常见版本兼容性问题,例如CUDA 10.0与TensorFlow 2.0搭配、Python 3.7环境设定、环境变量添加等关键细节,快速理清安装链路并节省大量排查时间。

1. 从 tf.Session 翻车说起:Anaconda 与 GPU 环境的版本铁三角

拿到一份写好的 ANACONDA + CUDA + TensorFlow-gpu + Keras 安装记录,我第一反应不是照抄,而是先把版本号对了一遍:CUDA 10.0、TensorFlow 2.0、Python 3.7。这套组合在深度学习入门里被无数开发者装过,但真能一次跑通的没几个——光是测试代码里那句tf.Session(),在 TensorFlow 2.0 下就会直接报AttributeError,因为Session是 1.x 时代的 API。环境变量、cuDNN 文件复制、conda 虚拟环境,任何一个环节出错,最终都会在import tensorflow之后以一堆 DLL 找不到或者 CUDA 版本不匹配的报错收尾。这篇笔记把这条链路从下载到验证完整走一遍,适合正卡在 Windows 上配深度学习 GPU 环境的开发者。

2. Anaconda 安装:Python 3.7 基底与两个必须勾选的选项

2.1 为什么先装 Anaconda:包管理器和虚拟环境缺一不可

Anaconda 在这条链路里的角色不是「一个 Python 发行版」这么简单。TensorFlow-gpu 2.0 对 Python 版本有硬性要求(官方支持 3.5 到 3.7),而系统里可能还跑着别的项目,Python 版本和依赖包各有各的脾气。Anaconda 提供的 conda 虚拟环境能把 TensorFlow、Keras 以及后面要装的 numpy、scipy 这些科学计算库全部隔离在一个独立环境里,不会污染系统 Python。

这里有个容易被新手忽略的点:Anaconda 自带的 conda 包管理器走的是 Anaconda 仓库,而 TensorFlow-gpu 这种更新频繁的包,用 conda 装经常拿到旧版本。所以后面我会用 conda 建环境、用 pip 装 TensorFlow,两者搭配各有分工,不是随便哪个都能替代另一个。这份安装记录里也明确写了创建独立环境这一步,说明 PPT 作者是踩过系统 Python 被搞乱的坑之后才这么设计的。

2.2 下载与安装:安装包放 D 盘,但勾选项才是关键

登录 Anaconda 官网(www.anaconda.com/products/distribution),点击 Download 按钮。这里注意不要手滑下载了最新版——最新版默认 Python 3.11 或更高,而我们要装的是 TensorFlow 2.0,它需要 Python 3.7。我一般会选 Anaconda 官方归档里带 Python 3.7 的版本(2019 年左右的发行版),或者干脆只装 Miniconda 再手动创建 Python 3.7 环境。如果已经装了新版 Anaconda 也别慌,后面用 conda 创建 Python 3.7 的虚拟环境就能绕开版本冲突。

下载时选择 Windows 64 位版本,安装包建议放到 D 盘。安装过程中有两个选项直接决定后面会不会翻车:

提示:Advanced Installation Options 界面里,Add Anaconda3 to PATH默认不勾选,Register Anaconda3 as my default Python 3.7默认勾选。前者必须勾上,否则在 cmd 里输入 conda 会提示「不是内部或外部命令」;后者建议勾上,让 conda 接管 Python 3.7 的默认解释器。没勾 Add to PATH 的,装完只能从开始菜单打开 Anaconda Prompt,cmd 里永远用不了 conda 命令。

安装路径我建议直接改成 D:\Anaconda3,避免 C 盘空间被 Anaconda 自带的几百个科学计算包吃光。路径不要带中文和空格,否则后面 pip 装包时偶尔会出现编码问题。安装完成后打开 cmd 验证:

conda list python --version

第一条命令能列出 conda 管理的包列表就说明环境变量生效了;第二条确认 Python 版本。我这里看到的是 Python 3.7.x,符合 TensorFlow 2.0 的版本要求。如果conda list报错,回去检查刚才那两个勾选项,或者手动把D:\Anaconda3和D:\Anaconda3\Scripts加进系统 PATH。

2.3 conda 基础操作:环境列表、激活和包管理

装完 Anaconda 之后,先把 conda 的几个高频操作过一遍,后面建 TensorFlow 环境全靠它们。下面这张表是 PPT 里提到的 Anaconda 使用部分,我补充了实际执行时的输出特征:

命令作用关键输出
conda info --envs列出所有虚拟环境带*的表示当前激活的环境
activate tensorflow激活指定环境命令行前出现(tensorflow)前缀
conda create -n 环境名 python=版本号创建虚拟环境会提示安装依赖,输入 y 确认
conda install 包名从 Anaconda 仓库装包有依赖解析过程,较慢
pip install 包名从 PyPI 装包快,适合装 TensorFlow

注意conda info --envs里的两个短横线之间不要有空格,直接从 PPT 复制命令时容易复制成–-envs(一个长横线加一个短横线),cmd 不认这个写法,会报参数错误。我一般会手动重新敲一遍。

3. CUDA 10.0 与 cuDNN 安装:RTX 2060 上的环境变量配置

3.1 先看显卡驱动:nvidia-smi 和驱动版本取舍

在动 CUDA 之前,先确认显卡驱动处于什么状态。打开 cmd 输入:

nvidia-smi

能看到显卡型号、驱动版本和显存信息就说明 NVIDIA 驱动已经装好。这一步很关键,因为 CUDA 安装包里自带一个驱动组件(比如 cuda_10.0.130_411.31_win10.exe 里就捆绑了 411.31 版本的驱动),但这个内置驱动对新显卡很可能是旧版本。

这份安装记录里显卡是 NVIDIA RTX 2060,它发布时配套的驱动已经是 417 系列。如果直接让 CUDA 安装包把内置驱动覆盖装上去,可能会遇到驱动与显卡不匹配,轻则性能异常,重则 CUDA 初始化失败。我做这套环境时的做法是:在 CUDA 自定义安装界面取消勾选 Driver 组件,只装 CUDA Toolkit 本身,显卡驱动保持原来的新版本。判断标准就是 nvidia-smi 能否正常输出,能输出就别动它。

3.2 CUDA 10.0 安装:下载、自定义组件、nvcc 验证

打开 NVIDIA CUDA 工具包归档页面(developer.nvidia.com/cuda-toolkit-archive),这里列出了所有历史版本。找到 CUDA 10.0,选择 Windows 10 x86_64,下载cuda_10.0.130_411.31_win10.exe。这套版本组合对应 TensorFlow 2.0 的官方要求,不要手痒去下更新的 CUDA 11.x,TensorFlow 2.0 在 CUDA 11 下直接报不匹配。

安装包下载到 D 盘后双击运行,选择 Custom 自定义安装。组件列表里重点看两个:

  • Driver 组件:如果 3.1 里 nvidia-smi 有输出,取消勾选;
  • CUDA Samples:建议保留,后面配置 CUDA_SDK_PATH 环境变量要用到它的目录。

安装路径同样建议改到 D 盘或保持默认的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0。安装完成后打开新的 cmd 窗口验证:

nvcc --version

输出里能看到Cuda compilation tools, release V10.0就说明 CUDA Toolkit 装好了。如果提示nvcc 不是内部或外部命令,大概率是 PATH 没配或者装完后没开新窗口——PATH 在 cmd 启动时读取,旧窗口里看不到新变量。

这里提醒一句,RTX 2060 属于 Turing 架构,对 CUDA 10.0 的支持是完整的,不用因为显卡新就去追 CUDA 新版本。TensorFlow 这边要的是 CUDA 运行时版本,和显卡驱动完全不是一回事。

3.3 cuDNN 解压与复制:bin、include、lib 三件套

cuDNN 是 NVIDIA 为深度学习提供的神经网络加速库,TensorFlow 在 GPU 上跑卷积、池化这些算子时直接调用它。下载 cuDNN 需要先到 NVIDIA 开发者网站(developer.nvidia.com/rdp/cudnn-download)注册账号,Login 和 Join now 二选一,注册登录后才能看到下载链接。这一步绕不开,只能注册。

选择与 CUDA 10.0 匹配的 cuDNN 版本。TensorFlow 2.0 官方要求的是 cuDNN 7.4 系列,下载对应 CUDA 10.0 的版本。下载下来是 zip 压缩包,解压后得到一个cuda文件夹,里面有bin、include、lib三个子目录,这就是常说的 cuDNN 三件套。

接下来把这几个目录里的内容复制到 CUDA 安装目录的对应位置。用 cmd 的 xcopy 命令可以保留目录结构:

xcopy /E /Y "解压目录\cuda\bin\*" "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin\" xcopy /E /Y "解压目录\cuda\include\*" "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\" xcopy /E /Y "解压目录\cuda\lib\*" "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\"

/E表示包含空目录递归复制,/Y表示覆盖不询问。复制完成后,检查bin目录下有没有cudnn64_7.dll这个文件——它的文件名里带着64_7,表示 x64 架构、cuDNN 7.x 版本。TensorFlow 启动时会按这个文件名去找 DLL,名字不对或者没复制进去,impor t tensorflow 时就会报Could not load cudnn64_7.dll。

3.4 环境变量配置:CUDA_PATH、CUDA_SDK_PATH 与 PATH 四项

CUDA 安装时一般会自动写好 CUDA_PATH 和 CUDA_PATH_V10_0 这两个环境变量,但这份安装记录里还要求手动补一个 CUDA_SDK_PATH,并往 PATH 里追加四项。打开系统环境变量编辑器(Win + R 输入 sysdm.cpl,切换到高级 → 环境变量),按下面的表核对:

变量名值说明
CUDA_PATHC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0安装器自动生成,核对路径
CUDA_PATH_V10_0同上自动生成,注意是 V10_0 不是 V10_1
CUDA_SDK_PATHC:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0手动新建,指向 Samples 目录
PATH追加 %CUDA_PATH%\bin 等四项见下方列表

PATH 里需要追加的四项是:%CUDA_PATH%\bin、%CUDA_PATH%\lib\x64、%CUDA_SDK_PATH%\bin\win64、%CUDA_SDK_PATH%\common\bin\x64。前两项让系统找到 nvcc 和 CUDA 运行时库,后两项让 Samples 编译出来的工具能被 cmd 直接调用。

注意:网上很多教程把CUDA_PATH_V10_0写成CUDA_PATH_V10_1,这份安装记录里也有同样的问题。实际上你装的是哪个 CUDA 版本,变量名里的数字就是哪个版本,装 10.0 生成的就是 V10_0。照着 V10_1 写就会在编译 cuDNN 示例时找不到路径。以安装器实际生成的变量名为准,别硬抄。

配置完最好重启一次电脑,或者至少注销重登,让环境变量在全局生效。验证方式:

echo %CUDA_PATH%

能打印出 CUDA 安装路径就说明变量生效了。到这里 CUDA 和 cuDNN 的静态配置全部完成,下一步进入 Python 侧的安装。

4. TensorFlow-gpu 2.0 与 Keras:conda 虚拟环境里的安装组合

4.1 创建 tensorflow 虚拟环境:指定 Python 3.7

打开 Anaconda Prompt(或者配置好 PATH 后直接开 cmd),执行:

conda create -n tensorflow pip python=3.7

这条命令创建一个名为 tensorflow 的虚拟环境,指定 Python 3.7,命令里的 pip 表示让 conda 在新环境里显式安装 pip 包管理器。其实 python=3.7 自带 pip,写不写都能用,但加上无妨。执行过程中 conda 会解析依赖,询问是否继续,输入 y 回车。

创建完成后查看环境列表:

conda info --envs

输出里应该能看到tensorflow这一行。激活环境:

activate tensorflow

激活成功的标志是命令行开头出现(tensorflow)前缀。后续所有 pip 安装、Python 代码运行都必须在这个前缀下进行,否则装到系统 Python 里,等于白装。

Python 3.7 这个版本号不能随意换。TensorFlow 2.0 官方声明支持 Python 3.5、3.6、3.7,到了 Python 3.8 就报No matching distribution found。PPT 里坚持用 Python 3.7,应该就是被这个版本约束卡过。

4.2 安装 tensorflow-gpu==2.0:pip 还是 conda

在激活后的 tensorflow 环境里执行:

pip install tensorflow-gpu==2.0

指定==2.0是为了锁定大版本,避免 pip 自动装成 TensorFlow 2.10 或更高版本。TensorFlow 后续版本对应的是 CUDA 11.x,和当前环境的 CUDA 10.0 不匹配,装了也是白装,还会把 cuDNN 的 DLL 查找路径搞乱。

为什么用 pip 而不是 conda install?Anaconda 仓库里的 tensorflow-gpu 包更新滞后,经常比 PyPI 落后好几个版本,而且 conda 装包时会重新解析整个环境的依赖,容易把已安装的 numpy 版本悄悄升级掉。pip 只负责把 TensorFlow 和它的直接依赖拉进来,行为更可控。如果下载速度慢,可以在命令后面加-i https://pypi.tuna.tsinghua.edu.cn/simple换国内镜像源。

安装完成后先做一个快速验证:

python -c "import tensorflow as tf; print(tf.__version__)"

如果能打印出 2.0.0 且没有任何 DLL 报错,说明 CUDA、cuDNN、环境变量全部对上了。如果报错,直接跳到第 5 章的避坑清单对号入座。首次 import tensorflow 时会有一段以I tensorflow/core/common_runtime/gpu开头的日志,里面能看到 GPU 设备被识别,这说明显卡侧已经通了。

4.3 Keras 装哪个版本:独立 Keras 与 tf.keras 的区别

这份安装记录的标题里有 Keras,说明 PPT 里用的还是 TensorFlow 2.0 发布初期的 Keras 工作流。执行:

pip install keras==2.3.1

Keras 2.3.1 是最后一个支持多后端(TensorFlow、Theano、CNTK)的独立版本,也是与 TensorFlow 2.0 同期发布的适配版本。这里有个版本选择的细节:TensorFlow 2.0 已经把 Keras 内置为tf.keras,如果你直接用import keras,它走的是独立的 Keras 包;用from tensorflow import keras,走的是 TensorFlow 内置的 Keras 实现。两者接口基本一致,但混用会出现奇怪的兼容性问题。

我的习惯是:新代码优先用from tensorflow import keras,省去独立 Keras 包与 TensorFlow 的版本匹配问题;如果必须跑老项目里import keras的代码,再装独立的 keras 2.3.1。PPT 里给了pip install keras==2.3.1这个命令,在 TensorFlow 2.0 环境下是能用的,但后续开发我建议切到tf.keras上。

安装完确认版本:

pip list | findstr keras

看到 keras 2.3.1 就说明装好了。到这里,从 Anaconda 到 CUDA、cuDNN、TensorFlow、Keras 的完整链路已经串起来了,但真正跑通还需要解决几个高频坑。

5. 避坑手册:CUDA 版本名、tf.Session 与 Keras 三个高频翻车点

5.1 环境变量失效、驱动不匹配和 DLL 丢失

这一节汇总三个最容易让环境「看起来装好了但一跑就挂」的坑,全部来自真实安装过程中的血泪经验。

坑一:conda 或 nvcc 提示「不是内部或外部命令」

现象:安装完成后,在 cmd 里输入conda list或nvcc --version,系统提示命令不存在,但 Anaconda Prompt 里能用。

原因:Anaconda 安装时没勾选 Add to PATH,或者 PATH 变量配置后 cmd 窗口是旧的。cmd 启动时读取一次环境变量,之后对环境变量的修改不会在当前已打开的窗口里生效。

解决:第一步,关掉所有 cmd 窗口重新打开,排除旧窗口缓存问题。第二步,检查系统环境变量的 PATH 里有没有D:\Anaconda3和D:\Anaconda3\Scripts两条路径。没有就手动添加,然后重新打开 cmd。nvcc 同理,确认 PATH 里有%CUDA_PATH%\bin。

坑二:RTX 2060 装上 CUDA 10.0 后 GPU 无法初始化

现象:安装 CUDA 10.0 完整包(含内置驱动)后,运行 TensorFlow 提示驱动版本过旧或cuInit: Internal error,用 nvidia-smi 查看发现驱动被覆盖成旧版本。

原因:CUDA 安装包内置的驱动组件是打包时的版本,而新显卡需要更新的驱动支持。比如 RTX 2060 上市时的首发驱动比 CUDA 10.0 内置的 411.31 新,安装器默认把驱动替换成旧版,导致显卡特性无法被正确识别。

解决:重新从 NVIDIA 官网单独下载对应显卡的最新驱动安装一遍,覆盖回新版驱动。以后装 CUDA 时一律选 Custom 自定义安装,取消勾选 Driver 组件,只装 Toolkit、CUDA Samples 和 Nsight 这些工具组件。顺序应该是:先装好新驱动,再装 CUDA Toolkit(不装驱动),最后装 cuDNN。

坑三:import tensorflow 报 cudnn64_7.dll 找不到

现象:pip 安装 tensorflow-gpu 成功后,执行import tensorflow报错:Could not load cudnn64_7.dll或DLL load failed。

原因:cuDNN 的 DLL 文件不在 CUDA 的 bin 目录下。要么是 cuDNN 解压后没复制,要么是把整个cuda文件夹直接复制到了 CUDA 目录里,导致真正的 bin、include、lib 文件夹被套在了cuda\cuda\这一层,TensorFlow 按标准路径找不到。

解决:打开C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin,确认里面有cudnn64_7.dll。没有就重新解压 cuDNN,把解压后 cuda 目录里的bin、include、lib三个子文件夹的内容分别复制过去。检查方法一行命令:

dir C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin\cudnn*.dll

能看到 cudnn64_7.dll 就说明复制对了。

5.2 tf.Session API 失效和 Keras 版本冲突

坑四:TensorFlow 2.0 里执行 tf.Session() 直接报 AttributeError

现象:照着老教程写测试代码,sess = tf.Session()这一行报AttributeError: module 'tensorflow' has no attribute 'Session'。

原因:TensorFlow 2.0 默认启用了 eager execution(动态图模式),移除了Session、placeholder、get_variable这些 1.x 的静态图 API。PPT 里的测试代码是 1.x 时代的写法,在 2.0 下必须显式声明使用 compat.v1 模块。

解决:改用兼容写法,或者干脆用 2.0 的动态图方式。兼容写法是把导入语句换成下面的样子,可以在 2.0 环境里跑通 1.x 的 Session 代码:

import tensorflow.compat.v1 as tf tf.disable_v2_behavior() sess = tf.Session() a = tf.constant(1) b = tf.constant(2) print(sess.run(a + b))

如果只是验证安装,不需要特意降级到 Session 风格,直接:

import tensorflow as tf print(tf.add(1, 2).numpy())

这样就能看到输出结果,同时验证 TensorFlow 环境可用。

坑五:独立 Keras 与 TensorFlow 版本冲突,import keras 报错

现象:同时安装了 tensorflow-gpu==2.0 和 keras==2.3.1,导入 keras 正常,但一旦同时引入 tensorflow,出现cannot import name 'tf_utils'之类的错误,或者 keras 的层在 fit 时报类型不匹配。

原因:独立 Keras 2.3.1 和 TensorFlow 内置的 tf.keras 代码路径不同,两者在版本交替期接口没完全对齐。TensorFlow 2.0 官方推荐使用tf.keras,独立 Keras 包主要用于支持 TensorFlow 1.x / Theano 等旧项目。

解决:新项目一律from tensorflow import keras,不再安装独立 Keras。如果项目代码里写死了import keras,需要确认它兼容的 TensorFlow 版本范围,不要在一个虚拟环境里同时依赖两条 Keras 路径。检查当前环境:

pip list | findstr keras

保留 tf.keras 时可以卸载独立 Keras,避免误导入:

pip uninstall keras -y

6. 装完怎么验证:让测试代码真的跑在 GPU 上

6.1 从 tf.Session 到 GPU 检查

环境装完,验证的重点不是看 pip list 里有没有包,而是让代码真正调用 GPU 计算。先在激活的 tensorflow 环境里执行一段完整的检查代码,确认 GPU 设备可见:

import tensorflow as tf print("TensorFlow 版本:", tf.__version__) print("GPU 是否可用:", tf.test.is_gpu_available()) print("GPU 设备列表:", tf.config.experimental.list_physical_devices("GPU"))

tf.test.is_gpu_available()在 TensorFlow 2.0 里可用但会提示将来弃用,不影响判断。更可靠的是最后一行的 GPU 设备列表,能看到数组里出现 GPU 设备名(类似/physical_device:GPU:0)就说明 TensorFlow 成功找到了显卡。这一步通了,之前的 CUDA、cuDNN、环境变量配置全部验证通过。

6.2 矩阵运算和 Keras 分类的真实跑通

GPU 设备可见只代表驱动层面通了,还要验证算子真的跑在 GPU 上。写一个简单的矩阵乘法,观察日志里是否出现device:GPU:

import tensorflow as tf with tf.device("/GPU:0"): a = tf.constant([[1.0, 2.0], [3.0, 4.0]]) b = tf.constant([[5.0, 6.0], [7.0, 8.0]]) c = tf.matmul(a, b) print(c.numpy())

输出[[19. 22.][43. 50.]]且控制台没有 CUDA 相关报错,说明矩阵乘法已经在 GPU 上完成。比看日志更直观的做法是跑一个 Keras 分类示例,PPT 里也提到了分类示例这一步。用 MNIST 手写数字分类建一个最简单的模型,只看训练过程是否识别 GPU:

from tensorflow import keras (x_train, y_train), _ = keras.datasets.mnist.load_data() model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(10, activation="softmax") ]) model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) model.fit(x_train, y_train, epochs=1)

训练日志里如果能找到类似I tensorflow/core/common_runtime/gpu或者device:GPU:0的一行,就说明 Keras 和 TensorFlow 的 GPU 链路完整跑通。注意日志不是每次都能稳定显示设备信息,所以判断标准以矩阵乘法那段代码的输出和is_gpu_available()为准。

从那以后我每次配完 GPU 环境,都强制自己走一遍「GPU 设备列表 → 矩阵乘法 → Keras 一个 epoch」这条验证链,不做完这三步绝不认为环境装好了。快速有效的验证比反复装环境省时间得多,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询