简介:面向深度学习初学者与需要搭建GPU训练环境的开发者,这份PPT完整梳理了从Anaconda环境管理器安装、CUDA与cuDNN配置、TensorFlow-gpu版本部署到Keras环境搭建的全程操作路径,并附有MNIST手写数字识别的Keras分类示例代码,可直接对照实践。资源包含1个pptx演示文件,压缩包约4.3MB,内容以步骤截图和命令行说明为主,涵盖NVIDIA显卡型号确认、CUDA版本选择(如RTX 2060对应CUDA 10.0)、环境变量设置、conda虚拟环境创建、指定版本安装等关键环节,适合作为深度学习环境搭建的安装指导或教学演示材料。已有1673人浏览学习,对刚入门TensorFlow、Keras的读者尤其实用,可帮助规避版本不匹配和路径配置的常见坑,快速完成从零到可运行的GPU训练环境部署。
1. 深度学习环境不是玄学:一份能照着装的 TensorFlow-gpu 落地清单
做深度学习的同事十有八九在环境搭建上翻过车:Anaconda 装好了,CUDA 装好了,Tensorflow-gpu 也一键装上了,结果 import 时报个 DLL 缺失,前面全部白干。这套环境不是玄学,本质是版本对齐——Python 3.7 由 Anaconda 管,CUDA 10.0 对应 Tensorflow-gpu 2.0,cuDNN 补齐 GPU 上的卷积加速,最后用 Keras 把模型拼起来。这份安装步骤 PPT 覆盖从 Anaconda 到 Cuda及cuDNN、再到 Tensorflow-gpu 与 Keras 的完整链路,我按 RTX 2060 的 Windows 机器完整跑了一遍,把能复现的路径、参数和坑整理成文,适合刚搭 GPU 环境的从业者,也适合想核对版本对应关系的熟手。
2. Anaconda 安装与 Conda 环境管理:装到 D 盘、配好 PATH、隔离依赖
2.1 下载与安装:为什么我坚持装到非系统盘
原 PPT 的做法是登录 anaconda 官网点 download,选择操作系统和版本,下载到 D 盘再打开安装。我复现时也是这个路径,不过实际下载时官网走的是海外分发,速度经常不稳,国内网络环境下我一般会换镜像源下载安装包,版本一致,后面的装法完全一样。
下载时注意区分 Windows 和 macOS、64 位和 32 位,现在基本都是 64 位。下载完双击安装,安装路径别用默认的 C 盘用户目录下的 Anaconda3,建议直接改到 D:\Anaconda3。原因很实际:conda 环境后面会用掉十几个 G,而且系统盘一旦重装,C 盘里的环境全没了;装到 D 盘还能整目录备份,出问题删掉重装就行。
安装过程中有两个勾选项值得说。一个是 "Add Anaconda to my PATH environment variable",个人使用我建议勾上,这样 cmd 里直接能敲 conda;团队机器上我不勾,避免和已有的 Python 环境抢 PATH。另一个是 "Register Anaconda as my default Python",如果这台机器上已经装了别的 Python,这个选项别勾,否则所有 Python 脚本的默认解释器都会被改成 Anaconda。
conda --version conda list逻辑说明:conda --version确认命令可用;conda list输出当前环境的包列表。能看到一长串包名就说明 Anaconda 本体正常。装完先跑这两条,比任何界面验证都快,也顺便在终端里确认一下 conda 指向的是刚装的那个 Anaconda 目录。
参数说明:conda list不带任何参数时显示 base 环境的包。后面激活虚拟环境后再跑它,显示的就是那个环境的包列表,这是最快判断"当前在哪个环境"的办法。
2.2 PATH 配置:conda 命令找不到怎么办
装完 Anaconda 最常见的现象是打开 cmd 敲 conda,提示"不是内部或外部命令"。原因就两个:要么安装时没勾 Add to PATH,要么是 Anaconda Prompt 能用但 cmd 不能用。Anaconda Prompt 启动时会自动加载 conda 的初始化脚本,所以它永远能用;cmd 能不能用取决于 PATH 里有没有 D:\Anaconda3 和 D:\Anaconda3\Scripts 这两条。
如果当初勾过 PATH 还是找不到,检查系统环境变量里这两条路径是否还在、有没有写对。安装路径改过的话,PATH 里的路径也要跟着改。改完新开的终端才会生效,老窗口不刷新。
PATH 配好后,我还会顺手验证一下 pip 的来源,在 cmd 里跑pip --version,看它指向的是 Anaconda 目录下的 pip 还是别的 Python 的 pip。翻车案例里最常见的就是 Terminal 里 conda 是 D 盘的,pip 却是 C 盘 Python 下的,两边各管各,后面装 Keras 装错地方都查不出来。
2.3 用 Conda 管环境:虚拟环境是后悔药
Anaconda 装好后,第一步别急着装包,先想清楚要不要用虚拟环境。窗口里的 base 环境相当于全家桶,深度学习项目版本敏感度高,我都是为项目单独建环境。建环境的命令后面安装 TensorFlow 时要用,这里先把基础用法过一遍。
conda create -n tf2 pip python=3.7 conda info --envs conda activate tf2 conda deactivate逻辑说明:create -n指定环境名,pip python=3.7表示在这个环境里预装 pip 并指定 Python 版本。conda info --envs显示已有环境列表,带星号的是当前所在环境。activate进入环境,deactivate退出。每个环境是独立目录,互不影响,这就是后悔药——环境搞坏了直接删掉重建,不用重装 Anaconda。
参数说明:创建过程会列出一串要安装的包,输入 y 确认。conda create和conda install在 Windows 下经常卡在 Solving environment,一般等几分钟正常,超过十分钟多半是源的问题,这个在避坑章单独展开。
| 命令 | 作用 |
|---|---|
| conda create -n env python=3.7 | 创建环境并指定 Python 版本 |
| conda info --envs | 查看全部环境 |
| conda activate env | 进入环境 |
| conda deactivate | 退出环境 |
| conda list | 查看当前环境已装的包 |
注意:虚拟环境名尽量别跟包名重名。有人建了个叫 keras 的环境,再装 keras 包时,conda 会尝试解析同名环境,行为会很奇怪。
3. CUDA 与 cuDNN 的版本账:RTX 2060 + CUDA 10.0 的选型与配置
3.1 版本对应关系:先看 TensorFlow 要什么,再回头挑 CUDA
装 CUDA 之前,先别急着去下载最新版。TensorFlow-gpu 的每个版本都对编译时的 CUDA 版本有固定要求,装新不装旧在这里是翻车重灾区。原 PPT 里是 Tensorflow-gpu 2.0,对应 CUDA 10.0、cuDNN 7.4,这套对应关系在官方文档里有专门表格。正确的选型顺序应该是:先定 TensorFlow 版本,再看它要求的 CUDA 版本,最后按 CUDA 版本选 cuDNN。
| TensorFlow-gpu | Python | CUDA | cuDNN |
|---|---|---|---|
| 1.15 | 3.6-3.7 | 10.0 | 7.4 |
| 2.0 | 3.5-3.7 | 10.0 | 7.4 |
| 2.3 | 3.5-3.8 | 10.1 | 7.6 |
同时还要看显卡。RTX 2060 是图灵架构,算力 7.5,CUDA 10.0 能完整支持。如果显卡是特别老的 GTX 7 系列或特别新的 40 系列,同一个 TensorFlow 版本配的 CUDA 可能不兼容,那就要换 TensorFlow 版本而不是硬装 CUDA。显卡算力和 CUDA 版本的关系在 NVIDIA 的兼容表里能查到,注意别只看显卡新不新。
3.2 安装 CUDA Toolkit:exe 安装里有一个不必装的组件
在 NVIDIA 的 CUDA Toolkit Archive 页面找到 cuda_10.0.130_411.31_win10.exe,下载后双击。安装方式选"自定义",组件列表里有一项是 NVIDIA Display Driver,如果你的显卡驱动已经是 410 以上,这一项可以取消勾选。原 PPT 是默认全装,装完也能用,但驱动版本比 Toolkit 新时多装一次没意义,还有可能覆盖掉当前驱动造成显卡异常。
安装目录建议用默认的 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0,后面 cuDNN 复制、环境变量配置都按这个路径来。装完打开 cmd 验证。
nvcc --version nvidia-smi逻辑说明:nvcc是 CUDA 编译器,能输出版本信息就说明 Toolkit 装好了。nvidia-smi显示显卡驱动信息,右上角的 CUDA Version 是当前驱动支持的 CUDA 最高版本,不等于你装的 Toolkit 版本。很多人看到两个数字不一样就心慌,其实是两回事。
3.3 配置环境变量与复制 cuDNN:三个文件放对位置
安装时 CUDA 会自动生成 CUDA_PATH 和 CUDA_PATH_V10_0 两个系统变量。原 PPT 的截图里显示的却是 CUDA_PATH_V10_1,这个对不上的问题我放到避坑章专门说。总之先打开系统环境变量窗口,确认 CUDA_PATH 存在,然后手动加一个 CUDA_SDK_PATH,再把 PATH 里补四项。
| 环境变量 | 值 |
|---|---|
| CUDA_PATH | C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0 |
| CUDA_SDK_PATH | C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0 |
| PATH 追加 | %CUDA_PATH%\bin |
| PATH 追加 | %CUDA_PATH%\lib\x64 |
| PATH 追加 | %CUDA_SDK_PATH%\bin\win64 |
| PATH 追加 | %CUDA_SDK_PATH%\common\bin\x64 |
PATH 追加项在系统变量里编辑,每条一行。这里用 %CUDA_PATH% 变量引用而不是写死路径,后面升级 CUDA 版本时只要改 CUDA_PATH 本身,PATH 不用动。这个习惯我从第一次配环境就开始用,省了很多维护成本。
cuDNN 需要在 NVIDIA 官网注册账号,在 cuDNN 下载页选对应 CUDA 10.0 的版本,下载的是一个压缩包。解压后里面是 bin、include、lib 三个目录,把三个目录里的文件分别复制到 CUDA 安装目录下的同名目录里。
| 源文件 | 目标目录 |
|---|---|
| bin\cudnn64_7.dll | ...\CUDA\v10.0\bin |
| include\cudnn.h | ...\CUDA\v10.0\include |
| lib\x64\cudnn.lib | ...\CUDA\v10.0\lib\x64 |
复制完检查目标文件确实存在,然后按原 PPT 的说法把 cuDNN 解压目录里的 bin 也加进环境变量。我按自己的习惯只加一个 %CUDA_PATH%\bin,因为 cudnn64_7.dll 已经复制进了 CUDA 的 bin 目录,不需要重复加。加多了反而容易让程序加载到错误路径下的同名 DLL。
4. Tensorflow-gpu 与 Keras 安装:虚拟环境、版本配对与依赖检查
4.1 创建 tensorflow 环境:那行命令为什么带 pip
打开 Anaconda Prompt,创建虚拟环境的命令是 conda create -n tensorflow pip python=3.7。这里有两个点容易被忽略。一是环境名叫 tensorflow,但可以随便取,叫 tf2 或者 dl 都行;二是命令里带了 pip,意思是让 conda 在创建环境时把 pip 也装进去,后面安装 TensorFlow 和 Keras 都用环境内的 pip,避免用到 base 环境或系统 Python 的 pip。
conda create -n tensorflow pip python=3.7 conda info --envs conda activate tensorflow逻辑说明:create 命令执行后 conda 会列出要安装的包清单,输入 y 确认。python=3.7 指定解释器版本。info --envs 查看是否创建成功。activate 进入环境后,命令行前缀会变成 (tensorflow),后面的 pip install 都装进这个环境,和 base 环境完全隔离。
参数说明:Python 版本必须和 TensorFlow 版本对上。TensorFlow 2.0 官方支持 Python 3.5-3.7,所以 3.7 是当时的上限,装到 3.8 会直接找不到匹配的 tensorflow-gpu 2.0。报错信息里出现"usually comes with Python"字样,就是在提示你版本不匹配。
4.2 安装 tensorflow-gpu==2.0:pip 与镜像源
进入环境后,执行 pip install tensorflow-gpu==2.0。为什么用 pip 而不是 conda install?原 PPT 用的是 pip,我复现也推荐 pip。conda 里的 tensorflow-gpu 包更新比 PyPI 慢,pip 更贴近官方安装说明。要特别注意:不要直接 pip install tensorflow-gpu 不写版本,那样会拉最新的 TensorFlow 2.x 高版本,和 CUDA 10.0 大概率对不上。
pip install tensorflow-gpu==2.0 # 用 findstr 过滤,只看 tensorflow 相关包 pip list | findstr tensorflow逻辑说明:第一行安装指定版本。第二行通过 findstr 过滤输出,能看到 tensorflow-gpu 2.0.0、tensorflow-estimator 等包,确认装的是 2.0 而不是 2.x 全家桶。如果 pip 下载慢,加 -i 参数走镜像源:pip install tensorflow-gpu==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple,这是国内网络下的常见做法,不影响依赖判断。
装完别急着跑 Demo,先确认 pip 和环境里 TensorFlow 的对应关系。方法是在 tensorflow 环境下输入 python 进入解释器,import tensorflow as tf,然后看 tf.version。如果打印的是 2.0.0 说明环境干净;如果打印出来是 1.x,那多半是混装了其他环境里的包,这是后面排查问题的重要依据。
4.3 Keras 安装:独立 Keras 与 tf.keras 的边界
原 PPT 在 TensorFlow 装完后接着 pip install keras,并且推荐 keras==2.3.1。这里有个背景要讲清楚:TensorFlow 2.0 开始内置了 tf.keras,如果你只用 TensorFlow 训练模型,直接 from tensorflow import keras 就行,不用单独装。但如果你需要独立的 keras 包,比如课程要求 import keras 这种写法,那就得装和 TF 2.0 配套的 2.3.1。
pip install keras==2.3.1 python -c "import keras; print(keras.__version__)"逻辑说明:指定 2.3.1 是为了和 tensorflow-gpu 2.0 配套。如果直接 pip install keras 不写版本,2020 年之后装到的是 Keras 3.x,那是给 TensorFlow 2.16+ 用的,和 TF 2.0 混装会出现版本冲突,import 时报错或者用 tf API 时行为异常。装完打印版本确认。
还有后端的指向问题。独立 Keras 通过 keras.json 配置文件指定后端,默认是 tensorflow。如果机器上还装过其他后端框架,后端不在 tensorflow 上,Keras 调用时会一直卡在 Loading backend。检查方法:打开用户目录下的 .keras/keras.json,看 backend 字段是不是 tensorflow。
5. 避坑排查:四个最常见的装完不工作场景
安装步骤看起来顺,真正跑起来才会暴露问题。下面四个场景是我当时完整复现过程中实际遇到的或明确能复现的,每一条按现象、原因、解决三步写。
5.1 现象:import tensorflow 后跑 tf.Session() 报 AttributeError
原 PPT 里的测试代码是这样的:
import tensorflow as tf sess = tf.Session() a = tf.constant(1) b = tf.constant(2) print(sess.run(a + b))在 tensorflow-gpu 2.0 环境里,这一跑就会报AttributeError: module 'tensorflow' has no attribute 'Session'。
原因:tf.Session() 是 TensorFlow 1.x 的写法。TensorFlow 2.0 把 Session、placeholder 这些 1.x API 移到了 tf.compat.v1 模块,直接访问 tf.Session 在 2.0 里不存在。
解决:要么改成tf.compat.v1.Session(),要么直接用 2.0 的 eager 执行方式,tf.constant(1) + tf.constant(2)直接 print,不需要 Session。如果课程必须要求老式 Session 写法,那得用 tensorflow==1.15 配合 CUDA 10.0,别和 2.0 混着装。
5.2 现象:Could not load dynamic library 'cudnn64_7.dll'
跑 TensorFlow 时最怕的就是这行报错,后面往往还跟一句 "Cannot dlopen some GPU libraries"。
原因:cudnn64_7.dll 是 cuDNN 的运行时库,TensorFlow 加载 CUDA 时按 PATH 里的目录去找它。报这个错基本是 cuDNN 没复制到 CUDA 的 bin 目录,或者复制了但版本不对。TensorFlow 2.0 找的是 cudnn64_7.dll,如果你下载的 cuDNN 对应的是 CUDA 10.1 版本,文件名会变成 cudnn64_8.dll,找不到 7 自然报错。
解决:回到第 3.3 节的复制表格,确认 bin\cudnn64_7.dll 存在,并且 PATH 里有 %CUDA_PATH%\bin。复制完记住要新开终端再跑,因为 PATH 是终端启动时加载的,老窗口里改的配置不生效。
5.3 现象:环境变量里是 CUDA_PATH_V10_1,我装的是 10.0
原 PPT 下载安装包是 cuda_10.0.130,环境变量截图里却出现了 CUDA_PATH_V10_1,这个版本号对不上不是个例。
原因:CUDA Toolkit 的安装程序可能因为系统里残留的注册表键或旧版本信息,生成带其他后缀的变量名,V10_1 和 V10_0 并存的情况确实存在。
解决:以实际存在的变量名为准。打开系统环境变量看 CUDA_PATH 指向哪个目录,再看看有没有 V10_0 或 V10_1。TensorFlow 找的是 PATH 里的 bin 目录,不依赖 CUDA_PATH_V10_x 这个名字,所以 PATH 里的引用用 %CUDA_PATH%\bin 最稳,别写死 v10.0 路径。
5.4 现象:conda create 卡在 Solving environment 或 SSL 错误
建环境时输出停在 Solving environment 出不来,或者直接报 SSL 相关错误。
原因:conda 默认使用官方 channel,国内网络下解析元数据和下载都慢,表现为长时间不动或 SSL 握手失败。原 PPT 的建环境流程没问题,问题出在源上。
解决:常见做法是给 conda 配镜像源,在用户目录下的 .condarc 里写 channels 配置;pip 那侧用 -i 参数走镜像。配完后如果还是慢,把 conda 的 repodata 缓存清掉再试。改完源后,安装时看输出里的 channel 名确认走的是镜像。
6. 用 Keras 分类示例做终检:GPU 是否真的在跑
6.1 先确认 GPU 被 TensorFlow 认到
import tensorflow as tf # 检查 CUDA 和 cuDNN 是否可见 print(tf.test.is_gpu_available(cuda_only=True)) print(tf.test.gpu_device_name())is_gpu_available 返回 True,并且 gpu_device_name 输出 /device:GPU:0,说明 TensorFlow 已经拿到了 GPU。这个接口只检查 CUDA 和 cuDNN 是否可见,不检查算力是否被支持。如果返回 False,优先回到第 5.2 节查 DLL。
6.2 跑一个最小的 MNIST 分类 Demo
from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense (x_train, y_train), (x_test, y_test) = mnist.load_data() # 展开成 784 维并归一化 x_train = x_train.reshape(60000, 784).astype('float32') / 255 x_test = x_test.reshape(10000, 784).astype('float32') / 255 model = Sequential() model.add(Dense(128, activation='relu', input_shape=(784,))) model.add(Dense(10, activation='softmax')) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=128, epochs=3)这是一个只跑到 fit 阶段的最小示例。加载 mnist、展开成 784 维、归一化、两层网络、adam 优化。fit 执行时如果 GPU 在跑,训练速度会明显比纯 CPU 快,epoch 耗时从十几秒降到两三秒。这一步是整条链路最终体检,比单独跑 tf 算加法更能暴露 Keras 后端和 TensorFlow 的衔接问题。
那次复现之后,我给自己定了个规矩:每次搭 GPU 环境,装完必须跑通这个 fit 才算完。DLL 缺失、版本错位、Session 重影,都在这一步现形。后来同事装环境,我都是直接甩这一段代码,跑通再开始调模型。希望帮到你。
本文还有配套的精品资源,点击获取