国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

docker掛載NVIDIA顯卡運行pytorch的方法

2024-09-01 13:53:45
字體:
來源:轉載
供稿:網友

寫在前面:

  請參考之前的文章安裝好CentOS、NVIDIA相關驅動及軟件、docker及加速鏡像。

  主機運行環境

$ uname -aLinux CentOS 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux$ cat /usr/local/cuda/version.txtCUDA Version 8.0.61$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2#define CUDNN_MAJOR   6#define CUDNN_MINOR   0#define CUDNN_PATCHLEVEL 21#define CUDNN_VERSION  (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)#include "driver_types.h"# NVIDIA 1080ti 

一、關于GPU的掛載

1. 在docker運行時指定device掛載

  先查看一下有哪些相關設備

$ ls -la /dev | grep nvidiacrw-rw-rw-  1 root root  195,  0 Nov 15 13:41 nvidia0crw-rw-rw-  1 root root  195,  1 Nov 15 13:41 nvidia1crw-rw-rw-  1 root root  195, 255 Nov 15 13:41 nvidiactlcrw-rw-rw-  1 root root  242,  0 Nov 15 13:41 nvidia-uvmcrw-rw-rw-  1 root root  242,  1 Nov 15 13:41 nvidia-uvm-tools

  電腦上裝了兩個顯卡。我需要運行pytorch,dockerhub中pytorch官方鏡像沒有gpu支持,所以只能先pull一個anaconda鏡像試試,后面可以編排成Dockerfile。

$ docker run -it -d --rm --name pytorch -v /home/qiyafei/pytorch:/mnt/home --privileged=true --device /dev/nvidia-uvm:/dev/nvidia-uvm --device /dev/nvidia1:/dev/nvidia1 --device /dev/nvidiactl:/dev/nvidiactl okwrtdsh/anaconda3 bash

  okwrtdsh的鏡像似乎是針對他們實驗室GPU環境的,有點過大了,不過勉強運行一下還是可以的。在容器內部還需要

安裝pytorch:

$ conda install pytorch torchvision -c pytorch

  這里運行torch成功,但是加載顯卡失敗了,可能還是因為驅動不匹配的原因吧,需要重新安裝驅動,暫時不做此嘗試; 

二、通過nvidia-docker在docker內使用顯卡

docker,pytorch

詳細信息:https://github.com/NVIDIA/nvidia-docker

(1)安裝nvidia-docker

  nvidia-docker其實是docker引擎的一個應用插件,專門面向NVIDIA GPU,因為docker引擎是不支持NVIDIA驅動的,安裝插件后可以在用戶層上直接使用cuda。具體看上圖。這個圖很形象,docker引擎的運行機制也表現出來了,就是在系統內核之上通過cgroup和namespace虛擬出一個容器OS的用戶空間,我不清楚這是否運行在ring0上,但是cuda和應用確實可以使用了(虛擬化的問題,如果關心此類問題可以了解一些關于docker、kvm等等虛擬化的實現方式,目前是系統類比較火熱的話題)

  下載rpm包:https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm

  這里也可以通過添加apt或者yum sourcelist的方式進行安裝,但是我沒有root權限,而且update容易引起docker重啟,如果不是實驗室的個人環境不推薦這么做,防止破壞別人正在運行的程序(之前公司一個小伙子就是在阿里云上進行了yum update,結果導致公司部分業務停了一個上午)。

$ sudo rpm -i nvidia-docker-1.0.1-1.x86_64.rpm && rm nvidia-docker-1.0.1-1.x86_64.rpm$ sudo systemctl start nvidia-docker

(2)容器測試

  我們還需要NVIDIA官方提供的docker容器nvidia/cuda,里面已經編譯安裝了CUDA和CUDNN,或者直接run,缺少image的會自動pull。

$ docker pull nvidia/cuda$ nvidia-docker run --rm nvidia/cuda nvidia-smi

   在容器內測試是可以成功使用nvidia顯卡的:

docker,pytorch

(3)合適的鏡像或者自制dockerfile

合適的鏡像:這里推薦Floydhub的pytorch,注意對應的cuda和cudnn版本。

