我正在拼命地设置一个基于nvidia/cudagl镜像的Docker镜像,并在其上添加ROS 2卑微的发行版。原因是我需要这个ENV为未来的露台模拟与NVIDIA的GPU能力。
问题是官方的nvidia/cudagl镜像基于ubuntu 20.04,而ROS 2 Humble需要ubuntu 22.04,所以我无法正确构建镜像
任何人都知道我如何制作一个基于cudagl-ubuntu 20. 04的docker镜像,并将其修改为ubuntu22.04之上的一个层所以我将在我的镜像层中得到这样的东西
enter image description here
我基本上遵循了这篇文章,只是有点过时了text
如果你有其他的建议或者可以指导我类似的dockerfile的源代码,那就太好了tnxxxx:))
我尝试使用这个官方的Nvidia Docker文件和作为我的基础图像
FROM nvidia/cudagl:11.4.2-base-ubuntu20.04
并在Ubuntu 22.04(我的机器)上的源代码安装中添加ROS 2 Humble
但它不工作也试图从ubutu 22.04图像的bae构建cudagl图像,只是作为进一步添加ros 2层的基础-但这也无法构建
# Use Ubuntu 22.04 as the base image
FROM ubuntu:22.04 as base
FROM base as base-amd64
ENV NVARCH x86_64
ENV NVIDIA_REQUIRE_CUDA "cuda>=11.4 brand=tesla,driver>=418,driver<419 brand=tesla,driver>=450,driver<451"
ENV NV_CUDA_CUDART_VERSION 11.4.108-1
ENV NV_CUDA_COMPAT_PACKAGE cuda-compat-11-4
FROM base as base-arm64
ENV NVARCH sbsa
ENV NVIDIA_REQUIRE_CUDA "cuda>=11.4"
ENV NV_CUDA_CUDART_VERSION 11.4.108-1
FROM base-${TARGETARCH}
ARG TARGETARCH
LABEL maintainer "NVIDIA CORPORATION <cudatools@nvidia.com>"
RUN apt-get update && apt-get install -y --no-install-recommends \
gnupg2 curl ca-certificates && \
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/${NVARCH}/3bf863cc.pub | apt-key add - && \
echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/${NVARCH} /" > /etc/apt/sources.list.d/cuda.list && \
apt-get purge --autoremove -y curl \
&& rm -rf /var/lib/apt/lists/*
ENV CUDA_VERSION 11.4.2
# For libraries in the cuda-compat-* package: https://docs.nvidia.com/cuda/eula/index.html#attachment-a
RUN apt-get update && apt-get install -y --no-install-recommends \
cuda-cudart-11-4=${NV_CUDA_CUDART_VERSION} \
${NV_CUDA_COMPAT_PACKAGE} \
&& rm -rf /var/lib/apt/lists/*
# Required for nvidia-docker v1
RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf \
&& echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf
ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64
# Install OpenGL packages
RUN dpkg --add-architecture i386 \
&& apt-get update && apt-get install -y --no-install-recommends \
pkg-config \
libglvnd-dev libglvnd-dev:i386 \
libgl1-mesa-dev libgl1-mesa-dev:i386 \
libegl1-mesa-dev libegl1-mesa-dev:i386 \
libgles2-mesa-dev libgles2-mesa-dev:i386 \
&& rm -rf /var/lib/apt/lists/*
COPY NGC-DL-CONTAINER-LICENSE /
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
1条答案
按热度按时间jchrr9hc1#
我也遇到过同样的问题。以下解决方案在WSL2系统下运行,Ubuntu 22.04运行Docker Desktop 4.19.0(106363)。我没有在真实的的Ubuntu上测试过,但我应该比我在寻找这个解决方案时遇到的问题要少。
从Github上重定向到this official MS guide here的这个问题的答案来看,我稍微修改了以下基本Dockefile以添加最新的Cuda功能,它能够渲染OpenGL应用程序:
然后,您可以从apt安装ROS2。关于其他env变量:
NVIDIA_VISIBLE_DEVICES
应已设置为all,NVIDIA_DRIVER_CAPABILITIES
应已设置为compute,utility
。您可能需要设置:
或
然后,通过以下操作,您可以控制硬件加速的设备:Nvidia卡(类似于AMD):
或集成英特尔(如果支持):
或者软件,实际上对我来说,它提供了更快的FPS,可能是由于WSL2(我的系统)没有优化: