Docker容器中使用GPU

2021-12-27 Linux運維交流社區

背景

容器封裝了應用程式的依賴項,以提供可重複和可靠的應用程式和服務執行,而無需整個虛擬機的開銷。如果您曾經花了一天的時間為一個科學或 深度學習 應用程式提供一個包含大量軟體包的伺服器,或者已經花費數周的時間來確保您的應用程式可以在多個 linux 環境中構建和部署,那麼 Docker 容器非常值得您花費時間。

安裝添加docker源

[root@localhost ~]# sudo yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repoLoaded plugins: fastestmirror, langpacksadding repo from: https://download.docker.com/linux/centos/docker-ce.repograbbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.reporepo saved to /etc/yum.repos.d/docker-ce.repo[root@localhost ~]#[root@localhost ~]# cat /etc/yum.repos.d/docker-ce.repo[docker-ce-stable]name=Docker CE Stable - $basearchbaseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stableenabled=1gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-stable-debuginfo]name=Docker CE Stable - Debuginfo $basearchbaseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/stableenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-stable-source]name=Docker CE Stable - Sourcesbaseurl=https://download.docker.com/linux/centos/$releasever/source/stableenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test]name=Docker CE Test - $basearchbaseurl=https://download.docker.com/linux/centos/$releasever/$basearch/testenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test-debuginfo]name=Docker CE Test - Debuginfo $basearchbaseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/testenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test-source]name=Docker CE Test - Sourcesbaseurl=https://download.docker.com/linux/centos/$releasever/source/testenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-nightly]name=Docker CE Nightly - $basearchbaseurl=https://download.docker.com/linux/centos/$releasever/$basearch/nightlyenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-nightly-debuginfo]name=Docker CE Nightly - Debuginfo $basearchbaseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/nightlyenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-nightly-source]name=Docker CE Nightly - Sourcesbaseurl=https://download.docker.com/linux/centos/$releasever/source/nightlyenabled=0gpgcheck=1gpgkey=https://download.docker.com/linux/centos/gpg[root@localhost ~]#

下載安裝包

[root@localhost ~]# cd docker[root@localhost docker]#[root@localhost docker]# repotrack docker-ce

安裝docker 並設置開機自啟

[root@localhost docker]# yum install ./*[root@localhost docker]# systemctl  start docker[root@localhost docker]#[root@localhost docker]# systemctl  enable dockerCreated symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.[root@localhost docker]#

配置nvidia-docker的源

[root@localhost docker]# distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \>    && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo[root@localhost docker]# cat /etc/yum.repos.d/nvidia-docker.repo[libnvidia-container]name=libnvidia-containerbaseurl=https://nvidia.github.io/libnvidia-container/stable/centos7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=1gpgkey=https://nvidia.github.io/libnvidia-container/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[libnvidia-container-experimental]name=libnvidia-container-experimentalbaseurl=https://nvidia.github.io/libnvidia-container/experimental/centos7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=0gpgkey=https://nvidia.github.io/libnvidia-container/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-container-runtime]name=nvidia-container-runtimebaseurl=https://nvidia.github.io/nvidia-container-runtime/stable/centos7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=1gpgkey=https://nvidia.github.io/nvidia-container-runtime/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-container-runtime-experimental]name=nvidia-container-runtime-experimentalbaseurl=https://nvidia.github.io/nvidia-container-runtime/experimental/centos7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=0gpgkey=https://nvidia.github.io/nvidia-container-runtime/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-docker]name=nvidia-dockerbaseurl=https://nvidia.github.io/nvidia-docker/centos7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=1gpgkey=https://nvidia.github.io/nvidia-docker/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crt[root@localhost docker]#

安裝下載nvidia-docker

[root@localhost ~]# mkdir nvidia-docker2[root@localhost ~]# cd nvidia-docker2[root@localhost nvidia-docker2]# yum update -y[root@localhost nvidia-docker2]# repotrack nvidia-docker2[root@localhost nvidia-docker2]# yum install ./*

[root@localhost ~]# mkdir nvidia-container-toolkit[root@localhost ~]# cd nvidia-container-toolkit[root@localhost nvidia-container-toolkit]# repotrack nvidia-container-toolkit[root@ai-rd nvidia-container-toolkit]# yum install ./*

下載鏡像,並保存

[root@localhost ~]# docker pull nvidia/cuda:11.0-base11.0-base: Pulling from nvidia/cuda54ee1f796a1e: Pull completef7bfea53ad12: Pull complete46d371e02073: Pull completeb66c17bbf772: Pull complete3642f1a6dfb3: Pull completee5ce55b8b4b9: Pull complete155bc0332b0a: Pull completeDigest: sha256:774ca3d612de15213102c2dbbba55df44dc5cf9870ca2be6c6e9c627fa63d67aStatus: Downloaded newer image for nvidia/cuda:11.0-basedocker.io/nvidia/cuda:11.0-base[root@localhost ~]#[root@localhost ~]# docker imagesREPOSITORY    TAG         IMAGE ID       CREATED         SIZEnvidia/cuda   11.0-base   2ec708416bb8   15 months ago   122MB[root@localhost ~]#[root@localhost ~]# docker save -o cuda-11.0.tar nvidia/cuda:11.0-base[root@localhost ~]#[root@localhost ~]# ls cuda-11.0.tarcuda-11.0.tar[root@localhost ~]#

在要測試的伺服器上導入鏡像

[root@ai-rd cby]# docker load -i cuda-11.0.tar2ce3c188c38d: Loading layer [==================================================>]  75.23MB/75.23MBad44aa179b33: Loading layer [==================================================>]  1.011MB/1.011MB35a91a75d24b: Loading layer [==================================================>]  15.36kB/15.36kBa4399aeb9a0e: Loading layer [==================================================>]  3.072kB/3.072kBfa39d0e9f3dc: Loading layer [==================================================>]  18.84MB/18.84MB232fb43df6ad: Loading layer [==================================================>]  30.08MB/30.08MB0da51e35db05: Loading layer [==================================================>]  22.53kB/22.53kBLoaded image: nvidia/cuda:11.0-base[root@ai-rd cby]#[root@ai-rd cby]# docker images | grep cudanvidia/cuda                          11.0-base   2ec708416bb8   15 months ago   122MB[root@ai-rd cby]#

安裝升級內核

[root@ai-rd cby]# yum install kernel-headers[root@ai-rd cby]# yum install kernel-devel[root@ai-rd cby]# yum update kernel*

禁用模塊,並升級boot

[root@ai-rd cby]# vim /etc/modprobe.d/blacklist-nouveau.conf[root@ai-rd cby]# cat /etc/modprobe.d/blacklist-nouveau.confblacklist nouveauoptions nouveau modeset=0[root@ai-rd cby]#[root@ai-rd cby]# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak[root@ai-rd cby]# sudo dracut -v /boot/initramfs-$(uname -r).img $(uname -r)

下載驅動並安裝

[root@localhost ~]# wget https://cn.download.nvidia.cn/tesla/450.156.00/NVIDIA-Linux-x86_64-450.156.00.run[root@ai-rd cby]# chmod +x NVIDIA-Linux-x86_64-450.156.00.run[root@ai-rd cby]# ./NVIDIA-Linux-x86_64-450.156.00.run

配置docker

[root@ai-rd ~]# vim /etc/docker/daemon.json[root@ai-rd ~]# cat /etc/docker/daemon.json{    "runtimes": {        "nvidia": {            "path": "nvidia-container-runtime",            "runtimeArgs": []        }    }}

[root@ai-rd ~]#[root@ai-rd ~]# systemctl daemon-reload[root@ai-rd ~]#[root@ai-rd ~]#[root@ai-rd ~]#[root@ai-rd ~]# systemctl restart docker[root@ai-rd ~]#

測試docker中的調用情況

[root@ai-rd ~]#[root@ai-rd ~]# sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smiTue Nov 23 06:03:04 2021      +--+| NVIDIA-SMI 450.156.00   Driver Version: 450.156.00   CUDA Version: 11.0     ||-+--+--+| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC || Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. ||                               |                      |               MIG M. ||===============================+======================+======================||   0  Tesla T4            Off  | 00000000:86:00.0 Off |                    0 || N/A   90C    P0    34W /  70W |      0MiB / 15109MiB |      6%      Default ||                               |                      |                  N/A |+-+--+--+
+--+| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=============================================================================|| No running processes found |+--+[root@ai-rd ~]#





https://blog.csdn.net/qq_33921750

https://my.oschina.net/u/3981543

