3
| 本文作者: AI研習(xí)社 | 2017-11-30 14:42 |
雷鋒網(wǎng)按:本文作者阿薩姆,本文首發(fā)于作者的知乎專欄《數(shù)據(jù)說(shuō)》,雷鋒網(wǎng)獲其授權(quán)發(fā)布。
在Windows上使用GPU進(jìn)行深度學(xué)習(xí)一直都不是主流,我們一般都首選Linux作為深度學(xué)習(xí)操作系統(tǒng)。但很多朋友如果只是想要了解深度學(xué)習(xí),似乎沒(méi)有必要專門裝雙系統(tǒng)或者改用Linux。現(xiàn)實(shí)生活中,很多使用學(xué)?;蛘吖倦娔X的朋友也沒(méi)有操作權(quán)限改換系統(tǒng)。那么到底是否可以在Windows系統(tǒng)上設(shè)置深度學(xué)習(xí)框架,開(kāi)發(fā)深度學(xué)習(xí)模型呢?
好消息是越來(lái)越多的深度學(xué)習(xí)框架開(kāi)始支持Windows,這使得在Windows上使用GPU加速學(xué)習(xí)過(guò)程也變成了可能。很多朋友雖然沒(méi)有一塊很強(qiáng)勁的顯卡,但也可以以較低的代價(jià)來(lái)了解在GPU上運(yùn)行深度學(xué)習(xí)模型的過(guò)程。值得欣喜的是,大部分Nvidia GeForce系列的顯卡都可以使用CUDA,大部分有獨(dú)顯的筆記本理論上都可以使用GPU來(lái)“深度學(xué)習(xí)”。即使加速效果不明顯,但很多入門級(jí)的顯卡依然可以用于TensorFlow,這至少可以幫助大家了解和熟悉這個(gè)框架。
請(qǐng)不要讓缺少預(yù)算或者系統(tǒng)不兼容成為探索路上的攔路虎和借口。
本著探索的精神,我試著在兩臺(tái)Windows電腦上安裝了CUDA(用于調(diào)用GPU)和TensorFlow(谷歌開(kāi)發(fā)的深度學(xué)習(xí)工具庫(kù)),把這個(gè)過(guò)程記錄下來(lái)和大家分享。
在開(kāi)始之前想再次提醒大家,在Windows上安裝CUDA和TensorFlow有很多坑,對(duì)于各種軟件版本以及系統(tǒng)設(shè)置的要求可謂非常刁鉆,很容易就“誤入陷阱”。請(qǐng)大家嚴(yán)格對(duì)照我的操作流程,以防出錯(cuò)。多圖長(zhǎng)文預(yù)警!?。∈褂媒坛虝r(shí)建議在電腦端閱讀,可以放大圖片。
請(qǐng)按照介紹下載以下軟件備用,具體安裝流程在第二部分介紹。
簡(jiǎn)單的說(shuō),我們需要 Windows 7/8/10, Server 2012/2016 + Python 3.5 + Visual Studio 2015 + CUDA 8.0 + CuDnn 6.0。
1.操作系統(tǒng)要求和硬件要求:
Windows版本:Windows 7,Windows 8,Windows 10,Windows Server 12/16
顯卡版本:請(qǐng)對(duì)照英偉達(dá)提供的支持CUDA的顯卡列表,建議查看英文版。不知道自己顯卡版本的可以通過(guò)“設(shè)備管理器”查看,或者使用第三方軟件GPU-Z查看。請(qǐng)注意,AMD的顯卡不可以使用英偉達(dá)開(kāi)發(fā)的CUDA...
2.Python版本:64位版本的Python 3.5。注意Python3.6和2.7都不可以。地址和版本如下圖所示。如果使用錯(cuò)誤的Python版本,將無(wú)法安裝TensorFlow!


