软件驱动安装在docker_别为Docker本地实现不支持GPU发愁,解决方案在此!

原标题:别为Docker本地实现不支持GPU发愁,解决方案在此!

导读

通过提供独立的执行环境而不需要整个虚拟机的开销,容器已经成为大规模部署应用程序的很有吸引力的选择。

Docker让容器变得易于使用,因此受到欢迎。通过使多个工程团队能够利用自己的配置进行开发、对齐基准或部署可扩展的微服务架构,容器在各个地方都有用。

基于GPU的应用程序,正在迅速成为标准工作流程的一部分,特别是在深度学习领域。

这些应用程序在容器化应用程序中的部署、测试和基准测试已经迅速成为公认的惯例。

但Docker容器的本地实现不支持NVIDIA GPU,这就是为什么我们开发了nvidia-docker插件。

在这里,笔者会告诉你如何使用它。

Nvidia-docker

NVIDIA GPU要求内核模块和用户级库来被识别并用于计算。有一个解决这个问题的办法,但需要安装Nvidia驱动程序和对应于NVIDIA GPU字符设备的映射。但是,如果主机的Nvidia驱动程序已更改,则安装在容器内的驱动程序版本将不再兼容,因此会中断主机上的容器使用。这违背了容器的主要特征,即可移动性。但是使用Nvidia Docker,可以无缝地配置一个GPU设备可见的容器,并准备好执行基于GPU的应用程序。

Nvidia关于nvidia-docker的博客强调了使用便携式GPU容器的两个关键点:

——与驱动程序无关的CUDA镜像

——Docker命令行包装器,在启动时将驱动程序的用户模式组件和GPU(字符设备)装载到容器中。

Nvidia-docker入门

安装NVIDIA Docker

在安装nvidia-docker之前更新系统的NVIDIA驱动程序。另外,确保Docker安装在系统上。完成之后,请按照此处的安装说明进行操作(https://nvidia.github.io/nvidia-docker/)。

下一步是测试nvidia-docker:

rtaneja@DGX:~$ nvidia-dockerUsage: docker COMMANDA self-sufficient runtime for containersOptions:--config stringLocation of client config files(default "/home/rtaneja/.docker")-D, --debug Enable debug mode--help Print usage-H, --host list Daemon socket(s) to connect to(default [])-l, --log-level stringSet the logging level("debug", "info", "warn", "error", "fatal") (default "info")--tls Use TLS; implied by --tlsverify--tlscacert stringTrust certs signed only bythisCA(default "/home/rtaneja/.docker/ca.pem")--tlscert stringPath to TLS certificate file(default "/home/rtaneja/.docker/cert.pem")--tlskey stringPath to TLS key file(default "/home/rtaneja/.docker/key.pem")--tlsverify Use TLS and verify the remote-v, --version Print version information and quit

现在,让我们测试一下,是否可以使用nvidia-docker而不是Docker命令从docker-hub中提取hello-world镜像:

rtaneja@DGX:~$ nvidia-docker run --rm hello-worldUsing default tag: latestlatest: Pulling from library/hello-world9a0669468bf7: Pull completeDigest: sha256:cf2f6d004a59f7c18ec89df311cf0f6a1c714ec924eebcbfdd759a669b90e711Status: Downloaded newer image for hello-world:latestHello from Docker!

上面的消息显示安装正常工作。

开发GPU应用程序

对于CUDA开发,你可以先从Dockerhub提取nvidia / cuda镜像。

rtaneja@DGX:~$ nvidia-docker run --rm -ti nvidia/cuda:

8.0 nvidia-smi8.0: Pulling from nvidia/cuda

16da43b30d89: Pull complete

1840843dafed: Pull complete

91246eb75b7d: Pull complete

7faa681b41d7: Pull complete

97b84c64d426: Pull complete

ce2347c6d450: Pull complete

f7a91ae8d982: Pull complete

ac4e251ee81e: Pull complete

448244e99652: Pull complete

f69db5193016: Pull complete

Digest: sha256:a73077e90c6c605a495566549791a96a415121c683923b46f782809e3728fb73

Status: Downloaded newer image for nvidia/cuda:8.0

构建自己的应用

现在,不用从docker命令行运行nvidia-smi,只要启动一个容器,就可以构建一个Docker镜像并使用CMD运行nvidia-smi。为了构建镜像,Docker从Dockerfile读取指令并进行组装和镜像。Docker hub的Ubuntu 16.04和CUDA 9.0的Dockerfile示例如下所示:

# FROM defines the base image

FROM nvidia/cuda:7.5

# RUN executes a shell command

# You can chain multiple commands together with &&

# A is used to split long lines to help with readability

RUN apt-get update && apt-get install -y --no-install-recommends cuda-samples-$CUDA_PKG_VERSION && rm -rf /var/lib/apt/lists/*

# CMD defines the default command to be run in the container

# CMD is overridden by supplying a command + arguments to

# `docker run`, e.g. `nvcc --version` or `bash`

CMD nvidia-smi

#end of Dockerfile

$ docker build -t my-nvidia-smi . # will build an image named my-nvidia-smi and assumes you have Dockerfile in the current directory

$ nvidia-docker images # or docker images will show the nvidia-smi image name

现在,我们准备执行镜像。 默认情况下,你将看到主机上的所有GPU在容器内可见。使用NV_GPU环境变量,在nvidia-docker中,提供了一个包含所需GPU数量的容器。 例如,下面的命令将使容器只能看到来自主机的一个GPU:

NV_GPU=1 nvidia-docker run --rm my-nvidia-smi+-----------------------------------------------------------------------------+| NVIDIA-SMI 384.81 Driver Version: 384.81 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A |Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage |GPU-Util Compute M. ||===============================+======================+======================|| 0 Tesla V100-SXM2... On |00000000:06:00.0 Off | 0 || N/A 37C P0 45W / 300W | 10MiB / 16152MiB | 0% Default |+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+| Processes: GPU Memory|| GPU PID Type Process name Usage ||=============================================================================|| No running processes found |+---------------------------------------------------------------------------+

用于深度学习的Nvidia优化容器入门

要开始DL开发,你可以从docker集线器中提取nvidia DIGITS容器,并启动DIGITS Web服务。下面的命令将主机上的端口8000映射到容器上的端口5000,运行此命令后,你可以访问http:// localhost:8000上的DIGITS:

nvidia-docker run --name digits -ti -p 8000:5000 nvidia/digits

期待

新版本的nvidia-docker(2.0)项目是基于libnvidia-container的alpha版本发布的,将来会成为部署GPU容器的首选方式。 现在,你已经对部署基于GPU的容器化应用程序有了大体了解,Nvidia还通过新发布的NVIDIA GPU云容器注册表服务提供了容器化的易于使用的、全面优化的深度学习软件堆栈。

双12福利预告:

12月12日,开源云中文社区将联合K8S技术社区、EasyStack为国内社区用户精彩送上“赴美大咖团国内首轮直播访谈”,为大家解读KubeCon北美峰会最新最热议题内容!添加小助手免费报名!返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值