在Ubuntu 22.04上使用cuda和ROS2的Docker镜像

mgdq6dx1  于 2023-05-28  发布在  Docker
关注(0)|答案(1)|浏览(262)

我正在拼命地设置一个基于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
jchrr9hc

jchrr9hc1#

我也遇到过同样的问题。以下解决方案在WSL2系统下运行,Ubuntu 22.04运行Docker Desktop 4.19.0(106363)。我没有在真实的的Ubuntu上测试过,但我应该比我在寻找这个解决方案时遇到的问题要少。
从Github上重定向到this official MS guide here的这个问题的答案来看,我稍微修改了以下基本Dockefile以添加最新的Cuda功能,它能够渲染OpenGL应用程序:

FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 as runtime

ARG DEBIAN_FRONTEND=noninteractive

# Uncomment the lines below to use a 3rd party repository
# to get the latest (unstable from mesa/main) mesa library version
RUN apt-get update && apt install -y software-properties-common
RUN add-apt-repository ppa:oibaf/graphics-drivers -y

RUN apt update && apt install -y \
    vainfo \
    mesa-va-drivers \
    mesa-utils

ENV LIBVA_DRIVER_NAME=d3d12
ENV LD_LIBRARY_PATH=/usr/lib/wsl/lib
CMD vainfo --display drm --device /dev/dri/card0

然后,您可以从apt安装ROS2。关于其他env变量:NVIDIA_VISIBLE_DEVICES应已设置为all,NVIDIA_DRIVER_CAPABILITIES应已设置为compute,utility
您可能需要设置:

ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics,video

ENV NVIDIA_DRIVER_CAPABILITIES all

然后,通过以下操作,您可以控制硬件加速的设备:Nvidia卡(类似于AMD):

ENV MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA

或集成英特尔(如果支持):

ENV MESA_D3D12_DEFAULT_ADAPTER_NAME=Intel

或者软件,实际上对我来说,它提供了更快的FPS,可能是由于WSL2(我的系统)没有优化:

ENV LIBGL_ALWAYS_SOFTWARE=1

相关问题