基于 conda 的在 Win10 上从零开始搞一个 Tensorflow-gpu (2.6.0) 环境的操作记录 (2022.07)

目录

  • conda + Win10 --> Tensorflow-gpu (2.6.0) 记录
    • 0. miniconda 安装
    • 1. 用 conda install/create 创建开发环境
    • 2. cupti 安装
    • 3. nvcc & ptxas 安装
    • 后记

conda + Win10 --> Tensorflow-gpu (2.6.0) 记录

由于 Anaconda 以前的环境乱搞+臃肿, 打算卸载它并重新安装 miniconda, 并基于此安装全新的新版 Tensorflow-gpu 环境. 本教程基于 Windows 10, 只安装了 Nvidia 的显卡驱动(512.15) 打游戏要用, 安装 CUDA, CuDNN. 可能是目前最推荐的安装方式.

PS: 主动装完 CUDA, CuDNN 可能会少一两个报错, 但是会有额外的安装和配置且不能便捷切换版本.
Linux 用户情况不一样, 如果想解决版本冲突可以参考第一步.

0. miniconda 安装

由于 Anaconda 太庞大且实际上我们只用得上 conda 而已, 不需要那么多额外的东西, 所以此处只需要下载 100MB 都没有的 miniconda 即可. 最新版本的下载链接可以到:

  1. 官网地址, 从 Latest 中选即可
  2. 清华源, 已经按时间排序, 找文件名包含 latest 的即可:

安装时基本全默认, 除了最好不在默认安装目录下, 因为以后修改, 安装和升级包都需要超级管理员权限, 挺麻烦的要一直点确定.

由于为了防止冲突, 安装时默认 conda 并不加入到系统环境变量里面, 所以现在你的 Terminal 中是识别不到 conda 命令的. 此时点开 电脑左下角 Win 徽标 --> 所有应用 --> Anaconda Prompt (miniconda)(差不多名字的都有效) 会出来一个黑框框 Terminal, 输入命令

conda init

就完成了 miniconda 的安装, 这一步会在你系统中已有的 Terminal 的配置文件中加入一些配置.

为了下载包快一点, 此处还需要进行换源操作, 参见: 清华镜像站说明, 去修改 .condarc 文件即可.

Terminal 推荐使用 Windows Terminal, 会好看一点

1. 用 conda install/create 创建开发环境

由于 conda 检查依赖比较严格, 一个接一个安装核心组件可能会冲突:

Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: -
Found conflicts! Looking for incompatible packages.
This can take several minutes. Press CTRL-C to abort.
failed
UnsatisfiableError: The following specifications were found to be incompatible with each other:

几个核心组件(少量)的版本最好一起考虑. 你可以在创建完环境后直接一次性 install 多个包, 此处直接在新建环境时如此做:

conda create -n tf2 python tensorflow-gpu=2.6.0 cudatoolkit cudnn

其中 tf2 为自定义的环境名字, 后面跟着的就是你要安装的包, 有要优先满足的版本就在后面加 =2.6.0 这样的限制, 其余组件的版本会自动计算得到: python=3.9.12, cudatoolkit=11.3.1, cudnn=8.2.1 .

PS: 去掉 =2.6.0 时, 默认会安装 2.3.0, 也是可以的.
另外, 2.6.0 下 matplotlib装不上的, 冲突太多, 需要用宽松的 pip 安装

2. cupti 安装

如果已经额外装过 CUDA 或在 Linux 下很可能执行上一步就没啥问题了, 但我们其实现在还有 2 个组件缺失要解决. 如果装过了还有以下问, 应该是环境变量1没添加完毕, 添加路径至环境变量或者直复制相关 dll 到 CUDA 主要组件库目录下即可.

现在其实 GPU 的训练已经可以进行了, 但 tensorboard, savemodel 等写入文件的组件还调用不了, 这个问题在 2.3.0 及以下版本可能不会发生. 此时需要以下命令:

conda install -c nvidia cuda-cupti

其中 -c nvidia 表示从英伟达官方源中查找, 这个东西在官方源和清华源中都没有的. 这里有2 个坑, 一是 cupti 安装路径不正常, 不能被 CUDA 组件找到, 二是其默认名字不对, 训练时会有以下报错:

2022-07-03 16:47:32.007494: E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1666] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.
2022-07-03 16:46:49.847834: E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1757] function cupti_interface_->Finalize()failed with error CUPTI could not be loaded or symbol could not be found.

安装完毕后, 去路径 miniconda安装文件夹\envs\tf2\Lib 下找到 cupti64_2022xxxx.dll, 改名为 cupti64_113.dll, 这里 113 表示 cudatoolkit 的版本为 11.3.x. 并且把它和文件 cupti.lib (顺手) 移动到路径 miniconda安装路径\envs\tf2\Library\bin 内(NVidia 真不靠谱). 可以看到, 上一步安装的 cudnn_xxx.dll, cudart64_110.dll 等都在这儿.

此时还剩最后一个报错.

3. nvcc & ptxas 安装

由于我不进行 CUDA 的自行安装, 所以上一步之后, 有可能还会有如下报错:

2022-07-03 16:53:31.419884: W tensorflow/stream_executor/gpu/asm_compiler.cc:77] Couldn’t get ptxas version string: Internal: Couldn’t invoke ptxas.exe --version
2022-07-03 16:53:31.423271: E tensorflow/core/platform/windows/subprocess.cc:287] Call to CreateProcess failed. Error code: 2
2022-07-03 16:53:31.423934: W tensorflow/stream_executor/gpu/redzone_allocator.cc:314] Internal: Failed to launch ptxas
Relying on driver to perform ptx compilation.
Modify $PATH to customize ptxas location.

也是环境变量问题找不到组件, 这个解决方案和上一步一样2:

conda install -c nvidia cuda-nvcc

它安装了 nvcc.exe 之外, 还会安装 ptxas.exe, 他们的路径在这里: miniconda安装文件夹\envs\tf2\bin.

后记

上述操作之后, 一切正常工作.

如果一开始只为了装 Tensorflow-gpu=2.3.0 可能会少一些报错, 我在 Linux 下只进行了第 1 步就OK了; 因为额外装 CUDA 似乎也有奇怪的报错, 所以总体来说还是利用 conda 安装比较方便, 还能安装不同的 CUDA 版本. 此外, 可以再代码中加入

import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = '2'  # Errors ONLY

来把烦人的日志抑制掉 :
基于 conda 的在 Win10 上从零开始搞一个 Tensorflow-gpu (2.6.0) 环境的操作记录 (2022.07)_第1张图片


  1. https://stackoverflow.com/questions/56860180/tensorflow-cuda-cupti-error-cupti-could-not-be-loaded-or-symbol-could-not-be ↩︎

  2. https://github.com/google/jax/discussions/6843#discussioncomment-2721688 ↩︎

你可能感兴趣的:(anaconda,tensorflow,conda,python)