首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Nomad与Nvidia码头?

如何使用Nomad与Nvidia码头?
EN

Stack Overflow用户
提问于 2017-05-16 14:54:46
回答 3查看 925关注 0票数 1

有没有办法将nvidia-dockerNomad结合使用?

Nvidia上的计算程序在本地工作,但它不适用于nvidia-docker (它使用的是CPU而不是GPU)。

做这件事的首选方法是什么?

  • 使用nvidia-docker驱动程序实现Nomad
  • 使用原始docker exec运行nvidia-docker
  • 以某种方式连接Nomadnvidia-docker引擎

有人在这方面有经验吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-20 08:54:50

这样做的目的是为了创建一个合适的Docker图像:

代码语言:javascript
复制
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"]

然后:

  1. 构建基本的Docker映像: 码头修造。-t cuda
  2. 启动具有cuda基映像执行的容器: docker run \-设备=/dev/nvidia0:/dev/nvidia0\-设备=/dev/nvidiactl:/dev/nvidiactl\-设备=/dev/nvidia-uvm:/dev/nvidia-uvm\ -it \-rm库达

像这样的信息:

代码语言:javascript
复制
Failed to initialize NVML: Unknown Error

可能是由于缺少主机/dev条目的主机驱动程序版本与容器驱动程序版本不匹配造成的。

票数 -2
EN

Stack Overflow用户

发布于 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将显示已命名的卷,您必须挂载库达卷,以便您的容器能够访问驱动程序(除非您已经将内容填充到您的容器中,不建议这样做)。

票数 1
EN

Stack Overflow用户

发布于 2019-09-12 11:31:02

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44004898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档