2

目的是在 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 

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


参考

4

2 回答 2

1
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

你忘记了能力display

于 2019-08-19T07:44:57.620 回答
0

对我有用的是以下

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

      ENV NVIDIA_VISIBLE_DEVICES all
      ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,display
    
  • STEP 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
    
于 2021-03-26T20:06:17.413 回答