ChrisKim
Do not go gentle into that good night.
颢天

Tensorflow 安装和 GPU 支持

最近开始学机器学习,折腾了下 Tensorflow 的安装方式,发现安装的时候还是有许多坑的,不同的方法也有许多优劣,在此做个笔记给大家分享一下。

首先,Tensorflow 官方提供了安装文档:https://www.tensorflow.org/install,不过里面只讲了 pip 安装和 Docker,本文会提到更多安装方法,可以看具体情况选择。

安装方式与对比

方法一:纯 pip 安装

简介

  • 上手难度:低
  • 维护难度:高
  • 推荐程度:低

Tensorflow 官方提供的方法之一就是直接 pip 安装,但我非常不建议这样安装。把不同项目需要的软件包全堆到一个环境里面,这样有非常大的概率会产生各种冲突报错,非常难以维护。

安装步骤

1. 确保有 Python 和 pip 环境

(截至 2023/5/32) Tensorflow 支持:

  • Python 3.6–3.9
  • Ubuntu 16.04 或更高版本
  • Windows 7 或更高版本

2. 使用 pip 安装 tensorflow 软件包

pip install tensorflow

3. 安装完成

方法二:virtualenv + pip 安装

简介

  • 上手难度:中
  • 维护难度:低
  • 推荐程度:中

virtualenv 是一个比较经典的 Python 环境管理器,它通过创建虚拟环境,将每个环境隔离起来,防止软件包互相干扰。所以我们可以把它应用到 Tensorflow 的安装当中,将它的环境隔离开来。

但是它相对于 Conda 这个 Python 环境管理器来说,还是有许多局限:

  • 不能切 Python 版本(只能用本机版本)
  • 每次都要运行脚本启动环境
  • 不能随便移动文件夹
  • 管理功能欠缺

安装步骤

1. 确保有 Python 和 pip 环境

Python 3.6–3.9

2. 安装 virtualenv

pip install virtualenv

(由于 virtualenv 是一个工具,建议装到全局 Python 环境中)

3. 新建虚拟环境

在虚拟环境需要放置的目录打开 Terminal,执行:

virtualenv <虚拟环境名>

(一般虚拟环境名起名为 venv 就行)

4. 启用虚拟环境

根据不同平台的不同 Terminal,选择不同的指令执行:

  • Windows 平台 CMD:.\venv\Script\activate.bat
  • Windows 平台 Powershell:.\venv\Script\activate.ps1
  • Windows 平台 Gitbash:source ./venv/Script/activate
  • Linux/macOS 平台 bash:source ./venv/bin/activate

启用后,命令行前面会多出一个括号,括号内为环境名,如:(venv)

4. 在虚拟环境内使用 pip 安装 tensorflow 软件包

启用虚拟环境后,该环境的软件包就是与外界隔离的了,直接 pip:

pip install tensorflow

5. 退出虚拟环境

如果使用完毕需要退出的话,使用:

deactivate

方法三:Conda 安装

简介

  • 上手难度:中
  • 维护难度:低
  • 推荐程度:高

Conda 是目前非常流行也非常强大的一个 Python 环境管理器,它的基本功能和上文的 virtualenv 一致,但是它有很多好用的额外特性。

安装步骤

1. 下载 Anaconda

前往 Anaconda 官网下载安装包:https://www.anaconda.com/download/

2. 安装 Anaconda

运行安装包,前面的设置都默认就行,最后一步需要注意,需要勾选将 Anaconda3 加入到 PATH 环境变量中(虽然上面注明了不建议,但是如果不加入环境变量,后续的使用会麻烦很多)

https://assets.zouht.com/img/blog/3214-02.webp

如果安装的时候忘记勾选环境变量,也可以手动添加以下五条:

https://assets.zouht.com/img/blog/3214-03.webp

3. 初始化 Conda

首先要初始化 conda,如果不初始化的话,虚拟环境启用了没反应:

conda init <shell>

shell 类型需要根据自己的运行的 shell 选择:[‘bash’, ‘cmd.exe’, ‘fish’, ‘powershell’, ‘tcsh’, ‘xonsh’, ‘zsh’]

4. 配置 Conda 下载源

由于 Conda 默认下载源在国外,如果不调整的话下载速度会非常缓慢(当然可以用魔法)

conda 配置文件储存在用户目录中:C:\Users\ChrisKim\<用户名>,使用文本编辑器中打开,添加下载镜像,这里选用的是清华大学开源镜像站

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

5. 创建新环境

使用以下命令创建名为 tf 的 Python 版本 3.8 的新环境:

conda create -n tf python=3.8

6. 启用 tf 环境

conda activate tf

启用后,命令行前面会多出一个括号,括号内为环境名,如:(tf)

7. 安装 tensorflow

在 conda 内,我们一般不直接用 pip 安装软件包,而是使用 conda 来安装:

conda install -c anaconda tensorflow