https://www.zhihu.com/people/chen-bu-yun-2

https://segmentfault.com/u/hppyvyv6/articles

https://juejin.cn/user/3315782802482007

https://space.bilibili.com/352476552/article

https://cloud.tencent.com/developer/column/93230

知乎、CSDN、開源中國、思否、掘金、嗶哩嗶哩、騰訊雲

相關焦點

  • Docker容器如何優雅使用NVIDIA GPU
    默認情況下,Docker 甚至不會向容器添加 GPU,因此docker run根本看不到您的硬體。概括地說,讓 GPU 工作是一個兩步過程:在映像中安裝驅動程序,然後指示 Docker 在運行時將 GPU 設備添加到容器中。本指南側重於 CUDA 和 Docker 的現代版本。
  • cAdvisor無法提供特權模式容器GPU使用指標
    尋蹤覓源 問題的最終表現是通過cAdvisor無法獲取開啟特權模式容器的gpu相關數據,即 curl localhost:4194/api/v1.3/docker/{containerID} 返回的結果中不包含任何gpu信息,而沒有開特權模式的容器是可以正常返回gpu相關信息的。
  • Docker中部署TensorFlow GPU
    Docker中部署TensorFlow GPUDocker 是在 Linux 上啟用 TensorFlow GPU 支持的最簡單方法,因為只需在主機上安裝
  • 微服務中的容器技術---Docker(一),Docker的安裝和使用
    概述在微服系統中,因為服務特別多,如果手動部署以及啟動、重啟等工作會比較繁瑣,這裡會涉及到自動化部署,自動化部署就需要用到容器技術
  • 使用Docker-Compose編排容器
    默認情況, docker-compose up 將會整合所有容器的輸出,並且退出時,所有容器將會停止。如果使用 docker-compose up -d ,將會在後臺啟動並運行所有的容器。默認情況,如果該服務的容器已經存在, docker-compose up 將會停止並嘗試重新創建他們(保持使用 volumes-from 掛載的卷),以保證 docker-compose.yml 的修改生效。如果你不想容器被停止並重新創建,可以使用 docker-compose up --no-recreate。如果需要的話,這樣將會啟動已經停止的容器。
  • Docker容器進階(中)
    如下:[root@qfedu.com ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED  SIZEdocker.io/redis latest e4a35914679d 2weeks ago 182.9 MB[root@qfedu.com ~]# docker run --name myredis -P
  • 使用Cadvisor監控Docker容器
    Docker Compose 配置現在,我們需要對Docker Compose進行配置,指定安裝哪些容器,以及每個容器使用什麼埠,使用哪些卷等等。你可以使用ps命令來檢查驗證三個容器是否運行正常。docker-compose ps這時候,你會看到類似這樣的結果:
  • 踢掉 Docker 後,Kubernetes 還能歡快地跑 GPU?
    Docker 如何使用 GPU 早就被說爛了,那麼以 Containerd 作為容器運行時的集群是如何使用 GPU的,有人知道嗎?下面進入今天的主題,Kubernetes 具有對機器的資源進行分配和使用的能力,比如可以指定容器最多使用多少內存以及使用多少 CPU 計算資源。那麼問題來了,一般來說容器就是使用 CPU 和內存資源,那麼對於需要使用顯卡的 Pod,Kubernetes 也能夠支持嗎?答案當然是可以啦!
  • 如何在CDSW中使用GPU運行深度學習
    不同的項目可以使用獨立版本的算法庫,你也可以通過CDSW的docker定製來使用不用的CUDA和cuDNN版本。對於docker定製可以參考Fayson以前的文章《如何基於CDSW基礎鏡像定製Docker》和《如何在CDSW中定製Docker鏡像》。
  • Docker系列教程:如何在 Docker 容器中運行 Nginx
    此外,您將學習如何創建 Docker 數據卷以在容器和主機文件系統之間共享信息。Nginx 是一種流行的開源軟體,用於 Web 服務、反向代理、緩存、負載平衡等。它非常流行並在當今許多高流量網站上使用。Docker 最常見的工作負載之一是使用它來容器化 Web 伺服器。我們將向您展示如何使用 Nginx 進行設置。因此,讓我們帶您完成整個過程。
  • 如何在Ubuntu中安裝Docker和運行 Docker容器
    Docker使用容器可以更輕鬆地創建,部署和運行應用程式。使用容器,開發人員(和系統管理員)可以使用運行應用程式所需的一切來打包應用程式 - 代碼,運行時,庫,環境變量和配置文件,並將它們作為一個包發送出去。 是的,真是太好了!在本文中,我們將向您展示如何安裝Docker CE(Community Edition),在Ubuntu發行版上創建和運行Docker容器。
  • 使用Docker安裝Tomcat、Nginx、Redis容器
    > 今天本篇文章為大家分享Docker安裝Tomcat容器、Nginx容器、Redis容器的系列課程,歡迎大家一起觀看閱讀哦!使用Do
  • 啟用Docker虛擬機GPU,加速深度學習
    為了解決這一兼容問題,就有必要使用到虛擬機,現在很多開源項目都會提供一個虛擬機文件,裡面包含了所有項目所需的軟體包和環境。GPU加速接下來說一下GPU加速。使用Docker虛擬機解決了開發環境問題,但同時又引入了另一個問題:虛擬機通常無法啟用GPU。
  • 一鍵搭建深度學習平臺,基於Docker/Mesos和NVIDIA GPU詳細教程
    為了解決上述問題,一個更合理的思路是利用 Mesos 將 GPU 資源匯聚成資源池來實現資源共享,並借用 Docker 交付深度學習的 runtime 環境,很好的解決了上述問題。清華大學交叉信息研究院開放計算項目實驗室( OCP 實驗室)基於以上背景,與數人云合作解決深度學習環境部署繁瑣的問題,該平臺從 6 月份開始已經為清華大學的師生提供服務。
  • 使用 Docker 容器化 Django Web 應用
    我從 GitHub 中挑選了一個隨機項目,該項目有一個公開的 issue[1],稱 Docker 化(後文使用 Dockerize)可以在這裡作為示例進行貢獻和使用。為什麼要在現實世界中 Dockerize 現有的 Django Web 應用程式呢?有很多原因,但如果你沒有,那麼就當玩玩,哈哈。我決定使用 Docker,因為我的一個應用程式很難部署。
  • 怎樣在Python中操作Docker容器?
    如果你能讓那些棘手的應用在Linux環境下運行起來,你就可以通過sidomo,毫不費力地就在Python中調用這個應用。目前很多人使用容器Docker Daemon API來管理承載著他們應用的容器。 (Kubernetes / Mesos 就是很好的例子)。
  • Docker容器的管理
    還有一點特別需要提醒的是:docker run 鏡像名 如果鏡像文件在本地不存在,就會在線去下載該鏡像的資源信息。docker的容器啟動成功後,使用docker ps -a可以查看容器的ID記錄信息。下面詳細的演示這部分的應用:#運行docker的鏡像信息[root@wuyaShare ~]# docker run -it centos:7.8.2003 bash[root@b8c896d0a0d6 /]# dateWed Oct 20 08:42:46 UTC 2021[root@b8c896d0a0d6 /]# exitexit
  • 用GPU和Docker搭建高效靈活的深度學習研發平臺
    現在你應該就可以開始使用幾乎一成不變的系統,從而享受容器化帶來的益處。請注意,這裡我們使用的是特權模式來映射GPU設備到Docker容器,這從共享主機模式角度是一個不安全的方式。Docker鏡像構建如下:$ cd es-dev-stack/tflowgpu$ docker build -t tflowgpu .
  • docker學習15-Docker 使用修改後容器來創建鏡像
    docker commitdocker commit 命令是從容器創建一個新的鏡像, 基本語法docker commit [OPTIONS] 容器名稱或id 鏡像名稱:tagPTIONS參數說明:-a :提交的鏡像作者;-c :使用Dockerfile指令來創建鏡像;-m :提交時的說明文字;-p :在commit時,將容器暫停
  • Docker 系列教程:輕鬆在 Docker 容器中運行 MySQL 圖文指南
    本指南逐步解釋了如何在幾分鐘內設置在 Docker 容器中運行新的 MySQL 伺服器。Docker 的一大優點是您可以快速使用它來試用應用程式,而無需直接在您的機器上安裝它。您可以使用 Docker 在容器中運行資料庫,就像它是遠程伺服器一樣,並測試您的應用程式如何與其交互。使用 Docker 容器運行 MySQL 是一種廣泛使用的機制。