快轉到主要內容

Linux系統安裝Nvidia Container Toolkit教學,在Docker與Podman容器裡面跑CUDA

· 民國115年丙午年
·
切換繁體/簡體
分類 資訊科技 虛擬機與容器技術
標籤 Nvidia CUDA Docker
目錄

不想裝CUDA但是想跑CUDA,那就改在Docker容器裡跑吧!

Nvidia Container Toolkit是Nvidia開發的開源軟體,原始碼位於Github,當然Nvidia驅動部分還是閉源的。

Docker與Podman裡面的程式,預設是不能使用CUDA加速計算的。透過這款設計給容器用的Nvidia工具,使容器可以存取宿主機GPU,使用CUDA計算。

根據官網,架構圖如下:

即使Linux宿主機沒有安裝CUDA Toolkit,Docker容器內照樣可以使用CUDA計算。方便你在容器裡面跑不同版本的CUDA,不會受到宿主機的CUDA版本影響。

1. Nvidia Container Toolkit優點?
#

有些程式(就是在說你,Tensorflow)非常吃Nvidia閉源驅動+CUDA+Linux系統的版本,三位一體只要有個版本不對就會出亂子,甚至CUDA只要差一兩個版本程式就會不給跑。

這個時候採用Docker容器化開發可以降低困擾,將CUDA塞在Docker裡面就能迴避Linux宿主機版本的要求。

Nvidia Container Toolkit僅求要求宿主機安裝Nvidia閉源驅動即可,卻不需要安裝CUDA Toolkit。

並且由於容器有多重複製的特性,開發者能夠按照不同專案需求開不同的容器環境部署服務,各個容器的CUDA版本是彼此獨立的。

此外,依賴CUDA的cudnn、TensorRT應也可如法炮製。

宿主機只需要安裝Nvidia閉源驅動,剩下的交給Docker容器去處理就好了。而負責讓容器內的CUDA跟宿主機Nvidia驅動溝通的媒介,就是Nvidia Container Toolkit了。


Nvidia Container Toolkit還可以解決依賴特定發行版的問題。如果你系統用的不是Nvidia原廠支援的發行版(Deb-based、RPM-based)的就GG了,這很不公平。

Nvidia Container Toolkit僅依賴宿主機的Nvidia閉源驅動,卻不需要安裝CUDA Toolkit。

於是它可以讓Linux宿主機在沒有安裝CUDA Toolkit的情況下,於Docker/Podman容器使用CUDA進行計算。

特別適合給不方便安裝CUDA的Linux使用。

這適用一種極端的情況:immutable distro,例如Fedora Silverblue、openSUSE MicroOS、Vanilla OS等等。他們雖然可以裝Nvidia驅動,但是沒辦法安裝CUDA套件。透過Nvidia Container Toolkit即可繞過這個問題。

2. 如何安裝Nvidia Container Toolkit
#

此處以Ubuntu為例

  1. 在Ubuntu安裝Docker

  2. 首先,在Ubuntu LTS安裝Nvidia顯示卡驅動

  3. Ubuntu沒有打包這個套件,需要加入NVIDIA Container Toolkit的套件庫:

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
  1. 安裝NVIDIA Container Toolkit
sudo apt update

sudo apt install nvidia-container-toolkit
  1. 如果使用Docker,註冊Nvidia裝置,重新啟動Docker。執行Ubuntu容器,測試能否印出Nvidia顯示卡的資訊。
sudo nvidia-ctk runtime configure --runtime=docker

sudo systemctl restart docker

sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

註:如果出現ERRO[0000] unable to load config for runtime docker: EOF錯誤,嘗試手動編輯/etc/docker/daemon.json,加入以下內容:

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
  1. 至於Podman的話,使用Nvidia CDI,執行Ubuntu容器,測試能否印出Nvidia顯示卡的資訊。
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml

nvidia-ctk cdi list

podman run --rm --device nvidia.com/gpu=all --security-opt=label=disable ubuntu nvidia-smi

參考資料
#

Installing the NVIDIA Container Toolkit - NVIDIA CONTAINER TOOLKIT

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。