容器是如何呼叫GPU的

2021-10-25 18:02:29 字數 1817 閱讀 8756

容器使用gpu的主要需求有兩個:

nvidia gpu對容器的支援具體可見:enabling gpus in the container runtime ecosystem

nvidia推出nvidia-docker套件以支援容器對gpu的操作。安裝完nvidia-docker後,在/etc/docker/daemon.jsonrumtimes中註冊nvidia runtime,使用nvidia runtime執行的容器就可通過容器中的nvidia驅動操作gpu顯示卡。

nvidia-docker專案只是建立在容器層的設計,真正呼叫gpu的核心支援放在libnvidia-container。該庫基於linux核心原語,與更高的容器執行時層無關。這樣就可以將gpu支援擴充套件到不同的容器環境中,例如docker、lxc和cri-o。該庫包含乙個cli工具並提供api以便繼承到其他執行時環境中。nvidia將容器使用gpu需要的執行時中的庫、工具和層整合到nvidia-container-runtime中。這個就是gpu容器在啟動時指定的那個runtime。

是nvidia維護的乙個容器runtime,它對runc進行了二次修改(runc是乙個根據oci標準來建立和執行容器的輕量級工具),對所有指定nvidia runtime的容器注入乙個自定義的pre-start hook,使容器支援gpu操作。

nvidia-container-runtime的構建關係如圖:

nvidia-container-runtime-hook是乙個二進位製包,作用是將當前容器中的資訊收集並處理,轉換為引數呼叫libnvidia-container的nvidia-container-cli工具。比如對環境變數nvidia_visible_devices的處理,如果未指定或是void,則認為是非gpu容器,不做任何處理;否則呼叫nvidia-container-cli配置容器對gpu硬體的使用支援,將nvidia 驅動庫的so檔案 和 gpu裝置資訊, 通過檔案掛載的方式對映到容器中。環境變數中指定了哪幾個gpu就掛載哪幾個gpu。nvidia-container-runtime-hook還負責傳入容器gpu應用程序的pid。

nvidia-container-cli的configure元件中負責掛載gpu的部分**:

/* mount the driver, visible devices, mig-configs and mig-monitors. */if(

perm_set_capabilities

(&err, cap_effective, ecaps[nvc_mount]

,ecaps_size

(nvc_mount)

)<0)

if(nvc_driver_mount

(nvc, cnt, drv)

<0)

for(size_t i =

0; i < devices.ngpus;

++i)

}

在容器中使用mount命令可以看到掛載的gpu

使用nvidia-smi命令檢視被對映的gpu卡

fastadmin中js是如何呼叫的

想要了解fastadmin中的js是怎麼呼叫的,就應該先了解requirejs。requirejs是模組化工具,每乙個我們自己的js檔案或者庫都可以看成是乙個模組,按需引入。寫法如下 src是引入requrejs框架檔案,data main是我們自己的js的總入口。js main對應的js檔案是js...

STL中的容器是如何實現的,如何儲存的

標準的stl中關聯容器有set map multiset multimap,這四種容器都是基於紅黑樹實現的。使用這些容器需要包含 include include sgi stl還提供了標準之外的以基於hash table實現的的hash set hash map hash multiset hash...

docker容器使用gpu的環境配置

在docker中使用gpu,必須在建立容器時開啟 gpus引數,並保證docker的版本在19.03以上。宿主機中建立檔案 vi nvidia container runtime script.sh 新增以下內容,更新nvidia container runtime安裝包 sudo curl s l...