文章都可以转载、引用,标明转载出处即可。

Docker容器使用OpenGL

docker Mr.c 817℃ 0评论

  前面两篇文章 《GPU服务器环境部署-Centos7》 《GPU服务器环境部署-Ubuntu 》写了如何在常用的Ubuntu和Centos7系统机器上安装GPU驱动,并测试GPU状态,不可避免的有一些项目的依赖包安装、编译等比较麻烦,需要制作成docker容器来运行,所以又有新需求,让docker容器调用GPU。
先描述下相关情况:
  1.物理机上已经完成GPU驱动安装,并且通过基本测试GPU设备可以正常调用;
  2.容器的基础镜像需要选择NVIDIA提供的镜像,已经集成了相关软件和驱动;
  3.容器中不做显示服务(xorg)监听,直接共享物理机显示服务和GPU硬件;
  4.本文章物理机系统Centos7,根据之前文章安装好了GPU驱动。
一:Docker环境准备
1.安装docker-ce 19.03 以上版本
  根据NVIDIA官方描述 https://github.com/NVIDIA/nvidia-docker docker版本在19.03以上,则不需要安装nvidia-docker2 作为容器和物理机设备的“桥梁”。
使用阿里云docker镜像源安装docker-ce,这里不做介绍,请参考阿里云文档: https://developer.aliyun.com/mirror/docker-ce
2.设置docker镜像加速
这个环节可设置阿里云镜像加速,或者DaoCloud等提供的加速服务。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxxx.mirror.aliyuncs.com"]  #这个需要自己去阿里云【容器镜像服务】获取加速器地址
}
EOF
sudo systemctl daemon-reload

二:安装nvidia仓库
  虽然官方说Docker 19.03版本已经不需要nvidia-docker2 了,但是还是需要安装nvidia-container-toolkit工具。

Centos7系统安装方法

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
wget -O /etc/yum.repos.d/nvidia-container-runtime.repo https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo

yum -y install nvidia-container-toolkit

Ubuntu系统安装方法

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit

不管用什么系统,安装了nvidia-container-toolkit后请记得一定要重启docker服务。

systemctl  restart  docker

三:启动容器及验证
1.下载nvidia/opengl镜像系统
  nvidia提供了基于centos7和Ubuntu 的镜像,看各自需要选择吧,我这儿测试用centos7,可以到 https://hub.docker.com/r/nvidia/opengl 选择具体的容器镜像。

docker pull nvidia/opengl:1.1-glvnd-devel-centos7

2.启动镜像

docker run --gpus all -dti -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=:0  -e NVIDIA_DRIVER_CAPABILITIES=all --restart=always --name  gpu-centos 34d8574892cd

几个参数说明:
--gpus all
  挂载所有GPU设备,如果已经启动了多块显卡就都会挂载进容器中,如果需要单独使用某一个显卡,可以将起设置为对应的GPU设备ID 单显卡默认为0,多一块显卡就是0和1 可通过nvidia-smi查看;
-v /tmp/.X11-unix:/tmp/.X11-unix
  物理机启动了xorg显示服务后会生成unix sock文件用于连接显卡设备,所以这里我们直接共享物理机的sock文件到容器中,才能正常调用物理机显卡;
DISPLAY=:0
  传入环境变量,把DISPLAY设置为:0 ;
NVIDIA_DRIVER_CAPABILITIES=all
  映射所有NVIDIA驱动库;
3.验证容器
上面命令执行成功后,进入该容器,执行nvidia-smi 命令

docker exec -it gpu-centos /bin/bash
[root@c9a86f476be5 /]# nvidia-smi 

Fri Mar 6 07:35:00 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64 Driver Version: 440.64 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 106... Off | 00000000:01:00.0 Off | N/A |
| 35% 24C P8 4W / 120W | 15MiB / 3019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+

可以看到已经读取到了跟物理机上相同的显卡信息。
一般来说到这个环节,基本的容器加载显卡驱动就已经好了,剩下的就是根据项目依赖安装对应的依赖软件测试了。
  这篇文章和前面两篇物理机安装的文章都是自己根据公司业务需求摸索以及同事讨论,如果有朋友看到有不对的其他,麻烦留言或者邮件指出,互相讨论。

转载请注明:菜鸟运维网 » Docker容器使用OpenGL

喜欢 (197)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址