1. 程式人生 > >再寫博文,回顧在Windows7上安裝TensorFlow-GPU的一路坑

再寫博文,回顧在Windows7上安裝TensorFlow-GPU的一路坑

離完成上一篇文章有近1年了。2016年發生了太多的事情,從而沒能堅持哪怕是每月一篇這樣的頻率。終於在2017年的1月份抽出幾天搞出了一些東西。一路坑窪,趕緊記錄下來。

2016年初就開始看深度學習的東西,主攻TensorFlow。但是一路專案再加上換了公司,每次都是搞兩天就停一陣子,然後再拾起來重頭搞兩天,再被打斷。而且換了公司後沒有了隨意能呼叫的計算資源,CPU版的TensorFlow直到11月份才安裝完,並跑了一些例子。因為一般虛擬機器都不支援GPU,所以GPU版就完全沒有機會實踐。直到TensorFlow出了Windows版,而且發現新換的電腦居然是NVIDIA的GeForce 940M顯示卡,立刻決定在筆記本上實驗安裝一把TensorFlow-GPU版本。

但因為手賤,就那麼一抖,居然把整個過程搞了近4天才真正地讓MNIST的例子跑在GPU上。

不再發騷了,直接上過程,並介紹碰到的這個大大大大坑!!

下面的過程不是一步一步的手把手教程,而是一個簡略的敘述,所以如果你想重複實現,最好先了解一些TensorFlow的基礎知識。

安裝環境:

  • Windows 7 64bit
  • GPU: GeForce 940M
  • Python: 3.5.2
  • CUDA: 8

