有没有办法将nvidia-docker与Nomad结合使用?
Nvidia上的计算程序在本地工作,但它不适用于nvidia-docker (它使用的是CPU而不是GPU)。
做这件事的首选方法是什么?
nvidia-docker驱动程序实现Nomaddocker exec运行nvidia-dockerNomad和nvidia-docker引擎有人在这方面有经验吗?
发布于 2017-05-20 08:54:50
这样做的目的是为了创建一个合适的Docker图像:
FROM debian:wheezy
# Run Ubuntu in non-interactive mode
ENV DEBIAN_FRONTEND noninteractive
# Provide CUDA environmental variables that match the installed version on host machine
ENV CUDA_DRIVER 375.39
ENV CUDA_INSTALL http://us.download.nvidia.com/XFree86/Linux-x86_64/${CUDA_DRIVER}/NVIDIA-Linux-x86_64-${CUDA_DRIVER}.run
# Configure dependencies
RUN \
# Update available packages
apt-get update \
--quiet \
# Install all requirements
&& apt-get install \
--yes \
--no-install-recommends \
--no-install-suggests \
build-essential \
module-init-tools \
wget \
# Clean up leftovers
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install CUDA drivers
RUN wget \
$CUDA_INSTALL \
-P /tmp \
--no-verbose \
&& chmod +x /tmp/NVIDIA-Linux-x86_64-${CUDA_DRIVER}.run \
&& /tmp/NVIDIA-Linux-x86_64-${CUDA_DRIVER}.run \
-s \
-N \
--no-kernel-module \
&& rm -rf /tmp/*
ENTRYPOINT ["/bin/bash"]然后:
Docker映像:
码头修造。-t cudacuda基映像执行的容器:
docker run \-设备=/dev/nvidia0:/dev/nvidia0\-设备=/dev/nvidiactl:/dev/nvidiactl\-设备=/dev/nvidia-uvm:/dev/nvidia-uvm\ -it \-rm库达像这样的信息:
Failed to initialize NVML: Unknown Error可能是由于缺少主机/dev条目的主机驱动程序版本与容器驱动程序版本不匹配造成的。
发布于 2017-11-03 14:55:05
这是我花了很多时间实现的,在这个时候(游牧民0.7.0,尽管自己运行5.6 ),没有一种“游牧”的方法来实现一个nvidia-坞作业,而不使用原始叉/exec,它不提供容器编排、服务发现、日志传送、资源管理(也就是垃圾箱包装)。
我感到惊讶的是,nvidia-docker命令实际上并不代表docker,相反,它将命令转发给docker。唯一有用的方法是调用run/exec命令(即nvidia-docker run --yar blar),因为它调用了一个helper程序,该程序返回带有适当设备的json响应,并以json格式挂载卷。当容器数据被发送到实际的对接套接字时,它包含了安装在主机上的cuda版本的正确设备和卷(检查容器)。
使用exec驱动程序实现此解决方案的另一部分是创建一个任务,如果您希望有滚动部署,则创建一个代表部署的任务。我使用一个简单的脚本来编排与nvidia-docker任务相同的任务组中的滚动部署。只要您使用的是交错,任务组中的最大并行(设置为1),并确保您在编排任务中有一个动态参数,如随机或日期(游牧民不会更新任务,如果有0的差异),您应该设置。
一旦游牧民有能力计算gpu (需要自定义指纹在这里:https://github.com/hashicorp/nomad/tree/master/client/fingerprint )资源类型,并有能力挂载非块类型的设备(即一些东西,而不是磁盘),它应该有可能绕过使用nvidia-码头。我希望这会有所帮助,请务必在这里增加功能请求:
https://github.com/hashicorp/nomad/issues/2938
若要扩展使用常规停靠器运行此操作的内容,还必须挂载由nvidia-docker创建的卷。docker volume ls将显示已命名的卷,您必须挂载库达卷,以便您的容器能够访问驱动程序(除非您已经将内容填充到您的容器中,不建议这样做)。
发布于 2019-09-12 11:31:02
https://stackoverflow.com/questions/44004898
复制相似问题