站長資訊網
        最全最豐富的資訊網站

        nvidia docker2是什么

        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視頻教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品第13页| 中文字幕精品一区二区日本| 精品久久久久久国产91| 亚洲精品视频在线观看你懂的| 中文字幕一区二区精品区| 无码精品久久久久久人妻中字| 国产精品美女免费视频观看| japanese乱人伦精品| 中文字幕精品一区| 精品久久久久久久久久久久久久久| 国产精品欧美久久久天天影视| 日韩精品人妻系列无码专区| 欧美日韩国产成人高清视频,欧美日韩在线精品一 | 精品国产毛片一区二区无码| 久久精品国产亚洲一区二区| 经典国产乱子伦精品视频| 自拍偷自拍亚洲精品被多人伦好爽 | 欧美精品高清在线xxxx| 国产成人精品视频2021| 精品综合久久久久久97超人| 国内精品久久久久久99蜜桃| 久久精品黄AA片一区二区三区| 中文字幕日韩精品无码内射 | 亚洲国产精品无码一线岛国| 午夜精品一区二区三区在线视 | 国产乱码精品一品二品| 熟女精品视频一区二区三区| 香港aa三级久久三级老师2021国产三级精品三级在 | 2021精品国产综合久久| japanese乱人伦精品| 99久久久精品| 国产成人精品福利网站在线| 99精品一区二区三区无码吞精| 国产中老年妇女精品| 国产精品无码午夜福利| 亚洲国产精品一区二区成人片国内| 亚洲精品成人无码中文毛片不卡| 亚洲欧洲国产精品香蕉网| 亚洲av永久无码精品秋霞电影影院 | 色一乱一伦一图一区二区精品 | 国产精品久久久久影院嫩草|