8. 退出虚拟环境

如果使用完毕需要退出的话,使用:

conda deactivate

方法四:Docker 安装

简介

  • 上手难度:高
  • 维护难度:低
  • 推荐程度:中

Tensorflow 官方推荐的第二个安装方法就是 Docker 容器了,使用 Docker 容器,你不需要配置任何东西,容器镜像已经配置好了。另外容器天然能够将环境隔离开来,因此也能防止软件包互相干扰。

不过容器作为一个新手接触较少的概念,并且涉及到很多指令操作,对于新手来说比较困难。各位视自己情况选择要不要用它。

本文的使用 docker 环境基于 Windows + WSL2 平台(会熟练用 Linux 的估计也不需要看这教程装 Docker)

安装步骤

1. 安装 WSL2 (Windows Subsystem for Linux 2)

另外,要使用 WSL2,需要满足 Windows 10 版本大于 2004 或 Windows 11.

安装 wsl 的方法可以参考微软官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/install

2. 安装 Docker Desktop

安装 Docker Desktop 并使用 WSL2 作为后端可以参考微软官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers

其实最新版的 Docker Desktop 在装好 wsl2 后已经可以直接安装并识别到 wsl2 了,因此直接去下载安装包安装就行了:https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe

3. 拉取 tensorflow 镜像

