安装 TensorFlow 遇到的问题

最后修改:2022-11-20

安装 TensorFlow 遇到的问题

环境

  • 系统:Ubuntu 20.04 LTS
  • 虚拟环境:Anaconda

目标

  • 在 Anaconda 虚拟环境中能正常使用 TensorFlow
  • 可以使用 GPU 计算
  • 可以使用 TensorRT

问题 - 无法使用 GPU 计算

安装正确的 Build 版本

使用命令 conda install tensorflow 安装后,TensorFlow 已经可以使用了,但如果使用 API tf.test.gpu_device_name() 去查询 GPU 设备的名称,只会返回一个空字符串,没有正确找到 GPU 设备

出现这种情况的原因可能是 Anaconda 安装的 TensorFlow 就不支持 GPU,虽然谷歌官方在 2.0 版本已经合并了 CPU 版和 GPU 版的 TensorFlow,但 Anaconda 提供的包是由社区维护的版本,仍然是分开的。通过 conda search tensorflow 搜索可以看到,有 3 种 Build 版本:eigen、gpu、mkl,默认安装的可能是 mkl 版本

Anaconda 提供的 TensorFlow 包 Build 版本

如果想安装时指定某个 Build 版本,追加一个等号 = 即可,例如:

conda install tensorflow=2.8.2=gpu_py38h75b8afa_0

重编译的问题

使用 Anaconda 社区维护的 TensorFlow GPU 版本可能会出现从 PTX 到 JIT 的编译过程,类似提示信息 TensorFlow was not built with CUDA kernel binaries compatible with compute capability 5.0. CUDA kernels will be jit-compiled from PTX, which could take 30 minutes or longer 并且是每次启动都会来一遍,耗时几分钟到几十分钟不等,出现这种情况,可以尝试安装谷歌官方提供的版本,如果还存在,就只能选择从源码编译安装 TensorFlow

提示需要从 PTX 到 JIT 编译

安装官方提供的版本

官方提供的预编译版本需要使用 pip 安装,使用命令 pip install tensorflow 安装好后,默认使用 CPU,还是不能使用 GPU 计算,会提示类似 Could not load dynamic library 'libcudart.so.11.0' 的信息,这说明缺少了 CUDA 环境

未找到 GPU

按官方文档的说法,用 GPU 跑 TensorFlow 需要有:

  • 英伟达 GPU 驱动
  • CUDA Toolkit
  • CUPTI,这个是 CUDA 附带的
  • cuDNN

如果是在 Windows 平台,直接使用命令 conda install cudatoolkit cudnn 安装好 CUDA 和 cuDNN 就可以直接使用 GPU 计算了,并且不需要再额外安装 CUPTI。但在 Ubuntu 上,三个组件全部安装后,仍然会提示找不到 GPU。即使不使用社区维护的版本,切换到 nvidia channel 安装,也同样无法使用 GPU。

目前测试可行的方法,只能是将这些 CUDA 包都安装到操作系统中,毕竟按官方文档的说法,并不推荐使用 conda 管理 TensorFlow 的包。如果安装到系统中,使用 deb 包的话,CUPTI 就不用额外安装了,它会被 CUDA Toolkit 附带一起安装。

问题 - 安装 pycuda 失败

安装好 TensorRT 后,一般还会需要再安装 pycuda 包,因为有许多 TensorRT 示例会用到这个包。但使用 pip install pycuda 命令安装后,可能会编译失败,提示 ERROR: Could not build wheels for pycuda, which is required to install pyproject.toml-based projects,往上查找可以看到提示找不到 cuda.h 文件,这是因为之前的 CUDA 是安装在系统中的,在 conda 虚拟环境中安装的 pycuda 不会去系统中寻找,要解决这个问题,要么手动创建链接,要么干脆直接在虚拟环境中再安装一个 CUDA。

编译 pycuda 失败

安装 cudatoolkit 仍然会提示编译失败,英伟达提供了 cuda 和 cudatoolkit 两个包,安装 cuda 包才能解决编译报错的问题,可以用下面的命令,从 nvidia channel 安装 cuda 包:

conda install cuda -c nvidia

总结

  1. TensorFlow 相关的包,还是要尽可能用 pip 而不是 conda 去管理,官方并不推荐使用社区维护的版本
  2. Ubuntu 系统下,CUDA 相关的组件需要安装在系统中,TensorFlow 才能自动找到
  3. pycuda 默认在虚拟环境中寻找 CUDA,不会去系统中寻找
posted @ 2022-11-20 15:24  Asnelin  阅读(1789)  评论(0编辑  收藏  举报