2019年2月25日 星期一

究竟 nVidia Gefore GTX 1060 在 TensorFlow-gpu 的表現如何? (Part 1)

檢視一下,我已經好久、好久沒有撰寫科普文章了。過去幾年研究主題到處流浪,我想過去流浪的各種研究內容寫出來應該不怎麼科普,所以這個部落格的內容就沒有更新。從去年起,tensorflow-gpu 吸引許多人的注意,我也想買一套設備試一試,可是每一種的效能如何,居然從 google 中找不到太多的幫助(各種 benchmark 的跑分,對我的幫助不大)。前一陣子兒子"退役"了一片顯卡(所謂的低階遊戲卡),看了一下包裝:耶,居然是支援 cuda 的 nVidia 顯卡,於是我就拿來測試一下。[如果有廠商願意提供設備給我,我倒是願意多跑幾種比較精準的實驗]

我跑的作業系統是 windows 10,硬體安裝的過程不談,tensorflow-gpu 的安裝方式也不談,大家 google 一下應該都可以找到。我們直接看實驗的硬體平台,首先是 CPU 的部分,這個以 cpuz 的畫面就可以明白:


我查了一下,Intel Core i5 4460 的發布日期是 2014 年五月,可見得這部電腦的歲月頗高。我們再看看 GPU:


也查了一下 GTX 1060 的發布日期,居然是 2016 年七月,比 CPU 新的兩年。據說跑機器學習,RAM 的大小也很重要(等一下也會說一下實驗的情形),請第二張圖可以看出顯卡的記憶體是 3GB。既然顯示了 GPU 的記憶體大小,我們也看一下 CPU 的記憶體大小:



從圖中可以看出,記憶體是 8GB,但是等級比 GPU 差了些。在機器學習的領域中,大家都知道跑機器學習的程式,最耗時間的是在學習的階段,而加上顯卡的目的就在於減少電腦跑得時間,因此我寫這一篇文章的目的在於讓大家了解"加上顯卡之後,究竟能幫你現有的電腦減少大約多少時間"。(如果時間不重要,或許就不必投資大筆金額到這裡;當然你心裡真正想的可能是"可以玩遊戲玩的比較爽")

首先我們取用Using a GPU裡面的那一段程式碼進行實驗,我們先執行 python matmul.py gpu 10000,其中 matmul.py 即代表網頁中的那一段程式碼,其執行結果如下圖:



大概地說,這個程式利用 GPU 跑了一個 10000x10000 陣列的相乘,只需要兩秒多一點點的時間;印象中,效能視窗的值幾乎沒變,但是使用記憶體的部分卻是一瞬間有增加的情形。我們把同樣的程式以 python matmul.py gpu 10000 執行一次,其結果如下:


這一次所需要執行的時間明顯增加,從圖中可以看出,居然要 24 秒多才跑的出來,而且印象中,效能視窗在 CPU 的使用率幾乎都在 100%。寫到這裡,我稍微整理一下:

1. 以 GPU 來跑陣列的乘法,GPU 的速度是 CPU 的十二倍,相當驚人。
2. 我的顯卡只有 3GB,會不會有影響?以我的顯卡,我最多只能跑到 12500x12500 的陣列相乘,一旦超出,tensorflow-gpu 會回傳 "out of memory" 的錯誤訊息;也就是說,你的資料龐大的話,你的程式將受到影響。

看到這裡,已經準備跑出門去買一片顯卡了嗎?先等等,有興趣的話請繼續看 Part 2

沒有留言:

張貼留言