寫(xiě)在前面
最近準(zhǔn)備嘗試跑一跑 TensorFlow GPU 訓(xùn)練模型,平時(shí)開(kāi)發(fā)用的 MBP障贸,無(wú)賴(lài)顯卡是 AMD 只支持 CPU 訓(xùn)練错森,但恰有閑置 Win10 筆記本電腦一臺(tái)顯卡 NVIDIA 支持 CUDA? 。
Tensorflow GPU 訓(xùn)練加速需要支持 CUDA? 的 GPU 顯卡篮洁,這里提到的 CUDA 指的是涩维,是 NVIDIA 研發(fā)的一種并行計(jì)算平臺(tái)和編程模型,它可以通過(guò)利用 GPU 的處理能力嘀粱,可大幅提升計(jì)算性能的技術(shù)激挪,更多查看相關(guān)內(nèi)容。
環(huán)境搭建過(guò)程整體比較簡(jiǎn)單锋叨,查找下載相關(guān)工具包需要搗騰一會(huì)垄分。
1 硬件條件
首先查看自己的顯卡型號(hào)是否滿(mǎn)足條件,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 查詢(xún)顯卡是否支持 CUDA?
顯卡型號(hào)為 GeForce GTX 850M,點(diǎn)擊查看支持 CUDA? 的 GPU 卡列表泛领,查看顯卡型號(hào)是否在支持的列表里面荒吏。
計(jì)算能力為 5,顯卡支持 CUDA 渊鞋,接下來(lái)查看 CUDA 驅(qū)動(dòng)版本绰更,NVIDIA 控制面板,系統(tǒng)信息的組件里面锡宋。
版本為 11.1.96儡湾,在 TensorFlow 支持 CUDA 驅(qū)動(dòng)版本范圍上,如果版本過(guò)低可查看下面提到的軟件下載進(jìn)行安裝升級(jí)最新驅(qū)動(dòng)员辩。
2 軟件下載
2.1 下載安裝 NVIDIA? GPU 驅(qū)動(dòng)程序
輸入信息查詢(xún)顯卡驅(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,滿(mǎn)足要求宋税,然后下載下來(lái)后安裝驅(qū)動(dòng)摊崭。
2.2 下載安裝 CUDA? Toolkit
CUDA 工具包提供了用于創(chuàng)建高性能GPU加速應(yīng)用程序的開(kāi)發(fā)環(huán)境。TensorFlow(TensorFlow 2.1.0 及更高版本)支持 CUDA? 10.1 的 CUDA? Toolkit 杰赛。
選擇臨時(shí)文件目錄呢簸,這里選擇了默認(rèn)設(shè)置。
然后一直下一步乏屯,直到這里根时,如果電腦上面沒(méi)有安裝 Visual Studio 會(huì)提示你安裝 Visual Studio,如果后續(xù)有打算從源碼構(gòu)建 Tensorflow辰晕,則需要安裝蛤迎,具體安裝內(nèi)容可查看 在 Windows 環(huán)境中從源代碼構(gòu)建。
安裝完成之后含友,會(huì)自動(dòng)添加了幾個(gè)環(huán)境變量到系統(tǒng)中替裆,打開(kāi)終端里面輸入 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)入下載頁(yè)面后選擇 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 通過(guò)方便管理包依賴(lài)問(wèn)題,,如果覺(jué)得 Anaconda 占用磁盤(pán)空間過(guò)大可以使用 miniconda逗威,平時(shí)開(kāi)發(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
安裝過(guò)程也比較簡(jiǎn)單使套,需要注意以下兩個(gè)地方罐呼。
Anaconda 安裝使用后占有磁盤(pán)空間比較大,如果 C 盤(pán)空間有限不推薦安裝在 C盤(pán)侦高。
下面有兩個(gè)選擇嫉柴,第一個(gè)是將 Anaconda 添加到環(huán)境變量中,如果電腦上之前安裝了 Anaconda 的另一個(gè)版本軟件會(huì)影響 Anaconda 的使用奉呛,添加到環(huán)境變量的好處是可以直接打開(kāi)終端執(zhí)行相關(guān)命令管理包计螺,如果不添加到環(huán)境變量也可以在 windows 的開(kāi)始菜單里面找到 Anaconda Prompt ,然后在打開(kāi)的終端上執(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è)版本陈轿,如果之前電腦上有裝過(guò) 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
打開(kāi)安裝好的 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 軟件包是分開(kāi)的莽囤,而 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é)果
打開(kāi)當(dāng)前環(huán)境的終端或打開(kāi) 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è)備名稱(chēng)
print(tf.test.gpu_device_name())
// 打印電腦上可以用于計(jì)算的設(shè)備
print(device_lib.list_local_devices())
在 JupytarLab 運(yùn)行結(jié)果為
打印出來(lái)了可用于計(jì)算的設(shè)備有 CPU 與GPU,并分別打印出它們的信息及 GPU 計(jì)算能力蔚叨,安裝成功之后床蜘,接下來(lái)就可以跑代碼訓(xùn)練神經(jīng)元網(wǎng)絡(luò)了。
4.3 一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)測(cè)試
最后來(lái)跑一跑常見(jiàn)的一個(gè)入門(mén) 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 萬(wàn) + 35 萬(wàn)丹擎,也就是一間帶主臥的房子 50 萬(wàn),兩間臥室的房子 65 萬(wàn)歇父,注此類(lèi)推蒂培。
輸入 6 條數(shù)據(jù),預(yù)測(cè) 7 間臥室的房子多少錢(qián)庶骄,這里把單位縮小毁渗,方便神經(jīng)元網(wǎng)絡(luò)對(duì)數(shù)據(jù)的處理,輸入數(shù)據(jù) 1 代表一個(gè)帶臥室的房子单刁,輸出 5灸异,表示 50 萬(wàn)。
訓(xùn)練 1000 次羔飞,預(yù)測(cè)運(yùn)行結(jié)果部分截圖如下肺樟。
參考鏈接
原文首發(fā)地址 https://github.com/liuvigongzuoshi/blog