邁向 GPU 時代 - 在 WSL2 使用 CUDA
| | | 0 | |
兩個月前,小閃光斥鉅資建置的 RTX5080正式商轉,搖身成為家中的算力大戶,而我最近想亂玩一些深度學習、LLM,於是雙方日前簽署了一筆 3 億美元的地端運算合約,正式展開合作。
我偏好在 Linux 環境跑程式,剛好可以遠端 SSH 登入 WSL,不影響 Windows 本機作業,完美實現四手聯彈,多人共用。
而這衍生一個議題:如何在 WSL 正確啟用 CUDA 以充分運用 RTX 5080 的算力?現在才摸 CUDA 時機算晚,好處是相關技術已成熟,照著相關文件說明操作,沒兩下便順利把環境架設好。
安裝 CUDA 驅動程式
原本擔心會遇到一堆茶包,實際上沒想像來得複雜,一個小眉角是要裝對 CUDA Toolkit 版本,不然原本正確的 WSL2 GPU 驅動程式會被覆寫搞壞,但文件寫得挺清楚,看了再上就不致出錯。我的操作步驟如下:
參考:在 WSL 上啟用 NVIDIA CUDA、CUDA on WSL User Guide
- 安裝 NVIDIA GeForce Game Ready 驅動程式
- 安裝 WSL (Linux 版本建議選 Ubuntu)
- 安裝 Windows NVIDIA GPU 驅動程式後,WSL2 已自動指向正確的 libcuda.so 版本,須小心因安裝 CUDA Toolkit 時覆寫成無效版,下載時記得選 CUDA Toolkit for WSL 2:
(文件有提到sudo apt-key del 7fa2af80清除 NVIDIA CUDA Repository 舊金鑰以確保可正確安裝新版套件 參考)

- 我使用 deb (network) 網路安裝,下載安裝需要一陣子:
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt-get update sudo apt-get -y install cuda-toolkit-13-0 - 安裝後使用 nvidia-smi 或 nvcc 檢查 CUDA 版本,見到如下畫面就代表安裝成功了。

安裝 Docker Engine
有些實驗或開發環境我想在 WSL 上用 Docker 跑,省下安裝 Python 及相關套件的煩惱,便順手把 Docker Engine 也裝起來。
參考: Install Docker Engine on Ubuntu
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
安裝 NVIDIA Container Toolkit
在 WSL 跑的 Docker 容器想支援 CUDA,需要一些額外安裝設定。
參考:Installing the NVIDIA Container Toolkit
sudo apt-get update && sudo apt-get install -y --no-install-recommends curl gnupg2
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.0-1
sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
# 設定 docker
sudo nvidia-ctk runtime configure --runtime=docker
# 重啟 Docker Engine
sudo systemctl restart docker
試跑 CUDA Container
sudo docker run --rm --gpus all ubuntu nvidia-smi

執行 YOLO Docker
支援 CUDA 的 Docker 環境就緒,跑個 YOLO Docker 測試一下: 參考:Ultralytics Docker 快速入门指南
# Set image name as a variable
t=ultralytics/ultralytics:latest
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t
# 測試 Docker 可正確運行並顯示 CUDA 版本
sudo docker run --gpus all --rm ultralytics/ultralytics nvidia-smi

用 YOLOv8 現成的物件識別模型跑個簡單測試:(參考:YOLO v8 實測)
sudo docker run --gpus all --rm -it ultralytics/ultralytics /bin/bash
yolo predict model=yolov8n.pt source="https://cdn.pixabay.com/photo/2015/06/24/16/36/office-820390_960_720.jpg"
成功!

Comments
Be the first to post a comment