站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

nvidia docker2是什么

nvidia-docker2.0是一個簡單的包,它主要通過修改docker的配置文件“/etc/docker/daemon.json”來讓docker使用NVIDIA Container runtime。

nvidia docker2是什么

本文操作環(huán)境:Windows10系統(tǒng)、Docker 20.10.11版、Dell G3電腦。

NVidia Docker介紹

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

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

不能更好的利用docker生態(tài)的其它工具。如: docker compose。

不能將GPU作為調(diào)度系統(tǒng)的一種資源來進行靈活的調(diào)度。

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

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

nvidia-docker 2.0 的實現(xiàn)機制

先簡單介紹下nvidia-docker 2.0, containerd,nvidia-container-runtime,libnvidia-container以及runc直接的關(guān)系。

它們之間的關(guān)系可以通過下面這張圖關(guān)聯(lián)起來:

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的基礎(chǔ)上增加一個prestart hook,用于調(diào)用libnvidia-container庫。

libnvidia-container

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

Containerd

Containerd主要負(fù)責(zé)的工作是:

  • 管理容器的生命周期(從容器的創(chuàng)建到銷毀)

  • 拉取/推送容器鏡像

  • 存儲管理(管理鏡像及容器數(shù)據(jù)的存儲)

  • 調(diào)用runc 運行容器

  • 管理容器的網(wǎng)絡(luò)接口及網(wǎng)絡(luò)

nvidia docker2是什么

當(dāng)containerd接收到請求之后,做好相關(guān)的準(zhǔn)備工作,可以選擇自己調(diào)用runc也可以通過創(chuàng)建containerd-shim再去調(diào)用runc,而runc基于OCI文件對容器進行創(chuàng)建。 上面就是普通容器創(chuàng)建的基本流程。

RunC

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

直接使用RunC的命令行即可以完成創(chuàng)建一個容器,并提供了簡單的交互能力。

上面已經(jīng)介紹個各個組件的作用以及它們之間的關(guān)系,接下來詳細(xì)的描述下這張圖:

nvidia docker2是什么

正常創(chuàng)建一個容器的流程是這樣的:

docker --> dockerd --> containerd--> containerd-shim -->runc --> container-process

docker客戶端將創(chuàng)建容器的請求發(fā)送給dockerd, 當(dāng)dockerd收到請求任務(wù)之后將請求發(fā)送給containerd, containerd經(jīng)過查看校驗啟動containerd-shim或者自己來啟動容器進程。

創(chuàng)建一個使用GPU的容器

創(chuàng)建GPU容器的流程如下:

docker--> dockerd --> containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process

基本流程和不使用GPU的容器差不多,只是把docker默認(rèn)的運行時替換成了NVIDIA自家的nvidia-container-runtime。

這樣當(dāng)nvidia-container-runtime創(chuàng)建容器時,先執(zhí)行nvidia-container-runtime-hook這個hook去檢查容器是否需要使用GPU(通過環(huán)境變NVIDIA_VISIBLE_DEVICES來判斷)。如果需要則調(diào)用libnvidia-container來暴露GPU給容器使用。否則走默認(rèn)的runc邏輯。

說到這里nvidia-docker2.0的大體機制基本就通了。但是涉及到的nvidia-container-runtime, libnvidia-container, containerd,runc這些項目, 這本篇文章里面就不一一介紹了。如果感興趣可以自行去探索學(xué)習(xí)。這些項目的地址在文章中都已經(jīng)做個相關(guān)的鏈接。

推薦學(xué)習(xí):《Docker視頻教程》

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
亚洲国产精品一区二区成人片国内 | 亚洲精品无码成人片在线观看 | 在线成人精品国产区免费| 秋霞日韩一区二区三区在线观看| 在线观看精品国产福利片尤物 | 亚洲日韩国产一区二区三区在线 | 97精品一区二区视频在线观看| 色妞ww精品视频7777| 久久国产精品99久久久久久老狼| 久久精品中文字幕第23页| 麻豆人妻少妇精品无码专区| 久久精品无码一区二区三区日韩 | 日韩视频在线观看| 中文日韩字幕一区在线观看| 国产精品蜜臂在线观看| 国内精品videofree720| 国产精品99久久久久久| 亚洲精品无码专区| 久久精品免费一区二区喷潮| 亚洲日韩国产AV无码无码精品| 亚洲中文字幕一区精品自拍| 亚洲日韩精品无码AV海量| 久久精品视频在线看99| 精品精品国产自在97香蕉| WWW夜片内射视频日韩精品成人| 精品久久久久国产免费| 国产精品亚洲lv粉色| 精品久久久久久中文| 国产精品妇女一二三区| 日韩一级视频在线观看播放| 亚洲欭美日韩颜射在线二| 日韩版码免费福利视频| 精品一区二区三区视频| 青青草97国产精品免费观看| 午夜在线视频91精品 | 久久无码专区国产精品| 无码国内精品人妻少妇 | 精品国产免费观看| 最新国产午夜精品视频成人| 国产精品美女自在线观看免费| 国产精品天天在线|