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進階介紹