3.Visual Studio版本:
我們使用的CUDA8.0不支持Visual Studio 2017,使用VS2017會(huì)報(bào)錯(cuò)。
Visual Studio 2015的話現(xiàn)在最新的版本是Visual Studio 2015 with Update 3,網(wǎng)上有人說(shuō)不能用Update 3這個(gè)版本,但根據(jù)我的親測(cè)可以使用VS2015 with Update 3。下載免費(fèi)的Community版本即可: https://imagine.microsoft.com/en-us/Catalog/Product/101。這個(gè)鏈接是ISO版本,大家也可選擇EXE版本安裝。其他VS2015的版本,如企業(yè)版(Enterprise)或者專業(yè)版(Professional)也可以,事實(shí)上我測(cè)試的時(shí)候安裝的是企業(yè)版。
Visual Studio 2013根據(jù)文檔介紹也可以,但我并沒(méi)有實(shí)際測(cè)試,不推薦使用。
如果你的電腦上已經(jīng)安裝了VS2017或者VS2013,可以同時(shí)下載安裝VS2015,并不存在沖突。
4.CUDA版本:TensorFlow的支持的CUDA版本截止到今天(2017年10月1日)還是 CUDA 8.0。千萬(wàn)要注意英偉達(dá)官網(wǎng)上的默認(rèn)版本是CUDA 9.0,請(qǐng)不要下載安裝這個(gè)版本。
正確的8.0版本下載地址: CUDA Toolkit 8.0 - Feb 2017 。網(wǎng)絡(luò)比較好的朋友建議下載網(wǎng)絡(luò)安裝版本,不要下載本地版。
5.CuDnn版本:CuDnn 6.0 for CUDA8.0。這是唯一可以使用的版本,下載時(shí)請(qǐng)對(duì)應(yīng)的你的操作系統(tǒng)選擇合適的版本。
請(qǐng)?zhí)貏e注意下載CuDnn前必須注冊(cè)英偉達(dá)社區(qū)的會(huì)員,雖然說(shuō)是英文的但非常簡(jiǎn)單。 正確的下載版本如下圖所示:

6.所有必備文件:

請(qǐng)盡量按照本文的安裝順序進(jìn)行安裝,否則有可能運(yùn)行失敗!最重要的是,安裝CUDA必須在安裝Visual Studio之后,這兩個(gè)順序不可以調(diào)換。
1.安裝Python
建議直接用Python的原生安裝包,安裝時(shí)建議勾選把Python加到系統(tǒng)路徑當(dāng)中去。

安裝完成后檢查Python的版本和PiP3的版本,那就是系統(tǒng)路徑中的默認(rèn)Python是3.54,且Pip3的版本大于8.01。

檢測(cè)方法如上圖,打開(kāi)命令行分別輸入 "python -V" 和 “pip3 -V”即可,正確的輸出如上圖。
2.安裝Visual Studio 2015
安裝VS2015沒(méi)什么難度,只有一個(gè)選項(xiàng)需要自定義,別的選項(xiàng)都可以使用默認(rèn)值。VS2015的默認(rèn)安裝不包括C++的編譯器,必須手動(dòng)勾選Visual C++,不然會(huì)面臨后續(xù)的CUDA編譯錯(cuò)誤。

主要原因是VS2015在安裝時(shí)并沒(méi)有默認(rèn)安裝C++的編譯器,也就是CL.exe。在后文中我會(huì)提到如果你沒(méi)裝Visual C++系統(tǒng)會(huì)如何報(bào)錯(cuò)。
3.安裝CUDA
安裝CUDA前請(qǐng)務(wù)必確認(rèn)VS2015安裝成功!這個(gè)時(shí)候你需要安裝CUDA,雙擊我們下載的安裝文件即可,一切都選擇默認(rèn)即可。

安裝成功后會(huì)看到如下圖:

4.驗(yàn)證CUDA安裝成功:
4.1. 打開(kāi)命令行,也就是cmd然后輸入“nvcc -V”,如果安裝正確的話你應(yīng)該看到這樣的輸出:

輸出中顯示了CUDA的版本是release 8.0。
4.2. 使用VS和CUDA編譯測(cè)試文件
進(jìn)入“C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0”文件夾,雙擊打開(kāi) “Samples vs2015”這個(gè)文件。

選擇編譯生成1_Utilities中所有的文件。具體操作就是在1_Utilities上右鍵選擇Build,注意紅框部分的64位和Release:

這個(gè)時(shí)候,你可能遇到了編譯錯(cuò)誤,如果你發(fā)現(xiàn)錯(cuò)誤提示是無(wú)法找到 CUDA.prop那么就是CUDA安裝錯(cuò)誤,建議檢查CUDA版本重新安裝。
如果你看到這兩個(gè)錯(cuò)誤:
TRK0005: Failed to locate: "CL.exe". The system cannot find the file specified.系統(tǒng)找不到CL.exe,無(wú)法編譯文件。面對(duì)這個(gè)錯(cuò)誤那就是你沒(méi)選Visual C++,需要重新安裝時(shí)選上這個(gè)組件。
MSB8036: Windows SDK 8.1 was not found.如果你同時(shí)看到了這個(gè)錯(cuò)誤說(shuō)你沒(méi)有安裝 Windows SDK 8.1,那也可以通過(guò)安裝C++ Redistribution這個(gè)來(lái)解決。

