有没有办法将nvidia-docker
与Nomad
一起使用?
Nvidia上的计算程序在本地运行,但它不适用于nvidia-docker
(它使用CPU而不是GPU)。
这样做的首选方式是什么?
nvidia-docker
Nomad
驱动程序
docker exec
运行nvidia-docker
Nomad
连接到nvidia-docker
引擎有没有人经历过这个?
答案 0 :(得分:1)
这是我花了很多时间实现的,此时(nomad 0.7.0虽然自己运行5.6)没有“游牧”方式来实现nvidia-docker作业而不使用raw fork / exec不提供容器编排,服务发现,日志传送,资源管理(即装箱包装)。
我很惊讶nvidia-docker命令实际上并不代表docker,或者它将命令转发给docker。唯一真正有用的是调用run / exec命令(即nvidia-docker run --yar blar
),因为它调用一个帮助程序,该程序返回一个json响应,其中相应的设备和卷以json格式安装。当容器数据发送到实际的docker socket时,它包含安装在主机上的cuda版本的正确设备和卷(检查容器)。
使用exec驱动程序实现此解决方案的另一部分是创建一个代表部署的任务,如果您希望进行滚动部署。我使用一个简单的脚本来编排与nvidia-docker任务相同的任务组内的滚动部署。只要您在任务组中使用交错,最大并行(设置为1)并确保在业务流程任务中有一个动态参数(如随机或日期)(如果存在0差异,游牧者将不会更新任务)您应该是集。
一旦nomad有能力计算gpu(这里需要自定义指纹:https://github.com/hashicorp/nomad/tree/master/client/fingerprint)资源类型并且能够挂载非块类型设备(即不是磁盘),应该可以规避使用nvidia -docker。我希望这会有所帮助,请务必在此处提出功能请求:
https://github.com/hashicorp/nomad/issues/2938
要使用常规docker扩展运行此操作,还必须安装nvidia-docker创建的卷。 docker volume ls
将显示已命名的卷,您必须为容器安装cuda卷才能访问驱动程序(除非您已经填充到容器中,不推荐使用)。
答案 1 :(得分:0)
自Nomad 0.9起,它具有本机支持: https://www.hashicorp.com/blog/using-hashicorp-nomad-to-schedule-gpu-workloads
答案 2 :(得分:-2)
我们的想法是为此创建一个合适的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
图片:
docker build . -t cuda
启动一个cuda
基本图像执行的容器:
docker run \
--device=/dev/nvidia0:/dev/nvidia0 \
--device=/dev/nvidiactl:/dev/nvidiactl \
--device=/dev/nvidia-uvm:/dev/nvidia-uvm \
-it \
--rm cuda
消息如:
Failed to initialize NVML: Unknown Error
可能是由于缺少主机/dev
条目的主机和容器驱动程序版本不匹配。