首頁 運維 Docker nvidia docker2是什麼

nvidia docker2是什麼

Dec 08, 2021 pm 05:27 PM

nvidia-docker2.0是一個簡單的包,它主要透過修改docker的設定檔「/etc/docker/daemon.json」來讓docker使用NVIDIA Container runtime。

nvidia docker2是什麼

本文操作環境:Windows10系統、Docker 20.10.11版、Dell G3電腦。

NVidia Docker介紹

NVIDIA於2016年開始設計NVIDIA-Docker已方便容器使用NVIDIA GPUs。第一代nvidia-docker1.0實作了docker client的封裝,並在容器啟動時,將必要的GPU device和libraries掛載到容器中。但是這種設計的方式高度的與docker運行時耦合,缺乏彈性。存在的缺陷具體如下:

設計高度與docker耦合,不支援其它的容器運行時。如: LXC, CRI-O及未來可能增加的容器運作時。

不能更好的利用docker生態的其它工具。如: docker compose。

不能將GPU當作調度系統的一種資源來進行靈活的調度。

完善容器運行時對GPU的支援。如: 自動的獲取用戶層面的NVIDIA Driver libraries, NVIDIA kernel modules, device ordering等。

基於上面描述的這些弊端,NVIDIA開始了對下一代容器運行時的設計: nvidia-docker2.0。

nvidia-docker 2.0 的實作機制

先簡單介紹下nvidia-docker 2.0, containerd,nvidia-container-runtime,libnvidia-container以及runc直接的關係。

它們之間的關係可以透過下面這張圖關聯起來:

nvidia docker2是什麼

#nvidia-docker 2.0

nvidia-docker2.0 是一個簡單的套件,它主要透過修改docker的設定檔/etc/docker/daemon.json來讓docker使用NVIDIA Container runtime。

nvidia-container-runtime

nvidia-container-runtime 才是真正的核心部分,它在原有的docker容器運行時runc的基礎上增加一個prestart hook,用於呼叫libnvidia-container函式庫。

libnvidia-container

libnvidia-container 提供一個函式庫和一個簡單的CLI工具,使用這個函式庫可以讓NVIDIA GPU被Linux容器使用。

Containerd

Containerd主要負責的工作是:

  • 管理容器的生命週期(從容器的建立到銷毀)

  • 拉取/推送容器映像

  • #儲存管理(管理鏡像及容器資料的儲存)

  • 呼叫runc 運行容器

  • 管理容器的網路介面及網路

nvidia docker2是什麼

當containerd接收到請求之後,做好相關的準備工作,可以選擇自己呼叫runc也可以透過建立containerd-shim再去呼叫runc,而runc是基於OCI檔案對容器進行建立。上面就是普通容器所建立的基本流程。

RunC

RunC 是一個輕量級的工具,它是用來運行容器的,只用來做這一件事,而這一件事要做好。我們可以認為它就是一個命令列小工具,可以不用通過 docker 引擎,直接運行容器。事實上,runC 是標準化的產物,它根據 OCI 標準來創建和運行容器。而 OCI(Open Container Initiative)組織,旨在圍繞容器格式和運行時制定一個開放的工業化標準。

直接使用RunC的命令列即可以完成建立一個容器,並提供了簡單的互動能力。

上面已經介紹個各個元件的作用以及它們之間的關係,接下來詳細的描述下這張圖:

nvidia docker2是什麼

正常建立一個容器的流程是這樣的:

docker --> dockerd --> containerd--> containerd-shim -->runc --> container-process
登入後複製

docker客戶端將創建容器的請求發送給dockerd, 當dockerd收到請求任務之後將請求發送給containerd, containerd經過查看校驗啟動containerd-shim或者自己來啟動容器進程。

建立一個使用GPU的容器

建立GPU容器的流程如下:

docker--> dockerd --> containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process
登入後複製

基本流程和不使用GPU的容器差不多,只是把docker預設的運行時替換成了NVIDIA自家的nvidia-container-runtime。

這樣當nvidia-container-runtime建立容器時,先執行nvidia-container-runtime-hook這個hook去檢查容器是否需要使用GPU(透過環境變NVIDIA_VISIBLE_DEVICES來判斷)。如果需要則呼叫libnvidia-container來暴露GPU給容器使用。否則走預設的runc邏輯。

說到這裡nvidia-docker2.0的大體機制基本上就通了。但涉及到的nvidia-container-runtime, libnvidia-container, containerd,runc這些項目, 這本篇文章裡面就不一一介紹了。如果有興趣可以自行去探索學習。這些項目的地址在文章中都已經做個相關的連結。

推薦學習:《Docker影片教學

以上是nvidia docker2是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何將應用程序部署到Docker群集群集? 如何將應用程序部署到Docker群集群集? Mar 17, 2025 pm 04:20 PM

本文詳細介紹了將應用程序部署到Docker Swarm,涵蓋了過程中的準備,部署步驟和安全措施。

哪些Kubernetes Pod,部署和服務是什麼? 哪些Kubernetes Pod,部署和服務是什麼? Mar 17, 2025 pm 04:25 PM

本文解釋了Kubernetes的吊艙,部署和服務,詳細說明了它們在管理容器化應用程序中的作用。它討論了這些組件如何增強應用程序內的可擴展性,穩定性和通信。(159個字符)

如何在Kubernetes中擴展應用程序? 如何在Kubernetes中擴展應用程序? Mar 17, 2025 pm 04:28 PM

本文使用手動縮放,HPA,VPA和集群Autoscaler討論了Kubernetes中的擴展應用程序,並提供了監視和自動化縮放的最佳實踐和工具。

如何管理Kubernetes的部署? 如何管理Kubernetes的部署? Mar 17, 2025 pm 04:27 PM

本文討論了管理Kubernetes部署,專注於使用各種工具和最佳實踐的創建,更新,擴展,監視和自動化。

如何管理Docker群中的服務? 如何管理Docker群中的服務? Mar 17, 2025 pm 04:22 PM

文章討論了Docker Swarm中的管理服務,專注於創建,擴展,監視和更新而無需停機。

如何在Docker群中實現滾動更新? 如何在Docker群中實現滾動更新? Mar 17, 2025 pm 04:23 PM

本文討論了Docker Swarm中實施滾動更新以更新服務而無需停機。它涵蓋更新服務,設置更新參數,監視進度並確保更新。

為低延遲應用優化Docker的最佳方法是什麼? 為低延遲應用優化Docker的最佳方法是什麼? Mar 14, 2025 pm 02:00 PM

本文討論了針對低延遲應用程序優化Docker的策略,重點是最小化圖像大小,使用輕量級基礎圖像以及調整資源分配和網絡設置。

如何優化Docker圖像以進行尺寸和性能? 如何優化Docker圖像以進行尺寸和性能? Mar 14, 2025 pm 02:14 PM

文章討論了使用多階段構建,最小基本圖像以及Docker Scout和Dive等工具的優化碼頭圖像,以實現尺寸和性能。

See all articles