docker pull floydhub/pytorch:0.3.0-gpu.cuda8cudnn6-py3.22nvidia-docker run -ti -d --rm floydhub/pytorch:0.3.0-gpu.cuda8cudnn6-py3.22 bash

docker,pytorchdocker,pytorch

自制dockerfile

  首先,我們需要把要裝的東西想清楚:

  1. 基礎鏡像肯定是NVIDIA官方提供的啦,最省事,不用裝cuda和cudnn了;

  2. vim、git、lrzsz、ssh這些肯定要啦;

  3. anaconda、pytorch肯定要啦;

  所以需要準備好國內源source.list,否則安裝速度很慢。

deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial universedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates universedeb http://mirrors.aliyun.com/ubuntu/ xenial multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-propertiesdeb http://archive.canonical.com/ubuntu xenial partnerdeb-src http://archive.canonical.com/ubuntu xenial partnerdeb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-security universedeb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

  下載anaconda的地址:https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh,這里直接在Dockerfile里下了,具體如下:

$ vim DockerfileFROM nvidia/cudaLABEL author="qyf"ENV PYTHONIOENCODING=utf-8RUN mv /etc/apt/sources.list /etc/apt/sources.list.bakADD $PWD/sources.list /etc/apt/sources.listRUN apt-get update --fix-missing && /  apt-get install -y vim net-tools curl wget git bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 mercurial subversion apt-transport-https software-properties-commonRUN apt-get install -y openssh-server -yRUN echo 'root:passwd' | chpasswdRUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_configRUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_configRUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && wget --quiet https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh -O ~/anaconda.sh && /bin/bash ~/anaconda.sh -b -p /opt/conda && rm ~/anaconda.shRUN apt-get install -y grep sed dpkg && /  TINI_VERSION=`curl https://github.com/krallin/tini/releases/latest | grep -o "/v.*/"" | sed 's:^../(.*/).$:/1:'` && /  curl -L "https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini_${TINI_VERSION}.deb"; > tini.deb && /  dpkg -i tini.deb && /  rm tini.deb && /  apt-get cleanENV PATH /opt/conda/bin:$PATHRUN conda install pytorch torchvision -c pytorch -yENTRYPOINT [ "/usr/bin/tini", "--" ]CMD [ "/bin/bash" ]

  通過docker build構造鏡像:

docker build -t pytorch/cuda8 ./

  運行成功調用cuda。 

docker,pytorch  

三、關于一些bug

  這里有部分debian的配置,我照著dockerhub上anaconda鏡像抄的,這里就不再配置了,反正跑起來后有鏡像也可以用。系統隨后可能會出現錯誤:

kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1

docker,pytorchdocker,pytorch  

  這是一個Ubuntu的內核錯誤,截止到到目前為止似乎還沒完全解決。

docker,pytorchdocker,pytorch  

  這個小哥給出了一個解決方案,至少他給出的錯誤原因我是相信的:是由內核的TCP套接字錯誤引發的。這里我給出一些思考,關于上面的結構圖,在顯卡上,通過nvidia-docker,docker之上的容器可以使用到底層顯卡(驅動顯然是在docker之下的),而TCP套接字,我猜測也是這種使用方法,而虛擬出來的dockerOS,應該是沒有權限來訪問宿主機內核的,至少內核限制了部分權限。這位小哥給出了測試內核,如果有興趣可以去幫他測試一下:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711407/comments/46。

總結

以上所述是小編給大家介紹的docker掛載NVIDIA顯卡運行pytorch的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 措美县| 嘉禾县| 会理县| 凤冈县| 清徐县| 禄丰县| 晴隆县| 迁安市| 仁寿县| 巫溪县| 旬邑县| 迭部县| 昔阳县| 东乡族自治县| 南雄市| 新乡市| 偃师市| 赣州市| 吉林市| 贵阳市| 乐都县| 扶余县| 台山市| 搜索| 靖安县| 资源县| 新津县| 扎鲁特旗| 肥乡县| 江西省| 凉城县| 佳木斯市| 荣昌县| 忻城县| 本溪市| 江西省| 田阳县| 壤塘县| 宜宾县| 开封市| 阜阳市|