亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

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

    nvidia docker2是什么

    nvidia-docker2.0是一個(gè)簡(jiǎn)單的包,它主要通過修改docker的配置文件“/etc/docker/daemon.json”來(lái)讓docker使用NVIDIA Container runtime。

    nvidia docker2是什么

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

    NVidia Docker介紹

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

    設(shè)計(jì)高度與docker耦合,不支持其它的容器運(yùn)行時(shí)。如: LXC, CRI-O及未來(lái)可能會(huì)增加的容器運(yùn)行時(shí)。

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

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

    完善容器運(yùn)行時(shí)對(duì)GPU的支持。如: 自動(dòng)的獲取用戶層面的NVIDIA Driver libraries, NVIDIA kernel modules, device ordering等。

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

    nvidia-docker 2.0 的實(shí)現(xiàn)機(jī)制

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

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

    nvidia docker2是什么

    nvidia-docker 2.0

    nvidia-docker2.0 是一個(gè)簡(jiǎn)單的包,它主要通過修改docker的配置文件/etc/docker/daemon.json來(lái)讓docker使用NVIDIA Container runtime。

    nvidia-container-runtime

    nvidia-container-runtime 才是真正的核心部分,它在原有的docker容器運(yùn)行時(shí)runc的基礎(chǔ)上增加一個(gè)prestart hook,用于調(diào)用libnvidia-container庫(kù)。

    libnvidia-container

    libnvidia-container 提供一個(gè)庫(kù)和一個(gè)簡(jiǎn)單的CLI工具,使用這個(gè)庫(kù)可以使NVIDIA GPU被Linux容器使用。

    Containerd

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

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

    • 拉取/推送容器鏡像

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

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

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

    nvidia docker2是什么

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

    RunC

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

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

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

    nvidia docker2是什么

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

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

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

    創(chuàng)建一個(gè)使用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)的運(yùn)行時(shí)替換成了NVIDIA自家的nvidia-container-runtime。

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

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

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

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)