我的安裝過程:

  1. 首先下載Anaconda3的Win7 64bit版,安裝Python3.5版本。因為目前TensorFlow對Windows只支援Python3.5。可以直接下載Anaconda的安裝包安裝即可,一般不會有問題。
  2. Anaconda安裝完成後,直接在Windows的命令窗口裡敲Python就應該能看到版本是否是3.5。
  3. 用conda安裝jupyter:conda install jupyter
  4. 建立一個jupyter notebook的目錄,然後cd到此目錄後啟動jupyter notebook:jupyter notebook
  5. 然後用conda命令安裝pip:conda install pip。
  6. 用conda命令建立tensorflow執行環境:conda create -n tensorflow-gpu。這一步的目的是建立一個單獨的python執行環境,方便同時安裝CPU版和GPU版本,不會互相影響。
  7. 啟動此執行環境:activate tensorflow-gpu
  8. 用pip安裝tensorflow:pip install tensorflow-gpu
  9. 啟動python命令列編輯器,然後import tensorflow as tf,報錯說沒有cuda庫。
  10. 按照tensoflow的git網頁上指定的CUDA地址下載CUDA8和cudnn的庫。其中想下載cudnn的庫,需要去註冊一下會員。略微麻煩了點。不過都順利下載。
  11. 安裝CUDA8,直接執行cuda_8.0.44_windows.exe檔案,一路預設的點下去。半小時後安裝完畢。
  12. 然後CUDA安裝程式會安裝一個什麼NVIDIA Experience的程式,然後這個程式會自動啟動,並詢問是否要升級顯示卡的驅動程式。我腦子一暈,想當然的認為最新的肯定是最好啦,就手賤點了升級。然後一路綠燈的升級完畢。
  13. 接著解壓縮cudnn的庫檔案cudnn-8.0-windows7-x64-v5.1.zip。把其中的資料夾放到一個地方,比如E:\CUDA。然後可以有兩種方法把cudnn庫設定成tensorflow可以用。
    1. 把此目錄路徑放到Windows的系統PATH引數裡面;
    2. 把目錄裡面的內容放到CUDA的安裝目錄(我的是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)下面相對應的目錄裡面,bin的放到bin,lib的放到lib,include的放到include。
  14. 一切就緒,還是在命令列的tensorflow-gpu的執行環境裡,啟動啟動python命令列編輯器,然後import tensorflow as tf。發現5行successfully load的東西,說明找到了cuda的庫。
  15. 定義一個session,如 s=tf.Session() 然後回車,詭異的事情出現了!!
    1. Windows彈出了一個警告框,說什麼“此硬體裝置不可拔出或是不能移動......";
    2. Python命令列裡面的錯誤提示是:......can not cuInit: CUDA_NO_DEVICE_ERROR......
  16. 完全無頭緒的兩個提示,立刻開始一頓狂搜百度。結果發現居然沒有人碰到這樣的問題。馬上翻牆出去上google,再搜,得到的資訊極其稀少。首先是安裝在Windows上的就很少,而碰到這個問題的就更少。唯一一個一樣的是stackoverflow上某人提到了裝置不能拔出和移動,還是英語,一開始就沒留意。而且他最後問題是解決了,解決方法是windows裡面把顯示卡解除安裝了再安裝就好了。基本沒有參考價值。
  17. 接著繼續搜,B+G滿世界的海搜。的一個初始的想法是CUDA安裝沒裝好,就把第11步反覆搞,結果還是一樣。
  18. 搞了一天,發現沒進展,開始懷疑是顯示卡的問題,於是把顯示卡給刪了,再裝。然後重複14步,沒問題,15步又出錯,但是這次報的錯不再是什麼硬體不能拔,而是Python程式出錯。眼淚立刻下來了,雖然還是錯,但終於開始接近問題的本質了。開始懷疑是顯示卡驅動程式的問題。立刻檢視,NVIDIA的控制面板裡給出了驅動資訊,是版本368.81。然後安裝了一個GPU-z,看看顯示卡的情況。驅動版本也是一樣的,但是提示顯示CUDA不支援。。。。。。
  19. 於是去Geforce的官網找驅動,然後找了最新的2016年12月的版本,下載安裝。然後第15步的錯誤再現!!根據18步的情況,判斷新的驅動版本可能不行。
  20. 於是去Geforece官網找舊版本,奇葩的是,Geforece最舊的版本只到2016年8月份的372.54版。下載372.54,安裝還是15步的問題。
  21. 只好滿世界的找舊版本驅動,大海撈針一般。前後下了7-8個版本。終於在安裝了一個很舊的版本後353.62(2015年出的驅動),情況開始發生逆轉了!!
  22. 安裝完此舊版,執行一個session後,tensorflow居然顯示找到了顯示卡,且能打印出顯示卡的資訊啦。那個心花怒放啊!!以為苦日子終於熬到頭了。
  23. 然而,真正開始跑MNIST例子的時候,一堆警告出現:...... cuda version is insufficient for cuda runtime environment....。居然出了新的問題。不過還好,之前搜尋驅動程式的時候見到過別人貼的這個問題,解決方案是顯示卡的驅動版本要足夠高。
  24. 於是從353.62版本開始,一個一個的試更高的版本,355.98,359.06,361.91,365.81全都試過了,不是版本過低就是高版本後python程式出錯。前前後後搞了2天多,還是不行。這時候開始冷靜下來整理思路了:
    1. 問題已經基本鎖定在顯示卡的驅動程式的版本上;
    2. 別人為什麼沒有出現過什麼問題,從而造成B+G上幾乎沒有出現15裡面的情況的帖子?
    3. 別人沒碰到,說明自然安裝就能解決掉。
    4. 那麼就有可能是CUDA庫會有自己支援的一個版本的驅動程式。
  25. 等分析到這裡,思路就清晰了,CUDA的版本是確定的,就是要找到和這個CUDA支援的驅動程式版本。於是仔細的又看了一下CUDA的安裝元件,果然發現,在安裝CUDA的過程中,安裝包自身就包括了一個369.30版的顯示卡驅動。那麼這個版本就應該是和CUDA8相互支援匹配的驅動程式。
  26. 發現了這個問題後,就立刻解除安裝掉已經安裝的高於369.30驅動程式,然後按照第11步從新裝一遍CUDA,選擇自定義安裝,選擇369.30的驅動。
  27. 裝完重啟,再次執行,終於只有successfully,沒有其他的警告啦。GPU-Z也顯示GPU load在80%左右。CPU的用量很低。
到此為止,終於解決了Windows7上安裝執行TensorFlow GPU版本,成功運行了簡單版和卷積版的MNIST。

