CUDA 教程(一) GPU 程式設計概述和 CUDA 環境搭建

語言: CN / TW / HK

前言 本文將帶大家瞭解 CUDA 程式設計,學習使用C和Python呼叫CUDA程式設計介面,對模型進行推理加速,效能優化。我們將從底層原理開始,帶大家瞭解CUDA的工作機制,一步步掌握CUDA程式設計。相信大家會受益菲淺。

歡迎關注公眾號CV技術指南,專注於計算機視覺的技術總結、最新技術跟蹤、經典論文解讀、CV招聘資訊。

計算機視覺入門1v3輔導班

本教程來自知識星球【CV技術指南】更多技術教程,可加入星球學習。

零教程的基本概述

在深度學習蓬勃發展的今天,模型變得越來越深,引數愈加龐大,雖然準確率不斷增長,由於硬體受限,對實際場景部署的要求也越來越高,CUDA 程式設計成為了一門必備的武林絕學。如果你對模型的推理速度有較高要求,如果你有龐大的資料流等待推理,一起跟著教程瞭解這門技術。

該教程目前暫定有以下章節,如有新增將會另行說明:

通過這些教程,可以說初入了 CUDA 程式設計的世界,基本學會了如何部署加速自己的深度學習模型。

一 CUDA簡介

首先介紹一下 GPU,在計算機中,GPU 相比 CPU,擁有非常多的核心,這意味著 GPU 可以以非常高的吞吐量執行程式,如同一條非常寬闊的道路可以同時讓很多車輛同時通行,例如最新的 RTX 3090 的核心數達到了恐怖的 10496 個,而當前的頂級 CPU 通常只有不超過 32 核心。因此我們需要正確地設計並行化加速演算法,就可以發揮 GPU 的強大優勢。

CUDA 是由英偉達 NVIDIA 於 2007 年所推出針對 NVIDIA GPU 專有系統,通過 CUDA,使用者可方便地使用封閉好的 SDK 對 GPU 進行復雜的數值計算,在深度學習領域,CUDA 提供了一套強大的加速平行計算和人工智慧相關的程式碼庫,同時,NVIDIA 官方提供了非常完善的安裝程式。

二 CUDA 安裝

Linux 安裝

首先檢查本機是否有 nvidia 的顯示卡

lspci | grep -i "nvidia"

請不要在vm虛擬機器中安裝 CUDA

以筆主的電腦為例,有一張 RTX 3060 的移動顯示卡

之後去 NVIDIA 官網 下載對應發行版的 CUDA Toolkit,這裡根據自己的深度學習框架選擇版本,在安裝 Toolkit 時會自帶 CUDA Driver

下載檔案推薦選擇 runfile 格式

檔案比較大,等待時確保機器上有相應的依賴庫,可以執行下面命令安裝依賴庫

如果系統為圖形介面,需要檢查系統是否自帶開源 NVIDIA Nouveau 驅動

lsmod | grep -i "nouveau"

如果有輸出,需要禁用 Nouveau 驅動

sudo vim /etc/modprobe.d/blacklist.conf

在檔案中追加如下內容

同時解除安裝 nvidia 相關包

sudo apt purge nvidia-*

重啟系統

sudo reboot

重啟後使用Ctrl + Alt + F2進入 tt2,再次檢查開源驅動是否啟動

lsmod | grep -i "nouveau"

然後關閉顯示服務,並修改安裝檔案許可權

sudo service lightdm stop
chmod 777 cuda_10.2.89_440.33.01_linux.run

之後執行 CUDA 安裝指令碼,在安裝時

sudo sh cuda_*_linux.run

安裝完成後指令碼會自動在/usr/local建立 cuda -> /usr/local/cuda-11.8/ 軟連結,在 ~/.bashrc寫入

在終端中輸入 nvcc -V ,如有類似下面的輸出,則安裝成功

安裝完成後重啟圖形介面

sudo service lightdm restart

接下來安裝 cuDNN

https://developer.nvidia.com/rdp/cudnn-download

下載完成後解壓

zip -xf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz

將解壓後的檔案拷貝到 CUDA 對應的安裝目錄下,並新增許可權

即安裝完成

Windows 安裝

開啟裝置管理器,檢視當前顯示卡型號

以筆主的電腦為例,有一張 RTX 3060 的移動顯示卡

再在桌面右擊或開啟系統小托盤,開啟 NVIDIA 控制面板

這裡推薦 Studio 驅動程式,不建議 Game Ready 驅動程式,可以在 NVIDIA 驅動程式下載 找到對應顯示卡的驅動程式。安裝完成後如圖所示

之後根據系統驅動程式版本下載 CUDA 安裝程式,點選檢視系統驅動程式版本和 CUDA 版本對應關係,推薦 exe(local)

下載完成後雙擊開啟,這裡使用預設位置

使用自定義安裝

這裡要記住安裝位置,推薦預設

安裝後會自動新增環境變數,開啟 Powershell / CMD,輸入nvcc -V

如有類似下面的輸出,則安裝成功

接下來安裝 cuDNN

https://developer.nvidia.com/rdp/cudnn-download

下載完成解壓後如何下圖

把這三個資料夾拷貝到 CUDA 的安裝目錄下,同名資料夾會自動合併。

將如下路徑新增到系統環境變數中

即安裝完成

三 PyCUDA

PyCUDA 是 NVIDIA 針對 python 編寫的 CUDA API,底層使用 C++, 使用 PyCUDA 可以更方便地編寫程式碼。同樣 CUDA 錯誤都會自動轉換為 Python 異常。

Linux 安裝

確保電腦中安裝了 python 環境和 pip,安裝命令

pip install pycuda

Windows 安裝

根據自己的 CUDA 版本 和 Python 版本下載 whl 檔案 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycuda

安裝命令

pip install pycuda*.whl

四 Nvidia Nsight Systems

簡稱 nsys,是一款低開銷效能分析工具,旨在為開發人員提供優化軟體所需的洞察力。無偏差的活動資料可在工具中視覺化,可幫助使用者調查瓶頸,避免推斷誤報,並以更高的效能提升概率實現優化。使用者將能夠識別問題,例如 GPU 閒置、不必要的 GPU 同步、CPU 並行化不足。

根據系統平臺選擇合適的安裝包

https://developer.nvidia.cn/gameworksdownload#?dn=nsight-systems-2022-4

安裝完成後輸入命令

nsys --version

如有返回,即安裝完成

本教程來自知識星球【CV技術指南】更多技術教程,可加入星球學習。

歡迎關注公眾號CV技術指南,專注於計算機視覺的技術總結、最新技術跟蹤、經典論文解讀、CV招聘資訊。

計算機視覺入門1v3輔導班

【技術文件】《從零搭建pytorch模型教程》122頁PDF下載

QQ交流群:444129970。群內有大佬負責解答大家的日常學習、科研、程式碼問題。

其它文章

深度理解變分自編碼器(VAE) | 從入門到精通

計算機視覺入門1v3輔導班

計算機視覺交流群

用於超大影象的訓練策略:Patch Gradient Descent

CV小知識討論與分析(5)到底什麼是Latent Space?

【免費送書活動】關於語義分割的億點思考

新方案:從錯誤中學習,點雲分割中的自我規範化層次語義表示

經典文章:Transformer是如何進軍點雲學習領域的?

CVPR 2023 Workshop | 首個大規模視訊全景分割比賽

如何更好地應對下游小樣本影象資料?不平衡資料集的建模的技巧和策

Transformer交流群

經典文章:Transformer是如何進軍點雲學習領域的?

CVPR 2023 Workshop | 首個大規模視訊全景分割比賽

如何更好地應對下游小樣本影象資料?不平衡資料集的建模的技巧和策

U-Net在2022年相關研究的論文推薦

用少於256KB記憶體實現邊緣訓練,開銷不到PyTorch千分之一

PyTorch 2.0 重磅釋出:一行程式碼提速 30%

Hinton 最新研究:神經網路的未來是前向-前向演算法

聊聊計算機視覺入門

FRNet:上下文感知的特徵強化模組

DAMO-YOLO | 超越所有YOLO,兼顧模型速度與精度

《醫學影象分割》綜述,詳述六大類100多個演算法

如何高效實現矩陣乘?萬文長字帶你從CUDA初學者的角度入門

近似乘法對卷積神經網路的影響

BT-Unet:醫學影象分割的自監督學習框架

語義分割該如何走下去?

輕量級模型設計與部署總結

從CVPR22出發,聊聊CAM是如何啟用我們文章的熱度!

入門必讀系列(十六)經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

入門必讀系列(十五)神經網路不work的原因總結

入門必讀系列(十四)CV論文常見英語單詞總結

入門必讀系列(十三)高效閱讀論文的方法

入門必讀系列(十二)池化各要點與各方法總結

TensorRT教程(三)TensorRT的安裝教程

TensorRT教程(一)初次介紹TensorRT

TensorRT教程(二)TensorRT進階介紹