gpt4 book ai didi

docker - 在 docker 中使用 OpenGL 和 nvidia-docker2

转载 作者:行者123 更新时间:2023-12-02 17:59:12 26 4
gpt4 key购买 nike

我正在尝试在 Ubuntu 16.04 容器中运行 OpenGL 应用程序 ( Gazebo ),并且我希望能够在可用时利用 nvidia 图形加速。我试图弄清楚推荐的、官方支持的(希望是由 nvidia 支持的)方法是什么。

我的要求:

  • 创建图像非常耗时,所以我想为各种图形(nvidia、mesa 即其他所有图像)制作一个图像,或者如果分开,它们应该“从”一个通用的基础图像构建的内容。
  • nvidia 容器应该在不同的系统上工作,这些系统可能安装了不同的 nvidia 卡和驱动程序版本。
  • 我需要使用 Ubuntu 16.04,公司需要这个,尽管这是这些要求中最不重要的,例如如果这只能在 18.04 完成,我也会感兴趣。

  • 到目前为止我已经尝试过:
  • 只需为 nvidia 和其他所有内容构建单独的图像,使用 FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04 .这很好用,但需要构建两个镜像,这需要两倍的时间和两倍的磁盘空间。打破要求1。
  • 首先从 ubuntu:16.04 构建“正常”(mesa/intel) 镜像,在那里做所有耗时的事情,然后将其用作另一个图像的基础,其中 NVIDIA 驱动程序是从官方“运行文件”手动安装的。如果驱动程序与主机上安装的驱动程序完全匹配,则此方法有效,但如果主机具有不同的(例如较旧的)版本,则此方法无效。打破要求 2。
  • 什么都不做,只用 --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all 运行我的常规 mesa-enabled 容器.如果我这样做,nvidia-smi看到卡,但 OpenGL(例如 glxinfo )仍然尝试加载 swrast驱动程序,这是行不通的。

  • 我在野外看到的大多数示例都使用 nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04基础,对于我的生活,我无法在该图像中找到如何安装 nvidia 驱动程序(如果有的话)。我还在某处读到,使用 nvidia 容器运行时(即 nvidia-docker2,我正在使用)你不需要安装驱动程序,但情况似乎并非如此,至少对于 OpenGL .

    再说一遍,有没有办法为满足我所有要求的 nvidia 和非 nvidia 创建容器镜像,或者我只是想要太多?

    最佳答案

    当您可以“窃取”别人的解决方案时,为什么还要浪费时间尝试自己找出解决方案呢?特别是如果其他人是 NVIDIA 自己。

    由于nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04似乎运作良好,但将其用作基本中断要求 1,我可以将文件从中复制并复制到我的图像中。

    这里${from}指向我原始的、非 nvidia 感知的容器镜像(但我也使用 from=ubuntu:16.04 对其进行了测试),我只是复制 nvidia 的驱动程序和配置:

    ARG from
    FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04 as nvidia
    FROM ${from}

    COPY --from=nvidia /usr/local /usr/local
    COPY --from=nvidia /etc/ld.so.conf.d/glvnd.conf /etc/ld.so.conf.d/glvnd.conf

    ENV NVIDIA_VISIBLE_DEVICES=all NVIDIA_DRIVER_CAPABILITIES=all

    有了这个,我的 ${from}建立在 ubuntu:16.04 之上, glxinfo 返回预期的配置(NVIDIA 是 GL 供应商),我可以像在主机上一样运行 Gazebo、Blender 等。这样做的美妙之处在于,即使不使用 nvidia 运行时,在没有 nvidia 驱动程序的系统上,生成的容器也能正常工作,它只是优雅地回退到使用 Mesa(我猜这就是“glvnd”所做的)。

    虽然我目前需要使用 Ubuntu 16.04,但我看不出为什么类似的方法不适用于其他 Ubuntu 版本。

    关于docker - 在 docker 中使用 OpenGL 和 nvidia-docker2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53789421/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com