問題分析:

  1. 根源其實很簡單,就是CUDA8有自己完全相容匹配的Geforece顯示卡的驅動程式。我的GeForece 940M對應的就是369.30版
  2. 用CUDA安裝程式預設就會把這個版本的驅動程式裝上。但這裡有兩個坑:
    1. CUDA安裝預設是全裝,神馬Experience、Insights都裝,裝完了就立刻檢測你機器的顯示卡驅動是否是最新的,發現不是最新的,就建議你升級。如果如我一般手賤了一下,後面就悲劇了。
    2. 如果你已經自己升級過驅動版本高於369.30,CUDA安裝不會降級,這個時候也會悲劇。
  3. 如果機器的驅動版本低於369.30,CUDA就會安裝升級。這種情況應該是最常見的,因此一般安裝完成後TensorFlow-GPU就能完美的識別GPU並用來進行計算。我猜測這也就是為啥網上幾乎沒有出現我碰到的問題的帖子。因為預設都是OK的。
雖然過程很痛苦也漫長,但是這麼一折騰還是學到了很多東西,NVIDIA的網站也看了不少。對GPU也有了一些瞭解。得失都有。下面就開始TensorFlow GPU的學習了。 後記:用CPU和GPU搞了一下對比,結果還是很清楚的。 CPU:4核的i5, GPU:GeForce 940M CNN的MNIST,CPU的4核全100%的負載,搞了56分鐘;GPU平均80%的負載,7分鐘搞定。實在是快!!!

相關推薦

回顧Windows7安裝TensorFlow-GPU一路

離完成上一篇文章有近1年了。2016年發生了太多的事情,從而沒能堅持哪怕是每月一篇這樣的頻率。終於在2017年的1月份抽出幾天搞出了一些東西。一路坑窪,趕緊記錄下來。 2016年初就開始看深度學習的東西,主攻TensorFlow。但是一路專案再加上換了公司,每次都是搞兩天就

回顧Windows7安裝TensorFlow-GPU一路+Windows7安裝TensorFlowGPU版本後記

目錄(?)[+]離完成上一篇文章有近1年了。2016年發生了太多的事情,從而沒能堅持哪怕是每月一篇這樣的頻率。終於在2017年的1月份抽出幾天搞出了一些東西。一路坑窪,趕緊記錄下來。2016年初就開始看深度學習的東西,主攻TensorFlow。但是一路專案再加上換了公司,每次都是搞兩天就停一陣子,然後再拾起來

使用docker在Ubuntu安裝TensorFlow-GPU

基於docker在Ubuntu上搭建TensorFlow-GPU計算環境 由於實驗室的伺服器有多人共享使用,而不同人的程式碼對應的keras和tensorflow版本不一致,所以對應的cuda版本也不相同,因此,考慮使用docker安裝自己的容器,這樣就可以避免共享cuda版本不一致

如何以源代碼的形式在CSDN

jpg sdn src style 分享圖片 用戶 shadow img tap PS: CSDN會吞一些代碼,也就是說用戶添加的一些源代碼最後是沒有顯示出來的。如何以源代碼的形式在CSDN上寫博文

每天堅持不懈的得到的幾點心得感悟

特侖蘇牛奶 互聯網 文章 朋友 手機 夜深了,我喜歡這樣寧靜的夜,它能讓人不用去想更多的事情,專註於做自己想做的事情,我認為是一種幸福的事情,拿著手機播放了今晚的《半夜聽》節目,聽這個節目已經有一段時間了,雖然每天只有那麽短短的幾分鐘,但是那些字眼確實令我欲罷不能,聽完幾分鐘的半夜聽後,順

開始學習Linq(1)

設計 查詢 lin 數據源 任務 集成 部分 程序 編程   摘自《linq實戰》原文:   軟件很簡單。它可以歸結為兩件事情:代碼和數據。   開發軟件卻並非那麽簡單,其中很重要的一項任務就是編寫處理數據的代碼。   無論選擇了哪種語言,在程序開發得某個時候你將不得不開始

開始學習Linq(3)

