十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于VSCode与Anaconda从零搭建TensorFlow环境的实操指南

基于VSCode与Anaconda从零搭建TensorFlow环境的实操指南 很多刚接触深度学习的人第一关就卡在“环境搭建”上。我去年在一台新笔记本上从零开始用VSCode搭建TensorFlow环境本以为二十分钟能搞定结果整整折腾了一个下午。这个下午踩出来的经验和教训我整理成这篇实操笔记希望对正在配置环境的朋友有帮助。这套环境本质上解决的是三件事Python 解释器从哪来、TensorFlow 装成什么版本、VSCode 怎么把这两个东西衔接起来。听起来简单但版本之间互不相同、GPU驱动冲突、Python解释器选错等小问题任意一个都能让人怀疑人生。本文会把从零到一的步骤、验证方法、排查思路全部掰开来讲。写出来的东西不是我背的教程而是我实际跑通流程后沉淀下来的内容。适合刚接触 TensorFlow 的初学者也适合已经装过但总是莫名其妙报错的老手查漏补缺。1. 动手之前先理清这套环境的搭配逻辑在终端敲任何一条命令之前先把整条依赖链搞清楚。很多人的环境装完不能用根本不是操作问题而是搭配逻辑出了错。TensorFlow 的运行环境不是孤立的它站在一堆底层库的肩膀上。1.1 为什么坚持让你先装 Anaconda我见过不少人在官网直接下载 Python 安装包然后一路点“Next”装完再跑到 TensorFlow 官网复制一条 pip 命令来装。这样确实能用但后患无穷。你会在不知道第几个月某天突然发现一个项目的依赖需要 Python 3.10另一个项目却只能跑在 3.8 上而你的机器里只有全局一个 Python。Anaconda 或 Miniconda 解决的正是这个痛点。它可以在同一台机器上创建多个互相隔离的 Python 环境每个环境有自己独立的解释器、依赖包和版本号。装坏了就直接删掉重建不拖累全局环境。用 Anaconda 还有一个隐藏好处很多数据处理相关的底层库比如 NumPy、pandas、scikit-learnAnaconda 默认已经把能预编译的版本都帮你装好了。TensorFlow 本身自带的依赖解析能力一般有个干净的基础环境能少很多无谓的版本冲突。如果不喜欢 Anaconda 的体积可以装 Miniconda它只保留 conda 和 Python 基础功能体积小得多后面的操作没有任何区别。我在实际测试中Miniconda 和 Anaconda 在搭建 TensorFlow 环境这个场景下表现完全一致。1.2 Python 版本、TensorFlow 版本、CUDA 版本如何匹配很多人对着网上的教程照抄结果版本号配不上回头还以为是自己的步骤有问题。这里要刻意强调一句非常关键的话TensorFlow 的版本和 Python 版本不是随便匹配的。以我调整过多次的经验来看可以在 Python 3.8 到 3.11 之间完成 TensorFlow 2.x 的安装具体要核实对应发布日志最快的确认方式是在命令行安装包时直接看 pip 的依赖解析结果。看清楚下图这种对应关系再动手TensorFlow 版本适配的 Python 版本范围常见稳定组合对应的 Keras 版本TensorFlow 2.10Python 3.7 ~ 3.10Keras 2.10TensorFlow 2.12Python 3.8 ~ 3.11Keras 2.12TensorFlow 2.15Python 3.9 ~ 3.12Keras 2.15TensorFlow 2.16需要查看官方发布矩阵内置在 tf.keras如果只是做 CPU 版本版本匹配已经非常简单了最新稳定版通常都能直接用。但如果你要上 GPU那 CUDA 和 cuDNN 的版本匹配是更大的坑这块的严肃程度比 Python 版本要高一个量级。1.3 CPU 还是 GPU第一道分水岭先判断自己电脑有没有 NVIDIA 独立显卡。方法很简单打开任务管理器看“性能”一栏里有没有“GPU”且带有 NVIDIA 字样。没有 NVIDIA 显卡建议直接安装 CPU 版 TensorFlow。很多常规机器学习任务、小规模网络训练、模型测试CPU 完全够用。有 NVIDIA 显卡安装 GPU 版并安装配套的 CUDA 和 cuDNN。有 AMD 显卡或 Apple Silicon 芯片在 Windows 上TensorFlow 对这两种平台的支持主要走 CPU 或专门适配版本Apple Silicon 建议用 TensorFlow Metal 插件。关于 GPU 版我在第四节会给出完整的验证方案。因为很多人装完以为自己在用 GPU实际上 TensorFlow 还是默默跑在 CPU 上这种情况在深度学习社区里太常见了。2. 从零开始创建虚拟环境让项目依赖互相隔离环境规划做完就进入实际操作。这一节所有命令我都建议你在终端里手工敲一遍别复制完就完事——敲的过程能让你对每个动作产生印象后面出问题也更容易定位。2.1 创建并激活虚拟环境的完整命令打开 Anaconda Prompt或者在任何终端里只要 conda 命令能识别就逐条执行conda create -n tf python3.10这一条命令的意思是创建一个名为 tf 的虚拟环境并指定 Python 版本为 3.10。你可以把 tf 改成任何你想要的名字比如 dl、tf2、tensorflow看个人习惯。看到提示 Proceed ([y]/n)? 时输入 y等待 conda 把基础包解压完。然后激活环境conda activate tf激活成功后命令行的最前面会出现 (tf) 字样。这是环境切换最直观的标志。如果没有出现这个前缀说明你还在全局环境里后面装的一切都会进到全局 Python环境隔离的意义就消失了。2.2 CPU 版与 GPU 版的安装命令差异CPU 版安装非常简单一条命令搞定pip install tensorflow如果你确定自己的显卡不支持 CUDA或者短期不打算碰 GPU就直接用这条。安装包体积不大依赖基本都是纯 CPU 预编译库装起来很少出幺蛾子。GPU 版在 Windows 上需要多思量一步。你可能看过很多教程让你先单独安装 NVIDIA 驱动、CUDA Toolkit、cuDNN再装tensorflow-gpu包。但这里有一个被许多人忽略的变化TensorFlow 2.11 之后不再单独提供tensorflow-gpu包安装 GPU 支持直接用tensorflow包就能通过 CUDA 库实现。这里补充一个 Windows 平台下比较推荐的路线先安装 NVIDIA 显卡驱动再安装 CUDA Toolkit版本以你选定的 TensorFlow 版本要求为准最后配置 cuDNN 文件到 CUDA 目录。装完这些再执行pip install tensorflow如果你还用旧习惯装tensorflow-gpu在 2.11 以后只会得到一个兼容层实际上已经被合并进主包没必要自找麻烦。2.3 安装后立刻做一次基础确认装完包以后先别急着关终端用一条最简单的命令确认 TensorFlow 已经可以被 Python 调用python -c import tensorflow as tf; print(tf.__version__)如果顺利输出版本号比如2.16.1说明 Python 侧的安装已完成。如果这里报ModuleNotFoundError: No module named tensorflow大概率是环境没激活或者 pip 装到了别的 Python 里。顺带提一句在虚拟环境里执行 pip 时尽量用python -m pip install而不是直接pip install因为后者在某些系统配置下可能指向全局环境而前者保证使用当前激活解释器对应的 pip。这条习惯能帮你规避一部分“明明装了却找不到”的坑。3. VSCode 侧的三件套解释器、扩展、终端联动环境装好只是完成了“后端”工作真正每天面对的是 VSCode。VSCode 本身只是一个编辑器它不会自动知道你刚创建的那个 tf 环境在哪里。所以要做三件事装扩展、选解释器、把终端接进来。3.1 必装扩展少一个都别扭打开 VSCode 扩展市场搜索以下扩展并安装Python微软官方出品包含代码补全、语法检查、调试等基础功能Pylance与 Python 扩展配合使用提供更快的类型推断和语法高亮Jupyter如果你想在 .ipynb 里写 TensorFlow 代码这个一定得装Error Lens可选但强烈推荐它能把错误信息直接显示在代码行尾排错时特别直观安装完 Python 扩展后VSCode 会自动检测系统中存在的 Python 解释器。检测不到的稍后通过手动选择路径解决。3.2 三步把 VSCode 指向刚建好的环境第一步按组合键 CtrlShiftP 打开命令面板输入Python: Select Interpreter回车。第二步在弹出列表里找到那个带tf字样的环境。通常它的路径会显示为类似...\envs\tf\python.exe的形式。如果列表里找不到点“Enter interpreter path...”手动定位到 Anaconda 安装目录下的envs/tf/python.exe。第三步选择完成后在 VSCode 右下角状态栏可以看到当前解释器名字。如果显示的不是 tf点一下它就能重新选择。这一步非常重要。因为很多人在 VSCode 终端里明明已经conda activate tf但新建的 .py 文件运行时VSCode 的 Python 扩展仍然可能使用默认解释器结果 import tensorflow 直接报错。手动选定解释器之后运行、调试、代码补全都会基于这个解释器工作。3.3 把集成终端接到 conda 环境VSCode 内置终端默认打开的是系统自带 shell并不会自动激活 conda 环境。你可以在终端里手动执行conda activate tf每次打开新终端都敲一遍确实烦。有个省事的办法在.vscode/settings.json里配置终端激活命令。也可以用 conda 提供的 PowerShell 初始化功能让终端打开时自动进入 base 环境然后你再手动激活。更顺滑的方式是用 VSCode 的Python: Create Terminal命令。它会自动激活当前选定的 Python 环境对应的 conda 环境。每次我要跑脚本都会用这个命令开终端省去手动输入的步骤。补充一个容易踩的细节如果用的是 PowerShellconda 命令无法识别先执行一次conda init powershell然后重启 VSCode问题基本就解决了。如果用的是 CMD则执行conda init cmd.exe。4. 验证环境是否真正可用跑通一个最小训练 Demo环境装好、解释器选对不意味着万事大吉。这一节要解决一个核心疑虑TensorFlow 到底能不能在你机器上顺利跑起来。4.1 GPU 可用性的三行验证代码创建一个check_env.py文件写入以下内容import tensorflow as tf print(TensorFlow 版本:, tf.__version__) print(可用设备列表:) devices tf.config.list_physical_devices() for device in devices: print(device)保存后运行如果你装了 GPU 版并正确配置了 CUDA你应该在输出中看到类似这样的行PhysicalDevice(name/physical_device:CPU:0, device_typeCPU) PhysicalDevice(name/physical_device:GPU:0, device_typeGPU)如果只看到 CPU没有 GPU说明 TensorFlow 根本没有检测到 GPU。注意GPU 不显示不代表无法使用只是无法发挥硬件加速能力。绝大多数“我明明装了 GPU 版为什么这么慢”的求助帖根源就在这一步。另外一个经典命令是print(tf.test.is_gpu_available())但这个 API 在 TensorFlow 2.x 中已经标记为弃用建议用tf.config.list_physical_devices(GPU)来判断。判断逻辑是gpus tf.config.list_physical_devices(GPU) if gpus: print(检测到 GPU数量为, len(gpus)) else: print(未检测到 GPU使用 CPU 训练)4.2 跑一个 5 分钟能出结果的最小训练任务环境检测通过后再跑一个最基础的模型训练确认整个链路没有问题。我做了一个简单的线性回归示例代码量极小能用最短时间验证 TensorFlow 的自动求导和模型训练流程import numpy as np import tensorflow as tf # 生成模拟数据y 3x 2 x np.random.rand(1000, 1).astype(np.float32) y 3 * x 2 0.1 * np.random.randn(1000, 1).astype(np.float32) # 构造一个最简单的线性模型 model tf.keras.Sequential([ tf.keras.layers.Dense(1, input_shape(1,)) ]) model.compile(optimizersgd, lossmse) history model.fit(x, y, epochs5, verbose1) print(训练完成最终损失:, history.history[loss][-1])如果输出的 loss 随着 epoch 增长而下降说明 TensorFlow 从数据加载、模型构建到梯度更新整条链路都正常。如果这里出现了异常那问题基本不在环境配置而在代码逻辑。4.3 高频报错的完整排查链路我把实际使用中最常见到的几个报错按概率从高到低列出来并按因果关系梳理如下。报错一Could not load dynamic library cudart64_xxx.dll这句话的意思是 TensorFlow 找到了 CUDA 相关的动态库但版本不对或者路径不对。处理方式检查nvidia-smi里的驱动版本确认显卡驱动本身没问题。检查 CUDA Toolkit 版本是否与当前 TensorFlow 版本要求的 CUDA 版本一致。确认 cuDNN 文件已经复制到 CUDA 目录对应的 bin、include、lib 目录中。这个报错在通过 NVIDIA 驱动自带的 CUDA 兼容支持运行时容易遇到因为驱动版本和 TensorFlow 期望的运行时版本可能不完全统一。报错二Failed to get convolution algorithm这不是环境问题而是显存不足导致的算子编译失败。TensorFlow 在运行卷积层前需要根据当前输入 shape 自动选择最优算法这个过程会临时分配较多显存。显存不够就报这个错。解法是限制显存增长gpus tf.config.list_physical_devices(GPU) if gpus: try: tf.config.set_logical_device_configuration( gpus[0], [tf.config.LogicalDeviceConfiguration(memory_limit4096)] ) except RuntimeError as e: print(e)上面这段代码把 GPU 显存限制在 4GB从而避免自动占用全部显存导致系统卡死。报错三ImportError: DLL load failed while importing _pywrap_tensorflow_internal在 Windows 上这个问题多见于缺少 Microsoft Visual C Redistributable。安装 VC_redist.x64.exe 后重启再试大概率就好了。如果还不行就回到最基础的依赖自查确认当前环境内 numpy 版本是否兼容必要时升级或降级 numpypip install --upgrade numpy报错四Keras 相关属性找不到网上很多旧代码仍然用keras.backend、keras.optimizers这类写法新版 TensorFlow 把 Keras 内置后官方推荐使用tf.keras命名空间。如果碰到老的示例代码可以加一行兼容性调整但更建议直接按照新版 API 改写因为老代码的维护成本已经很高了。5. 我踩过的坑以及让环境更好用的小技巧这一节的内容不一定能在官方文档里查到都是我反复试错后的实操体会。每次环境出问题回顾这几个点能节省大量时间。5.1 “明明激活了环境还是 ImportError”的根子在哪我遇到过最诡异的情况在 VSCode 终端里 conda activate tf 成功python 命令显式指向 tf 环境的解释器但在 Python 交互环境里 import tensorflow 却报 ModuleNotFoundError。最后排查出来是因为 VSCode 的 Python 扩展自动选择了全局环境作为默认解释器而终端里的 python 命令被某个 .venv 目录下的解释器劫持了。这是个环境优先级问题。解决办法有三步在 VSCode 命令面板确认当前解释器是 tf。删除项目根目录下可能存在的.venv文件或pyvenv.cfg。重新加载窗口CtrlShiftP 输入 Reload Window。大多数“我的环境没毛病但代码找不到包”的问题最后都能归因到解释器路径错乱。与其反复重装 tensorflow不如先把解释器路径理清楚。5.2 VSCode 调试模式配置用 VSCode 调试 TensorFlow 代码时有一个值得提前配置的地方调试控制台里的 Python 路径。如果不明确指定调试会话可能启动全局解释器刚配好的环境又失效了。在.vscode/launch.json里写入{ version: 0.2.0, configurations: [ { name: Python: TensorFlow 环境, type: debugpy, request: launch, program: ${file}, console: integratedTerminal, python: ${command:python.interpreterPath} } ] }关键是python那一行它强制调试会话使用你在命令面板里选中的解释器。我在不同环境间切换调试时这一行起了很大作用。5.3 环境迁移换电脑别再从零配一遍如果你要把配好的环境搬到另一台电脑比如换了工作机或者帮同事配环境不需要从零敲一遍所有命令。先把环境导出conda activate tf conda env export environment.yaml在另一台机器上执行conda env create -f environment.yaml这个 yaml 文件里包含了所有依赖的具体版本号包括 pip 安装的包。整个环境的复现性非常好。我换电脑时就是靠这个文件二十分钟不到就恢复了完整环境。如果只是临时跑个小 demo不想要完整的环境副本也可以用 requirements.txt 方式导出 pip 包列表pip freeze requirements.txt但 requirements.txt 不会包含 conda 包的渠道信息所以在跨机器复现时效果不如 environment.yaml 稳定。5.4 日常运行的一些个人建议最后分享几个我日常使用 VSCode 跑 TensorFlow 时的习惯谈不上标准答案但确实帮我省了不少事。第一单独建一个scripts目录把环境检查脚本和训练脚本分开。检查脚本用于快速确认环境状态训练脚本专注于实际任务。时间久了你机器的环境总有被改乱的时候每次都要重新面对那种“以前能用现在不能用”的问题时先把检查脚本跑一遍问题定位就清晰了。第二训练脚本开头加一段环境信息输出把 Python 版本、TensorFlow 版本、物理设备都打出来。这样日志里能直接看到是谁在跑这次训练排查问题的时候不用反复猜测。第三不要在同一个环境里同时安装 TensorFlow 和 PyTorch哪怕网上有人声称这样没问题。两者的依赖存在冲突。实际选型时我是按项目需求分开建环境例如tf2环境专门跑 TensorFlowtorch环境专门跑 PyTorch互不干扰。第四定期用pip list --outdated检查包版本。但不要轻易升级 TensorFlow除非新版的 release note 明确修复了你遇到的那个问题。深度学习框架的依赖像多米诺骨牌牵一发而动全身。能用旧版本稳定跑就别折腾升级。如果在配置过程中走到某一步和教程对不上先停下来反问一句当前激活的环境是不是对的解释器是不是对的命令行终端和 VSCode 的 Python 扩展是不是指向同一个环境。这三个问题只要有一个答案是否定的后续所有步骤都会跟着错。环境搭建本身不复杂真正的复杂度在于版本之间的匹配关系。把这个关系梳理清楚剩下的只是按部就班执行而已。
返回列表