如果你沒(méi)有遇到編譯錯(cuò)誤,那么應(yīng)該看到下圖提示5個(gè)文件編譯成功:

在成功后,你會(huì)發(fā)現(xiàn)在“C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64\Release”文件夾中出現(xiàn)了一堆文件,我們主要需要deviceQuery和bandwidthTest。

4.3. deviceQuery和bandwidthTest驗(yàn)證
運(yùn)行我們剛才編譯出來(lái)的deviceQuery.exe,也就是在cmd中運(yùn)行這個(gè)文件,下圖中左下的紅框顯示 result = pass代表安裝測(cè)試成功,右下的紅框是你的顯卡型號(hào)請(qǐng)確認(rèn)型號(hào)正確。Tesla K80只是我的這臺(tái)機(jī)器型號(hào),這個(gè)每個(gè)人可能都不一樣。

運(yùn)行我們剛才編譯出來(lái)的bandwidthTest.exe,方法一樣,也是關(guān)注是否result = PASS。

5.安裝CuDnn
解壓縮我們下載的CuDnn文件,得到3個(gè)文件夾:bin, include, lib。如下圖所示,將這個(gè)三個(gè)文件夾復(fù)制到“C:\ProgramData\NVIDIA GPU Computing Toolkit\v8.0”。

6.確認(rèn)系統(tǒng)環(huán)境變量(Environment Variables)
確認(rèn)Python3.5.4.和Pip3在系統(tǒng)環(huán)境變量中,檢查的方法上面已經(jīng)介紹了。
打開(kāi)系統(tǒng)環(huán)境變量設(shè)置,以Win10為例,請(qǐng)參考百度經(jīng)驗(yàn)(http://t.cn/RYIJJht)介紹。
確認(rèn)CUDA_PATH和CUDA_PATH_V8.0已經(jīng)存在
手動(dòng)添加 “C:\ProgramData\NVIDIA GPU Computing Toolkit\v8.0\bin”到Path里面。

7.安裝TensorFlow的GPU版本
打開(kāi)cmd,輸入“pip3 install tensorflow-gpu”

我因?yàn)橐呀?jīng)安裝過(guò)了,所以顯示已經(jīng)安裝。此處要注意三點(diǎn):
要用pip3而不是pip
要安裝tensorflow-gpu,而不是tensorflow
如果安裝失敗,很有可能你的Python版本不是3.5.,或者pip3版本太低,可以使用"pip3 install --upgrade pip3"來(lái)升級(jí)pip3
恭喜你,我們離勝利已經(jīng)一步之遙了:) 讓我們來(lái)驗(yàn)證我們安裝的TensorFlow可以使用GPU!
打開(kāi)cmd,輸入以下指令打開(kāi)python的interactive shell。
首先導(dǎo)入tensorflow:
import tensorflow as tf
接著每次輸入一行代碼,并回車,你應(yīng)該可以看到下圖中表明你的GPU已經(jīng)開(kāi)始工作啦~
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)

你可能在import TensorFlow時(shí)遇到了錯(cuò)誤,如下圖。這是因?yàn)槟愕腃uDnn設(shè)置錯(cuò)誤,請(qǐng)參考本文確認(rèn)系統(tǒng)環(huán)境變量(Environment Variables)來(lái)修復(fù)。

實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),時(shí)間也是。在所有人都在大力鼓吹深度學(xué)習(xí)的今天,不管你喜歡還是反對(duì),我都希望你可以親自試試,感受一下:)
而現(xiàn)實(shí)生活中我們都有各種各樣的制約,比如系統(tǒng)版本限制、比如有限的顯卡預(yù)算。這也是我寫這篇教程的目的,我不希望這些原因成為阻礙你探索研究的障礙。希望我的這篇文章為你的深度學(xué)習(xí)之路做出了一點(diǎn)微小的貢獻(xiàn)。
歡迎來(lái)到深度學(xué)習(xí)的世界 ?????
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。