一、寫在前面
我們已經依靠keras和TensorFlow給大家做了一些機器學習在圖像處理中的應用(影像組學學習手冊,基于深度學習的圖像分類任務),此前的教程中我們沒有用GPU進行加速,但是相較于CPU而言,GPU是設計用于處理大規模并行計算任務的硬件,具有大量的小型處理單元(CUDA核心或流處理器),這使得它們能夠同時執行多個計算任務。GPU的并行性能遠遠超過了CPU,因此能夠加速機器學習過程中的訓練和推斷過程。而當下流行的深度學習框架如TensorFlow和PyTorch均提供了GPU加速的支持,使得在GPU上運行模型變得更加容易。這些框架通過CUDA或OpenCL等接口與GPU通信,從而簡化了GPU的使用。不過,為了讓TensorFlow能夠順利調用GPU,我們還需要額外安裝軟件并配置環境。
需要GPU算力的同學可參考:終于上架啦
也可以來找找組織:生信Linux交流群
計算資源不足的同學可參考:
生信分析為什么要使用服務器?
足夠支持你完成碩博生涯的生信環境
獨享用戶硬件升級對比報告
二、依賴知識
為了順利完成以下操作,你需要有Linux和Python的基礎知識:
十小時學會Linux
生信Python速查手冊
三、win11+GTX 1650下的GPU加速環境配置
1、確認系統版本與顯卡型號
首先我在我的筆記本上測試了一下,系統版本為Windows11 家庭中文版,顯卡型號為NVIDIA GeForce GTX 1650(不要問我AMD的顯卡以及其它品牌的顯卡怎么配置,因為我沒有)。確認好以上信息后,再進行下面的操作。
2、確認顯卡驅動與CUDA版本?
如果大家不知道自己顯卡的版本型號,可以現在windows的檢索欄中打開顯卡控制中心:
界面中自然有對應的版本與驅動型號:
按下鍵盤上的Win + R組合鍵,然后在運行對話框中鍵入cmd,然后按Enter鍵。可以進入windows的終端,輸入:
nvidia-smi
回車后即可返回對應信息,這里由于我已經裝好了cuda,所以cuda的版本號也顯能夠顯示:
3、安裝驅動
如果你的驅動未能正常安裝/不確定自己的驅動是否適配/需要安裝指定的驅動,可以前往NVIDIA官網[1]填上對應的信息后獲得驅動文件。以我的環境為例:
搜索出來的頁面點擊download到本地后,管理員模式運行安裝即可。
有了你的驅動之后,需要根據版本號選擇cuda版本[2],這里由于我的驅動時546.33,所以下列的cuda版本理論上我都可以兼容
接下來,由于我的Python環境是3.8,經過查閱Tensorflow的推薦配置[3],因此我的最終選擇是2.4.0的tensorflow、11.0的CUDA。
3、動手安裝
在終端中先安裝好tensorflow
pip?install tensorflow-gpu==2.4.0pip?install numpy==1.2.0# tensorflow-gpu的2.4.0依賴的是1.9.0的numpy,但我實際運行時會報錯
cuda需要去官方列表頁面[4]下載:
填寫好信息后進行下載:
下載后安排到默認位置即可。
在終端中輸入:
nvcc?-V
能成功返回cuda的版本信息則安裝成功:
前往頁面下載[5]對應版本的cudnn:
下載得到的是一個壓縮包,解壓后有以下目錄:
cudnn實際上是庫文件,所以你需要把這個文件夾下bin里的文件拷貝到cuda的bin目錄下(對應我系統中的路徑就是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin),把include中的文件拷貝到cuda的include目錄中(對應我的系統就是:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include),把lib/x64的文件拷貝到cuda的對應位置(對應我的系統就是:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\lib\x64)。
完成上述的文件遷移操作后,找到bandwidthTest.exe程序(在我的系統中在:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\demo_suite\bandwidthTest.exe)并在終端中運行:
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\demo_suite\bandwidthTest.exe"
注意上面的命令要有雙引號,否則空格會不識別。運行后有以下提示說明cudnn安裝成功:
至此,為tensorflow搭建的GPU加速環境配置完成。
四、驗證GPU加速
導包驗證
import?osimport?pandas?as?pdimport?tensorflowtensorflow.config.experimental.list_physical_devices('GPU')
在Python中輸入以上命令若能返回GPU的相關參數,則說明上述配置成功
如果報錯缺少dll,則需要在終端聲明以下變量(需要改為你系統中的對應位置)
SETPATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin;%PATH%SETPATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\CUPTI\lib64;%PATH%SETPATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include;%PATH%
在Python中也可以提前申明dll文件路徑后加載tensorflow:
import?osos.add_dll_directory("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.0\\bin")import?pandas as pdimport?tensorflowtensorflow.config.experimental.list_physical_devices('GPU')
成功返回GPU信息即可
我使用了GPU加速,一個epoch大約是10s+:
而不用GPU加速的結果為35s+的樣子:
當然,我的CPU是I7-9750H,GPU是GTX 1650(已經淪為亮機卡了,相信擁有更高端顯卡的你一定能夠跑通這個教程),因此加速效果雖然顯著,但是不離譜,如果換成目前主流的顯卡,計算速度會相差數個量級。