【问题标题】:How to run OpenCL + OpenGL inside a Docker container?如何在 Docker 容器中运行 OpenCL + OpenGL?
【发布时间】:2019-01-17 19:37:50
【问题描述】:

目的是在 docker 容器内运行 OpenCL/OpenGL(互操作)应用。但我还没有成功。

简介

我有带 NVidia 显卡的笔记本电脑,所以我认为利用 NVidia Dockerfiles [1,2] 将是一个很好的起点。

以下 Dockerfile:

# Dockerfile to run OpenGL app
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display
RUN apt-get update && apt-get install -y --no-install-recommends \
        mesa-utils && \
    rm -rf /var/lib/apt/lists/*

效果很好,我可以运行glxgears

在自己的容器上运行 OpenCL 也没什么大不了的:

# Dockerfile to run OpenCL app
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04
RUN apt-get update && apt-get install -y --no-install-recommends \
        ocl-icd-libopencl1 \
        clinfo && \
    rm -rf /var/lib/apt/lists/*
RUN mkdir -p /etc/OpenCL/vendors && \
    echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

clinfo 成功显示我的设备信息。


尝试

最后,我尝试使用 OpenGL 和 OpenCL 驱动程序创建一个容器:

# Dockerfile mixing OpenGL and OpenCL
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display
RUN apt-get update && apt-get install -y --no-install-recommends \
        mesa-utils \
        ocl-icd-libopencl1 \
        clinfo && \
    rm -rf /var/lib/apt/lists/*
RUN mkdir -p /etc/OpenCL/vendors && \
    echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

现在,虽然clinfo 仍然打印 OpenCL 设备信息,但另一方面,glxgears 失败并出现以下错误:

Error: couldn't get an RGB, Double-buffered visual 

知道如何进行这项工作吗?提前致谢。


参考文献

【问题讨论】:

    标签: docker opengl interop opencl nvidia-docker


    【解决方案1】:
    ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
    

    你忘记了display的能力。

    【讨论】:

      【解决方案2】:

      对我有用的是以下内容

      • STEP 1:在 Dockerfile 末尾添加以下两行

          ENV NVIDIA_VISIBLE_DEVICES all
          ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,display
        
      • 第 2 步:运行容器

          $ sudo xhost +local:root
          $ docker run --gpus all -it --rm --name container_name \
          -v /tmp/.X11-unix:/tmp/.X11-unix \
          -e DISPLAY=$DISPLAY \
          -e QT_X11_NO_MITSHM=1 \
          --net=host \
          image_name bash
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-19
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        相关资源
        最近更新 更多