Tensorflow 安裝和 GPU 支持
最近開始學(xué)機(jī)器學(xué)習(xí),折騰了下 Tensorflow 的安裝方式,發(fā)現(xiàn)安裝的時(shí)候還是有許多坑的,不同的方法也有許多優(yōu)劣,在此做個(gè)筆記給大家分享一下。
首先,Tensorflow 官方提供了安裝文檔:https://www.tensorflow.org/install,不過(guò)里面只講了 pip 安裝和 Docker,本文會(huì)提到更多安裝方法,可以看具體情況選擇。
本文轉(zhuǎn)自我的個(gè)人博客
原文鏈接:https://www.zouht.com/3214.html
本文使用:CC BY-NC-SA 4.0 許可
1. 安裝方式與對(duì)比
方法一:純 pip 安裝
簡(jiǎn)介
上手難度:低
維護(hù)難度:高
推薦程度:低
Tensorflow 官方提供的方法之一就是直接 pip 安裝,但我非常不建議這樣安裝。把不同項(xiàng)目需要的軟件包全堆到一個(gè)環(huán)境里面,這樣有非常大的概率會(huì)產(chǎn)生各種沖突報(bào)錯(cuò),非常難以維護(hù)。
安裝步驟
1.?確保有 Python 和 pip 環(huán)境
(截至 2023/5/32) Tensorflow 支持:
Python 3.6–3.9
Ubuntu 16.04 或更高版本
Windows 7 或更高版本
2.?使用 pip 安裝 tensorflow 軟件包
pip install tensorflow
3.?安裝完成
方法二:virtualenv + pip 安裝
簡(jiǎn)介
上手難度:中
維護(hù)難度:低
推薦程度:中
virtualenv 是一個(gè)比較經(jīng)典的 Python 環(huán)境管理器,它通過(guò)創(chuàng)建虛擬環(huán)境,將每個(gè)環(huán)境隔離起來(lái),防止軟件包互相干擾。所以我們可以把它應(yīng)用到 Tensorflow 的安裝當(dāng)中,將它的環(huán)境隔離開來(lái)。
但是它相對(duì)于 Conda 這個(gè) Python 環(huán)境管理器來(lái)說(shuō),還是有許多局限:
不能切 Python 版本(只能用本機(jī)版本)
每次都要運(yùn)行腳本啟動(dòng)環(huán)境
不能隨便移動(dòng)文件夾
管理功能欠缺
安裝步驟
1.?確保有 Python 和 pip 環(huán)境
Python 3.6–3.9
2.?安裝 virtualenv
pip install virtualenv
(由于 virtualenv 是一個(gè)工具,建議裝到全局 Python 環(huán)境中)
3.?新建虛擬環(huán)境
在虛擬環(huán)境需要放置的目錄打開 Terminal,執(zhí)行:
virtualenv <虛擬環(huán)境名>
(一般虛擬環(huán)境名起名為 venv 就行)
4.?啟用虛擬環(huán)境
根據(jù)不同平臺(tái)的不同 Terminal,選擇不同的指令執(zhí)行:
Windows 平臺(tái) CMD:
.\venv\Script\activate.bat
Windows 平臺(tái) Powershell:
.\venv\Script\activate.ps1
Windows 平臺(tái) Gitbash:
source ./venv/Script/activate
Linux/macOS 平臺(tái) bash:
source ./venv/bin/activate
啟用后,命令行前面會(huì)多出一個(gè)括號(hào),括號(hào)內(nèi)為環(huán)境名,如:(venv)
4.?在虛擬環(huán)境內(nèi)使用 pip 安裝 tensorflow 軟件包
啟用虛擬環(huán)境后,該環(huán)境的軟件包就是與外界隔離的了,直接 pip:
pip install tensorflow
5.?退出虛擬環(huán)境
如果使用完畢需要退出的話,使用:
deactivate
方法三:Conda 安裝
簡(jiǎn)介
上手難度:中
維護(hù)難度:低
推薦程度:高
Conda 是目前非常流行也非常強(qiáng)大的一個(gè) Python 環(huán)境管理器,它的基本功能和上文的 virtualenv 一致,但是它有很多好用的額外特性。
安裝步驟
1.?下載 Anaconda
前往 Anaconda 官網(wǎng)下載安裝包:https://www.anaconda.com/download/
2.?安裝 Anaconda
運(yùn)行安裝包,前面的設(shè)置都默認(rèn)就行,最后一步需要注意,需要勾選將 Anaconda3 加入到 PATH 環(huán)境變量中(雖然上面注明了不建議,但是如果不加入環(huán)境變量,后續(xù)的使用會(huì)麻煩很多)

如果安裝的時(shí)候忘記勾選環(huán)境變量,也可以手動(dòng)添加以下五條:

