關於本文章的最新更新請檢視:oldpan部落格
前言
對於很多入門深度學習領域的小夥伴來說啊,擁有一款合適的顯示卡是必要的,只有擁有好的裝備才能更好更快地進行神經網路的訓練、除錯網路結構、改善我們的程式碼,進而更快地產出結果。
也就是說,顯示卡可以代表生產力,顯示卡越好,生產力越強。程式訓練的速度越快,我們也就可以更方便地看到結果從而進行下一步。大家可以回顧一下我在之前釋出的幾篇關於顯示卡的文章:
- 更新深度學習裝備:雙(1080Ti)顯示卡裝機實錄
- 新顯示卡出世,我們來談談與深度學習有關的顯示卡架構和相關技術
- 給你一份配置清單:機器學習、深度學習電腦顯示卡配置指南
- 戴爾成就微塔式小機箱裝華碩1060-6G大顯示卡
但是顯示卡這玩意兒的價格可是並不美好啊,假如沒有實驗室的經費和老師的“慷慨資助”,我們一般是消費不起高階顯示卡的。但是我們筆記本中的965M、1050TI等入門級顯示卡對於稍微繁重點的深度學習任務來說,根本帶不動呀,就問你怕不怕。
嘿嘿,當然不怕,就算我們暫時沒有可以派上用場的顯示卡(1080TI、2080TI),我們也可以擼一些大公司的羊毛嘛,畢竟是免費的,不用白不用,這裡我就推薦一個比較好用的免費的網上GPU伺服器:Kaggle下的kernels。
擁有GPU的kernels
那麼什麼是kernels?
這裡的kernels說白了就類似於一個可以在瀏覽器上間接(本質上是在Kaggle的GPU伺服器上)執行的一個環境,這個環境裡包含了我們基本需要的各種軟體,當然我們也可以自己去安裝一些軟體,然後去執行我們的訓練程式。類似於Google Colab,但是相比Google Colab也有個巨大的優勢,即不用科學上網!不用翻牆!不用翻牆!不用翻牆!
這個kernels因為是一個虛擬環境,和我們在其他平臺上直接使用的GPU雲伺服器還有點區別,不用我們去耗費精力搭建環境,我們直接使用即可。
那什麼又是是Kaggle呢,Kaggle只要大家稍微Google一下就可以知道,Kaggle是一個專門致力於機器學習方面比賽的平臺,一些大公司將一些機器學習任務通過Kaggle釋出到網上,大家可以在Kaggle上進行比賽,而Kaggle為了讓那些沒有伺服器的新手更好地參加比賽,提供了免費的GPU讓大家用,可以說是很實在了。
好了,說了這麼多,讓我們開始使用吧!
登入建立kernels
首先我們進入Kaggle的官網:www.kaggle.com/ 。
建立自己的Kaggle賬戶,然後點選網站最上方的Kernels即可建立kernels。
這時會出現兩個選項,我們選擇右邊的Notebook:
這樣我們就進入了kernels介面:
左面是執行程式碼的區域,使用方式類似於Jupyter Notebook,而在右方我們可以看到這裡開啟了GPU,網路的沒有連線。對於深度學習任務,我們一般開啟GPU的支援,而網路連線當我們需要下一些額外的軟體包的時候開啟即可。
有一點需要注意,沒有開啟GPU時可以使用的總記憶體是17.2GB,開啟後就變為14GB,磁碟容量是一定的,但是這個磁碟是交換資料時需要的,我們的資料集並不需要放到這個Disk裡頭。
開啟GPU前:
開啟GPU後:
另外,更多的幫助資訊可以到Docs中檢視,高階功能和API也可以直接點選檢視。
配置
關於配置資訊,我們只要在NoteBook中輸入nvidia-smi即可看到,注意在前面加!號才可以執行:
然後我們就可以看到配置資訊圖,從圖中可以得知我們此刻使用的顯示卡為Tesla K80,視訊記憶體為12G,顯示卡驅動資訊還是比較新,396.44。我們再看下CUDA的版本:
gcc版本:
整體來說,這個GPU伺服器的硬體和軟體配置都滿足我們的一般需要了。
另外,Kaggle官方也貼心地為我們安裝了Pytorch和fastai。
我們無需提前安裝,直接使用即可,方便吧。
那麼在回到顯示卡的配置,這款kernels中的K80屬於什麼水平呢,經過測試1080TI顯示卡比K80的速度快2倍左右,也就是說K80顯示卡的配置也算還不錯了。
在美團雲上的價格可以接受的伺服器配置一般都是
M60、M40、K40這三種配置,這三種為伺服器顯示卡, M60擁有兩個 GM204 核芯,每個 GM204 核芯擁有 2048 個計算單元,擁有8G視訊記憶體,單精度浮點效能可達 4.85Tflops。在美團雲上,一個 M60 的 GPU雲主機是擁有一個 GM204 核芯的計算能力,售價為 1.2 元/時(僅GPU,不包括CPU、記憶體、網路、磁碟的價格)。 M40擁有一個 GM200 核芯,該核芯擁有 3072 個計算單元,擁有12G視訊記憶體,單精度浮點效能可達 7Tflops。在美團雲上,一個 M40 的 GPU雲主機是擁有一個 GM200 核芯的計算能力,售價為 2.5 元/時(僅GPU,不包括CPU、記憶體、網路、磁碟的價格)。 K40 擁有一個 GK110 核芯,該核芯擁有 2880 個計算單元,擁有12GB視訊記憶體,單精度浮點效能可達 4.29Tflops。出售時的價格是 1.8 元/時(僅GPU,不包括CPU、記憶體、網路、磁碟的價格)。 執行相同的CNN任務,M40雲主機用的時間是 858s,M60雲主機用的時間是 931s,K40雲主機用的時間是1143s,可見在 CNN 訓練時 M40 的效能是 M60 的 1.08倍,M60的效能是K40的1.23倍,M60幾乎不遜色於M40。 綜上所述,在K40、M40、M60中,M60擁有最高的價效比。
中規中矩,畢竟是免費的顯示卡資源,能這樣擼羊毛我們已經很滿足了。總之在這個虛擬環境中我們可以利用其中的軟體和硬體實現訓練任務。
上傳資料
那麼資料怎麼上傳呢?其實我們只要點選下圖中的Add Data按鈕即可。
此時會出現這樣的介面,kernels中上傳資料的方式是多種多樣的,我們可以利用別人已經建立好的資料,或者一些比賽中共享的資料,當然我們也可以自己建立資料集,然後在使用的過程中選擇使用即可:
這裡舉幾個已經匯入資料集的例子,其中第一個是船隻識別的資料集,而第二個是Pytorch神經網路框架中的預訓練模型,至於我們如何如何找到他們,其實也很簡單。
因為整個kernel相當於一個虛擬的環境,自然會有路徑之類的資訊,我們通過在命令前面加上!(感嘆號)來使用它,從下面的例子中我們可以看到船隻資料集和預訓練模型資源的位置:
然後我們就可以在程式碼中使用它們了。
程式碼提交
程式碼怎麼執行呢?只要點選那個執行按鈕即可,可以一步一步執行也可以點選快進鍵一下執行所有的程式碼。
但是需要注意,kernels執行程式碼有一個很大的限制,那就是執行程式碼不能超過6個小時,我們可以通過右上角的使用時間看到我們還剩多少時間可用了,為什麼這樣限制呢?原因很簡單,如果不這樣,大家都會成天訓練自己的東西,伺服器就不會閒置,很容易造成先來後到的情況,資源也無法合理的分配,所以這樣的設定是合情合理的。
但是需要注意的一點是,我們如果離開kernels介面時間超過一個小時,這個kernels就會重啟,不管其中是否已經正在執行你安排的訓練任務,這樣也是為了資源的合理利用…
那麼我們如果有一個程式碼需要執行1個小時以上,我們不可能總在kernels介面上待著吧,那樣多麻煩。當然有解決辦法,我們可以看到在頁面的右上角會有Commit按鈕。也就是當我們在除錯好kernels中的程式碼之後,發現這些程式碼按順序可以正常執行,我們只需要點選這個按鈕,將這批程式碼提交,那麼這些程式碼就會在這個伺服器的後端執行,當執行完畢後頁面就會載入。執行過程中的一些輸出資訊也會呈現出來:
但是也要注意,Commit後的程式碼可執行時間也是最長6小時,所以說我們需要合理安排一下程式碼的執行時間,如果一次超過六個小時,自己試試能不能將訓練拆分開來,分階段儲存模型權重(模型權重可以匯出再讀入),分開執行。對一般的任務來說,使用K80進行訓練6個小時以內大部分都可以訓練完成。
用途
說了這麼多,我們主要拿這個免費的GPU伺服器來做什麼呢?因為其特殊性,並不適合作為我們的主力工具,最好還是使用自己購買的顯示卡去訓練。這個伺服器應該只適合於比較應急的情況,或者我們想要給別人遠端展示你的程式碼成果:
上圖中使用了GAN,需要在GPU上執行,如果我們想要給別人展示,直接發個網址是不夠的,但是我們將你的程式碼放在kernels中執行,然後將你的kernels地址發給別人,其他人就可以直接通過你的kernels看到你的實現了。
上面的專案地址:github.com/SummitKwan/…
我們可以直接開啟這個kernels進行嘗試: www.kaggle.com/summitkwan/…