NVIDIA-docker容器内部调用GPU加速

docker本身不支持GPU加速,但是在AIPlanner运行环境下需要GPU加速支持运行。
这时候就出现了 NVIDIA-docker ,docker一般都是使用基于CPU的应用,而如果是GPU的话,就需要安装特有的硬件环境,比如需要安装nvidia driver。所以docker容器并不直接支持Nvidia GPU。为了解决这个问题,最早的处理办法是在容器内部,全部重新安装nvidia driver,然后通过设置相应的设备参数来启动container,然而这种办法是很脆弱的。因为宿主机的driver的版本必须完全匹配容器内的driver版本,这样导致docker image无法共享,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的设计之初。
为了使docker image能很便利的使用Nvidia GPU,从而产生了nvidia-docker,由它来制作nvidia driver的image,这就要求在目标机器上启动container时,确保字符设备以及驱动文件已经被挂载。
nvidia-docker-plugin是一个docker plugin,被用来帮助我们轻松部署container到GPU混合的环境下。类似一个守护进程,发现宿主机驱动文件以及GPU 设备,并且将这些挂载到来自docker守护进程的请求中。以此来支持docker GPU的使用。

必要环境:

docker
由于nvidia docker是基于docker基础之上运行的,因此需要安装原生的docker。

nvidia显卡驱动(见底部)
毫无疑问,要想使用GPU,必须要安装显卡驱动,这样nvidia docker才能正常运行。

安装步骤:

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers  
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f  
sudo apt-get purge -y nvidia-docker  
  
# Add the package repositories  
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \  
  sudo apt-key add -  
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \  
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list  
sudo apt-get update  
  
# Install nvidia-docker2 and reload the Docker daemon configuration  
sudo apt-get install -y nvidia-docker2  
sudo pkill -SIGHUP dockerd  
  
# Test nvidia-smi with the latest official CUDA image  
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi 

但是nvdia-docker的安装依赖于docker-ce或者docker-ee,所以必须先满足依赖条件,而且对docker-ce和docker-ee也有版本的要求。

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers  
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f  
sudo apt-get purge -y nvidia-docker  
  
# Add the package repositories  
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \  
  sudo apt-key add -  
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \  
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list  
sudo apt-get update  
  
# Install nvidia-docker2 and reload the Docker daemon configuration  
sudo apt-get install -y nvidia-docker2  
sudo pkill -SIGHUP dockerd  
  
# Test nvidia-smi with the latest official CUDA image  
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi  

当我们执行nvidia-docker create或者nvidia-docker run 时,它会默认加上--runtime=nvidia参数。将运行时指定为nvidia。
当然,为了方便使用,可以直接修改Docker daemon的启动参数,修改默认的运行时为nvidia-container-runtime
docker的daemon文件中加入---运行时---

cat /etc/docker/daemon.json
{     "default-runtime": "nvidia",     "runtimes": {         "nvidia": {             "path": "/usr/bin/nvidia-container-runtime",             "runtimeArgs": []         }     } }

通过以下方式启动容器

docker run --rm -it -e NVIDIA_VISIBLE_DEVICES=all ubuntu:18.04
FHGLNZJEyCc4XfAO__thumbnail.png

然后要安装cuda、cudnn加速。

附NVIDIA驱动及cuda、cudnn安装教程

安装nvidia驱动(optinal)
1) cd Downloads/

2) ls
#(NVIDIA-Linux-x86_64–410.57.run #output of ls)

3) chmod +x NVIDIA-Linux-x86_64–410.57.run
#(to get permission to execute the run file)

4) sudo ./NVIDIA-Linux-x86_64–410.57.run --no-x-check

安装cuda
1 chmod +x cuda_10.0.130_410.48_linux.run
2 ./cuda_10.0.130_410.48_linux.run

是否同意条款,必须同意才能继续安装)
accept/decline/quit: accept

(这里不要安装驱动,因为已经安装最新的驱动了,否则可能会安装旧版本的显卡驱动,导致重复登录的情况)
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n

Install the CUDA 10.0 Toolkit?(是否安装CUDA 10 ,这里必须要安装)
(y)es/(n)o/(q)uit: y

Enter Toolkit Location(安装路径,使用默认,直接回车就行)
 [ default is /usr/local/cuda-10.0 ]:  

Do you want to install a symbolic link at /usr/local/cuda?(同意创建软链接)
(y)es/(n)o/(q)uit: y

Install the CUDA 10.0 Samples?(不用安装测试,本身就有了)
(y)es/(n)o/(q)uit: n

Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...(开始安装)

安装完成之后,可以配置他们的环境变量,在vim ~/.bashrc的最后加上以下配置信息:

export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}
1
2
3
最后使用命令source ~/.bashrc使它生效。

可以使用命令nvcc -V查看安装的版本信息:

test@test:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

安装cudnn

tar -zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz 

解压之后可以得到以下文件:

cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.4.2
cuda/lib64/libcudnn_static.a

使用以下两条命令复制这些文件到CUDA目录下:

sudo cp cuda/lib64/* /usr/local/cuda-10.0/lib64/
sudo cp cuda/include/* /usr/local/cuda-10.0/include/

拷贝完成之后,可以使用以下命令查看CUDNN的版本信息:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容