3.?初始化 Conda
首先要初始化 conda,如果不初始化的話,虛擬環(huán)境啟用了沒(méi)反應(yīng):
conda init <shell>
shell 類型需要根據(jù)自己的運(yùn)行的 shell 選擇:[‘bash’, ‘cmd.exe’, ‘fish’, ‘powershell’, ‘tcsh’, ‘xonsh’, ‘zsh’]
4.?配置 Conda 下載源
由于 Conda 默認(rèn)下載源在國(guó)外,如果不調(diào)整的話下載速度會(huì)非常緩慢(當(dāng)然可以用魔法)
conda 配置文件儲(chǔ)存在用戶目錄中:C:\Users\ChrisKim\<用戶名>
,使用文本編輯器中打開,添加下載鏡像,這里選用的是清華大學(xué)開源鏡像站:
5.?創(chuàng)建新環(huán)境
使用以下命令創(chuàng)建名為 tf 的 Python 版本 3.8 的新環(huán)境:
conda create -n tf python=3.8
6.?啟用 tf 環(huán)境
conda activate tf
啟用后,命令行前面會(huì)多出一個(gè)括號(hào),括號(hào)內(nèi)為環(huán)境名,如:(tf)
7.?安裝 tensorflow
在 conda 內(nèi),我們一般不直接用 pip 安裝軟件包,而是使用 conda 來(lái)安裝:
conda install -c anaconda tensorflow
8.?退出虛擬環(huán)境
如果使用完畢需要退出的話,使用:
conda deactivate
方法四:Docker 安裝
簡(jiǎn)介
上手難度:高
維護(hù)難度:低
推薦程度:中
Tensorflow 官方推薦的第二個(gè)安裝方法就是 Docker 容器了,使用 Docker 容器,你不需要配置任何東西,容器鏡像已經(jīng)配置好了。另外容器天然能夠?qū)h(huán)境隔離開來(lái),因此也能防止軟件包互相干擾。
不過(guò)容器作為一個(gè)新手接觸較少的概念,并且涉及到很多指令操作,對(duì)于新手來(lái)說(shuō)比較困難。各位視自己情況選擇要不要用它。
本文的使用 docker 環(huán)境基于 Windows + WSL2 平臺(tái)(會(huì)熟練用 Linux 的估計(jì)也不需要看這教程裝 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
其實(shí)最新版的 Docker Desktop 在裝好 wsl2 后已經(jīng)可以直接安裝并識(shí)別到 wsl2 了,因此直接去下載安裝包安裝就行了:https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe
3.?拉取 tensorflow 鏡像
tensorflow 官方鏡像位于:tensorflow/tensorflow,有如下 tag 可以選擇(來(lái)源)

每個(gè)基本標(biāo)記都有會(huì)添加或更改功能的變體:

對(duì)于我們來(lái)說(shuō),拉取?tensorflow/tensorflow:latest
?就行了,如果需要支持 GPU 加速,可以拉取?tensorflow/tensorflow:latest-gpu
,如果還需要內(nèi)置 jupyter 筆記本,可以拉取?tensorflow/tensorflow:latest-gpu-jupyter
.
具體的命令為:
docker pull tensorflow/tensorflow:latest
4.?創(chuàng)建新容器
如果是 CPU 版本,在 Terminal 中執(zhí)行命令:
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,還需要映射筆記本目錄和對(duì)應(yīng)端口:
docker run --gpus all -d -v <宿主目錄>:/tf/notebooks -p <宿主端口>:8888 tensorflow/tensorflow:latest-gpu-jupyter --name tf-gpu
宿主目錄選取一個(gè)主機(jī)存儲(chǔ)筆記本的地方,這樣容器刪除后數(shù)據(jù)不會(huì)丟失。
宿主端口選取一個(gè)空閑的端口,可以直接選擇一樣的 8888.
5.?進(jìn)入容器
創(chuàng)建容器后,可以先使用?docker ps
?查看一下容器列表,然后執(zhí)行以下命令進(jìn)入容器內(nèi)的 shell:
docker exec -it <容器名/容器ID> bash
如果選擇的鏡像帶有 jupyter,在宿主機(jī)瀏覽器訪問(wèn) 127.0.0.1:8888 即可進(jìn)入筆記本(沒(méi)錯(cuò),WSL2 Docker 的端口是直接映射到宿主機(jī)的)
6.?容器操作
啟動(dòng)容器:
docker start <容器名/容器ID>
關(guān)閉容器:
docker stop <容器名/容器ID>
刪除容器:
docker remove <容器名/容器ID>
2. GPU 支持
如果你的電腦有 Nvidia 顯卡,那么可以通過(guò) CUDA 加速 Tensorflow 的訓(xùn)練過(guò)程,我的 GTX1650 相比 i7-9750H 可以加速大概 5 倍,用顯卡跑的話 CPU 也不會(huì)滿載 100% 了,電腦也不會(huì)因?yàn)榕苡?xùn)練而卡頓。
不過(guò)要支持 GPU 加速的話,需要有額外配置,該部分主要講的就是 GPU 的額外配置。
注:使用容器安裝的話不需要這一步,官方鏡像已經(jīng)給你配置好了環(huán)境,但是你還是需要安裝顯卡驅(qū)動(dòng)。
第一步:安裝依賴驅(qū)動(dòng)
根據(jù) Tensorflow 官方文檔:https://www.tensorflow.org/install/gpu,我們需要安裝的依賴有:
NVIDIA 顯卡驅(qū)動(dòng)
NVIDIA CUDA 工具包
NVIDIA cuDNN 庫(kù)
(可選) TensorRT
我們下面依次安裝:
NVIDIA 顯卡驅(qū)動(dòng)
這個(gè)應(yīng)該所有人都裝過(guò)了,在此略去。不過(guò)附上官網(wǎng)下載頁(yè)面:
https://www.nvidia.com/download/index.aspx
NVIDIA CUDA 工具包
首先進(jìn)入官網(wǎng)下載頁(yè)面:
https://developer.nvidia.com/cuda-downloads
根據(jù)自己的操作系統(tǒng)選擇對(duì)應(yīng)版本,對(duì)于 Windows,選擇 exe(local) 下載安裝包。
(如果使用的是 WSL2,需要在 Linux 欄目下找到 WSL-Ubuntu 版本)
下載后,執(zhí)行安裝器即可完成安裝。
安裝后,進(jìn)入命令行輸入以下編譯器指令檢查安裝:
nvcc -V
如果有正確輸出則成功安裝,如:
如果有問(wèn)題的話,可以去檢查一下自己的環(huán)境變量是否有問(wèn)題:

NVIDIA cuDNN 庫(kù)
首先查看自己顯卡的 CUDA 版本,在命令行中執(zhí)行:nvidia-smi
在右上角即可找到版本號(hào),例如:CUDA Version: 11.8
然后進(jìn)入官網(wǎng)下載頁(yè)面:
https://developer.nvidia.com/rdp/cudnn-archive
選擇對(duì)應(yīng) CUDA 版本的 cuDNN 庫(kù),我選擇的是最新的 v8.9.0. 展開列表后會(huì)有各個(gè)版本的,我們選擇第一個(gè) Windows 版本下載。
下載后得到一個(gè) .zip 壓縮包,將其解壓得到以下文件結(jié)構(gòu):
然后我們找到 CUDA 工具包的目錄:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\<版本號(hào)>\
,它的文件結(jié)構(gòu)是:
將 cuDNN 庫(kù)根據(jù)文件結(jié)構(gòu)一一對(duì)應(yīng)地拷貝到 CUDA 工具包的目錄里面即可。
這一步做完之后,記得重啟一遍電腦。
第二步:安裝 tensorflow
首先,對(duì)于現(xiàn)在使用的 Tensorflow 2,pip 的?tensorflow
?軟件包已經(jīng)同時(shí)包含了 CPU 和 GPU 支持,不存在 Tensorflow 1.x 的?tensorflow-gpu
?軟件包了。因此,如果使用 pip 的話,直接安裝?tensorflow
?軟件包。
但是這里面還是有坑,conda 的?tensorflow
?軟件包只包含了 CPU 版本的,而支持 GPU 版本的軟件包為?tensorflow-gpu
,因此如果使用 conda 的話,需要安裝?tensorflow-gpu
?軟件包。
所以,正確的安裝方式如下:
對(duì)于使用純 pip 或用 virtualenv + pip 的:
pip install tensorflow
對(duì)于使用 conda 的:?jiǎn)⒂锰摂M環(huán)境后用?
conda install tensorflow-gpu
?安裝
另外,tensorflow 2 支持的 Python 版本為 3.6~3.9,因此在創(chuàng)建 conda 環(huán)境時(shí)記得指定對(duì)應(yīng)的版本。如果要使用最新的 tensorflow,就創(chuàng)建最新的 Python 版本:conda create -n tf python=3.9
第三步:測(cè)試 GPU 支持
使用 Python 運(yùn)行以下代碼檢查 Tensorflow 是否正確識(shí)別到了 GPU:
如果輸出的列表中有一個(gè) device_type 為 CPU,有一個(gè) device_type 為 GPU,則同時(shí)識(shí)別到了 CPU 和 GPU。一個(gè)正確的輸出如下:
可能出現(xiàn)的問(wèn)題:AttributeError: module ‘numpy’ has no attribute ‘object’.
這個(gè)的原因是,自從 numpy 1.14 后,np.object 被廢棄了,被改為了 object。而 tensorflow 還沒(méi)有更新,導(dǎo)致與 numpy 的兼容問(wèn)題。這個(gè)可以通過(guò)降級(jí) numpy 解決:
conda install numpy==1.23.4
可能出現(xiàn)的問(wèn)題:Could not locate zlibwapi.dll
有時(shí)候經(jīng)過(guò)上面的檢查沒(méi)問(wèn)題,但是訓(xùn)練的時(shí)候崩潰報(bào)錯(cuò) Could not locate zlibwapi.dll,這個(gè)是因?yàn)闆](méi)有裝 zlib 庫(kù)。
前往 zlib 官網(wǎng)下載對(duì)應(yīng)的 dll 庫(kù):http://www.winimage.com/zLibDll/
選擇 AMD64/Intel EM64T?版本的 zlib123dll.zip 下載,解壓后找到 zlibwapi.dll 這個(gè)文件,放置到 CUDA 工具包的 bin 目錄下即可。
(也可以解壓后將整個(gè)文件夾目錄添加到環(huán)境變量)