寫在前面
最近準(zhǔn)備嘗試跑一跑 TensorFlow GPU 訓(xùn)練模型,平時(shí)開發(fā)用的 MBP,無賴顯卡是 AMD 只支持 CPU 訓(xùn)練,但恰有閑置 Win10 筆記本電腦一臺(tái)顯卡 NVIDIA 支持 CUDA? 。
Tensorflow GPU 訓(xùn)練加速需要支持 CUDA? 的 GPU 顯卡,這里提到的 CUDA 指的是,是 NVIDIA 研發(fā)的一種并行計(jì)算平臺(tái)和編程模型,它可以通過利用 GPU 的處理能力,可大幅提升計(jì)算性能的技術(shù),更多查看相關(guān)內(nèi)容。
環(huán)境搭建過程整體比較簡(jiǎn)單,查找下載相關(guān)工具包需要搗騰一會(huì)。
1 硬件條件
首先查看自己的顯卡型號(hào)是否滿足條件,TensorFlow 官方文檔硬件要求提到了,CUDA? 架構(gòu)為 3.5、3.7、5.2、6.0、6.1、7.0 或更高的 NVIDIA? GPU 卡。
1.1 查看顯卡型號(hào)
第一步查看自己的顯卡型號(hào),進(jìn)入 NVIDIA 控制面板,點(diǎn)擊系統(tǒng)信息。
顯卡型號(hào)為 GeForce GTX 850M,電腦比較老很早前的。
1.2 查詢顯卡是否支持 CUDA?
顯卡型號(hào)為 GeForce GTX 850M,點(diǎn)擊查看支持 CUDA? 的 GPU 卡列表,查看顯卡型號(hào)是否在支持的列表里面。
計(jì)算能力為 5,顯卡支持 CUDA ,接下來查看 CUDA 驅(qū)動(dòng)版本,NVIDIA 控制面板,系統(tǒng)信息的組件里面。
版本為 11.1.96,在 TensorFlow 支持 CUDA 驅(qū)動(dòng)版本范圍上,如果版本過低可查看下面提到的軟件下載進(jìn)行安裝升級(jí)最新驅(qū)動(dòng)。
2 軟件下載
2.1 下載安裝 NVIDIA? GPU 驅(qū)動(dòng)程序
輸入信息查詢顯卡驅(qū)動(dòng),下載安裝最新的 NVIDIA? GPU 驅(qū)動(dòng)程序,方便后面支持 CUDA Toolkit 安裝 10.1 版本,CUDA Toolkit 10.1 需要驅(qū)動(dòng)版本 418.x 或更高版本。
版本號(hào)為 456.71,滿足要求,然后下載下來后安裝驅(qū)動(dòng)。
2.2 下載安裝 CUDA? Toolkit
CUDA 工具包提供了用于創(chuàng)建高性能GPU加速應(yīng)用程序的開發(fā)環(huán)境。TensorFlow(TensorFlow 2.1.0 及更高版本)支持 CUDA? 10.1 的 CUDA? Toolkit 。
選擇臨時(shí)文件目錄,這里選擇了默認(rèn)設(shè)置。
然后一直下一步,直到這里,如果電腦上面沒有安裝 Visual Studio 會(huì)提示你安裝 Visual Studio,如果后續(xù)有打算從源碼構(gòu)建 Tensorflow,則需要安裝,具體安裝內(nèi)容可查看 在 Windows 環(huán)境中從源代碼構(gòu)建。
安裝完成之后,會(huì)自動(dòng)添加了幾個(gè)環(huán)境變量到系統(tǒng)中,打開終端里面輸入 nvcc -V
驗(yàn)證安裝結(jié)果。
2.3 下載 cuDNN SDK 7.6
cuDNN 是一個(gè) GPU 加速的深度神經(jīng)網(wǎng)絡(luò)庫(kù),下載 cuDNN SDK 需要注冊(cè) NVIDIA Developer Program,進(jìn)入下載頁面后選擇 CUDA 10.1 的 cuDNN 7.6 版本。
下載成功之后將其壓縮包解壓,拷貝放到 CUDA 目錄 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\
下面,這里拷貝是指將這三個(gè)目錄下面的文件拷貝放入到 CUDA v10.1 對(duì)應(yīng)的目錄里面。
2.4 TensorRT 6.0 (可選)
用于可縮短用某些模型進(jìn)行推斷的延遲時(shí)間并提高吞吐量,可選擇 Zip 方式安裝,這里可選安裝。
3 安裝 Anaconda
使用 Anaconda 通過方便管理包依賴問題,,如果覺得 Anaconda 占用磁盤空間過大可以使用 miniconda,平時(shí)開發(fā)電腦上用的 miniconda,關(guān)于miniconda 安裝使用可點(diǎn)擊這個(gè)。
3.1 下載 Anaconda
- 從官網(wǎng)下載:https://www.continuum.io/downloads 官網(wǎng)速度比較慢,不太推薦。
- 從清華鏡像下載:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
3.2 安裝 Anaconda
安裝過程也比較簡(jiǎn)單,需要注意以下兩個(gè)地方。
Anaconda 安裝使用后占有磁盤空間比較大,如果 C 盤空間有限不推薦安裝在 C盤。
下面有兩個(gè)選擇,第一個(gè)是將 Anaconda 添加到環(huán)境變量中,如果電腦上之前安裝了 Anaconda 的另一個(gè)版本軟件會(huì)影響 Anaconda 的使用,添加到環(huán)境變量的好處是可以直接打開終端執(zhí)行相關(guān)命令管理包,如果不添加到環(huán)境變量也可以在 windows 的開始菜單里面找到 Anaconda Prompt ,然后在打開的終端上執(zhí)行相關(guān)命令管理包,所以這里可以不添加到系統(tǒng)環(huán)境變量。
第二個(gè)是將 Anaconda 的 python 3.7 版本設(shè)置成我電腦上默認(rèn)的 python,這樣你的 IDE 等編輯器會(huì)檢測(cè)到這個(gè)版本,方便后面在 IDE 調(diào)試代碼的時(shí)候可以用到這個(gè)版本,如果之前電腦上有裝過 python 這里可根據(jù)你的情況適當(dāng)選擇。
3.3 配置 Anaconda
Anaconda 官方的數(shù)據(jù)包鏡像,下載比較緩慢,可以考慮用清華的鏡像 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
將新的鏡像地址配置到 .condarc
文件,配置鏡像內(nèi)容可以查看 Anaconda 清華鏡像使用幫助。
4 測(cè)試
4.1 安裝 TensorFlow
打開安裝好的 Anaconda Navigator, 創(chuàng)建用于測(cè)試 tensorflow-gpu 虛擬環(huán)境。
需要注意的是,如果你用 pip 安裝官方發(fā)布的 TensorFlow ,可以直接安裝 tensorflow 包即可,即 pip install --upgrade tensorflow
,因?yàn)楣俜綄?duì)于 TensorFlow 1.x,CPU 和 GPU 軟件包是分開的,而 2.x 將其打包在一起的,另外 2.x GPU 軟件包也有發(fā)布的,也可以 pip install --upgrade tensorflow-gpu
安裝 GPU 包。
在使用 conda 安裝時(shí), Anaconda Cloud 官方把 TensorFlow 2.x CPU 和 GPU 軟件包是拆分了的,應(yīng)該是為了減小包安裝體積。
使用 conda 安裝 tensorflow-gpu,在輸入欄輸入 tensorflow 選擇 tensorflow-gpu 點(diǎn)擊 Apply 即可。
4.2 運(yùn)行代碼測(cè)試安裝結(jié)果
打開當(dāng)前環(huán)境的終端或打開 JupytarLab 或者 Notebook 運(yùn)行以下代碼。
import tensorflow as tf
from tensorflow.python.client import device_lib
// 打印已有的 GPU
print(tf.config.list_physical_devices('GPU'))
// 打印 GPU 設(shè)備名稱
print(tf.test.gpu_device_name())
// 打印電腦上可以用于計(jì)算的設(shè)備
print(device_lib.list_local_devices())
在 JupytarLab 運(yùn)行結(jié)果為
打印出來了可用于計(jì)算的設(shè)備有 CPU 與GPU,并分別打印出它們的信息及 GPU 計(jì)算能力,安裝成功之后,接下來就可以跑代碼訓(xùn)練神經(jīng)元網(wǎng)絡(luò)了。
4.3 一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)測(cè)試
最后來跑一跑常見的一個(gè)入門 Hellow World DEMO,根據(jù)一個(gè)簡(jiǎn)單的公式和構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò),簡(jiǎn)單預(yù)測(cè)房屋的價(jià)格。
import tensorflow as tf
import numpy as np
from tensorflow import keras
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
xs = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], dtype=float)
ys = np.array([5.0, 6.5, 8.0, 9.5, 11.0, 12.5], dtype=float)
model.fit(xs, ys, epochs=1000)
print(model.predict([7.0]))
假如房子的定價(jià)很簡(jiǎn)單,如果一個(gè)帶臥室的房子是 15 萬 + 35 萬,也就是一間帶主臥的房子 50 萬,兩間臥室的房子 65 萬,注此類推。
輸入 6 條數(shù)據(jù),預(yù)測(cè) 7 間臥室的房子多少錢,這里把單位縮小,方便神經(jīng)元網(wǎng)絡(luò)對(duì)數(shù)據(jù)的處理,輸入數(shù)據(jù) 1 代表一個(gè)帶臥室的房子,輸出 5,表示 50 萬。
訓(xùn)練 1000 次,預(yù)測(cè)運(yùn)行結(jié)果部分截圖如下。
參考鏈接
原文首發(fā)地址 https://github.com/liuvigongzuoshi/blog