frame 一般來說 開發人員 framework 編程語言 開發語言 工具 語句 並且 為什麽需要Linq?(摘自原文) 讀者會發現LINQ著眼於解決編程語言和數據庫之間廣發存在的不統一問題。 1.常見的問題,使用.NET Framework Class Library(

第一篇正式希望自己能堅持更新!

python 突發奇想 技能 .... serve helpdesk 知識 sql 正式 畢業多年,待過幾家公司,接觸過一批人,讓自己學到了許多知識,漲了一些見識,感謝一路遇見的你我他。但是,腦子裏一直有些混沌,覺得自己好像知道很多東西,可是又好像不是很深入、精通;同時不是

回爐加油努力week 1

計算機系統由硬體和軟體兩大部分組成. 硬體組成 輸入裝置,輸出裝置(顯示器,滑鼠鍵盤),儲存器(記憶體,外存),運算器,控制器(cpu,各種晶片) 軟體組成 系統軟體(作業系統,bios)和應用軟體(office,瀏覽器,etc.) 現代計算機發展及馮·諾伊曼結構: 現代馮諾依曼體系計算機是由約翰·馮

用vscode

test Title 這是一篇測試效果的博文 第一次使用vscode寫博文,以前一直是用來寫寫程式碼偶爾寫Markdown,體驗一下,效果不錯就一直用下去 code print hello world public class Hello { public static void

懶妹子,第一次開始想有那麽一丟丟小激動呢 ememem--進入正題分享關於個別iphoneX輸入框失去焦點的bug

個人 監聽 window 自帶 scrolltop 包括 == focus 失去焦點 近來iphone新機鋪面而來,作為一個自己沒有iphone最新機的小前端,也只有羨慕的份啦,不過呢代碼還是要碼的,新機的bug還是要改滴,iphone x系列包括xs xr,當input獲

【部落格搬往 http://begtostudy.cnblogs.com】請不要在這個部落格發表評論抗議CSDN隨意刪除我部落格元件和廢棄部落格不再回復!

Dr. Ing. 白途思(Begtostudy) 微訊號:Begtostudy QQ:370566617 Email: [email protected] 點選這裡給我發郵件 工作單位:上海航天技術研究院 身份:上海交通大學 工學博士 校內名片

第一篇發一個用(h5,css,js)做的鬧鐘吧

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#bodyDi

第一篇新的開端

轉眼間本人已由大二邁向大三,都說青春時代是人生最精華的日子,失去不會再來,為了在將來留有一份回憶的佐證,從現在起,開始記錄生活學習的點點滴滴,為未來積攢財富。 現在就用不同的語言寄語吧! 希望我的CSDN部落格越來越好,學習越來越好,生活越來越好 I hope I

開箱即用(out-of-box)的Redis序列號生成器不用任何程式碼你值得擁有

先看整體效果 把簡單的東西“傻瓜化”是軟體開發追求的目標之一。請看下圖:   左邊是在 applic

Windows7安裝和使用AD DS管理工具

微軟公司 windows7 ad ds 域 管理工具 為什麽要安裝AD DS管理工具 要管理活動目錄,默認只有在域控制器下才可以,管理員對活動目錄的管理和維護又比較頻繁,因此需要經常出入機房才能完成管理任務 用遠程桌面也可以進行域管理,但有一定的安全隱患,還會產生較大的網絡流量,占

Windows7安裝Git

如果 name x64 conf word order 有一個 設置 github 我首先是百度到了這個網站:https://git-scm.com/download/win這個網站上有下載鏈接,你可以根據你的系統選擇不同的下載鏈接,我的是Win7 x64位的,下載地址為:

在 Ubuntu 安裝 TensorFlow (官方檔的翻譯)

tree com docker x86 cup 早期 guid director doc 本指南介紹了如何在 Ubuntu 上安裝 TensorFlow。這些指令也可能對其他 Linux 變體起作用, 但是我們只在Ubuntu 14.04 或更高版本上測試了(我們只支持

Windows7安裝Ubuntu雙系統

零、前言 最近不小心把Ubuntu系統搞崩了打不開了,在網上找了找方法,從最初的步驟開始安裝,本文是安裝Ubuntu16.04,不過安裝啥版本步驟都一樣,下面逐一介紹。 一、如何解除安裝Ubuntu(第一次安裝Ubuntu的直接跳過) 這個步驟是為那些像我一樣的以前安裝過Ubuntu系統的人準備的,因為

windows安裝tensorflow時報錯“DLL load failed: 找不到指定的模組”的解決方式

本文轉自http://blog.csdn.net/pjl6523853/article/details/72836214 最近打算開始研究一下機器學習,今天在windows上裝tensorflow花了點功夫,其實前面的步驟不難,只要依次裝好python3.5,num