tensorflow 官方镜像位于:tensorflow/tensorflow,有如下 tag 可以选择(来源

标记说明
latestTensorFlow CPU 二进制映像的最新版本。(默认版本)
nightlyTensorFlow 映像的每夜版。(不稳定)
version指定 TensorFlow 二进制映像的版本,例如:2.1.0
develTensorFlow master 开发环境的每夜版。包含 TensorFlow 源代码。
custom-op用于开发 TF 自定义操作的特殊实验性映像。详见此处

每个基本标记都有会添加或更改功能的变体:

标记变体说明
tag-gpu支持 GPU 的指定标记版本。详见下文
tag-jupyter针对 Jupyter 的指定标记版本(包含 TensorFlow 教程笔记本)

对于我们来说,拉取 tensorflow/tensorflow:latest 就行了,如果需要支持 GPU 加速,可以拉取 tensorflow/tensorflow:latest-gpu,如果还需要内置 jupyter 笔记本,可以拉取 tensorflow/tensorflow:latest-gpu-jupyter.

具体的命令为:

docker pull tensorflow/tensorflow:latest

4. 创建新容器

如果是 CPU 版本,在 Terminal 中执行命令:

docker run -d -v tensorflow/tensorflow:latest --name tf

如果是 GPU 版本,需要给容器添加 GPU:

docker run --gpus all -d -v tensorflow/tensorflow-gpu:latest --name tf-gpu

如果有 jupyter,还需要映射笔记本目录和对应端口:

docker run --gpus all -d -v <宿主目录>:/tf/notebooks -p <宿主端口>:8888 tensorflow/tensorflow:latest-gpu-jupyter --name tf-gpu

宿主目录选取一个主机存储笔记本的地方,这样容器删除后数据不会丢失。

宿主端口选取一个空闲的端口,可以直接选择一样的 8888.

5. 进入容器

创建容器后,可以先使用 docker ps 查看一下容器列表,然后执行以下命令进入容器内的 shell:

docker exec -it <容器名/容器ID> bash

如果选择的镜像带有 jupyter,在宿主机浏览器访问 127.0.0.1:8888 即可进入笔记本(没错,WSL2 Docker 的端口是直接映射到宿主机的)

6. 容器操作

  • 启动容器:docker start <容器名/容器ID>
  • 关闭容器:docker stop <容器名/容器ID>
  • 删除容器:docker remove <容器名/容器ID>

GPU 支持

如果你的电脑有 Nvidia 显卡,那么可以通过 CUDA 加速 Tensorflow 的训练过程,我的 GTX1650 相比 i7-9750H 可以加速大概 5 倍,用显卡跑的话 CPU 也不会满载 100% 了,电脑也不会因为跑训练而卡顿。

不过要支持 GPU 加速的话,需要有额外配置,该部分主要讲的就是 GPU 的额外配置。

注:使用容器安装的话不需要这一步,官方镜像已经给你配置好了环境,但是你还是需要安装显卡驱动。

第一步:安装依赖驱动

根据 Tensorflow 官方文档:https://www.tensorflow.org/install/gpu,我们需要安装的依赖有:

  • NVIDIA 显卡驱动
  • NVIDIA CUDA 工具包
  • NVIDIA cuDNN 库
  • (可选) TensorRT

我们下面依次安装:

NVIDIA 显卡驱动

这个应该所有人都装过了,在此略去。不过附上官网下载页面:

https://www.nvidia.com/download/index.aspx

NVIDIA CUDA 工具包

首先进入官网下载页面:

https://developer.nvidia.com/cuda-downloads

根据自己的操作系统选择对应版本,对于 Windows,选择 exe(local) 下载安装包。

(如果使用的是 WSL2,需要在 Linux 栏目下找到 WSL-Ubuntu 版本)

下载后,执行安装器即可完成安装。

安装后,进入命令行输入以下编译器指令检查安装:

nvcc -V

如果有正确输出则成功安装,如:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Oct_12_20:54:10_Pacific_Daylight_Time_2020
Cuda compilation tools, release 11.1, V11.1.105
Build cuda_11.1.relgpu_drvr455TC455_06.29190527_0

如果有问题的话,可以去检查一下自己的环境变量是否有问题:

https://assets.zouht.com/img/blog/3214-04.webp

NVIDIA cuDNN 库

首先查看自己显卡的 CUDA 版本,在命令行中执行:nvidia-smi

在右上角即可找到版本号,例如:CUDA Version: 11.8

然后进入官网下载页面:

https://developer.nvidia.com/rdp/cudnn-archive

选择对应 CUDA 版本的 cuDNN 库,我选择的是最新的 v8.9.0. 展开列表后会有各个版本的,我们选择第一个 Windows 版本下载。

下载后得到一个 .zip 压缩包,将其解压得到以下文件结构:

cudnn-windows-x86_64-8.9.0.131_cuda11-archive
├─bin
├─include
└─lib
    └─x64

然后我们找到 CUDA 工具包的目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\<版本号>\,它的文件结构是:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
├─bin
├─compute-sanitizer
├─extras
├─include
├─lib
│  ├─Win32
│  └─x64
├─libnvvp
├─nvml
├─nvvm
├─src
└─tools

将 cuDNN 库根据文件结构一一对应地拷贝到 CUDA 工具包的目录里面即可。

这一步做完之后,记得重启一遍电脑。

第二步:安装 tensorflow

首先,对于现在使用的 Tensorflow 2,pip 的 tensorflow 软件包已经同时包含了 CPU 和 GPU 支持,不存在 Tensorflow 1.x 的 tensorflow-gpu 软件包了。因此,如果使用 pip 的话,直接安装 tensorflow 软件包。

但是这里面还是有坑,conda 的 tensorflow 软件包只包含了 CPU 版本的,而支持 GPU 版本的软件包为 tensorflow-gpu,因此如果使用 conda 的话,需要安装 tensorflow-gpu 软件包。

所以,正确的安装方式如下:

  • 对于使用纯 pip 或用 virtualenv + pip 的:pip install tensorflow
  • 对于使用 conda 的:启用虚拟环境后用 conda install tensorflow-gpu 安装

另外,tensorflow 2 支持的 Python 版本为 3.6~3.9,因此在创建 conda 环境时记得指定对应的版本。如果要使用最新的 tensorflow,就创建最新的 Python 版本:conda create -n tf python=3.9

第三步:测试 GPU 支持

使用 Python 运行以下代码检查 Tensorflow 是否正确识别到了 GPU:

from tensorflow.python.client import device_lib

if __name__ == "__main__":
    print(device_lib.list_local_devices())

如果输出的列表中有一个 device_type 为 CPU,有一个 device_type 为 GPU,则同时识别到了 CPU 和 GPU。一个正确的输出如下:

[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 5106970275042967080
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 9906946048
locality {
  bus_id: 1
  links {
  }
}
incarnation: 6050521277282801748
physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 4070, pci bus id: 0000:01:00.0, compute capability: 8.9"
]

可能出现的问题:AttributeError: module ‘numpy’ has no attribute ‘object’.

这个的原因是,自从 numpy 1.14 后,np.object 被废弃了,被改为了 object。而 tensorflow 还没有更新,导致与 numpy 的兼容问题。这个可以通过降级 numpy 解决:

conda install numpy==1.23.4

可能出现的问题:Could not locate zlibwapi.dll

有时候经过上面的检查没问题,但是训练的时候崩溃报错 Could not locate zlibwapi.dll,这个是因为没有装 zlib 库。

前往 zlib 官网下载对应的 dll 库:http://www.winimage.com/zLibDll/

选择 AMD64/Intel EM64T 版本的 zlib123dll.zip 下载,解压后找到 zlibwapi.dll 这个文件,放置到 CUDA 工具包的 bin 目录下即可。

(也可以解压后将整个文件夹目录添加到环境变量)

本文链接:https://www.zouht.com/3214.html
本文使用:CC BY-NC-SA 4.0 许可
# # #
首页      教程      Tensorflow 安装和 GPU 支持

发表回复

textsms
account_circle
email

颢天

Tensorflow 安装和 GPU 支持
最近开始学机器学习,折腾了下 Tensorflow 的安装方式,发现安装的时候还是有许多坑的,不同的方法也有许多优劣,在此做个笔记给大家分享一下。 首先,Tensorflow 官方提供了安装文档…
扫描二维码继续阅读
2023-06-01