From ce37a6fcc59a8e6a5d1b3589cd463bd6b26560f5 Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 24 May 2024 15:08:56 +0200 Subject: [PATCH 01/64] remove leftover config files for robot and perception image variants --- .gitlab-ci/ros-noetic/ros-noetic-perception.yml | 4 ---- .gitlab-ci/ros-noetic/ros-noetic-robot.yml | 4 ---- .gitlab-ci/ros-packages/.perception.yml | 2 -- .gitlab-ci/ros-packages/.robot.yml | 2 -- .gitlab-ci/ros2-humble/ros2-humble-perception.yml | 4 ---- .gitlab-ci/ros2-iron/ros2-iron-perception.yml | 4 ---- 6 files changed, 20 deletions(-) delete mode 100644 .gitlab-ci/ros-noetic/ros-noetic-perception.yml delete mode 100644 .gitlab-ci/ros-noetic/ros-noetic-robot.yml delete mode 100644 .gitlab-ci/ros-packages/.perception.yml delete mode 100644 .gitlab-ci/ros-packages/.robot.yml delete mode 100644 .gitlab-ci/ros2-humble/ros2-humble-perception.yml delete mode 100644 .gitlab-ci/ros2-iron/ros2-iron-perception.yml diff --git a/.gitlab-ci/ros-noetic/ros-noetic-perception.yml b/.gitlab-ci/ros-noetic/ros-noetic-perception.yml deleted file mode 100644 index 9cf7621..0000000 --- a/.gitlab-ci/ros-noetic/ros-noetic-perception.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros-noetic/.ros-noetic.yml - - .gitlab-ci/ros-packages/.perception.yml diff --git a/.gitlab-ci/ros-noetic/ros-noetic-robot.yml b/.gitlab-ci/ros-noetic/ros-noetic-robot.yml deleted file mode 100644 index c56cc95..0000000 --- a/.gitlab-ci/ros-noetic/ros-noetic-robot.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros-noetic/.ros-noetic.yml - - .gitlab-ci/ros-packages/.robot.yml diff --git a/.gitlab-ci/ros-packages/.perception.yml b/.gitlab-ci/ros-packages/.perception.yml deleted file mode 100644 index 0110458..0000000 --- a/.gitlab-ci/ros-packages/.perception.yml +++ /dev/null @@ -1,2 +0,0 @@ -variables: - ROS_PACKAGE: perception diff --git a/.gitlab-ci/ros-packages/.robot.yml b/.gitlab-ci/ros-packages/.robot.yml deleted file mode 100644 index 7bc86b5..0000000 --- a/.gitlab-ci/ros-packages/.robot.yml +++ /dev/null @@ -1,2 +0,0 @@ -variables: - ROS_PACKAGE: robot diff --git a/.gitlab-ci/ros2-humble/ros2-humble-perception.yml b/.gitlab-ci/ros2-humble/ros2-humble-perception.yml deleted file mode 100644 index 26c3264..0000000 --- a/.gitlab-ci/ros2-humble/ros2-humble-perception.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-humble/.ros2-humble.yml - - .gitlab-ci/ros-packages/.perception.yml \ No newline at end of file diff --git a/.gitlab-ci/ros2-iron/ros2-iron-perception.yml b/.gitlab-ci/ros2-iron/ros2-iron-perception.yml deleted file mode 100644 index 272e2d4..0000000 --- a/.gitlab-ci/ros2-iron/ros2-iron-perception.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-iron/.ros2-iron.yml - - .gitlab-ci/ros-packages/.perception.yml \ No newline at end of file From 4af93fd8b6880259eaaa2bd83d9b5b69753dc93c Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 24 May 2024 15:09:32 +0200 Subject: [PATCH 02/64] add ros2 jazzy to ci --- .gitlab-ci.yml | 46 ++++++++++++++++++- .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml | 6 +++ .../ros2-jazzy/ros2-jazzy-desktop-full.yml | 4 ++ .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml | 4 ++ .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml | 4 ++ .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml | 4 ++ README.md | 16 ++++--- 7 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml create mode 100644 .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml create mode 100644 .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml create mode 100644 .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml create mode 100644 .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e89e61a..224a04b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ workflow: variables: - ROS_DISTROS: noetic,foxy,humble,iron,rolling + ROS_DISTROS: noetic,foxy,humble,iron,jazzy,rolling stages: @@ -14,6 +14,7 @@ stages: - ROS 2 Foxy - ROS 2 Humble - ROS 2 Iron + - ROS 2 Jazzy - ROS 2 Rolling # build-cuda-ubuntu20: @@ -193,6 +194,49 @@ ros2-iron-desktop-full: strategy: depend +ros2-jazzy-ros-core: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: [] + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml + strategy: depend + +ros2-jazzy-ros-base: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: + - job: ros2-jazzy-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml + strategy: depend + +ros2-jazzy-desktop: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: + - job: ros2-jazzy-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml + strategy: depend + +ros2-jazzy-desktop-full: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: + - job: ros2-jazzy-desktop + optional: true + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml + strategy: depend + + ros2-rolling-ros-core: stage: ROS 2 Rolling rules: diff --git a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml new file mode 100644 index 0000000..fe05595 --- /dev/null +++ b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml @@ -0,0 +1,6 @@ +variables: + UBUNTU_VERSION: "24.04" + ROS_VERSION: 2 + ROS_VERSION_NAME: "ros2" + ROS_DISTRO: jazzy + DISABLE_ML_ARM64: "true" diff --git a/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml b/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml new file mode 100644 index 0000000..a6e5562 --- /dev/null +++ b/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml @@ -0,0 +1,4 @@ +include: + - .gitlab-ci/.template.yml + - .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml + - .gitlab-ci/ros-packages/.desktop-full.yml diff --git a/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml b/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml new file mode 100644 index 0000000..5b827ec --- /dev/null +++ b/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml @@ -0,0 +1,4 @@ +include: + - .gitlab-ci/.template.yml + - .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml + - .gitlab-ci/ros-packages/.desktop.yml \ No newline at end of file diff --git a/.gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml b/.gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml new file mode 100644 index 0000000..db15699 --- /dev/null +++ b/.gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml @@ -0,0 +1,4 @@ +include: + - .gitlab-ci/.template.yml + - .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml + - .gitlab-ci/ros-packages/.ros-base.yml \ No newline at end of file diff --git a/.gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml b/.gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml new file mode 100644 index 0000000..c14f146 --- /dev/null +++ b/.gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml @@ -0,0 +1,4 @@ +include: + - .gitlab-ci/.template.yml + - .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml + - .gitlab-ci/ros-packages/.ros-core.yml \ No newline at end of file diff --git a/README.md b/README.md index 267c362..5b326f0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # *docker-ros-ml-images* – Machine Learning-Enabled ROS Docker Images +# TODO: add information for ROS 2 Jazzy +

@@ -11,13 +13,13 @@ *docker-ros-ml-images* provides machine learning-enabled ROS Docker images. -> [!IMPORTANT] -> This repository is open-sourced and maintained by the [**Institute for Automotive Engineering (ika) at RWTH Aachen University**](https://www.ika.rwth-aachen.de/). -> **DevOps, Containerization and Orchestration of Software-Defined Vehicles** are some of many research topics within our [*Vehicle Intelligence & Automated Driving*](https://www.ika.rwth-aachen.de/en/competences/fields-of-research/vehicle-intelligence-automated-driving.html) domain. -> If you would like to learn more about how we can support your DevOps or automated driving efforts, feel free to reach out to us! ->      *Timo Woopen - Manager Research Area Vehicle Intelligence & Automated Driving* ->      *+49 241 80 23549* ->      *timo.woopen@ika.rwth-aachen.de* +> [!IMPORTANT] +> This repository is open-sourced and maintained by the [**Institute for Automotive Engineering (ika) at RWTH Aachen University**](https://www.ika.rwth-aachen.de/). +> **DevOps, Containerization and Orchestration of Software-Defined Vehicles** are some of many research topics within our [*Vehicle Intelligence & Automated Driving*](https://www.ika.rwth-aachen.de/en/competences/fields-of-research/vehicle-intelligence-automated-driving.html) domain. +> If you would like to learn more about how we can support your DevOps or automated driving efforts, feel free to reach out to us! +>      *Timo Woopen - Manager Research Area Vehicle Intelligence & Automated Driving* +>      *+49 241 80 23549* +>      *timo.woopen@ika.rwth-aachen.de* We recommend to use *docker-ros-ml-images* in combination with our other tools for Docker and ROS. - [*docker-ros*](https://github.com/ika-rwth-aachen/docker-ros) automatically builds minimal container images of ROS applications From fd6cb450bd0ebe595bf5ddb006502223180001c5 Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 24 May 2024 15:34:58 +0200 Subject: [PATCH 03/64] add manual build instructions to readme --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 5b326f0..fff98e6 100644 --- a/README.md +++ b/README.md @@ -367,3 +367,23 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` + + +## Manual Build + +``` +docker buildx build + --pull + --platform $PLATFORM + --build-arg BUILD_VERSION=$BUILD_VERSION + --build-arg UBUNTU_VERSION=$UBUNTU_VERSION + --build-arg CUDA_VERSION=$CUDA_VERSION + --build-arg ROS_VERSION=$ROS_VERSION + --build-arg ROS_DISTRO=$ROS_DISTRO + --build-arg ROS_PACKAGE=$ROS_PACKAGE + --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY + --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP + --build-arg TF_VERSION_PY=$TF_VERSION_PY + --build-arg TF_VERSION_CPP=$TF_VERSION_CPP + --tag $IMAGE . +``` From 516e29f5bd94b8ebcd10b855f0fced5b09d1ac1e Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 24 May 2024 15:35:25 +0200 Subject: [PATCH 04/64] fix system-wide installation of pip packages for newer pip versions --- Dockerfile | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index adf7ff6..39fd50f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,6 +33,7 @@ SHELL ["/bin/bash", "-c"] USER root # install essentials via apt +ARG UBUNTU_VERSION RUN apt-get update && \ apt-get install -y \ bsdmainutils \ @@ -59,7 +60,7 @@ RUN apt-get update && \ x11-apps \ zip \ && rm -rf /var/lib/apt/lists/* -RUN pip3 install --upgrade pip +RUN python -m pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --upgrade pip # install more essentials RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ @@ -70,6 +71,7 @@ RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.d # --- install and setup ROS ---------------------------------------------------- FROM dependencies as ros ARG TARGETARCH +ARG UBUNTU_VERSION # setup keys and sources.list ARG ROS_VERSION @@ -98,12 +100,11 @@ RUN apt-get update && \ elif [[ "$ROS_VERSION" == "2" ]]; then \ apt-get install -y \ python3-colcon-common-extensions \ - && pip install colcon-clean ; \ + && pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` colcon-clean ; \ fi \ && rm -rf /var/lib/apt/lists/* # install ROS -ARG UBUNTU_VERSION ARG ROS_DISTRO ENV ROS_DISTRO=${ROS_DISTRO} ARG ROS_PACKAGE=ros-core @@ -121,6 +122,7 @@ RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc # --- install ML stuff ---------------------------------------------------- FROM ros as ros-ml ARG TARGETARCH +ARG UBUNTU_VERSION # install PyTorch ARG TORCH_VERSION_PY @@ -129,14 +131,14 @@ RUN if [[ -n $TORCH_VERSION_PY ]]; then \ if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then PT_PACKAGE_NAME=1.11.0+cu113; \ elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then PT_PACKAGE_NAME=2.0.1+cu118; \ else PT_PACKAGE_NAME=${TORCH_VERSION_PY}+cpu; fi && \ - pip install torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ + pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then TORCH_INSTALL=https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl; \ elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v511/pytorch/torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl; \ else TORCH_INSTALL=""; fi && \ - python3 -m pip install --no-cache $TORCH_INSTALL && \ + pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --no-cache $TORCH_INSTALL && \ apt-get update && \ apt-get install -y libopenblas-base && \ rm -rf /var/lib/apt/lists/* ; \ @@ -170,7 +172,7 @@ ARG TF_VERSION_PY RUN if [[ -n $TF_VERSION_PY ]]; then \ PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ ARCH=$(uname -m) && \ - python3 -m pip install --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ + pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ fi # === final ==================================================================== From 1add4f001f86376a6bf5e25e7731132b1bf59633 Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 24 May 2024 15:47:15 +0200 Subject: [PATCH 05/64] disable ml images for jazzy for now due to missing ubuntu 24.04 support --- .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml index fe05595..e525b20 100644 --- a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml +++ b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml @@ -1,6 +1,9 @@ variables: UBUNTU_VERSION: "24.04" ROS_VERSION: 2 - ROS_VERSION_NAME: "ros2" + ROS_VERSION_NAME: ros2 ROS_DISTRO: jazzy - DISABLE_ML_ARM64: "true" + DISABLE_CUDA: "true" + DISABLE_TORCH: "true" + DISABLE_TF: "true" + DISABLE_ML: "true" From d2e6ecf71c0681675129776d2a928690b2654cee Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 24 May 2024 16:58:51 +0200 Subject: [PATCH 06/64] remove desktop image variants --- .gitlab-ci.yml | 44 ------------------- .gitlab-ci/ros-noetic/ros-noetic-desktop.yml | 4 -- .../ros2-humble/ros2-humble-desktop.yml | 4 -- .gitlab-ci/ros2-iron/ros2-iron-desktop.yml | 4 -- .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml | 4 -- README.md | 29 +----------- 6 files changed, 1 insertion(+), 88 deletions(-) delete mode 100644 .gitlab-ci/ros-noetic/ros-noetic-desktop.yml delete mode 100644 .gitlab-ci/ros2-humble/ros2-humble-desktop.yml delete mode 100644 .gitlab-ci/ros2-iron/ros2-iron-desktop.yml delete mode 100644 .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 224a04b..c329d02 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -53,17 +53,6 @@ ros-noetic-ros-base: include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml strategy: depend -ros-noetic-desktop: - stage: ROS 1 Noetic - rules: - - if: $ROS_DISTROS =~ /.*noetic.*/ - needs: - - job: ros-noetic-ros-base - optional: true - trigger: - include: .gitlab-ci/ros-noetic/ros-noetic-desktop.yml - strategy: depend - ros-noetic-desktop-full: stage: ROS 1 Noetic rules: @@ -128,17 +117,6 @@ ros2-humble-ros-base: include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml strategy: depend -ros2-humble-desktop: - stage: ROS 2 Humble - rules: - - if: $ROS_DISTROS =~ /.*humble.*/ - needs: - - job: ros2-humble-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-humble/ros2-humble-desktop.yml - strategy: depend - ros2-humble-desktop-full: stage: ROS 2 Humble rules: @@ -171,17 +149,6 @@ ros2-iron-ros-base: include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml strategy: depend -ros2-iron-desktop: - stage: ROS 2 Iron - rules: - - if: $ROS_DISTROS =~ /.*iron.*/ - needs: - - job: ros2-iron-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-iron/ros2-iron-desktop.yml - strategy: depend - ros2-iron-desktop-full: stage: ROS 2 Iron rules: @@ -214,17 +181,6 @@ ros2-jazzy-ros-base: include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml strategy: depend -ros2-jazzy-desktop: - stage: ROS 2 Jazzy - rules: - - if: $ROS_DISTROS =~ /.*jazzy.*/ - needs: - - job: ros2-jazzy-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml - strategy: depend - ros2-jazzy-desktop-full: stage: ROS 2 Jazzy rules: diff --git a/.gitlab-ci/ros-noetic/ros-noetic-desktop.yml b/.gitlab-ci/ros-noetic/ros-noetic-desktop.yml deleted file mode 100644 index 6135133..0000000 --- a/.gitlab-ci/ros-noetic/ros-noetic-desktop.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros-noetic/.ros-noetic.yml - - .gitlab-ci/ros-packages/.desktop.yml diff --git a/.gitlab-ci/ros2-humble/ros2-humble-desktop.yml b/.gitlab-ci/ros2-humble/ros2-humble-desktop.yml deleted file mode 100644 index c6493f5..0000000 --- a/.gitlab-ci/ros2-humble/ros2-humble-desktop.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-humble/.ros2-humble.yml - - .gitlab-ci/ros-packages/.desktop.yml \ No newline at end of file diff --git a/.gitlab-ci/ros2-iron/ros2-iron-desktop.yml b/.gitlab-ci/ros2-iron/ros2-iron-desktop.yml deleted file mode 100644 index fd3631c..0000000 --- a/.gitlab-ci/ros2-iron/ros2-iron-desktop.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-iron/.ros2-iron.yml - - .gitlab-ci/ros-packages/.desktop.yml \ No newline at end of file diff --git a/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml b/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml deleted file mode 100644 index 5b827ec..0000000 --- a/.gitlab-ci/ros2-jazzy/ros2-jazzy-desktop.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml - - .gitlab-ci/ros-packages/.desktop.yml \ No newline at end of file diff --git a/README.md b/README.md index fff98e6..2cdfd56 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ With *docker-ros-ml-images*, we provide a variety of lightweight multi-arch mach | Component | Variations | | ---------------- | -------------------------------------------------------------------- | | ROS Distribution | noetic, foxy, humble, iron, rolling | -| ROS Components | core, base, desktop, desktop-full | +| ROS Components | core, base, desktop-full | | ML Framework | CUDA, PyTorch Python, PyTorch C++, TensorFlow Python, TensorFlow C++ | | Architecture | amd64, arm64 | @@ -76,7 +76,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | ------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :---: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | | `noetic-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | - | - | - | - | - | - | - | | `latest`, `noetic`, `noetic-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `noetic-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | - | - | - | - | - | - | - | | `noetic-desktop-full` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | - | - | - | - | - | - | - | @@ -94,7 +93,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | ------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :-----: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | | `noetic-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | | `latest`, `noetic`, `noetic-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `noetic-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | | `noetic-desktop-full` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | @@ -112,15 +110,12 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | ------------------------------------------------ | :------------: | :----------: | :---------: | :---------: | :---------------: | :---------: | :----------: | :--------: | :--------: | :------------: | :---------: | :---------------: | :------------: | | `noetic-ros-core-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | | `latest`, `noetic`, `noetic-ros-base-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `noetic-desktop-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | | `noetic-desktop-full-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | | `noetic-ros-core-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | | `noetic-ros-base-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `noetic-desktop-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | | `noetic-desktop-full-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | | `noetic-ros-core-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | noetic
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `noetic-ros-base-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | noetic
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `noetic-desktop-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | noetic
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `noetic-desktop-full-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | noetic
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | @@ -138,15 +133,12 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | ---------------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :-----: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | | `noetic-ros-core-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | | `latest`, `noetic`, `noetic-ros-base-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `noetic-desktop-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | | `noetic-desktop-full-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | | `noetic-ros-core-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | | `noetic-ros-base-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `noetic-desktop-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | | `noetic-desktop-full-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | | `noetic-ros-core-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | | `noetic-ros-base-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `noetic-desktop-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | | `noetic-desktop-full-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | @@ -164,7 +156,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | --------------------------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :-----: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | | `noetic-ros-core-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | | `latest`, `noetic`, `noetic-ros-base-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `noetic-desktop-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | | `noetic-desktop-full-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | @@ -187,11 +178,9 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `rolling-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | - | - | - | - | - | - | - | | `iron-ros-core` | amd64
arm64 | 22.04.2 | 3.10.12 | iron | ros-core | 3.27.2 | - | - | - | - | - | - | - | | `iron`, `iron-ros-base` | amd64
arm64 | 22.04.2 | 3.10.12 | iron | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `iron-desktop` | amd64
arm64 | 22.04.2 | 3.10.12 | iron | desktop | 3.27.2 | - | - | - | - | - | - | - | | `iron-desktop-full` | amd64
arm64 | 22.04.2 | 3.10.12 | iron | desktop-full | 3.27.2 | - | - | - | - | - | - | - | | `humble-ros-core` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-core | 3.27.2 | - | - | - | - | - | - | - | | `latest`, `humble`, `humble-ros-base` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `humble-desktop` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | desktop | 3.27.2 | - | - | - | - | - | - | - | | `humble-desktop-full` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | desktop-full | 3.27.2 | - | - | - | - | - | - | - | | `foxy-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | - | - | - | - | - | - | - | | `foxy`, `foxy-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | - | - | - | - | - | - | - | @@ -215,11 +204,9 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `rolling-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | | `iron-ros-core` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `iron`, `iron-ros-base` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `iron-desktop` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `iron-desktop-full` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `humble-ros-core` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `latest`, `humble`, `humble-ros-base` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `humble-desktop` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `humble-desktop-full` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `foxy-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | | `foxy`, `foxy-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | @@ -249,27 +236,21 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `rolling-desktop-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | rolling
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `iron-ros-core-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | | `iron`, `iron-ros-base-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `iron-desktop-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | | `iron-desktop-full-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | | `iron-ros-core-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | | `iron-ros-base-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `iron-desktop-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | | `iron-desktop-full-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | | `iron-ros-core-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `iron-ros-base-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `iron-desktop-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `iron-desktop-full-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `humble-ros-core-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | | `latest`, `humble`, `humble-ros-base-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `humble-desktop-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | | `humble-desktop-full-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | | `humble-ros-core-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | | `humble-ros-base-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `humble-desktop-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | | `humble-desktop-full-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | | `humble-ros-core-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `humble-ros-base-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `humble-desktop-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `humble-desktop-full-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `foxy-ros-core-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | | `foxy`, `foxy-ros-base-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | @@ -305,27 +286,21 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `rolling-desktop-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | | `iron-ros-core-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | | `iron`, `iron-ros-base-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `iron-desktop-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | | `iron-desktop-full-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | | `iron-ros-core-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | | `iron-ros-base-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `iron-desktop-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | | `iron-desktop-full-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | | `iron-ros-core-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `iron-ros-base-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `iron-desktop-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `iron-desktop-full-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `humble-ros-core-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | | `latest`, `humble`, `humble-ros-base-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `humble-desktop-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | | `humble-desktop-full-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | | `humble-ros-core-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | | `humble-ros-base-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `humble-desktop-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | | `humble-desktop-full-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | | `humble-ros-core-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `humble-ros-base-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `humble-desktop-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `humble-desktop-full-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `foxy-ros-core-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | | `foxy`, `foxy-ros-base-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | @@ -355,11 +330,9 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `rolling-desktop-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | | `iron-ros-core-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `iron`, `iron-ros-base-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `iron-desktop-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `iron-desktop-full-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `humble-ros-core-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `latest`, `humble`, `humble-ros-base-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `humble-desktop-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `humble-desktop-full-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `foxy-ros-core-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | | `foxy`, `foxy-ros-base-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | From 7d78dcfed68c370e84913a982f2c88cce6ac2741 Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 24 May 2024 17:36:28 +0200 Subject: [PATCH 07/64] remove custom cuda image build --- .gitlab-ci.yml | 16 ------ .gitlab-ci/.cuda-base.yml | 61 --------------------- Dockerfile | 20 ++++--- README.md | 1 - cuda/.gitignore | 1 - cuda/Dockerfile | 110 -------------------------------------- cuda/README.md | 35 ------------ 7 files changed, 12 insertions(+), 232 deletions(-) delete mode 100644 .gitlab-ci/.cuda-base.yml delete mode 100644 cuda/.gitignore delete mode 100644 cuda/Dockerfile delete mode 100644 cuda/README.md diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c329d02..28a1a7d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,6 @@ variables: stages: - # - CUDA - ROS 1 Noetic - ROS 2 Foxy - ROS 2 Humble @@ -17,21 +16,6 @@ stages: - ROS 2 Jazzy - ROS 2 Rolling -# build-cuda-ubuntu20: -# stage: CUDA -# trigger: -# include: .gitlab-ci/.cuda-base.yml -# strategy: depend -# variables: -# UBUNTU_VERSION: "20.04" - -# build-cuda-ubuntu22: -# stage: CUDA -# trigger: -# include: .gitlab-ci/.cuda-base.yml -# strategy: depend -# variables: -# UBUNTU_VERSION: "22.04" ros-noetic-ros-core: stage: ROS 1 Noetic diff --git a/.gitlab-ci/.cuda-base.yml b/.gitlab-ci/.cuda-base.yml deleted file mode 100644 index 061418f..0000000 --- a/.gitlab-ci/.cuda-base.yml +++ /dev/null @@ -1,61 +0,0 @@ -stages: - - Build - -default: - image: docker:20.10.22-git - services: - - docker:20.10.22-dind - tags: - - privileged - before_script: - - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - -variables: - DOCKER_DRIVER: overlay2 - DOCKER_TLS_CERTDIR: /certs - GIT_SUBMODULE_STRATEGY: recursive - IMAGE_BASE: gitlab.ika.rwth-aachen.de:5050/fb-fi/ops/docker-ros-ml-images/cuda - UBUNTU_VERSION: "20.04" - TYPE: run - CUDA_VERSION: "11.8" - CUDNN_VERSION: "8.6.0.163-1" - LIBNVINFER_VERSION: "8.5.3-1" - IMAGE_CI: ${IMAGE_BASE}:${CUDA_VERSION}-ubuntu${UBUNTU_VERSION}-cudnn${CUDNN_VERSION}-trt${LIBNVINFER_VERSION} - - -.docker-build: - script: - - cd cuda - - > - docker buildx build - --pull - --push - --platform $PLATFORM - --build-arg UBUNTU_VERSION=$UBUNTU_VERSION - --build-arg TYPE=$TYPE - --build-arg CUDA=$CUDA_VERSION - --build-arg CUDNN=$CUDNN_VERSION - --build-arg LIBNVINFER=$LIBNVINFER_VERSION - --tag $IMAGE - -f Dockerfile - . - -build-amd64: - stage: Build - tags: [privileged, amd64] - script: - - !reference [.docker-build, script] - variables: - PLATFORM: linux/amd64 - IMAGE: ${IMAGE_CI}-amd64 - -build-arm64: - stage: Build - tags: [privileged, arm64] - rules: - - if: $UBUNTU_VERSION != '22.04' - script: - - !reference [.docker-build, script] - variables: - PLATFORM: linux/arm64 - IMAGE: ${IMAGE_CI}-arm64 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 39fd50f..3ba4be3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,6 @@ # --load \ # --platform $(uname)/$(uname -m) \ # --build-arg BUILD_VERSION=$BUILD_VERSION \ -# --build-arg CUDA_VERSION=$CUDA_VERSION \ # --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ # --build-arg ROS_VERSION=$ROS_VERSION \ # --build-arg ROS_DISTRO=$ROS_DISTRO \ @@ -15,17 +14,22 @@ # . ARG BUILD_VERSION -ARG UBUNTU_VERSION="20.04" -ARG CUDA_VERSION=11.8 +ARG UBUNTU_VERSION="22.04" -# === base (multiarch) =============================================================== -FROM ubuntu:${UBUNTU_VERSION} as base +# === base-amd64 ================================================================== +FROM --platform=amd64 ubuntu:${UBUNTU_VERSION} as base-amd64 -# === base-ml (multiarch) ============================================================ -FROM rwthika/cuda:${CUDA_VERSION}-cudnn-trt-ubuntu${UBUNTU_VERSION} as base-ml +# === base-arm64 ================================================================== +FROM --platform=arm64 ubuntu:${UBUNTU_VERSION} as base-arm64 + +# === base-ml-amd64 ================================================================== +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:24.04-py3 as base-ml-amd64 + +# === base-ml-arm64 ================================================================== +FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime as base-ml-arm64 # === dependencies =================================================================== -FROM "base${BUILD_VERSION}" as dependencies +FROM "base${BUILD_VERSION}-${TARGETARCH}" as dependencies ARG DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] diff --git a/README.md b/README.md index 2cdfd56..134fed7 100644 --- a/README.md +++ b/README.md @@ -350,7 +350,6 @@ docker buildx build --platform $PLATFORM --build-arg BUILD_VERSION=$BUILD_VERSION --build-arg UBUNTU_VERSION=$UBUNTU_VERSION - --build-arg CUDA_VERSION=$CUDA_VERSION --build-arg ROS_VERSION=$ROS_VERSION --build-arg ROS_DISTRO=$ROS_DISTRO --build-arg ROS_PACKAGE=$ROS_PACKAGE diff --git a/cuda/.gitignore b/cuda/.gitignore deleted file mode 100644 index c776bdf..0000000 --- a/cuda/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.deb \ No newline at end of file diff --git a/cuda/Dockerfile b/cuda/Dockerfile deleted file mode 100644 index 273bc33..0000000 --- a/cuda/Dockerfile +++ /dev/null @@ -1,110 +0,0 @@ -# docker buildx build \ -# --load \ -# --platform $(uname)/$(uname -m) \ -# --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ -# --build-arg CUDA_VERSION=$CUDA_VERSION \ -# --build-arg CUDNN_VERSION=$CUDNN_VERSION \ -# --build-arg TENSORRT_VERSION=$TENSORRT_VERSION \ -# --build-arg INSTALL_AS_DEV=$INSTALL_AS_DEV \ -# --tag $IMAGE \ -# . - -ARG UBUNTU_VERSION=20.04 - -# === base-amd64-20.04 =============================================================== -FROM --platform=amd64 ubuntu:20.04 as base-amd64-20.04 - -# === base-arm64-20.04 =============================================================== -FROM --platform=arm64 nvcr.io/nvidia/l4t-base:35.4.1 as base-arm64-20.04 - -# === base-amd64-22.04 =============================================================== -FROM --platform=amd64 ubuntu:22.04 as base-amd64-22.04 - -# === base-arm64-22.04 =============================================================== -# not supported - -# === dependencies ============================================================= -FROM "base-${TARGETARCH}-${UBUNTU_VERSION}" as dependencies -ARG TARGETARCH -ENV DEBIAN_FRONTEND=noninteractive - -ARG UBUNTU_VERSION -ARG CUDA_VERSION=11.8 -ARG CUDNN_VERSION=8.6.0.163-1 -ARG TENSORRT_VERSION=8.5.3-1 -ARG INSTALL_AS_DEV=0 - -ENV NVIDIA_VISIBLE_DEVICES all -ENV NVIDIA_DRIVER_CAPABILITIES all - -SHELL ["/bin/bash", "-c"] - -# install essentials -RUN apt-get update && \ - apt-get install -y \ - wget \ - gnupg2 && \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y build-essential; fi && \ - rm -rf /var/lib/apt/lists/* - -# set up CUDA apt repositories -RUN if [[ "$TARGETARCH" == "amd64" ]]; then \ - wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb; \ - elif [[ "$TARGETARCH" == "arm64" ]]; then \ - wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/arm64/cuda-keyring_1.0-1_all.deb; \ - fi && \ - dpkg -i /tmp/cuda-keyring_1.0-1_all.deb && \ - rm -rf /tmp/cuda-keyring_1.0-1_all.deb - -# set up L4T apt repositories (NVIDIA Jetson) -RUN if [[ "$TARGETARCH" == "arm64" ]]; then \ - echo "deb https://repo.download.nvidia.com/jetson/common r35.4 main" >> /etc/apt/sources.list && \ - echo "deb https://repo.download.nvidia.com/jetson/t194 r35.4 main" >> /etc/apt/sources.list && \ - apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc && \ - mkdir -p /opt/nvidia/l4t-packages/ && \ - touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall && \ - rm -rf /var/lib/apt/lists/* ; \ - fi - -# install CUDA -RUN apt-get update && \ - if [[ "$TARGETARCH" == "amd64" ]]; then \ - apt-get install -y cuda-libraries-${CUDA_VERSION/./-}; \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y cuda-toolkit-${CUDA_VERSION/./-} cuda-demo-suite-${CUDA_VERSION/./-}; fi \ - elif [[ "$TARGETARCH" == "arm64" ]]; then \ - echo "N" | apt-get install -y cuda-runtime-${CUDA_VERSION/./-}; \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y cuda-toolkit-${CUDA_VERSION/./-}; fi \ - fi && \ - echo "export PATH=/usr/local/cuda/bin:$PATH" >> ~/.bashrc && \ - rm -rf /var/lib/apt/lists/* - -# install cuDNN -RUN --mount=type=bind,source=cudnn-local-repo-${TARGETARCH}.deb,target=/cudnn-local-repo.deb,ro \ - gpg_key=$(dpkg -i cudnn-local-repo.deb | grep -oP "(?<=cp )[^ ]+(?= )") && \ - cp ${gpg_key} /usr/share/keyrings/ && \ - CUDNN_MAJOR_VERSION=${CUDNN_VERSION%%.*} && \ - apt-get update && \ - apt-get install -y libcudnn${CUDNN_MAJOR_VERSION}=${CUDNN_VERSION}+cuda${CUDA_VERSION} && \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then \ - apt-get install -y libcudnn${CUDNN_MAJOR_VERSION}-dev=${CUDNN_VERSION}+cuda${CUDA_VERSION}; \ - fi && \ - rm -rf /var/lib/apt/lists/* - -# install TensorRT -RUN --mount=type=bind,source=nv-tensorrt-local-repo-${TARGETARCH}.deb,target=/nv-tensorrt-local-repo.deb,ro \ - gpg_key=$(dpkg -i nv-tensorrt-local-repo.deb | grep -oP "(?<=cp )[^ ]+(?= )") && \ - cp ${gpg_key} /usr/share/keyrings/ && \ - TENSORRT_MAJOR_VERSION=${TENSORRT_VERSION%%.*} && \ - apt-get update && \ - apt-get install -y \ - libnvinfer${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION} \ - libnvinfer-plugin${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION} && \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then \ - apt-get install -y \ - libnvinfer-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION} \ - libnvinfer-plugin-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION}; \ - fi && \ - rm -rf /var/lib/apt/lists/* - -# container startup setup -CMD ["bash"] diff --git a/cuda/README.md b/cuda/README.md deleted file mode 100644 index 6089fe0..0000000 --- a/cuda/README.md +++ /dev/null @@ -1,35 +0,0 @@ -## Docker Images for CUDA, cuDNN, TensorRT - -The Dockerfile in this directory can be used to build Docker images including arbitrary versions of CUDA, cuDNN, and TensorRT, either runtime-only or including dev-libraries. The images are well suited as base images for other Dockerfiles. In this repository, they are used as base images for the machine-learning enabled ROS Docker images. - -### Why not use `nvidia/cuda` or `nvcr.io/nvidia/tensorrt`? - -NVIDIA releases official CUDA-related Docker images on both DockerHub (e.g., [`nvidia/cuda`](https://hub.docker.com/r/nvidia/cuda)) and their own NGC (e.g., [`nvcr.io/nvidia/tensorrt`](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tensorrt)). The former offers a variety of different CUDA versions including cuDNN installations, but no support for TensorRT. The latter offers images with CUDA, cuDNN, and TensorRT installed, but uses a monthly update cycle containing only specific versions of those libraries. In contrast, this Dockerfile can be used to build multi-arch combinations of arbitrary CUDA, cuDNN, and TensorRT versions, giving more flexibility. - -### Available Images - -| Tag | Arch | Ubuntu | CUDA | cuDNN | TensorRT | -| ------------------------------------ | :------------: | :-----: | :-----: | :---: | :------: | -| `11.8-cudnn-trt-ubuntu20.04[-devel]` | amd64
arm64 | 20.04.6 | 11.8.89 | 8.6.0 | 8.5.3 | -| `11.8-cudnn-trt-ubuntu22.04[-devel]` | amd64 | 22.04.2 | 11.8.89 | 8.6.0 | 8.5.3 | - -### Build - -1. Download a cuDNN installer deb-package from [NVIDIA's download page](https://developer.nvidia.com/rdp/cudnn-archive) (login required). -2. Place the cuDNN installer deb-package in this directory and rename it to `cudnn-local-repo-$(dpkg --print-architecture).deb`. -3. Download a TensorRT installer deb-package from [NVIDIA's download page](https://developer.nvidia.com/tensorrt-download) (login required). -4. Place the cuDNN installer deb-package in this directory and rename it to `nv-tensorrt-local-repo-$(dpkg --print-architecture).deb`. -5. Build the Docker image with below command. - -```bash -docker buildx build \ - --load \ - --platform $(uname)/$(uname -m) \ - --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ - --build-arg CUDA_VERSION=$CUDA_VERSION \ - --build-arg CUDNN_VERSION=$CUDNN_VERSION \ - --build-arg TENSORRT_VERSION=$TENSORRT_VERSION \ - --build-arg INSTALL_AS_DEV=$INSTALL_AS_DEV \ - --tag rwthika/cuda:$CUDA_VERSION-cudnn-trt-ubuntu$UBUNTU_VERSION \ - . -``` From 9c26bf680f4f59c358965bd1e0fb3422d2dfc2ed Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Mon, 27 May 2024 11:36:01 +0200 Subject: [PATCH 08/64] specify nvidia base images for different ubuntu versions --- Dockerfile | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3ba4be3..d64da82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,20 +16,20 @@ ARG BUILD_VERSION ARG UBUNTU_VERSION="22.04" -# === base-amd64 ================================================================== -FROM --platform=amd64 ubuntu:${UBUNTU_VERSION} as base-amd64 - -# === base-arm64 ================================================================== -FROM --platform=arm64 ubuntu:${UBUNTU_VERSION} as base-arm64 - -# === base-ml-amd64 ================================================================== -FROM --platform=amd64 nvcr.io/nvidia/tensorrt:24.04-py3 as base-ml-amd64 - -# === base-ml-arm64 ================================================================== -FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime as base-ml-arm64 - -# === dependencies =================================================================== -FROM "base${BUILD_VERSION}-${TARGETARCH}" as dependencies +# === base${BUILD_VERSION}-ubuntu${UBUNTU_VERSION}-${TARGETARCH} =============== +FROM --platform=amd64 ubuntu:${UBUNTU_VERSION} as base-ubuntu20.04-amd64 +FROM --platform=amd64 ubuntu:${UBUNTU_VERSION} as base-ubuntu22.04-amd64 +FROM --platform=amd64 ubuntu:${UBUNTU_VERSION} as base-ubuntu24.04-amd64 +FROM --platform=arm64 ubuntu:${UBUNTU_VERSION} as base-ubuntu20.04-arm64 +FROM --platform=arm64 ubuntu:${UBUNTU_VERSION} as base-ubuntu22.04-arm64 +FROM --platform=arm64 ubuntu:${UBUNTU_VERSION} as base-ubuntu24.04-arm64 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 as base-ml-ubuntu20.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:24.04-py3 as base-ml-ubuntu22.04-amd64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime as base-ml-ubuntu20.04-arm64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime as base-ml-ubuntu22.04-arm64 + +# === dependencies ============================================================= +FROM "base${BUILD_VERSION}-ubuntu${UBUNTU_VERSION}-${TARGETARCH}" as dependencies ARG DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] From 80ad6025ad0be9947b1215c073876decf4702f8b Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Mon, 27 May 2024 11:36:23 +0200 Subject: [PATCH 09/64] remove support for foxy as it has gone eol --- .gitlab-ci.yml | 35 +-------------------- .gitlab-ci/ros2-foxy/.ros2-foxy.yml | 5 --- .gitlab-ci/ros2-foxy/ros2-foxy-desktop.yml | 4 --- .gitlab-ci/ros2-foxy/ros2-foxy-ros-base.yml | 4 --- .gitlab-ci/ros2-foxy/ros2-foxy-ros-core.yml | 4 --- README.md | 31 ++---------------- 6 files changed, 3 insertions(+), 80 deletions(-) delete mode 100644 .gitlab-ci/ros2-foxy/.ros2-foxy.yml delete mode 100644 .gitlab-ci/ros2-foxy/ros2-foxy-desktop.yml delete mode 100644 .gitlab-ci/ros2-foxy/ros2-foxy-ros-base.yml delete mode 100644 .gitlab-ci/ros2-foxy/ros2-foxy-ros-core.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 28a1a7d..b29ffb9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,12 +5,11 @@ workflow: variables: - ROS_DISTROS: noetic,foxy,humble,iron,jazzy,rolling + ROS_DISTROS: noetic,humble,iron,jazzy,rolling stages: - ROS 1 Noetic - - ROS 2 Foxy - ROS 2 Humble - ROS 2 Iron - ROS 2 Jazzy @@ -49,38 +48,6 @@ ros-noetic-desktop-full: strategy: depend -ros2-foxy-ros-core: - stage: ROS 2 Foxy - rules: - - if: $ROS_DISTROS =~ /.*foxy.*/ - needs: [] - trigger: - include: .gitlab-ci/ros2-foxy/ros2-foxy-ros-core.yml - strategy: depend - -ros2-foxy-ros-base: - stage: ROS 2 Foxy - rules: - - if: $ROS_DISTROS =~ /.*foxy.*/ - needs: - - job: ros2-foxy-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-foxy/ros2-foxy-ros-base.yml - strategy: depend - -ros2-foxy-desktop: - stage: ROS 2 Foxy - rules: - - if: $ROS_DISTROS =~ /.*foxy.*/ - needs: - - job: ros2-foxy-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-foxy/ros2-foxy-desktop.yml - strategy: depend - - ros2-humble-ros-core: stage: ROS 2 Humble rules: diff --git a/.gitlab-ci/ros2-foxy/.ros2-foxy.yml b/.gitlab-ci/ros2-foxy/.ros2-foxy.yml deleted file mode 100644 index 7530380..0000000 --- a/.gitlab-ci/ros2-foxy/.ros2-foxy.yml +++ /dev/null @@ -1,5 +0,0 @@ -variables: - UBUNTU_VERSION: "20.04" - ROS_VERSION: 2 - ROS_VERSION_NAME: "ros2" - ROS_DISTRO: foxy diff --git a/.gitlab-ci/ros2-foxy/ros2-foxy-desktop.yml b/.gitlab-ci/ros2-foxy/ros2-foxy-desktop.yml deleted file mode 100644 index 227bce6..0000000 --- a/.gitlab-ci/ros2-foxy/ros2-foxy-desktop.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-foxy/.ros2-foxy.yml - - .gitlab-ci/ros-packages/.desktop.yml diff --git a/.gitlab-ci/ros2-foxy/ros2-foxy-ros-base.yml b/.gitlab-ci/ros2-foxy/ros2-foxy-ros-base.yml deleted file mode 100644 index c5c23c1..0000000 --- a/.gitlab-ci/ros2-foxy/ros2-foxy-ros-base.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-foxy/.ros2-foxy.yml - - .gitlab-ci/ros-packages/.ros-base.yml diff --git a/.gitlab-ci/ros2-foxy/ros2-foxy-ros-core.yml b/.gitlab-ci/ros2-foxy/ros2-foxy-ros-core.yml deleted file mode 100644 index a3ac7e5..0000000 --- a/.gitlab-ci/ros2-foxy/ros2-foxy-ros-core.yml +++ /dev/null @@ -1,4 +0,0 @@ -include: - - .gitlab-ci/.template.yml - - .gitlab-ci/ros2-foxy/.ros2-foxy.yml - - .gitlab-ci/ros-packages/.ros-core.yml diff --git a/README.md b/README.md index 134fed7..ad13e23 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - +

@@ -40,7 +40,7 @@ With *docker-ros-ml-images*, we provide a variety of lightweight multi-arch mach | Component | Variations | | ---------------- | -------------------------------------------------------------------- | -| ROS Distribution | noetic, foxy, humble, iron, rolling | +| ROS Distribution | noetic, humble, iron, jazzy, rolling | | ROS Components | core, base, desktop-full | | ML Framework | CUDA, PyTorch Python, PyTorch C++, TensorFlow Python, TensorFlow C++ | | Architecture | amd64, arm64 | @@ -182,9 +182,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `humble-ros-core` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-core | 3.27.2 | - | - | - | - | - | - | - | | `latest`, `humble`, `humble-ros-base` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-base | 3.27.2 | - | - | - | - | - | - | - | | `humble-desktop-full` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | desktop-full | 3.27.2 | - | - | - | - | - | - | - | -| `foxy-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | - | - | - | - | - | - | - | -| `foxy`, `foxy-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `foxy-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | - | - | - | - | - | - | - | @@ -208,9 +205,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `humble-ros-core` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `latest`, `humble`, `humble-ros-base` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | | `humble-desktop-full` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `foxy-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `foxy`, `foxy-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `foxy-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | @@ -252,15 +246,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `humble-ros-core-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `humble-ros-base-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | | `humble-desktop-full-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `foxy-ros-core-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `foxy`, `foxy-ros-base-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `foxy-desktop-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `foxy-ros-core-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `foxy-ros-base-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `foxy-desktop-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `foxy-ros-core-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | foxy
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `foxy-ros-base-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | foxy
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `foxy-desktop-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | foxy
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | @@ -302,15 +287,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `humble-ros-core-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `humble-ros-base-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | | `humble-desktop-full-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `foxy-ros-core-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `foxy`, `foxy-ros-base-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `foxy-desktop-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `foxy-ros-core-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `foxy-ros-base-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `foxy-desktop-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `foxy-ros-core-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `foxy-ros-base-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `foxy-desktop-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | @@ -334,9 +310,6 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `humble-ros-core-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `latest`, `humble`, `humble-ros-base-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | | `humble-desktop-full-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `foxy-ros-core-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `foxy`, `foxy-ros-base-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `foxy-desktop-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | foxy | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | From 57a56c0937842e23c19ec3f955ce1fef14606e81 Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Mon, 27 May 2024 16:12:07 +0200 Subject: [PATCH 10/64] fix deps between ci jobs --- .gitlab-ci.yml | 8 ++++---- README.md | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b29ffb9..f916176 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -41,7 +41,7 @@ ros-noetic-desktop-full: rules: - if: $ROS_DISTROS =~ /.*noetic.*/ needs: - - job: ros-noetic-desktop + - job: ros-noetic-ros-base optional: true trigger: include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml @@ -73,7 +73,7 @@ ros2-humble-desktop-full: rules: - if: $ROS_DISTROS =~ /.*humble.*/ needs: - - job: ros2-humble-desktop + - job: ros2-humble-ros-base optional: true trigger: include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml @@ -105,7 +105,7 @@ ros2-iron-desktop-full: rules: - if: $ROS_DISTROS =~ /.*iron.*/ needs: - - job: ros2-iron-desktop + - job: ros2-iron-ros-base optional: true trigger: include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml @@ -137,7 +137,7 @@ ros2-jazzy-desktop-full: rules: - if: $ROS_DISTROS =~ /.*jazzy.*/ needs: - - job: ros2-jazzy-desktop + - job: ros2-jazzy-ros-base optional: true trigger: include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml diff --git a/README.md b/README.md index ad13e23..0383cf7 100644 --- a/README.md +++ b/README.md @@ -318,17 +318,17 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` ## Manual Build ``` -docker buildx build - --pull - --platform $PLATFORM - --build-arg BUILD_VERSION=$BUILD_VERSION - --build-arg UBUNTU_VERSION=$UBUNTU_VERSION - --build-arg ROS_VERSION=$ROS_VERSION - --build-arg ROS_DISTRO=$ROS_DISTRO - --build-arg ROS_PACKAGE=$ROS_PACKAGE - --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY - --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP - --build-arg TF_VERSION_PY=$TF_VERSION_PY - --build-arg TF_VERSION_CPP=$TF_VERSION_CPP +docker buildx build \ + --pull \ + --platform $PLATFORM \ + --build-arg BUILD_VERSION=$BUILD_VERSION \ + --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ + --build-arg ROS_VERSION=$ROS_VERSION \ + --build-arg ROS_DISTRO=$ROS_DISTRO \ + --build-arg ROS_PACKAGE=$ROS_PACKAGE \ + --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY \ + --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP \ + --build-arg TF_VERSION_PY=$TF_VERSION_PY \ + --build-arg TF_VERSION_CPP=$TF_VERSION_CPP \ --tag $IMAGE . ``` From 0d3c7010a7e53e2145e490e7ba875ba4d4cd33ad Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Mon, 27 May 2024 16:31:23 +0200 Subject: [PATCH 11/64] fix tf dependency on ubuntu 20 for ros-base images --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index d64da82..115dad3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -174,6 +174,9 @@ RUN if [[ -n $TF_VERSION_CPP ]]; then \ # install TensorFlow ARG TF_VERSION_PY RUN if [[ -n $TF_VERSION_PY ]]; then \ + apt-get update && \ + apt-get install -y libhdf5-dev && \ + rm -rf /var/lib/apt/lists/* && \ PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ ARCH=$(uname -m) && \ pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ From 05859e6b46ed7a49f4e6152163eccb8fbfbb6cff Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Tue, 4 Jun 2024 22:16:46 +0200 Subject: [PATCH 12/64] restore folder for manual cuda build --- cuda/.gitignore | 1 + cuda/Dockerfile | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ cuda/README.md | 35 +++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 cuda/.gitignore create mode 100644 cuda/Dockerfile create mode 100644 cuda/README.md diff --git a/cuda/.gitignore b/cuda/.gitignore new file mode 100644 index 0000000..c776bdf --- /dev/null +++ b/cuda/.gitignore @@ -0,0 +1 @@ +*.deb \ No newline at end of file diff --git a/cuda/Dockerfile b/cuda/Dockerfile new file mode 100644 index 0000000..76422b8 --- /dev/null +++ b/cuda/Dockerfile @@ -0,0 +1,110 @@ +# docker buildx build \ +# --load \ +# --platform $(uname)/$(uname -m) \ +# --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ +# --build-arg CUDA_VERSION=$CUDA_VERSION \ +# --build-arg CUDNN_VERSION=$CUDNN_VERSION \ +# --build-arg TENSORRT_VERSION=$TENSORRT_VERSION \ +# --build-arg INSTALL_AS_DEV=$INSTALL_AS_DEV \ +# --tag $IMAGE \ +# . + +ARG UBUNTU_VERSION=20.04 + +# === base-amd64-20.04 =============================================================== +FROM --platform=amd64 ubuntu:20.04 as base-amd64-20.04 + +# === base-arm64-20.04 =============================================================== +FROM --platform=arm64 nvcr.io/nvidia/l4t-base:35.4.1 as base-arm64-20.04 + +# === base-amd64-22.04 =============================================================== +FROM --platform=amd64 ubuntu:22.04 as base-amd64-22.04 + +# === base-arm64-22.04 =============================================================== +# not supported + +# === dependencies ============================================================= +FROM "base-${TARGETARCH}-${UBUNTU_VERSION}" as dependencies +ARG TARGETARCH +ENV DEBIAN_FRONTEND=noninteractive + +ARG UBUNTU_VERSION +ARG CUDA_VERSION=11.8 +ARG CUDNN_VERSION=8.6.0.163-1 +ARG TENSORRT_VERSION=8.5.3-1 +ARG INSTALL_AS_DEV=0 + +ENV NVIDIA_VISIBLE_DEVICES all +ENV NVIDIA_DRIVER_CAPABILITIES all + +SHELL ["/bin/bash", "-c"] + +# install essentials +RUN apt-get update && \ + apt-get install -y \ + wget \ + gnupg2 && \ + if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y build-essential; fi && \ + rm -rf /var/lib/apt/lists/* + +# set up CUDA apt repositories +RUN if [[ "$TARGETARCH" == "amd64" ]]; then \ + wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb; \ + elif [[ "$TARGETARCH" == "arm64" ]]; then \ + wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/arm64/cuda-keyring_1.0-1_all.deb; \ + fi && \ + dpkg -i /tmp/cuda-keyring_1.0-1_all.deb && \ + rm -rf /tmp/cuda-keyring_1.0-1_all.deb + +# set up L4T apt repositories (NVIDIA Jetson) +RUN if [[ "$TARGETARCH" == "arm64" ]]; then \ + echo "deb https://repo.download.nvidia.com/jetson/common r35.4 main" >> /etc/apt/sources.list && \ + echo "deb https://repo.download.nvidia.com/jetson/t194 r35.4 main" >> /etc/apt/sources.list && \ + apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc && \ + mkdir -p /opt/nvidia/l4t-packages/ && \ + touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall && \ + rm -rf /var/lib/apt/lists/* ; \ + fi + +# install CUDA +RUN apt-get update && \ + if [[ "$TARGETARCH" == "amd64" ]]; then \ + apt-get install -y cuda-libraries-${CUDA_VERSION/./-}; \ + if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y cuda-toolkit-${CUDA_VERSION/./-} cuda-demo-suite-${CUDA_VERSION/./-}; fi \ + elif [[ "$TARGETARCH" == "arm64" ]]; then \ + echo "N" | apt-get install -y cuda-runtime-${CUDA_VERSION/./-}; \ + if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y cuda-toolkit-${CUDA_VERSION/./-}; fi \ + fi && \ + echo "export PATH=/usr/local/cuda/bin:$PATH" >> ~/.bashrc && \ + rm -rf /var/lib/apt/lists/* + +# install cuDNN +RUN --mount=type=bind,source=cudnn-local-repo-${TARGETARCH}.deb,target=/cudnn-local-repo.deb,ro \ + gpg_key=$(dpkg -i cudnn-local-repo.deb | grep -oP "(?<=cp )[^ ]+(?= )") && \ + cp ${gpg_key} /usr/share/keyrings/ && \ + CUDNN_MAJOR_VERSION=${CUDNN_VERSION%%.*} && \ + apt-get update && \ + apt-get install -y libcudnn${CUDNN_MAJOR_VERSION}=${CUDNN_VERSION}+cuda${CUDA_VERSION} && \ + if [[ "$INSTALL_AS_DEV" == "1" ]]; then \ + apt-get install -y libcudnn${CUDNN_MAJOR_VERSION}-dev=${CUDNN_VERSION}+cuda${CUDA_VERSION}; \ + fi && \ + rm -rf /var/lib/apt/lists/* + +# install TensorRT +RUN --mount=type=bind,source=nv-tensorrt-local-repo-${TARGETARCH}.deb,target=/nv-tensorrt-local-repo.deb,ro \ + gpg_key=$(dpkg -i nv-tensorrt-local-repo.deb | grep -oP "(?<=cp )[^ ]+(?= )") && \ + cp ${gpg_key} /usr/share/keyrings/ && \ + TENSORRT_MAJOR_VERSION=${TENSORRT_VERSION%%.*} && \ + apt-get update && \ + apt-get install -y \ + libnvinfer${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION} \ + libnvinfer-plugin${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION} && \ + if [[ "$INSTALL_AS_DEV" == "1" ]]; then \ + apt-get install -y \ + libnvinfer-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION} \ + libnvinfer-plugin-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION}; \ + fi && \ + rm -rf /var/lib/apt/lists/* + +# container startup setup +CMD ["bash"] diff --git a/cuda/README.md b/cuda/README.md new file mode 100644 index 0000000..6089fe0 --- /dev/null +++ b/cuda/README.md @@ -0,0 +1,35 @@ +## Docker Images for CUDA, cuDNN, TensorRT + +The Dockerfile in this directory can be used to build Docker images including arbitrary versions of CUDA, cuDNN, and TensorRT, either runtime-only or including dev-libraries. The images are well suited as base images for other Dockerfiles. In this repository, they are used as base images for the machine-learning enabled ROS Docker images. + +### Why not use `nvidia/cuda` or `nvcr.io/nvidia/tensorrt`? + +NVIDIA releases official CUDA-related Docker images on both DockerHub (e.g., [`nvidia/cuda`](https://hub.docker.com/r/nvidia/cuda)) and their own NGC (e.g., [`nvcr.io/nvidia/tensorrt`](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tensorrt)). The former offers a variety of different CUDA versions including cuDNN installations, but no support for TensorRT. The latter offers images with CUDA, cuDNN, and TensorRT installed, but uses a monthly update cycle containing only specific versions of those libraries. In contrast, this Dockerfile can be used to build multi-arch combinations of arbitrary CUDA, cuDNN, and TensorRT versions, giving more flexibility. + +### Available Images + +| Tag | Arch | Ubuntu | CUDA | cuDNN | TensorRT | +| ------------------------------------ | :------------: | :-----: | :-----: | :---: | :------: | +| `11.8-cudnn-trt-ubuntu20.04[-devel]` | amd64
arm64 | 20.04.6 | 11.8.89 | 8.6.0 | 8.5.3 | +| `11.8-cudnn-trt-ubuntu22.04[-devel]` | amd64 | 22.04.2 | 11.8.89 | 8.6.0 | 8.5.3 | + +### Build + +1. Download a cuDNN installer deb-package from [NVIDIA's download page](https://developer.nvidia.com/rdp/cudnn-archive) (login required). +2. Place the cuDNN installer deb-package in this directory and rename it to `cudnn-local-repo-$(dpkg --print-architecture).deb`. +3. Download a TensorRT installer deb-package from [NVIDIA's download page](https://developer.nvidia.com/tensorrt-download) (login required). +4. Place the cuDNN installer deb-package in this directory and rename it to `nv-tensorrt-local-repo-$(dpkg --print-architecture).deb`. +5. Build the Docker image with below command. + +```bash +docker buildx build \ + --load \ + --platform $(uname)/$(uname -m) \ + --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ + --build-arg CUDA_VERSION=$CUDA_VERSION \ + --build-arg CUDNN_VERSION=$CUDNN_VERSION \ + --build-arg TENSORRT_VERSION=$TENSORRT_VERSION \ + --build-arg INSTALL_AS_DEV=$INSTALL_AS_DEV \ + --tag rwthika/cuda:$CUDA_VERSION-cudnn-trt-ubuntu$UBUNTU_VERSION \ + . +``` From 933ef316e504f27d4be252dfc41d948293725eba Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Tue, 4 Jun 2024 22:26:39 +0200 Subject: [PATCH 13/64] enable cuda12.2-ubuntu24.04 image docker buildx build --load --platform linux/amd64 --build-arg UBUNTU_VERSION=24.04 --build-arg CUDA_VERSION=12.2 --build-arg CUDNN_VERSION=8.9.7.29-1 --build-arg TENSORRT_VERSION=10.0.1.6-1 --tag rwthika/cuda:12.2-cudnn-tensorrt-ubuntu24.04 . --- cuda/Dockerfile | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/cuda/Dockerfile b/cuda/Dockerfile index 76422b8..582e897 100644 --- a/cuda/Dockerfile +++ b/cuda/Dockerfile @@ -9,19 +9,14 @@ # --tag $IMAGE \ # . -ARG UBUNTU_VERSION=20.04 +ARG UBUNTU_VERSION=22.04 -# === base-amd64-20.04 =============================================================== FROM --platform=amd64 ubuntu:20.04 as base-amd64-20.04 - -# === base-arm64-20.04 =============================================================== -FROM --platform=arm64 nvcr.io/nvidia/l4t-base:35.4.1 as base-arm64-20.04 - -# === base-amd64-22.04 =============================================================== FROM --platform=amd64 ubuntu:22.04 as base-amd64-22.04 - -# === base-arm64-22.04 =============================================================== -# not supported +FROM --platform=amd64 ubuntu:24.04 as base-amd64-24.04 +FROM --platform=arm64 nvcr.io/nvidia/l4t-base:35.4.1 as base-arm64-20.04 +# base-arm64-22.04: not supported +# base-arm64-24.04: not supported # === dependencies ============================================================= FROM "base-${TARGETARCH}-${UBUNTU_VERSION}" as dependencies @@ -49,7 +44,14 @@ RUN apt-get update && \ # set up CUDA apt repositories RUN if [[ "$TARGETARCH" == "amd64" ]]; then \ - wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb; \ + if [[ "$UBUNTU_VERSION" == "20.04" ]]; then \ + CUDA_DEB_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb"; \ + elif [[ "$UBUNTU_VERSION" == "22.04" ]]; then \ + CUDA_DEB_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb"; \ + elif [[ "$UBUNTU_VERSION" == "24.04" ]]; then \ + CUDA_DEB_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb"; \ + fi && \ + wget -q -O /tmp/cuda-keyring_1.0-1_all.deb ${CUDA_DEB_URL}; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/arm64/cuda-keyring_1.0-1_all.deb; \ fi && \ @@ -95,14 +97,19 @@ RUN --mount=type=bind,source=nv-tensorrt-local-repo-${TARGETARCH}.deb,target=/nv gpg_key=$(dpkg -i nv-tensorrt-local-repo.deb | grep -oP "(?<=cp )[^ ]+(?= )") && \ cp ${gpg_key} /usr/share/keyrings/ && \ TENSORRT_MAJOR_VERSION=${TENSORRT_VERSION%%.*} && \ + if [[ "$TENSORRT_VERSION" == "10.0.1.6-1" ]]; then \ + CUDA_VERSION_TENSORRT="12.4"; \ + else \ + CUDA_VERSION_TENSORRT=${CUDA_VERSION}; \ + fi && \ apt-get update && \ apt-get install -y \ - libnvinfer${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION} \ - libnvinfer-plugin${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION} && \ + libnvinfer${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT} \ + libnvinfer-plugin${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT} && \ if [[ "$INSTALL_AS_DEV" == "1" ]]; then \ apt-get install -y \ - libnvinfer-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION} \ - libnvinfer-plugin-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION}; \ + libnvinfer-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT} \ + libnvinfer-plugin-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT}; \ fi && \ rm -rf /var/lib/apt/lists/* From be1006b15c9f0ceeaa1c54e99d67d59ebda2cd0a Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Tue, 4 Jun 2024 23:44:42 +0200 Subject: [PATCH 14/64] enable jazzy-ros-base-tf2.16.1-torch2.3.1 image (without tf-cpp) docker buildx build --load --build-arg BUILD_VERSION=-ml --build-arg UBUNTU_VERSION=24.04 --build-arg ROS_VERSION=2 --build-arg ROS_DISTRO=jazzy --build-arg ROS_PACKAGE=ros-base --build-arg TORCH_VERSION_PY=2.3.1 --build-arg TORCH_VERSION_CPP=2.3.1 --build-arg TF_VERSION_PY=2.16.1 --tag rwthika/ros2:jazzy-ros-base-tf2.16.1-torch2.3.1 . --- Dockerfile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 115dad3..eb18a2a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,6 +25,7 @@ FROM --platform=arm64 ubuntu:${UBUNTU_VERSION} as base-ubuntu22.04-arm64 FROM --platform=arm64 ubuntu:${UBUNTU_VERSION} as base-ubuntu24.04-arm64 FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 as base-ml-ubuntu20.04-amd64 FROM --platform=amd64 nvcr.io/nvidia/tensorrt:24.04-py3 as base-ml-ubuntu22.04-amd64 +FROM --platform=amd64 rwthika/cuda:12.2-cudnn-tensorrt-ubuntu24.04 as base-ml-ubuntu24.04-amd64 FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime as base-ml-ubuntu20.04-arm64 FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime as base-ml-ubuntu22.04-arm64 @@ -134,6 +135,7 @@ RUN if [[ -n $TORCH_VERSION_PY ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then PT_PACKAGE_NAME=1.11.0+cu113; \ elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then PT_PACKAGE_NAME=2.0.1+cu118; \ + elif [[ "$TORCH_VERSION_PY" = "2.3.1" ]]; then PT_PACKAGE_NAME=2.3.1+cu121; \ else PT_PACKAGE_NAME=${TORCH_VERSION_PY}+cpu; fi && \ pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ @@ -155,6 +157,7 @@ RUN if [[ -n $TORCH_VERSION_CPP ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ if [[ "$TORCH_VERSION_CPP" = "1.11.0" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu113/libtorch-cxx11-abi-shared-with-deps-1.11.0%2Bcu113.zip; \ elif [[ "$TORCH_VERSION_CPP" = "2.0.1" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip; \ + elif [[ "$TORCH_VERSION_CPP" = "2.3.1" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu121/libtorch-cxx11-abi-shared-with-deps-2.3.1%2Bcu121.zip; \ else PT_CPP_URL=""; fi && \ wget -q -O /tmp/libtorch.zip ${PT_CPP_URL} && \ unzip /tmp/libtorch.zip -d /opt/ && \ @@ -174,12 +177,7 @@ RUN if [[ -n $TF_VERSION_CPP ]]; then \ # install TensorFlow ARG TF_VERSION_PY RUN if [[ -n $TF_VERSION_PY ]]; then \ - apt-get update && \ - apt-get install -y libhdf5-dev && \ - rm -rf /var/lib/apt/lists/* && \ - PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ - ARCH=$(uname -m) && \ - pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ + pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` tensorflow==${TF_VERSION_PY}; \ fi # === final ==================================================================== From 676a5a49374f53b1980a27445e3aa17ecd38241b Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Tue, 4 Jun 2024 23:44:59 +0200 Subject: [PATCH 15/64] fix 2digit version numbers in version_information.sh --- .version_information.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.version_information.sh b/.version_information.sh index 803b286..a0550dd 100755 --- a/.version_information.sh +++ b/.version_information.sh @@ -5,9 +5,9 @@ eval $(cat /etc/os-release | grep ^VERSION=) ARCH=$(uname -m) -CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') -CUDNN_VERSION=$(dpkg -l 2> /dev/null | grep -E "libcudnn[0-9] " | awk '{ print $3 }') -TENSORRT_VERSION=$(dpkg -l 2> /dev/null | grep -E "libnvinfer[0-9] " | awk '{ print $3 }') +CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]." | awk '{ print $3 }') +CUDNN_VERSION=$(dpkg -l 2> /dev/null | grep -E "libcudnn[0-9]. " | awk '{ print $3 }') +TENSORRT_VERSION=$(dpkg -l 2> /dev/null | grep -E "libnvinfer[0-9]. " | awk '{ print $3 }') PYTHON_VERSION=$(python --version | awk '{print $2}') TF_PIP_VERSION=$(python -c "exec(\"try:\n import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'; import tensorflow as tf; print(tf.__version__);\n\rexcept ImportError:\n pass\")") From 2b73ac21e0a520a9c5c612519016c8606193b6ce Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 31 Jul 2024 16:50:16 +0200 Subject: [PATCH 16/64] install triton client instead of ml-frameworks --- Dockerfile | 75 +++++++++++++++--------------------------------------- 1 file changed, 20 insertions(+), 55 deletions(-) diff --git a/Dockerfile b/Dockerfile index adf7ff6..219f27b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,14 +18,20 @@ ARG BUILD_VERSION ARG UBUNTU_VERSION="20.04" ARG CUDA_VERSION=11.8 -# === base (multiarch) =============================================================== -FROM ubuntu:${UBUNTU_VERSION} as base +# === base (amd64) =============================================================== +FROM ubuntu:${UBUNTU_VERSION} as base-amd64 -# === base-ml (multiarch) ============================================================ -FROM rwthika/cuda:${CUDA_VERSION}-cudnn-trt-ubuntu${UBUNTU_VERSION} as base-ml +# === base-ml (amd64) ============================================================ +FROM nvcr.io/nvidia/cuda:12.2.2-runtime-ubuntu22.04 as base-amd64-ml + +# === base (amd64) =============================================================== +FROM ubuntu:${UBUNTU_VERSION} as base-arm64 + +# === base-ml (amd64) ============================================================ +FROM nvcr.io/nvidia/l4t-cuda:12.2.12-runtime as base-arm64-ml # === dependencies =================================================================== -FROM "base${BUILD_VERSION}" as dependencies +FROM "base-${TARGETARCH}${BUILD_VERSION}" as dependencies ARG DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] @@ -122,56 +128,15 @@ RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc FROM ros as ros-ml ARG TARGETARCH -# install PyTorch -ARG TORCH_VERSION_PY -RUN if [[ -n $TORCH_VERSION_PY ]]; then \ - if [[ "$TARGETARCH" == "amd64" ]]; then \ - if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then PT_PACKAGE_NAME=1.11.0+cu113; \ - elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then PT_PACKAGE_NAME=2.0.1+cu118; \ - else PT_PACKAGE_NAME=${TORCH_VERSION_PY}+cpu; fi && \ - pip install torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ - elif [[ "$TARGETARCH" == "arm64" ]]; then \ - # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 - # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install - if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then TORCH_INSTALL=https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl; \ - elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v511/pytorch/torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl; \ - else TORCH_INSTALL=""; fi && \ - python3 -m pip install --no-cache $TORCH_INSTALL && \ - apt-get update && \ - apt-get install -y libopenblas-base && \ - rm -rf /var/lib/apt/lists/* ; \ - fi ; \ - fi - -# install PyTorch C++ API (not available for arm64) -ARG TORCH_VERSION_CPP -RUN if [[ -n $TORCH_VERSION_CPP ]]; then \ - if [[ "$TARGETARCH" == "amd64" ]]; then \ - if [[ "$TORCH_VERSION_CPP" = "1.11.0" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu113/libtorch-cxx11-abi-shared-with-deps-1.11.0%2Bcu113.zip; \ - elif [[ "$TORCH_VERSION_CPP" = "2.0.1" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip; \ - else PT_CPP_URL=""; fi && \ - wget -q -O /tmp/libtorch.zip ${PT_CPP_URL} && \ - unzip /tmp/libtorch.zip -d /opt/ && \ - rm /tmp/libtorch.zip ; \ - fi ; \ - fi - -# install TensorFlow C++ API incl. protobuf -ARG TF_VERSION_CPP -RUN if [[ -n $TF_VERSION_CPP ]]; then \ - wget -q -O /tmp/libtensorflow-cc.deb "https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_CPP/+*/}/libtensorflow-cc_${TF_VERSION_CPP}-gpu_${TARGETARCH}.deb" && \ - dpkg -i /tmp/libtensorflow-cc.deb && \ - ldconfig && \ - rm /tmp/libtensorflow-cc.deb ; \ - fi - -# install TensorFlow -ARG TF_VERSION_PY -RUN if [[ -n $TF_VERSION_PY ]]; then \ - PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ - ARCH=$(uname -m) && \ - python3 -m pip install --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ - fi +# install triton client +RUN if [[ "$TARGETARCH" == "amd64" ]]; then \ + wget -q -O /tmp/tritonclient.tar.gz https://github.com/triton-inference-server/server/releases/download/v2.48.0/v2.48.0_ubuntu2204.clients.tar.gz; \ + elif [[ "$TARGETARCH" == "arm64" ]]; then \ + wget -q -O /tmp/tritonclient.tar.gz https://github.com/triton-inference-server/server/releases/download/v2.48.0/tritonserver2.48.0-igpu.tar.gz; \ + fi && \ + mkdir -p /opt/tritonclient && \ + tar -xzf /tmp/tritonclient.tar.gz -C /opt/tritonclient && \ + rm /tmp/tritonclient.tar.gz # === final ==================================================================== FROM "ros${BUILD_VERSION}" as final From 4c0c4b0c7c937c87b5cc86fda9f5a26617e797aa Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 31 Jul 2024 18:15:28 +0200 Subject: [PATCH 17/64] align with previous versions (introduce -triton stage) --- .version_information-ml.sh | 56 ++++++++++++++++++ .version_information-triton.sh | 34 +++++++++++ .version_information.sh | 25 --------- Dockerfile | 100 ++++++++++++++++++++++++++------- 4 files changed, 169 insertions(+), 46 deletions(-) create mode 100755 .version_information-ml.sh create mode 100755 .version_information-triton.sh diff --git a/.version_information-ml.sh b/.version_information-ml.sh new file mode 100755 index 0000000..803b286 --- /dev/null +++ b/.version_information-ml.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# get container version information +eval $(cat /etc/os-release | grep ^VERSION=) + +ARCH=$(uname -m) + +CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') +CUDNN_VERSION=$(dpkg -l 2> /dev/null | grep -E "libcudnn[0-9] " | awk '{ print $3 }') +TENSORRT_VERSION=$(dpkg -l 2> /dev/null | grep -E "libnvinfer[0-9] " | awk '{ print $3 }') + +PYTHON_VERSION=$(python --version | awk '{print $2}') +TF_PIP_VERSION=$(python -c "exec(\"try:\n import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'; import tensorflow as tf; print(tf.__version__);\n\rexcept ImportError:\n pass\")") +PT_PIP_VERSION=$(python -c "exec(\"try:\n import torch; print(torch.__version__);\n\rexcept ImportError:\n pass\")") + +if [[ -f /usr/local/include/tensorflow/tensorflow/core/public/version.h ]]; then + TF_C_MAJOR=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_MAJOR_VERSION" | sed "s/#define TF_MAJOR_VERSION //") + TF_C_MINOR=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_MINOR_VERSION" | sed "s/#define TF_MINOR_VERSION //") + TF_C_PATCH=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_PATCH_VERSION" | sed "s/#define TF_PATCH_VERSION //") + TF_C_VERSION=$TF_C_MAJOR.$TF_C_MINOR.$TF_C_PATCH +fi + +if [[ -f /opt/libtorch/build-version ]]; then + PT_C_VERSION=$(cat /opt/libtorch/build-version) +fi + +CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') +if [[ $(command -v nvidia-smi) ]]; then + NUM_GPUS=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l) + GPU_INFOS=$(nvidia-smi --query-gpu=name,driver_version,utilization.gpu,utilization.memory,memory.used,memory.total --format=csv | column -t -s, | sed 's/^/ /') +else + NUM_GPUS="0" + GPU_INFOS="" +fi + +# print information +cat << EOF +=== CONTAINER INFORMATION ====================================================== +Architecture: $ARCH +Ubuntu: $VERSION +Python: $PYTHON_VERSION +ROS: $ROS_DISTRO +RMW: $RMW_IMPLEMENTATION +CMake: $CMAKE_VERSION +CUDA: $CUDA_VERSION +cuDNN: $CUDNN_VERSION +TensorRT: $TENSORRT_VERSION +TensorFlow Python: $TF_PIP_VERSION +TensorFlow C/C++: $TF_C_VERSION +PyTorch Python: $PT_PIP_VERSION +PyTorch C/C++: $PT_C_VERSION +Available GPUs: $NUM_GPUS +$GPU_INFOS +================================================================================ + +EOF diff --git a/.version_information-triton.sh b/.version_information-triton.sh new file mode 100755 index 0000000..59d1873 --- /dev/null +++ b/.version_information-triton.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# get container version information +eval $(cat /etc/os-release | grep ^VERSION=) + +ARCH=$(uname -m) + +CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') +PYTHON_VERSION=$(python --version | awk '{print $2}') +CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') +if [[ $(command -v nvidia-smi) ]]; then + NUM_GPUS=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l) + GPU_INFOS=$(nvidia-smi --query-gpu=name,driver_version,utilization.gpu,utilization.memory,memory.used,memory.total --format=csv | column -t -s, | sed 's/^/ /') +else + NUM_GPUS="0" + GPU_INFOS="" +fi + +# print information +cat << EOF +=== CONTAINER INFORMATION ====================================================== +Architecture: $ARCH +Ubuntu: $VERSION +Python: $PYTHON_VERSION +ROS: $ROS_DISTRO +RMW: $RMW_IMPLEMENTATION +CMake: $CMAKE_VERSION +CUDA: $CUDA_VERSION +Triton: $TRITON_VERSION +Available GPUs: $NUM_GPUS +$GPU_INFOS +================================================================================ + +EOF diff --git a/.version_information.sh b/.version_information.sh index 803b286..a95dd94 100755 --- a/.version_information.sh +++ b/.version_information.sh @@ -5,25 +5,7 @@ eval $(cat /etc/os-release | grep ^VERSION=) ARCH=$(uname -m) -CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') -CUDNN_VERSION=$(dpkg -l 2> /dev/null | grep -E "libcudnn[0-9] " | awk '{ print $3 }') -TENSORRT_VERSION=$(dpkg -l 2> /dev/null | grep -E "libnvinfer[0-9] " | awk '{ print $3 }') - PYTHON_VERSION=$(python --version | awk '{print $2}') -TF_PIP_VERSION=$(python -c "exec(\"try:\n import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'; import tensorflow as tf; print(tf.__version__);\n\rexcept ImportError:\n pass\")") -PT_PIP_VERSION=$(python -c "exec(\"try:\n import torch; print(torch.__version__);\n\rexcept ImportError:\n pass\")") - -if [[ -f /usr/local/include/tensorflow/tensorflow/core/public/version.h ]]; then - TF_C_MAJOR=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_MAJOR_VERSION" | sed "s/#define TF_MAJOR_VERSION //") - TF_C_MINOR=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_MINOR_VERSION" | sed "s/#define TF_MINOR_VERSION //") - TF_C_PATCH=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_PATCH_VERSION" | sed "s/#define TF_PATCH_VERSION //") - TF_C_VERSION=$TF_C_MAJOR.$TF_C_MINOR.$TF_C_PATCH -fi - -if [[ -f /opt/libtorch/build-version ]]; then - PT_C_VERSION=$(cat /opt/libtorch/build-version) -fi - CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') if [[ $(command -v nvidia-smi) ]]; then NUM_GPUS=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l) @@ -42,13 +24,6 @@ Python: $PYTHON_VERSION ROS: $ROS_DISTRO RMW: $RMW_IMPLEMENTATION CMake: $CMAKE_VERSION -CUDA: $CUDA_VERSION -cuDNN: $CUDNN_VERSION -TensorRT: $TENSORRT_VERSION -TensorFlow Python: $TF_PIP_VERSION -TensorFlow C/C++: $TF_C_VERSION -PyTorch Python: $PT_PIP_VERSION -PyTorch C/C++: $PT_C_VERSION Available GPUs: $NUM_GPUS $GPU_INFOS ================================================================================ diff --git a/Dockerfile b/Dockerfile index 219f27b..3dff337 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,27 +11,25 @@ # --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP \ # --build-arg TF_VERSION_PY=$TF_VERSION_PY \ # --build-arg TF_VERSION_CPP=$TF_VERSION_CPP \ +# --build-arg TRITON_VERSION=$TRITON_VERSION \ # --tag $IMAGE \ # . ARG BUILD_VERSION -ARG UBUNTU_VERSION="20.04" -ARG CUDA_VERSION=11.8 +ARG UBUNTU_VERSION="22.04" +ARG CUDA_VERSION=12.2 -# === base (amd64) =============================================================== -FROM ubuntu:${UBUNTU_VERSION} as base-amd64 +# === base (multiarch) =============================================================== +FROM ubuntu:${UBUNTU_VERSION} as base -# === base-ml (amd64) ============================================================ -FROM nvcr.io/nvidia/cuda:12.2.2-runtime-ubuntu22.04 as base-amd64-ml +# === base-ml (multiarch) ============================================================ +FROM rwthika/cuda:${CUDA_VERSION}-cudnn-trt-ubuntu${UBUNTU_VERSION} as base-ml -# === base (amd64) =============================================================== -FROM ubuntu:${UBUNTU_VERSION} as base-arm64 - -# === base-ml (amd64) ============================================================ -FROM nvcr.io/nvidia/l4t-cuda:12.2.12-runtime as base-arm64-ml +# === base-triton (multiarch) ============================================================ +FROM rwthika/cuda:${CUDA_VERSION}-ubuntu${UBUNTU_VERSION} as base-triton # === dependencies =================================================================== -FROM "base-${TARGETARCH}${BUILD_VERSION}" as dependencies +FROM "base${BUILD_VERSION}" as dependencies ARG DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] @@ -125,18 +123,77 @@ RUN apt-get update && \ RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc # --- install ML stuff ---------------------------------------------------- +# TODO: works only with CUDA 11.x / deprecated FROM ros as ros-ml ARG TARGETARCH +# install PyTorch +ARG TORCH_VERSION_PY +RUN if [[ -n $TORCH_VERSION_PY ]]; then \ + if [[ "$TARGETARCH" == "amd64" ]]; then \ + if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then PT_PACKAGE_NAME=1.11.0+cu113; \ + elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then PT_PACKAGE_NAME=2.0.1+cu118; \ + else PT_PACKAGE_NAME=${TORCH_VERSION_PY}+cpu; fi && \ + pip install torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ + elif [[ "$TARGETARCH" == "arm64" ]]; then \ + # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 + # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install + if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then TORCH_INSTALL=https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl; \ + elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v511/pytorch/torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl; \ + else TORCH_INSTALL=""; fi && \ + python3 -m pip install --no-cache $TORCH_INSTALL && \ + apt-get update && \ + apt-get install -y libopenblas-base && \ + rm -rf /var/lib/apt/lists/* ; \ + fi ; \ + fi + +# install PyTorch C++ API (not available for arm64) +ARG TORCH_VERSION_CPP +RUN if [[ -n $TORCH_VERSION_CPP ]]; then \ + if [[ "$TARGETARCH" == "amd64" ]]; then \ + if [[ "$TORCH_VERSION_CPP" = "1.11.0" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu113/libtorch-cxx11-abi-shared-with-deps-1.11.0%2Bcu113.zip; \ + elif [[ "$TORCH_VERSION_CPP" = "2.0.1" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip; \ + else PT_CPP_URL=""; fi && \ + wget -q -O /tmp/libtorch.zip ${PT_CPP_URL} && \ + unzip /tmp/libtorch.zip -d /opt/ && \ + rm /tmp/libtorch.zip ; \ + fi ; \ + fi + +# install TensorFlow C++ API incl. protobuf +ARG TF_VERSION_CPP +RUN if [[ -n $TF_VERSION_CPP ]]; then \ + wget -q -O /tmp/libtensorflow-cc.deb "https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_CPP/+*/}/libtensorflow-cc_${TF_VERSION_CPP}-gpu_${TARGETARCH}.deb" && \ + dpkg -i /tmp/libtensorflow-cc.deb && \ + ldconfig && \ + rm /tmp/libtensorflow-cc.deb ; \ + fi + +# install TensorFlow +ARG TF_VERSION_PY +RUN if [[ -n $TF_VERSION_PY ]]; then \ + PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ + ARCH=$(uname -m) && \ + python3 -m pip install --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ + fi + +# --- install tritonclient ---------------------------------------------------- +FROM ros as ros-triton +ARG TARGETARCH + # install triton client -RUN if [[ "$TARGETARCH" == "amd64" ]]; then \ - wget -q -O /tmp/tritonclient.tar.gz https://github.com/triton-inference-server/server/releases/download/v2.48.0/v2.48.0_ubuntu2204.clients.tar.gz; \ - elif [[ "$TARGETARCH" == "arm64" ]]; then \ - wget -q -O /tmp/tritonclient.tar.gz https://github.com/triton-inference-server/server/releases/download/v2.48.0/tritonserver2.48.0-igpu.tar.gz; \ - fi && \ - mkdir -p /opt/tritonclient && \ - tar -xzf /tmp/tritonclient.tar.gz -C /opt/tritonclient && \ - rm /tmp/tritonclient.tar.gz +ARG TRITON_VERSION +RUN if [[ -n $TRITON_VERSION ]]; then \ + if [[ "$TARGETARCH" == "amd64" ]]; then \ + wget -q -O /tmp/tritonclient.tar.gz https://github.com/triton-inference-server/server/releases/download/v${TRITON_VERSION}/v${TRITON_VERSION}_ubuntu2204.clients.tar.gz; \ + elif [[ "$TARGETARCH" == "arm64" ]]; then \ + wget -q -O /tmp/tritonclient.tar.gz https://github.com/triton-inference-server/server/releases/download/v${TRITON_VERSION}/tritonserver${TRITON_VERSION}-igpu.tar.gz; \ + fi && \ + mkdir -p /opt/tritonclient && \ + tar -xzf /tmp/tritonclient.tar.gz -C /opt/tritonclient && \ + rm /tmp/tritonclient.tar.gz ; \ + fi # === final ==================================================================== FROM "ros${BUILD_VERSION}" as final @@ -148,7 +205,8 @@ ENV DOCKER_GID= # print version information during login RUN echo "source /.version_information.sh" >> ~/.bashrc -COPY .version_information.sh / +ARG BUILD_VERSION +COPY .version_information${BUILD_VERSION}.sh /.version_information.sh # container startup setup ENV WORKSPACE=/docker-ros/ws From 40804ee3d198badc07c2c81e35b150dd0787ae86 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 31 Jul 2024 18:52:18 +0200 Subject: [PATCH 18/64] add triton images to gitlab ci --- .gitlab-ci/.template.yml | 27 +++++++++++++++++++++-- .gitlab-ci/ml-variations/.triton.yml | 2 ++ .gitlab-ci/ml-variations/ros-cuda-trt.yml | 7 ++++++ .gitlab-ci/ml-variations/ros-cuda.yml | 4 ++-- .gitlab-ci/ml-variations/ros-ml.yml | 2 +- .gitlab-ci/ml-variations/ros-tf.yml | 2 +- .gitlab-ci/ml-variations/ros-torch.yml | 2 +- .gitlab-ci/ml-variations/ros-triton.yml | 10 +++++++++ 8 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 .gitlab-ci/ml-variations/.triton.yml create mode 100644 .gitlab-ci/ml-variations/ros-cuda-trt.yml create mode 100644 .gitlab-ci/ml-variations/ros-triton.yml diff --git a/.gitlab-ci/.template.yml b/.gitlab-ci/.template.yml index 3a5b2d9..35fb9b5 100644 --- a/.gitlab-ci/.template.yml +++ b/.gitlab-ci/.template.yml @@ -22,11 +22,34 @@ cuda: when: never - when: on_success -torch: +cuda-trt: + stage: Image Variations + trigger: + include: .gitlab-ci/ml-variations/ros-cuda-trt.yml + strategy: depend + rules: + - if: $DISABLE_CUDA_TRT == 'true' + when: never + - when: on_success + +triton: stage: Image Variations needs: - job: cuda optional: true + trigger: + include: .gitlab-ci/ml-variations/ros-triton.yml + strategy: depend + rules: + - if: $DISABLE_TRITON == 'true' + when: never + - when: on_success + +torch: + stage: Image Variations + needs: + - job: cuda-trt + optional: true trigger: include: .gitlab-ci/ml-variations/ros-torch.yml strategy: depend @@ -64,7 +87,7 @@ torch-cpp: tf: stage: Image Variations needs: - - job: cuda + - job: cuda-trt optional: true trigger: include: .gitlab-ci/ml-variations/ros-tf.yml diff --git a/.gitlab-ci/ml-variations/.triton.yml b/.gitlab-ci/ml-variations/.triton.yml new file mode 100644 index 0000000..1146b46 --- /dev/null +++ b/.gitlab-ci/ml-variations/.triton.yml @@ -0,0 +1,2 @@ +variables: + TRITON_VERSION: 2.48.0 diff --git a/.gitlab-ci/ml-variations/ros-cuda-trt.yml b/.gitlab-ci/ml-variations/ros-cuda-trt.yml new file mode 100644 index 0000000..3ddf236 --- /dev/null +++ b/.gitlab-ci/ml-variations/ros-cuda-trt.yml @@ -0,0 +1,7 @@ +include: .gitlab-ci/ml-variations/ros.yml + +variables: + BUILD_VERSION: "-ml" + CUDA_VERSION: "11.8" + IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-cuda-trt + IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda-trt diff --git a/.gitlab-ci/ml-variations/ros-cuda.yml b/.gitlab-ci/ml-variations/ros-cuda.yml index 9ab6982..2dd003c 100644 --- a/.gitlab-ci/ml-variations/ros-cuda.yml +++ b/.gitlab-ci/ml-variations/ros-cuda.yml @@ -1,7 +1,7 @@ include: .gitlab-ci/ml-variations/ros.yml variables: - BUILD_VERSION: "-ml" - CUDA_VERSION: "11.8" + BUILD_VERSION: "-triton" + CUDA_VERSION: "12.2" IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-cuda IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda diff --git a/.gitlab-ci/ml-variations/ros-ml.yml b/.gitlab-ci/ml-variations/ros-ml.yml index b04aa06..c950800 100644 --- a/.gitlab-ci/ml-variations/ros-ml.yml +++ b/.gitlab-ci/ml-variations/ros-ml.yml @@ -1,5 +1,5 @@ include: - - .gitlab-ci/ml-variations/ros-cuda.yml + - .gitlab-ci/ml-variations/ros-cuda-trt.yml - .gitlab-ci/ml-variations/.torch.yml - .gitlab-ci/ml-variations/.tf.yml diff --git a/.gitlab-ci/ml-variations/ros-tf.yml b/.gitlab-ci/ml-variations/ros-tf.yml index ed07c50..a5c0ceb 100644 --- a/.gitlab-ci/ml-variations/ros-tf.yml +++ b/.gitlab-ci/ml-variations/ros-tf.yml @@ -1,5 +1,5 @@ include: - - .gitlab-ci/ml-variations/ros-cuda.yml + - .gitlab-ci/ml-variations/ros-cuda-trt.yml - .gitlab-ci/ml-variations/.tf.yml variables: diff --git a/.gitlab-ci/ml-variations/ros-torch.yml b/.gitlab-ci/ml-variations/ros-torch.yml index 3112dcc..e7a8bf8 100644 --- a/.gitlab-ci/ml-variations/ros-torch.yml +++ b/.gitlab-ci/ml-variations/ros-torch.yml @@ -1,5 +1,5 @@ include: - - .gitlab-ci/ml-variations/ros-cuda.yml + - .gitlab-ci/ml-variations/ros-cuda-trt.yml - .gitlab-ci/ml-variations/.torch.yml variables: diff --git a/.gitlab-ci/ml-variations/ros-triton.yml b/.gitlab-ci/ml-variations/ros-triton.yml new file mode 100644 index 0000000..3efeb39 --- /dev/null +++ b/.gitlab-ci/ml-variations/ros-triton.yml @@ -0,0 +1,10 @@ +include: + - .gitlab-ci/ml-variations/ros-cuda.yml + - .gitlab-ci/ml-variations/.triton.yml + + +variables: + IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-triton + IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-triton + IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci + TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-triton${TRITON_VERSION} From b389bb55cca5c3089fe9963d3952b702f7696154 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 1 Aug 2024 15:07:44 +0200 Subject: [PATCH 19/64] revert "enable jazzy-ros-base-tf2.16.1-torch2.3.1 image (without tf-cpp)" --- Dockerfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 98e00e7..eb1321e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -135,7 +135,6 @@ RUN if [[ -n $TORCH_VERSION_PY ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then PT_PACKAGE_NAME=1.11.0+cu113; \ elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then PT_PACKAGE_NAME=2.0.1+cu118; \ - elif [[ "$TORCH_VERSION_PY" = "2.3.1" ]]; then PT_PACKAGE_NAME=2.3.1+cu121; \ else PT_PACKAGE_NAME=${TORCH_VERSION_PY}+cpu; fi && \ pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ @@ -157,7 +156,6 @@ RUN if [[ -n $TORCH_VERSION_CPP ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ if [[ "$TORCH_VERSION_CPP" = "1.11.0" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu113/libtorch-cxx11-abi-shared-with-deps-1.11.0%2Bcu113.zip; \ elif [[ "$TORCH_VERSION_CPP" = "2.0.1" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip; \ - elif [[ "$TORCH_VERSION_CPP" = "2.3.1" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu121/libtorch-cxx11-abi-shared-with-deps-2.3.1%2Bcu121.zip; \ else PT_CPP_URL=""; fi && \ wget -q -O /tmp/libtorch.zip ${PT_CPP_URL} && \ unzip /tmp/libtorch.zip -d /opt/ && \ @@ -177,7 +175,12 @@ RUN if [[ -n $TF_VERSION_CPP ]]; then \ # install TensorFlow ARG TF_VERSION_PY RUN if [[ -n $TF_VERSION_PY ]]; then \ - pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` tensorflow==${TF_VERSION_PY}; \ + apt-get update && \ + apt-get install -y libhdf5-dev && \ + rm -rf /var/lib/apt/lists/* && \ + PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ + ARCH=$(uname -m) && \ + pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ fi # --- install tritonclient ---------------------------------------------------- From 99ed360da98501c1698edb210a30d517d141d7e1 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 1 Aug 2024 15:13:03 +0200 Subject: [PATCH 20/64] small fixes in ci --- .gitlab-ci/ml-variations/ros-tf.yml | 2 +- .gitlab-ci/ml-variations/ros-torch.yml | 2 +- .gitlab-ci/ros-noetic/.ros-noetic.yml | 2 ++ .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml | 1 + .gitlab-ci/ros2-rolling/.ros2-rolling.yml | 2 ++ Dockerfile | 2 +- 6 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci/ml-variations/ros-tf.yml b/.gitlab-ci/ml-variations/ros-tf.yml index a5c0ceb..2b2a0ae 100644 --- a/.gitlab-ci/ml-variations/ros-tf.yml +++ b/.gitlab-ci/ml-variations/ros-tf.yml @@ -6,4 +6,4 @@ variables: IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-tf IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-tf TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-tf${TF_VERSION} - IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci + IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda-trt:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci diff --git a/.gitlab-ci/ml-variations/ros-torch.yml b/.gitlab-ci/ml-variations/ros-torch.yml index e7a8bf8..a8cf167 100644 --- a/.gitlab-ci/ml-variations/ros-torch.yml +++ b/.gitlab-ci/ml-variations/ros-torch.yml @@ -6,4 +6,4 @@ variables: IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-torch IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-torch TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-torch${TORCH_VERSION} - IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci + IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda-trt:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci diff --git a/.gitlab-ci/ros-noetic/.ros-noetic.yml b/.gitlab-ci/ros-noetic/.ros-noetic.yml index 9d19543..d671ff9 100644 --- a/.gitlab-ci/ros-noetic/.ros-noetic.yml +++ b/.gitlab-ci/ros-noetic/.ros-noetic.yml @@ -3,3 +3,5 @@ variables: ROS_VERSION: 1 ROS_VERSION_NAME: "ros" ROS_DISTRO: noetic + DISABLE_CUDA: "true" + DISABLE_TRITON: "true" diff --git a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml index 14a38da..e130ee5 100644 --- a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml +++ b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml @@ -5,6 +5,7 @@ variables: ROS_DISTRO: jazzy DISABLE_CUDA: "true" DISABLE_CUDA_TRT: "true" + DISABLE_TRITON: "true" DISABLE_TORCH: "true" DISABLE_TF: "true" DISABLE_ML: "true" diff --git a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml index 5982044..bf6f165 100644 --- a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml +++ b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml @@ -3,3 +3,5 @@ variables: ROS_VERSION: 2 ROS_VERSION_NAME: "ros2" ROS_DISTRO: rolling + DISABLE_CUDA: "true" + DISABLE_TRITON: "true" diff --git a/Dockerfile b/Dockerfile index eb1321e..28bc105 100644 --- a/Dockerfile +++ b/Dockerfile @@ -64,7 +64,7 @@ RUN apt-get update && \ x11-apps \ zip \ && rm -rf /var/lib/apt/lists/* -RUN python -m pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --upgrade pip +RUN if [[ $UBUNTU_VERSION != "24.04" ]]; then python -m pip install --upgrade pip; fi # install more essentials RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ From 57ac0434447a5c6a7e98d38af6b2c71b3dc39e25 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 1 Aug 2024 17:55:11 +0200 Subject: [PATCH 21/64] export triton version and rmw implementation --- .gitlab-ci/ml-variations/.template.yml | 1 + .version_information-ml.sh | 6 ++++++ .version_information-triton.sh | 6 ++++++ .version_information.sh | 6 ++++++ Dockerfile | 1 + 5 files changed, 20 insertions(+) diff --git a/.gitlab-ci/ml-variations/.template.yml b/.gitlab-ci/ml-variations/.template.yml index 0aba455..3a1ae46 100644 --- a/.gitlab-ci/ml-variations/.template.yml +++ b/.gitlab-ci/ml-variations/.template.yml @@ -42,6 +42,7 @@ variables: --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP --build-arg TF_VERSION_PY=$TF_VERSION_PY --build-arg TF_VERSION_CPP=$TF_VERSION_CPP + --build-arg TRITON_VERSION=$TRITON_VERSION --tag $IMAGE . .docker-push-manifest: diff --git a/.version_information-ml.sh b/.version_information-ml.sh index 803b286..5d19101 100755 --- a/.version_information-ml.sh +++ b/.version_information-ml.sh @@ -5,6 +5,12 @@ eval $(cat /etc/os-release | grep ^VERSION=) ARCH=$(uname -m) +if [[ -z "$RMW_IMPLEMENTATION" ]]; then + if ros2 pkg list | grep -q "rmw_fastrtps_cpp"; then + export RMW_IMPLEMENTATION=rmw_fastrtps_cpp + fi +fi + CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') CUDNN_VERSION=$(dpkg -l 2> /dev/null | grep -E "libcudnn[0-9] " | awk '{ print $3 }') TENSORRT_VERSION=$(dpkg -l 2> /dev/null | grep -E "libnvinfer[0-9] " | awk '{ print $3 }') diff --git a/.version_information-triton.sh b/.version_information-triton.sh index 59d1873..fc51ef1 100755 --- a/.version_information-triton.sh +++ b/.version_information-triton.sh @@ -5,6 +5,12 @@ eval $(cat /etc/os-release | grep ^VERSION=) ARCH=$(uname -m) +if [[ -z "$RMW_IMPLEMENTATION" ]]; then + if ros2 pkg list | grep -q "rmw_fastrtps_cpp"; then + export RMW_IMPLEMENTATION=rmw_fastrtps_cpp + fi +fi + CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') PYTHON_VERSION=$(python --version | awk '{print $2}') CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') diff --git a/.version_information.sh b/.version_information.sh index a95dd94..35ce151 100755 --- a/.version_information.sh +++ b/.version_information.sh @@ -5,6 +5,12 @@ eval $(cat /etc/os-release | grep ^VERSION=) ARCH=$(uname -m) +if [[ -z "$RMW_IMPLEMENTATION" ]]; then + if ros2 pkg list | grep -q "rmw_fastrtps_cpp"; then + export RMW_IMPLEMENTATION=rmw_fastrtps_cpp + fi +fi + PYTHON_VERSION=$(python --version | awk '{print $2}') CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') if [[ $(command -v nvidia-smi) ]]; then diff --git a/Dockerfile b/Dockerfile index 28bc105..d4bb130 100644 --- a/Dockerfile +++ b/Dockerfile @@ -189,6 +189,7 @@ ARG TARGETARCH # install triton client ARG TRITON_VERSION +ENV TRITON_VERSION=${TRITON_VERSION} RUN if [[ -n $TRITON_VERSION ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ wget -q -O /tmp/tritonclient.tar.gz https://github.com/triton-inference-server/server/releases/download/v${TRITON_VERSION}/v${TRITON_VERSION}_ubuntu2204.clients.tar.gz; \ From bc0c87c4a02d26fe27bcfd838924b9c3a0aba42f Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 1 Aug 2024 18:11:57 +0200 Subject: [PATCH 22/64] set break-system-packages via pip cli global --- Dockerfile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index d4bb130..1fe7153 100644 --- a/Dockerfile +++ b/Dockerfile @@ -64,7 +64,8 @@ RUN apt-get update && \ x11-apps \ zip \ && rm -rf /var/lib/apt/lists/* -RUN if [[ $UBUNTU_VERSION != "24.04" ]]; then python -m pip install --upgrade pip; fi +RUN if [[ $UBUNTU_VERSION == "24.04" ]]; then python -m pip config --global set global.break-system-packages true; \ + else python -m pip install --upgrade pip; fi # install more essentials RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ @@ -104,7 +105,7 @@ RUN apt-get update && \ elif [[ "$ROS_VERSION" == "2" ]]; then \ apt-get install -y \ python3-colcon-common-extensions \ - && pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` colcon-clean ; \ + && pip install colcon-clean ; \ fi \ && rm -rf /var/lib/apt/lists/* @@ -136,14 +137,14 @@ RUN if [[ -n $TORCH_VERSION_PY ]]; then \ if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then PT_PACKAGE_NAME=1.11.0+cu113; \ elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then PT_PACKAGE_NAME=2.0.1+cu118; \ else PT_PACKAGE_NAME=${TORCH_VERSION_PY}+cpu; fi && \ - pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ + pip install torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then TORCH_INSTALL=https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl; \ elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v511/pytorch/torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl; \ else TORCH_INSTALL=""; fi && \ - pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --no-cache $TORCH_INSTALL && \ + pip install --no-cache $TORCH_INSTALL && \ apt-get update && \ apt-get install -y libopenblas-base && \ rm -rf /var/lib/apt/lists/* ; \ @@ -180,7 +181,7 @@ RUN if [[ -n $TF_VERSION_PY ]]; then \ rm -rf /var/lib/apt/lists/* && \ PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ ARCH=$(uname -m) && \ - pip install `if [[ $UBUNTU_VERSION == "24.04" ]]; then echo "--break-system-packages"; fi` --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ + pip install --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ fi # --- install tritonclient ---------------------------------------------------- From c4b21cca982267143f328cb629ed41da9ac70cf8 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Tue, 6 Aug 2024 16:10:13 +0000 Subject: [PATCH 23/64] start updating readme --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0383cf7..0c33748 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,7 @@ > This repository is open-sourced and maintained by the [**Institute for Automotive Engineering (ika) at RWTH Aachen University**](https://www.ika.rwth-aachen.de/). > **DevOps, Containerization and Orchestration of Software-Defined Vehicles** are some of many research topics within our [*Vehicle Intelligence & Automated Driving*](https://www.ika.rwth-aachen.de/en/competences/fields-of-research/vehicle-intelligence-automated-driving.html) domain. > If you would like to learn more about how we can support your DevOps or automated driving efforts, feel free to reach out to us! ->      *Timo Woopen - Manager Research Area Vehicle Intelligence & Automated Driving* ->      *+49 241 80 23549* ->      *timo.woopen@ika.rwth-aachen.de* +> :email: ***opensource@ika.rwth-aachen.de*** We recommend to use *docker-ros-ml-images* in combination with our other tools for Docker and ROS. - [*docker-ros*](https://github.com/ika-rwth-aachen/docker-ros) automatically builds minimal container images of ROS applications @@ -81,11 +79,11 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` -#### [`rwthika/ros-cuda`](https://hub.docker.com/r/rwthika/ros-cuda) (ROS + CUDA) +#### [`rwthika/ros-cuda-trt`](https://hub.docker.com/r/rwthika/ros-cuda-trt) (ROS + CUDA + TensorRT)
- +
Click to expand @@ -182,15 +180,18 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` | `humble-ros-core` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-core | 3.27.2 | - | - | - | - | - | - | - | | `latest`, `humble`, `humble-ros-base` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-base | 3.27.2 | - | - | - | - | - | - | - | | `humble-desktop-full` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | desktop-full | 3.27.2 | - | - | - | - | - | - | - | +| `jazzy-ros-core` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | ros-core | 3.28.3 | - | - | - | - | - | - | - | +| `jazzy`, `jazzy-ros-base` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | ros-base | 3.28.3 | - | - | - | - | - | - | - | +| `jazzy-desktop-full` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | desktop-full | 3.28.3 | - | - | - | - | - | - | - |
-#### [`rwthika/ros2-cuda`](https://hub.docker.com/r/rwthika/ros2-cuda) (ROS 2 + CUDA) +#### [`rwthika/ros2-cuda-trt`](https://hub.docker.com/r/rwthika/ros2-cuda-trt) (ROS 2 + CUDA + TensorRT)
- +
Click to expand From 35381436992ce40c62be1cdad15e309cac7afe1a Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Tue, 20 Aug 2024 15:25:53 +0200 Subject: [PATCH 24/64] restructure ci and install only py versions of ml frameworks --- .gitlab-ci/.template.yml | 62 +----------- .gitlab-ci/ml-variations/.template.yml | 11 +-- .gitlab-ci/ml-variations/.tf.yml | 5 +- .gitlab-ci/ml-variations/.torch.yml | 5 +- .gitlab-ci/ml-variations/.triton.yml | 2 +- .gitlab-ci/ml-variations/ros-cuda-trt.yml | 7 -- .gitlab-ci/ml-variations/ros-cuda.yml | 3 +- .gitlab-ci/ml-variations/ros-ml.yml | 2 +- .gitlab-ci/ml-variations/ros-tensorrt.yml | 6 ++ .gitlab-ci/ml-variations/ros-tf-cpp.yml | 8 -- .gitlab-ci/ml-variations/ros-tf-py.yml | 8 -- .gitlab-ci/ml-variations/ros-tf.yml | 4 +- .gitlab-ci/ml-variations/ros-torch-cpp.yml | 9 -- .gitlab-ci/ml-variations/ros-torch-py.yml | 8 -- .gitlab-ci/ml-variations/ros-torch.yml | 4 +- .gitlab-ci/ml-variations/ros.yml | 1 - .gitlab-ci/ros-noetic/.ros-noetic.yml | 5 +- .gitlab-ci/ros2-humble/.ros2-humble.yml | 4 +- .gitlab-ci/ros2-iron/.ros2-iron.yml | 4 +- .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml | 8 +- .gitlab-ci/ros2-rolling/.ros2-rolling.yml | 5 +- ...-triton.sh => .version_information-cuda.sh | 0 ...-ml.sh => .version_information-tensorrt.sh | 0 Dockerfile | 98 ++++++++----------- 24 files changed, 81 insertions(+), 188 deletions(-) delete mode 100644 .gitlab-ci/ml-variations/ros-cuda-trt.yml create mode 100644 .gitlab-ci/ml-variations/ros-tensorrt.yml delete mode 100644 .gitlab-ci/ml-variations/ros-tf-cpp.yml delete mode 100644 .gitlab-ci/ml-variations/ros-tf-py.yml delete mode 100644 .gitlab-ci/ml-variations/ros-torch-cpp.yml delete mode 100644 .gitlab-ci/ml-variations/ros-torch-py.yml rename .version_information-triton.sh => .version_information-cuda.sh (100%) rename .version_information-ml.sh => .version_information-tensorrt.sh (100%) diff --git a/.gitlab-ci/.template.yml b/.gitlab-ci/.template.yml index 35fb9b5..3c00f5b 100644 --- a/.gitlab-ci/.template.yml +++ b/.gitlab-ci/.template.yml @@ -22,13 +22,13 @@ cuda: when: never - when: on_success -cuda-trt: +tensorrt: stage: Image Variations trigger: - include: .gitlab-ci/ml-variations/ros-cuda-trt.yml + include: .gitlab-ci/ml-variations/ros-tensorrt.yml strategy: depend rules: - - if: $DISABLE_CUDA_TRT == 'true' + - if: $DISABLE_TENSORRT == 'true' when: never - when: on_success @@ -48,7 +48,7 @@ triton: torch: stage: Image Variations needs: - - job: cuda-trt + - job: tensorrt optional: true trigger: include: .gitlab-ci/ml-variations/ros-torch.yml @@ -58,36 +58,10 @@ torch: when: never - when: on_success -torch-py: - stage: Image Variations - needs: - - job: torch - optional: true - trigger: - include: .gitlab-ci/ml-variations/ros-torch-py.yml - strategy: depend - rules: - - if: $DISABLE_TORCH == 'true' || $DISABLE_TORCH_PY == 'true' - when: never - - when: on_success - -torch-cpp: - stage: Image Variations - needs: - - job: torch - optional: true - trigger: - include: .gitlab-ci/ml-variations/ros-torch-cpp.yml - strategy: depend - rules: - - if: $DISABLE_TORCH == 'true' || $DISABLE_TORCH_CPP == 'true' - when: never - - when: on_success - tf: stage: Image Variations needs: - - job: cuda-trt + - job: tensorrt optional: true trigger: include: .gitlab-ci/ml-variations/ros-tf.yml @@ -97,32 +71,6 @@ tf: when: never - when: on_success -tf-py: - stage: Image Variations - needs: - - job: tf - optional: true - trigger: - include: .gitlab-ci/ml-variations/ros-tf-py.yml - strategy: depend - rules: - - if: $DISABLE_TF == 'true' || $DISABLE_TF_PY == 'true' - when: never - - when: on_success - -tf-cpp: - stage: Image Variations - needs: - - job: tf - optional: true - trigger: - include: .gitlab-ci/ml-variations/ros-tf-cpp.yml - strategy: depend - rules: - - if: $DISABLE_TF == 'true' || $DISABLE_TF_CPP == 'true' - when: never - - when: on_success - ml: stage: Image Variations needs: diff --git a/.gitlab-ci/ml-variations/.template.yml b/.gitlab-ci/ml-variations/.template.yml index 3a1ae46..b3b20f8 100644 --- a/.gitlab-ci/ml-variations/.template.yml +++ b/.gitlab-ci/ml-variations/.template.yml @@ -34,27 +34,24 @@ variables: --platform $PLATFORM --build-arg BUILD_VERSION=$BUILD_VERSION --build-arg UBUNTU_VERSION=$UBUNTU_VERSION - --build-arg CUDA_VERSION=$CUDA_VERSION --build-arg ROS_VERSION=$ROS_VERSION --build-arg ROS_DISTRO=$ROS_DISTRO --build-arg ROS_PACKAGE=$ROS_PACKAGE --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY - --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP --build-arg TF_VERSION_PY=$TF_VERSION_PY - --build-arg TF_VERSION_CPP=$TF_VERSION_CPP --build-arg TRITON_VERSION=$TRITON_VERSION --tag $IMAGE . .docker-push-manifest: script: - |- - if [[ "${DISABLE_AMD64}" != "true" ]] && [[ "${DISABLE_ML_AMD64}" != "true" || "${BUILD_VERSION}" != "-ml" ]]; then + if [[ "${DISABLE_AMD64}" != "true" ]] && [[ "${DISABLE_ML_AMD64}" != "true" || "${BUILD_VERSION}" == "" ]]; then docker pull ${IMAGE_CI}-amd64 docker tag ${IMAGE_CI}-amd64 ${IMAGE}-amd64 docker push ${IMAGE}-amd64 AMD64_IS_ENABLED="true" fi - if [[ "${DISABLE_ARM64}" != "true" ]] && [[ "${DISABLE_ML_ARM64}" != "true" || "${BUILD_VERSION}" != "-ml" ]]; then + if [[ "${DISABLE_ARM64}" != "true" ]] && [[ "${DISABLE_ML_ARM64}" != "true" || "${BUILD_VERSION}" == "" ]]; then docker pull ${IMAGE_CI}-arm64 docker tag ${IMAGE_CI}-arm64 ${IMAGE}-arm64 docker push ${IMAGE}-arm64 @@ -80,7 +77,7 @@ build-amd64: rules: - if: $DISABLE_AMD64 == 'true' when: never - - if: $DISABLE_ML_AMD64 == 'true' && $BUILD_VERSION == '-ml' + - if: $DISABLE_ML_AMD64 == 'true' && $BUILD_VERSION != '' when: never - when: on_success script: @@ -96,7 +93,7 @@ build-arm64: rules: - if: $DISABLE_ARM64 == 'true' when: never - - if: $DISABLE_ML_ARM64 == 'true' && $BUILD_VERSION == '-ml' + - if: $DISABLE_ML_ARM64 == 'true' && $BUILD_VERSION != '' when: never - when: on_success script: diff --git a/.gitlab-ci/ml-variations/.tf.yml b/.gitlab-ci/ml-variations/.tf.yml index 836a774..add0a3b 100644 --- a/.gitlab-ci/ml-variations/.tf.yml +++ b/.gitlab-ci/ml-variations/.tf.yml @@ -1,5 +1,2 @@ variables: - TF_VERSION: 2.11.0 - TF_VERSION_WITH_POSTFIX: ${TF_VERSION}+cu118 - TF_VERSION_PY: ${TF_VERSION_WITH_POSTFIX} - TF_VERSION_CPP: ${TF_VERSION_WITH_POSTFIX} + TF_VERSION_PY: ${_TF_VERSION} \ No newline at end of file diff --git a/.gitlab-ci/ml-variations/.torch.yml b/.gitlab-ci/ml-variations/.torch.yml index e7b7126..1c6c6b5 100644 --- a/.gitlab-ci/ml-variations/.torch.yml +++ b/.gitlab-ci/ml-variations/.torch.yml @@ -1,5 +1,2 @@ variables: - TORCH_VERSION: 2.0.1 - TORCH_VERSION_WITH_POSTFIX: ${TORCH_VERSION} - TORCH_VERSION_PY: ${TORCH_VERSION_WITH_POSTFIX} - TORCH_VERSION_CPP: ${TORCH_VERSION_WITH_POSTFIX} \ No newline at end of file + TORCH_VERSION: ${_TORCH_VERSION} \ No newline at end of file diff --git a/.gitlab-ci/ml-variations/.triton.yml b/.gitlab-ci/ml-variations/.triton.yml index 1146b46..472f876 100644 --- a/.gitlab-ci/ml-variations/.triton.yml +++ b/.gitlab-ci/ml-variations/.triton.yml @@ -1,2 +1,2 @@ variables: - TRITON_VERSION: 2.48.0 + TRITON_VERSION: ${_TRITON_VERSION} diff --git a/.gitlab-ci/ml-variations/ros-cuda-trt.yml b/.gitlab-ci/ml-variations/ros-cuda-trt.yml deleted file mode 100644 index 3ddf236..0000000 --- a/.gitlab-ci/ml-variations/ros-cuda-trt.yml +++ /dev/null @@ -1,7 +0,0 @@ -include: .gitlab-ci/ml-variations/ros.yml - -variables: - BUILD_VERSION: "-ml" - CUDA_VERSION: "11.8" - IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-cuda-trt - IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda-trt diff --git a/.gitlab-ci/ml-variations/ros-cuda.yml b/.gitlab-ci/ml-variations/ros-cuda.yml index 2dd003c..d08da6b 100644 --- a/.gitlab-ci/ml-variations/ros-cuda.yml +++ b/.gitlab-ci/ml-variations/ros-cuda.yml @@ -1,7 +1,6 @@ include: .gitlab-ci/ml-variations/ros.yml variables: - BUILD_VERSION: "-triton" - CUDA_VERSION: "12.2" + BUILD_VERSION: "-cuda" IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-cuda IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda diff --git a/.gitlab-ci/ml-variations/ros-ml.yml b/.gitlab-ci/ml-variations/ros-ml.yml index c950800..a70f8f4 100644 --- a/.gitlab-ci/ml-variations/ros-ml.yml +++ b/.gitlab-ci/ml-variations/ros-ml.yml @@ -1,5 +1,5 @@ include: - - .gitlab-ci/ml-variations/ros-cuda-trt.yml + - .gitlab-ci/ml-variations/ros-tensorrt.yml - .gitlab-ci/ml-variations/.torch.yml - .gitlab-ci/ml-variations/.tf.yml diff --git a/.gitlab-ci/ml-variations/ros-tensorrt.yml b/.gitlab-ci/ml-variations/ros-tensorrt.yml new file mode 100644 index 0000000..a551704 --- /dev/null +++ b/.gitlab-ci/ml-variations/ros-tensorrt.yml @@ -0,0 +1,6 @@ +include: .gitlab-ci/ml-variations/ros.yml + +variables: + BUILD_VERSION: "-tensorrt" + IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-tensorrt + IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-tensorrt diff --git a/.gitlab-ci/ml-variations/ros-tf-cpp.yml b/.gitlab-ci/ml-variations/ros-tf-cpp.yml deleted file mode 100644 index 800a45a..0000000 --- a/.gitlab-ci/ml-variations/ros-tf-cpp.yml +++ /dev/null @@ -1,8 +0,0 @@ -include: .gitlab-ci/ml-variations/ros-tf.yml - -variables: - TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-tf${TF_VERSION}-cpp - IMAGE_CI_CACHE: ${IMAGE_REPO_CI}:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}-tf${TF_VERSION}_ci - TF_VERSION_PY: "" - DISABLE_PUSH_AS_LATEST: 'true' - DISABLE_PUSH_AS_DEFAULT_ROS_PACKAGE: 'true' diff --git a/.gitlab-ci/ml-variations/ros-tf-py.yml b/.gitlab-ci/ml-variations/ros-tf-py.yml deleted file mode 100644 index 7390831..0000000 --- a/.gitlab-ci/ml-variations/ros-tf-py.yml +++ /dev/null @@ -1,8 +0,0 @@ -include: .gitlab-ci/ml-variations/ros-tf.yml - -variables: - TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-tf${TF_VERSION}-py - IMAGE_CI_CACHE: ${IMAGE_REPO_CI}:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}-tf${TF_VERSION}_ci - TF_VERSION_CPP: "" - DISABLE_PUSH_AS_LATEST: 'true' - DISABLE_PUSH_AS_DEFAULT_ROS_PACKAGE: 'true' diff --git a/.gitlab-ci/ml-variations/ros-tf.yml b/.gitlab-ci/ml-variations/ros-tf.yml index 2b2a0ae..3390e80 100644 --- a/.gitlab-ci/ml-variations/ros-tf.yml +++ b/.gitlab-ci/ml-variations/ros-tf.yml @@ -1,9 +1,9 @@ include: - - .gitlab-ci/ml-variations/ros-cuda-trt.yml + - .gitlab-ci/ml-variations/ros-tensorrt.yml - .gitlab-ci/ml-variations/.tf.yml variables: IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-tf IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-tf TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-tf${TF_VERSION} - IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda-trt:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci + IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-tensorrt:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci diff --git a/.gitlab-ci/ml-variations/ros-torch-cpp.yml b/.gitlab-ci/ml-variations/ros-torch-cpp.yml deleted file mode 100644 index f4de376..0000000 --- a/.gitlab-ci/ml-variations/ros-torch-cpp.yml +++ /dev/null @@ -1,9 +0,0 @@ -include: .gitlab-ci/ml-variations/ros-torch.yml - -variables: - TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-torch${TORCH_VERSION}-cpp - IMAGE_CI_CACHE: ${IMAGE_REPO_CI}:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}-torch${TORCH_VERSION}_ci - TORCH_VERSION_PY: "" - DISABLE_PUSH_AS_LATEST: 'true' - DISABLE_PUSH_AS_DEFAULT_ROS_PACKAGE: 'true' - DISABLE_ARM64: 'true' \ No newline at end of file diff --git a/.gitlab-ci/ml-variations/ros-torch-py.yml b/.gitlab-ci/ml-variations/ros-torch-py.yml deleted file mode 100644 index c232e9b..0000000 --- a/.gitlab-ci/ml-variations/ros-torch-py.yml +++ /dev/null @@ -1,8 +0,0 @@ -include: .gitlab-ci/ml-variations/ros-torch.yml - -variables: - TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-torch${TORCH_VERSION}-py - IMAGE_CI_CACHE: ${IMAGE_REPO_CI}:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}-torch${TORCH_VERSION}_ci - TORCH_VERSION_CPP: "" - DISABLE_PUSH_AS_LATEST: 'true' - DISABLE_PUSH_AS_DEFAULT_ROS_PACKAGE: 'true' diff --git a/.gitlab-ci/ml-variations/ros-torch.yml b/.gitlab-ci/ml-variations/ros-torch.yml index a8cf167..f674635 100644 --- a/.gitlab-ci/ml-variations/ros-torch.yml +++ b/.gitlab-ci/ml-variations/ros-torch.yml @@ -1,9 +1,9 @@ include: - - .gitlab-ci/ml-variations/ros-cuda-trt.yml + - .gitlab-ci/ml-variations/ros-tensorrt.yml - .gitlab-ci/ml-variations/.torch.yml variables: IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-torch IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-torch TAG: ${ROS_DISTRO}-${ROS_PACKAGE}-torch${TORCH_VERSION} - IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda-trt:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci + IMAGE_CI_CACHE: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-tensorrt:${CI_COMMIT_REF_SLUG}_${ROS_DISTRO}-${ROS_PACKAGE}_ci diff --git a/.gitlab-ci/ml-variations/ros.yml b/.gitlab-ci/ml-variations/ros.yml index c1a91da..a678c46 100644 --- a/.gitlab-ci/ml-variations/ros.yml +++ b/.gitlab-ci/ml-variations/ros.yml @@ -8,4 +8,3 @@ variables: IMAGE: ${IMAGE_REPO}:${TAG} IMAGE_CI: ${IMAGE_REPO_CI}:${CI_COMMIT_REF_SLUG}_${TAG}_ci IMAGE_CI_CACHE: ${IMAGE_CI} - CUDA_VERSION: "11.8" # only used for variable substitution in the base-ml image (build fails otherwise) diff --git a/.gitlab-ci/ros-noetic/.ros-noetic.yml b/.gitlab-ci/ros-noetic/.ros-noetic.yml index d671ff9..533876d 100644 --- a/.gitlab-ci/ros-noetic/.ros-noetic.yml +++ b/.gitlab-ci/ros-noetic/.ros-noetic.yml @@ -3,5 +3,6 @@ variables: ROS_VERSION: 1 ROS_VERSION_NAME: "ros" ROS_DISTRO: noetic - DISABLE_CUDA: "true" - DISABLE_TRITON: "true" + _TF_VERSION: 2.12.0 + _TORCH_VERSION: 2.1.0 + _TRITON_VERSION: 2.48.0 diff --git a/.gitlab-ci/ros2-humble/.ros2-humble.yml b/.gitlab-ci/ros2-humble/.ros2-humble.yml index 99928f2..5146f38 100644 --- a/.gitlab-ci/ros2-humble/.ros2-humble.yml +++ b/.gitlab-ci/ros2-humble/.ros2-humble.yml @@ -3,4 +3,6 @@ variables: ROS_VERSION: 2 ROS_VERSION_NAME: "ros2" ROS_DISTRO: humble - DISABLE_ML_ARM64: "true" + _TF_VERSION: 2.16.1 + _TORCH_VERSION: 2.4.0 + _TRITON_VERSION: 2.48.0 \ No newline at end of file diff --git a/.gitlab-ci/ros2-iron/.ros2-iron.yml b/.gitlab-ci/ros2-iron/.ros2-iron.yml index 8c8a33a..147e6a5 100644 --- a/.gitlab-ci/ros2-iron/.ros2-iron.yml +++ b/.gitlab-ci/ros2-iron/.ros2-iron.yml @@ -3,4 +3,6 @@ variables: ROS_VERSION: 2 ROS_VERSION_NAME: "ros2" ROS_DISTRO: iron - DISABLE_ML_ARM64: "true" + _TF_VERSION: 2.16.1 + _TORCH_VERSION: 2.4.0 + _TRITON_VERSION: 2.48.0 diff --git a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml index e130ee5..a81593a 100644 --- a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml +++ b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml @@ -3,9 +3,11 @@ variables: ROS_VERSION: 2 ROS_VERSION_NAME: ros2 ROS_DISTRO: jazzy - DISABLE_CUDA: "true" - DISABLE_CUDA_TRT: "true" - DISABLE_TRITON: "true" + _TF_VERSION: 2.16.1 + _TORCH_VERSION: 2.4.0 + _TRITON_VERSION: 2.48.0 + DISABLE_TENSORRT: "true" DISABLE_TORCH: "true" DISABLE_TF: "true" DISABLE_ML: "true" + DISABLE_ML_ARM64: "true" diff --git a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml index bf6f165..8cdec8f 100644 --- a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml +++ b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml @@ -3,5 +3,6 @@ variables: ROS_VERSION: 2 ROS_VERSION_NAME: "ros2" ROS_DISTRO: rolling - DISABLE_CUDA: "true" - DISABLE_TRITON: "true" + _TF_VERSION: 2.12.0 + _TORCH_VERSION: 2.1.0 + _TRITON_VERSION: 2.48.0 diff --git a/.version_information-triton.sh b/.version_information-cuda.sh similarity index 100% rename from .version_information-triton.sh rename to .version_information-cuda.sh diff --git a/.version_information-ml.sh b/.version_information-tensorrt.sh similarity index 100% rename from .version_information-ml.sh rename to .version_information-tensorrt.sh diff --git a/Dockerfile b/Dockerfile index 1fe7153..6b0ba92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,34 +2,49 @@ # --load \ # --platform $(uname)/$(uname -m) \ # --build-arg BUILD_VERSION=$BUILD_VERSION \ -# --build-arg CUDA_VERSION=$CUDA_VERSION \ # --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ # --build-arg ROS_VERSION=$ROS_VERSION \ # --build-arg ROS_DISTRO=$ROS_DISTRO \ # --build-arg ROS_PACKAGE=$ROS_PACKAGE \ # --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY \ -# --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP \ # --build-arg TF_VERSION_PY=$TF_VERSION_PY \ -# --build-arg TF_VERSION_CPP=$TF_VERSION_CPP \ # --build-arg TRITON_VERSION=$TRITON_VERSION \ # --tag $IMAGE \ # . ARG BUILD_VERSION ARG UBUNTU_VERSION="22.04" -ARG CUDA_VERSION=12.2 -# === base (multiarch) =============================================================== -FROM ubuntu:${UBUNTU_VERSION} as base +# === ubuntu base images ========================================================================== +FROM --platform=amd64 ubuntu:20.04 as base-ubuntu20.04-amd64 +FROM --platform=amd64 ubuntu:22.04 as base-ubuntu22.04-amd64 +FROM --platform=amd64 ubuntu:24.04 as base-ubuntu24.04-amd64 -# === base-ml (multiarch) ============================================================ -FROM rwthika/cuda:${CUDA_VERSION}-cudnn-trt-ubuntu${UBUNTU_VERSION} as base-ml +FROM --platform=arm64 ubuntu:20.04 as base-ubuntu20.04-arm64 +FROM --platform=arm64 ubuntu:22.04 as base-ubuntu22.04-arm64 +FROM --platform=arm64 ubuntu:24.04 as base-ubuntu24.04-arm64 -# === base-triton (multiarch) ============================================================ -FROM rwthika/cuda:${CUDA_VERSION}-ubuntu${UBUNTU_VERSION} as base-triton +# === cuda base images ============================================================================ +FROM --platform=amd64 nvcr.io/nvidia/cuda:11.4.3-runtime-ubuntu20.04 as base-cuda-ubuntu20.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/cuda:12.2.2-runtime-ubuntu22.04 as base-cuda-ubuntu22.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu24.04 as base-cuda-ubuntu24.04-amd64 -# === dependencies =================================================================== -FROM "base${BUILD_VERSION}" as dependencies +FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:11.4.19-runtime as base-cuda-ubuntu20.04-arm64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:12.2.12-runtime as base-cuda-ubuntu22.04-arm64 +# no l4t-cuda image for ubuntu24 available + +# === tensorrt base images ======================================================================== +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 as base-tensorrt-ubuntu20.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.09-py3 as base-tensorrt-ubuntu22.04-amd64 +# no tensorrt image for ubuntu24 available + +FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime as base-tensorrt-ubuntu20.04-arm64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime as base-tensorrt-ubuntu22.04-arm64 +# no l4t-tensorrt image for ubuntu24 available + + +# === dependencies ================================================================================ +FROM "base${BUILD_VERSION}-ubuntu${UBUNTU_VERSION}-${TARGETARCH}" as dependencies ARG DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] @@ -73,7 +88,7 @@ RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.d apt-get install git-lfs && \ rm -rf /var/lib/apt/lists/* -# --- install and setup ROS ---------------------------------------------------- +# === install and setup ROS ======================================================================= FROM dependencies as ros ARG TARGETARCH ARG UBUNTU_VERSION @@ -124,9 +139,8 @@ RUN apt-get update && \ # source ROS RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc -# --- install ML stuff ---------------------------------------------------- -# TODO: works only with CUDA 11.x / deprecated -FROM ros as ros-ml +# === install ML frameworks on tensorrt base ====================================================== +FROM ros as ros-tensorrt ARG TARGETARCH ARG UBUNTU_VERSION @@ -134,58 +148,26 @@ ARG UBUNTU_VERSION ARG TORCH_VERSION_PY RUN if [[ -n $TORCH_VERSION_PY ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ - if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then PT_PACKAGE_NAME=1.11.0+cu113; \ - elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then PT_PACKAGE_NAME=2.0.1+cu118; \ - else PT_PACKAGE_NAME=${TORCH_VERSION_PY}+cpu; fi && \ - pip install torch==${PT_PACKAGE_NAME} -f https://download.pytorch.org/whl/torch_stable.html ; \ + pip3 install torch==${TORCH_VERSION_PY}; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install - if [[ "$TORCH_VERSION_PY" = "1.11.0" ]]; then TORCH_INSTALL=https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl; \ - elif [[ "$TORCH_VERSION_PY" = "2.0.1" ]]; then TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v511/pytorch/torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl; \ - else TORCH_INSTALL=""; fi && \ - pip install --no-cache $TORCH_INSTALL && \ - apt-get update && \ - apt-get install -y libopenblas-base && \ - rm -rf /var/lib/apt/lists/* ; \ - fi ; \ - fi - -# install PyTorch C++ API (not available for arm64) -ARG TORCH_VERSION_CPP -RUN if [[ -n $TORCH_VERSION_CPP ]]; then \ - if [[ "$TARGETARCH" == "amd64" ]]; then \ - if [[ "$TORCH_VERSION_CPP" = "1.11.0" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu113/libtorch-cxx11-abi-shared-with-deps-1.11.0%2Bcu113.zip; \ - elif [[ "$TORCH_VERSION_CPP" = "2.0.1" ]]; then PT_CPP_URL=https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip; \ - else PT_CPP_URL=""; fi && \ - wget -q -O /tmp/libtorch.zip ${PT_CPP_URL} && \ - unzip /tmp/libtorch.zip -d /opt/ && \ - rm /tmp/libtorch.zip ; \ - fi ; \ - fi - -# install TensorFlow C++ API incl. protobuf -ARG TF_VERSION_CPP -RUN if [[ -n $TF_VERSION_CPP ]]; then \ - wget -q -O /tmp/libtensorflow-cc.deb "https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_CPP/+*/}/libtensorflow-cc_${TF_VERSION_CPP}-gpu_${TARGETARCH}.deb" && \ - dpkg -i /tmp/libtensorflow-cc.deb && \ - ldconfig && \ - rm /tmp/libtensorflow-cc.deb ; \ + pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION_PY}a0+f70bd71a48.nv24.06.15634931-cp310-cp310-linux_aarch64.whl; \ + fi; \ fi # install TensorFlow ARG TF_VERSION_PY RUN if [[ -n $TF_VERSION_PY ]]; then \ - apt-get update && \ - apt-get install -y libhdf5-dev && \ - rm -rf /var/lib/apt/lists/* && \ - PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2 | tr -d .) && \ - ARCH=$(uname -m) && \ - pip install --no-cache https://github.com/ika-rwth-aachen/libtensorflow_cc/releases/download/v${TF_VERSION_PY/+*/}/tensorflow-${TF_VERSION_PY}-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-linux_${ARCH}.whl; \ + if [[ "$TARGETARCH" == "amd64" ]]; then \ + pip3 install tensorflow==${TF_VERSION_PY}; \ + elif [[ "$TARGETARCH" == "arm64" ]]; then \ + pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v${JP_VERSION} tensorflow==${TF_VERSION_PY}+nv24.07; \ + fi; \ fi -# --- install tritonclient ---------------------------------------------------- -FROM ros as ros-triton +# === install tritonclient on cuda base =========================================================== +FROM ros as ros-cuda ARG TARGETARCH # install triton client From 2cabe68dc197a218c65eac88a094aa4955398b0d Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Tue, 20 Aug 2024 17:42:04 +0200 Subject: [PATCH 25/64] install correct wheels for ROS1 --- Dockerfile | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6b0ba92..24a797b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -152,7 +152,11 @@ RUN if [[ -n $TORCH_VERSION_PY ]]; then \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install - pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION_PY}a0+f70bd71a48.nv24.06.15634931-cp310-cp310-linux_aarch64.whl; \ + if [[ $UBUNTU_VERSION == "20.04" ]]; then \ + pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-${TORCH_VERSION_PY}a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl; \ + else \ + pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION_PY}a0+f70bd71a48.nv24.06.15634931-cp310-cp310-linux_aarch64.whl; \ + fi; \ fi; \ fi @@ -162,7 +166,14 @@ RUN if [[ -n $TF_VERSION_PY ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ pip3 install tensorflow==${TF_VERSION_PY}; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ - pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v${JP_VERSION} tensorflow==${TF_VERSION_PY}+nv24.07; \ + apt-get update && \ + apt-get install -y libhdf5-dev && \ + rm -rf /var/lib/apt/lists/* && \ + if [[ $UBUNTU_VERSION == "20.04" ]]; then \ + pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v512 tensorflow==${TF_VERSION_PY}+nv23.06; \ + else \ + pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v60 tensorflow==${TF_VERSION_PY}+nv24.07; \ + fi; \ fi; \ fi From f17d4bcba684567ab8dd9f1e8c930ea24a67d95d Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Tue, 20 Aug 2024 18:03:14 +0200 Subject: [PATCH 26/64] install necessary requirements for jetson packages --- Dockerfile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 24a797b..c31f33c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -152,6 +152,9 @@ RUN if [[ -n $TORCH_VERSION_PY ]]; then \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install + apt-get update && \ + apt-get install -y libopenblas-base && \ + rm -rf /var/lib/apt/lists/* ; \ if [[ $UBUNTU_VERSION == "20.04" ]]; then \ pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-${TORCH_VERSION_PY}a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl; \ else \ @@ -170,8 +173,9 @@ RUN if [[ -n $TF_VERSION_PY ]]; then \ apt-get install -y libhdf5-dev && \ rm -rf /var/lib/apt/lists/* && \ if [[ $UBUNTU_VERSION == "20.04" ]]; then \ + pip3 install h5py==3.7.0 && \ pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v512 tensorflow==${TF_VERSION_PY}+nv23.06; \ - else \ + else \ pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v60 tensorflow==${TF_VERSION_PY}+nv24.07; \ fi; \ fi; \ From 0ca92ed076c83810bfd3a5efd8f6f4a46d0b2ad4 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Tue, 20 Aug 2024 18:38:48 +0200 Subject: [PATCH 27/64] temporaray only build ros-core in CI --- .gitlab-ci.yml | 210 ++++++++++++++++++++++++------------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f916176..65da52e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,27 +25,27 @@ ros-noetic-ros-core: include: .gitlab-ci/ros-noetic/ros-noetic-ros-core.yml strategy: depend -ros-noetic-ros-base: - stage: ROS 1 Noetic - rules: - - if: $ROS_DISTROS =~ /.*noetic.*/ - needs: - - job: ros-noetic-ros-core - optional: true - trigger: - include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml - strategy: depend - -ros-noetic-desktop-full: - stage: ROS 1 Noetic - rules: - - if: $ROS_DISTROS =~ /.*noetic.*/ - needs: - - job: ros-noetic-ros-base - optional: true - trigger: - include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml - strategy: depend +# ros-noetic-ros-base: +# stage: ROS 1 Noetic +# rules: +# - if: $ROS_DISTROS =~ /.*noetic.*/ +# needs: +# - job: ros-noetic-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml +# strategy: depend + +# ros-noetic-desktop-full: +# stage: ROS 1 Noetic +# rules: +# - if: $ROS_DISTROS =~ /.*noetic.*/ +# needs: +# - job: ros-noetic-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml +# strategy: depend ros2-humble-ros-core: @@ -57,27 +57,27 @@ ros2-humble-ros-core: include: .gitlab-ci/ros2-humble/ros2-humble-ros-core.yml strategy: depend -ros2-humble-ros-base: - stage: ROS 2 Humble - rules: - - if: $ROS_DISTROS =~ /.*humble.*/ - needs: - - job: ros2-humble-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml - strategy: depend - -ros2-humble-desktop-full: - stage: ROS 2 Humble - rules: - - if: $ROS_DISTROS =~ /.*humble.*/ - needs: - - job: ros2-humble-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml - strategy: depend +# ros2-humble-ros-base: +# stage: ROS 2 Humble +# rules: +# - if: $ROS_DISTROS =~ /.*humble.*/ +# needs: +# - job: ros2-humble-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml +# strategy: depend + +# ros2-humble-desktop-full: +# stage: ROS 2 Humble +# rules: +# - if: $ROS_DISTROS =~ /.*humble.*/ +# needs: +# - job: ros2-humble-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml +# strategy: depend ros2-iron-ros-core: @@ -89,27 +89,27 @@ ros2-iron-ros-core: include: .gitlab-ci/ros2-iron/ros2-iron-ros-core.yml strategy: depend -ros2-iron-ros-base: - stage: ROS 2 Iron - rules: - - if: $ROS_DISTROS =~ /.*iron.*/ - needs: - - job: ros2-iron-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml - strategy: depend - -ros2-iron-desktop-full: - stage: ROS 2 Iron - rules: - - if: $ROS_DISTROS =~ /.*iron.*/ - needs: - - job: ros2-iron-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml - strategy: depend +# ros2-iron-ros-base: +# stage: ROS 2 Iron +# rules: +# - if: $ROS_DISTROS =~ /.*iron.*/ +# needs: +# - job: ros2-iron-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml +# strategy: depend + +# ros2-iron-desktop-full: +# stage: ROS 2 Iron +# rules: +# - if: $ROS_DISTROS =~ /.*iron.*/ +# needs: +# - job: ros2-iron-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml +# strategy: depend ros2-jazzy-ros-core: @@ -121,27 +121,27 @@ ros2-jazzy-ros-core: include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml strategy: depend -ros2-jazzy-ros-base: - stage: ROS 2 Jazzy - rules: - - if: $ROS_DISTROS =~ /.*jazzy.*/ - needs: - - job: ros2-jazzy-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml - strategy: depend - -ros2-jazzy-desktop-full: - stage: ROS 2 Jazzy - rules: - - if: $ROS_DISTROS =~ /.*jazzy.*/ - needs: - - job: ros2-jazzy-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml - strategy: depend +# ros2-jazzy-ros-base: +# stage: ROS 2 Jazzy +# rules: +# - if: $ROS_DISTROS =~ /.*jazzy.*/ +# needs: +# - job: ros2-jazzy-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml +# strategy: depend + +# ros2-jazzy-desktop-full: +# stage: ROS 2 Jazzy +# rules: +# - if: $ROS_DISTROS =~ /.*jazzy.*/ +# needs: +# - job: ros2-jazzy-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml +# strategy: depend ros2-rolling-ros-core: @@ -153,24 +153,24 @@ ros2-rolling-ros-core: include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-core.yml strategy: depend -ros2-rolling-ros-base: - stage: ROS 2 Rolling - rules: - - if: $ROS_DISTROS =~ /.*rolling.*/ - needs: - - job: ros2-rolling-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml - strategy: depend - -ros2-rolling-desktop: - stage: ROS 2 Rolling - rules: - - if: $ROS_DISTROS =~ /.*rolling.*/ - needs: - - job: ros2-rolling-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml - strategy: depend +# ros2-rolling-ros-base: +# stage: ROS 2 Rolling +# rules: +# - if: $ROS_DISTROS =~ /.*rolling.*/ +# needs: +# - job: ros2-rolling-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml +# strategy: depend + +# ros2-rolling-desktop: +# stage: ROS 2 Rolling +# rules: +# - if: $ROS_DISTROS =~ /.*rolling.*/ +# needs: +# - job: ros2-rolling-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml +# strategy: depend From 080c42713efcecaa44a40324687c6d5c391bc4f9 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 21 Aug 2024 19:04:43 +0200 Subject: [PATCH 28/64] fix bug in apt source.list for l4t base images --- Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index c31f33c..2b8156c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,6 +51,12 @@ SHELL ["/bin/bash", "-c"] USER root +RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" ]]; then \ + # bug in base image -> replace line in /etc/apt/sources.list to use "r36.3" instead of "r36.0" + sed -i 's/https:\/\/repo.download.nvidia.com\/jetson\/common r36.0 main/https:\/\/repo.download.nvidia.com\/jetson\/common r36.3 main/g' /etc/apt/sources.list && \ + echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list; \ + fi + # install essentials via apt ARG UBUNTU_VERSION RUN apt-get update && \ From 18ac881cb70ccd52687462d359b3c9dbb58201e2 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 21 Aug 2024 19:07:46 +0200 Subject: [PATCH 29/64] remove C++ version information --- .version_information-tensorrt.sh | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/.version_information-tensorrt.sh b/.version_information-tensorrt.sh index 5d19101..722a300 100755 --- a/.version_information-tensorrt.sh +++ b/.version_information-tensorrt.sh @@ -19,17 +19,6 @@ PYTHON_VERSION=$(python --version | awk '{print $2}') TF_PIP_VERSION=$(python -c "exec(\"try:\n import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'; import tensorflow as tf; print(tf.__version__);\n\rexcept ImportError:\n pass\")") PT_PIP_VERSION=$(python -c "exec(\"try:\n import torch; print(torch.__version__);\n\rexcept ImportError:\n pass\")") -if [[ -f /usr/local/include/tensorflow/tensorflow/core/public/version.h ]]; then - TF_C_MAJOR=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_MAJOR_VERSION" | sed "s/#define TF_MAJOR_VERSION //") - TF_C_MINOR=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_MINOR_VERSION" | sed "s/#define TF_MINOR_VERSION //") - TF_C_PATCH=$(cat /usr/local/include/tensorflow/tensorflow/core/public/version.h | grep "#define TF_PATCH_VERSION" | sed "s/#define TF_PATCH_VERSION //") - TF_C_VERSION=$TF_C_MAJOR.$TF_C_MINOR.$TF_C_PATCH -fi - -if [[ -f /opt/libtorch/build-version ]]; then - PT_C_VERSION=$(cat /opt/libtorch/build-version) -fi - CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') if [[ $(command -v nvidia-smi) ]]; then NUM_GPUS=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l) @@ -51,10 +40,8 @@ CMake: $CMAKE_VERSION CUDA: $CUDA_VERSION cuDNN: $CUDNN_VERSION TensorRT: $TENSORRT_VERSION -TensorFlow Python: $TF_PIP_VERSION -TensorFlow C/C++: $TF_C_VERSION -PyTorch Python: $PT_PIP_VERSION -PyTorch C/C++: $PT_C_VERSION +TensorFlow: $TF_PIP_VERSION +PyTorch: $PT_PIP_VERSION Available GPUs: $NUM_GPUS $GPU_INFOS ================================================================================ From 991bb6c93101c7ef2fa4567b950a9c459b65ff81 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 21 Aug 2024 19:10:31 +0200 Subject: [PATCH 30/64] show version information again with one file --- .version_information-cuda.sh | 40 -------------------------- .version_information-tensorrt.sh | 49 -------------------------------- .version_information.sh | 13 +++++++++ Dockerfile | 2 +- 4 files changed, 14 insertions(+), 90 deletions(-) delete mode 100755 .version_information-cuda.sh delete mode 100755 .version_information-tensorrt.sh diff --git a/.version_information-cuda.sh b/.version_information-cuda.sh deleted file mode 100755 index fc51ef1..0000000 --- a/.version_information-cuda.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# get container version information -eval $(cat /etc/os-release | grep ^VERSION=) - -ARCH=$(uname -m) - -if [[ -z "$RMW_IMPLEMENTATION" ]]; then - if ros2 pkg list | grep -q "rmw_fastrtps_cpp"; then - export RMW_IMPLEMENTATION=rmw_fastrtps_cpp - fi -fi - -CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') -PYTHON_VERSION=$(python --version | awk '{print $2}') -CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') -if [[ $(command -v nvidia-smi) ]]; then - NUM_GPUS=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l) - GPU_INFOS=$(nvidia-smi --query-gpu=name,driver_version,utilization.gpu,utilization.memory,memory.used,memory.total --format=csv | column -t -s, | sed 's/^/ /') -else - NUM_GPUS="0" - GPU_INFOS="" -fi - -# print information -cat << EOF -=== CONTAINER INFORMATION ====================================================== -Architecture: $ARCH -Ubuntu: $VERSION -Python: $PYTHON_VERSION -ROS: $ROS_DISTRO -RMW: $RMW_IMPLEMENTATION -CMake: $CMAKE_VERSION -CUDA: $CUDA_VERSION -Triton: $TRITON_VERSION -Available GPUs: $NUM_GPUS -$GPU_INFOS -================================================================================ - -EOF diff --git a/.version_information-tensorrt.sh b/.version_information-tensorrt.sh deleted file mode 100755 index 722a300..0000000 --- a/.version_information-tensorrt.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -# get container version information -eval $(cat /etc/os-release | grep ^VERSION=) - -ARCH=$(uname -m) - -if [[ -z "$RMW_IMPLEMENTATION" ]]; then - if ros2 pkg list | grep -q "rmw_fastrtps_cpp"; then - export RMW_IMPLEMENTATION=rmw_fastrtps_cpp - fi -fi - -CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') -CUDNN_VERSION=$(dpkg -l 2> /dev/null | grep -E "libcudnn[0-9] " | awk '{ print $3 }') -TENSORRT_VERSION=$(dpkg -l 2> /dev/null | grep -E "libnvinfer[0-9] " | awk '{ print $3 }') - -PYTHON_VERSION=$(python --version | awk '{print $2}') -TF_PIP_VERSION=$(python -c "exec(\"try:\n import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'; import tensorflow as tf; print(tf.__version__);\n\rexcept ImportError:\n pass\")") -PT_PIP_VERSION=$(python -c "exec(\"try:\n import torch; print(torch.__version__);\n\rexcept ImportError:\n pass\")") - -CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') -if [[ $(command -v nvidia-smi) ]]; then - NUM_GPUS=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l) - GPU_INFOS=$(nvidia-smi --query-gpu=name,driver_version,utilization.gpu,utilization.memory,memory.used,memory.total --format=csv | column -t -s, | sed 's/^/ /') -else - NUM_GPUS="0" - GPU_INFOS="" -fi - -# print information -cat << EOF -=== CONTAINER INFORMATION ====================================================== -Architecture: $ARCH -Ubuntu: $VERSION -Python: $PYTHON_VERSION -ROS: $ROS_DISTRO -RMW: $RMW_IMPLEMENTATION -CMake: $CMAKE_VERSION -CUDA: $CUDA_VERSION -cuDNN: $CUDNN_VERSION -TensorRT: $TENSORRT_VERSION -TensorFlow: $TF_PIP_VERSION -PyTorch: $PT_PIP_VERSION -Available GPUs: $NUM_GPUS -$GPU_INFOS -================================================================================ - -EOF diff --git a/.version_information.sh b/.version_information.sh index 35ce151..0c78134 100755 --- a/.version_information.sh +++ b/.version_information.sh @@ -11,7 +11,14 @@ if [[ -z "$RMW_IMPLEMENTATION" ]]; then fi fi +CUDA_VERSION=$(dpkg -l 2> /dev/null | grep -E "cuda-cudart-[0-9]" | awk '{ print $3 }') +CUDNN_VERSION=$(dpkg -l 2> /dev/null | grep -E "libcudnn[0-9] " | awk '{ print $3 }') +TENSORRT_VERSION=$(dpkg -l 2> /dev/null | grep -E "libnvinfer[0-9] " | awk '{ print $3 }') + PYTHON_VERSION=$(python --version | awk '{print $2}') +TF_PIP_VERSION=$(python -c "exec(\"try:\n import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'; import tensorflow as tf; print(tf.__version__);\n\rexcept ImportError:\n pass\")") +PT_PIP_VERSION=$(python -c "exec(\"try:\n import torch; print(torch.__version__);\n\rexcept ImportError:\n pass\")") + CMAKE_VERSION=$(cmake --version | grep version | awk '{print $3}') if [[ $(command -v nvidia-smi) ]]; then NUM_GPUS=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l) @@ -30,6 +37,12 @@ Python: $PYTHON_VERSION ROS: $ROS_DISTRO RMW: $RMW_IMPLEMENTATION CMake: $CMAKE_VERSION +CUDA: $CUDA_VERSION +cuDNN: $CUDNN_VERSION +TensorRT: $TENSORRT_VERSION +Triton: $TRITON_VERSION +TensorFlow: $TF_PIP_VERSION +PyTorch: $PT_PIP_VERSION Available GPUs: $NUM_GPUS $GPU_INFOS ================================================================================ diff --git a/Dockerfile b/Dockerfile index 2b8156c..307333e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -216,7 +216,7 @@ ENV DOCKER_GID= # print version information during login RUN echo "source /.version_information.sh" >> ~/.bashrc ARG BUILD_VERSION -COPY .version_information${BUILD_VERSION}.sh /.version_information.sh +COPY .version_information.sh /.version_information.sh # container startup setup ENV WORKSPACE=/docker-ros/ws From cb1a052e5c4c1e7ea705cbe9936880d812140837 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 21 Aug 2024 21:39:17 +0200 Subject: [PATCH 31/64] expose variables for condition --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 307333e..367de9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,6 +51,8 @@ SHELL ["/bin/bash", "-c"] USER root +ARG TARGETARCH +ARG UBUNTU_VERSION RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" ]]; then \ # bug in base image -> replace line in /etc/apt/sources.list to use "r36.3" instead of "r36.0" sed -i 's/https:\/\/repo.download.nvidia.com\/jetson\/common r36.0 main/https:\/\/repo.download.nvidia.com\/jetson\/common r36.3 main/g' /etc/apt/sources.list && \ @@ -58,7 +60,6 @@ RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" ]]; then \ fi # install essentials via apt -ARG UBUNTU_VERSION RUN apt-get update && \ apt-get install -y \ bsdmainutils \ From ef58ccdc47070800f7920d4ee780543df0c0dbc7 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 10:30:17 +0200 Subject: [PATCH 32/64] fix plain arm images --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 367de9b..5070b23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -53,7 +53,7 @@ USER root ARG TARGETARCH ARG UBUNTU_VERSION -RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" ]]; then \ +RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" && $BUILD_VERSION != "" ]]; then \ # bug in base image -> replace line in /etc/apt/sources.list to use "r36.3" instead of "r36.0" sed -i 's/https:\/\/repo.download.nvidia.com\/jetson\/common r36.0 main/https:\/\/repo.download.nvidia.com\/jetson\/common r36.3 main/g' /etc/apt/sources.list && \ echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list; \ From e1ce43577aee07bf398b3ad4b16f1aa9f2adcbef Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 10:32:55 +0200 Subject: [PATCH 33/64] rename build version arg --- .gitlab-ci/ml-variations/.template.yml | 10 +++++----- .gitlab-ci/ml-variations/ros-cuda.yml | 2 +- .gitlab-ci/ml-variations/ros-tensorrt.yml | 2 +- .gitlab-ci/ml-variations/ros.yml | 2 +- Dockerfile | 14 +++++++------- README.md | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.gitlab-ci/ml-variations/.template.yml b/.gitlab-ci/ml-variations/.template.yml index b3b20f8..643a73e 100644 --- a/.gitlab-ci/ml-variations/.template.yml +++ b/.gitlab-ci/ml-variations/.template.yml @@ -32,7 +32,7 @@ variables: --cache-from type=registry,ref=$IMAGE_CACHE --cache-to type=inline --platform $PLATFORM - --build-arg BUILD_VERSION=$BUILD_VERSION + --build-arg BASE_IMAGE_TYPE=$BASE_IMAGE_TYPE --build-arg UBUNTU_VERSION=$UBUNTU_VERSION --build-arg ROS_VERSION=$ROS_VERSION --build-arg ROS_DISTRO=$ROS_DISTRO @@ -45,13 +45,13 @@ variables: .docker-push-manifest: script: - |- - if [[ "${DISABLE_AMD64}" != "true" ]] && [[ "${DISABLE_ML_AMD64}" != "true" || "${BUILD_VERSION}" == "" ]]; then + if [[ "${DISABLE_AMD64}" != "true" ]] && [[ "${DISABLE_ML_AMD64}" != "true" || "${BASE_IMAGE_TYPE}" == "" ]]; then docker pull ${IMAGE_CI}-amd64 docker tag ${IMAGE_CI}-amd64 ${IMAGE}-amd64 docker push ${IMAGE}-amd64 AMD64_IS_ENABLED="true" fi - if [[ "${DISABLE_ARM64}" != "true" ]] && [[ "${DISABLE_ML_ARM64}" != "true" || "${BUILD_VERSION}" == "" ]]; then + if [[ "${DISABLE_ARM64}" != "true" ]] && [[ "${DISABLE_ML_ARM64}" != "true" || "${BASE_IMAGE_TYPE}" == "" ]]; then docker pull ${IMAGE_CI}-arm64 docker tag ${IMAGE_CI}-arm64 ${IMAGE}-arm64 docker push ${IMAGE}-arm64 @@ -77,7 +77,7 @@ build-amd64: rules: - if: $DISABLE_AMD64 == 'true' when: never - - if: $DISABLE_ML_AMD64 == 'true' && $BUILD_VERSION != '' + - if: $DISABLE_ML_AMD64 == 'true' && $BASE_IMAGE_TYPE != '' when: never - when: on_success script: @@ -93,7 +93,7 @@ build-arm64: rules: - if: $DISABLE_ARM64 == 'true' when: never - - if: $DISABLE_ML_ARM64 == 'true' && $BUILD_VERSION != '' + - if: $DISABLE_ML_ARM64 == 'true' && $BASE_IMAGE_TYPE != '' when: never - when: on_success script: diff --git a/.gitlab-ci/ml-variations/ros-cuda.yml b/.gitlab-ci/ml-variations/ros-cuda.yml index d08da6b..cf3f2e3 100644 --- a/.gitlab-ci/ml-variations/ros-cuda.yml +++ b/.gitlab-ci/ml-variations/ros-cuda.yml @@ -1,6 +1,6 @@ include: .gitlab-ci/ml-variations/ros.yml variables: - BUILD_VERSION: "-cuda" + BASE_IMAGE_TYPE: "-cuda" IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-cuda IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-cuda diff --git a/.gitlab-ci/ml-variations/ros-tensorrt.yml b/.gitlab-ci/ml-variations/ros-tensorrt.yml index a551704..9e38843 100644 --- a/.gitlab-ci/ml-variations/ros-tensorrt.yml +++ b/.gitlab-ci/ml-variations/ros-tensorrt.yml @@ -1,6 +1,6 @@ include: .gitlab-ci/ml-variations/ros.yml variables: - BUILD_VERSION: "-tensorrt" + BASE_IMAGE_TYPE: "-tensorrt" IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-tensorrt IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-tensorrt diff --git a/.gitlab-ci/ml-variations/ros.yml b/.gitlab-ci/ml-variations/ros.yml index a678c46..c875b69 100644 --- a/.gitlab-ci/ml-variations/ros.yml +++ b/.gitlab-ci/ml-variations/ros.yml @@ -1,7 +1,7 @@ include: .gitlab-ci/ml-variations/.template.yml variables: - BUILD_VERSION: "" + BASE_IMAGE_TYPE: "" IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME} IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME} TAG: ${ROS_DISTRO}-${ROS_PACKAGE} diff --git a/Dockerfile b/Dockerfile index 5070b23..06cb369 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # docker buildx build \ # --load \ # --platform $(uname)/$(uname -m) \ -# --build-arg BUILD_VERSION=$BUILD_VERSION \ +# --build-arg BASE_IMAGE_TYPE=$BASE_IMAGE_TYPE \ # --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ # --build-arg ROS_VERSION=$ROS_VERSION \ # --build-arg ROS_DISTRO=$ROS_DISTRO \ @@ -12,7 +12,7 @@ # --tag $IMAGE \ # . -ARG BUILD_VERSION +ARG BASE_IMAGE_TYPE ARG UBUNTU_VERSION="22.04" # === ubuntu base images ========================================================================== @@ -34,7 +34,7 @@ FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:12.2.12-runtime as base-cuda-ubunt # no l4t-cuda image for ubuntu24 available # === tensorrt base images ======================================================================== -FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 as base-tensorrt-ubuntu20.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 as base-tensorrt-ubuntu20.04-amd64 # TODO: change to version with CUDA 11.4 FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.09-py3 as base-tensorrt-ubuntu22.04-amd64 # no tensorrt image for ubuntu24 available @@ -44,7 +44,7 @@ FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime as base-tensorr # === dependencies ================================================================================ -FROM "base${BUILD_VERSION}-ubuntu${UBUNTU_VERSION}-${TARGETARCH}" as dependencies +FROM "base${BASE_IMAGE_TYPE}-ubuntu${UBUNTU_VERSION}-${TARGETARCH}" as dependencies ARG DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] @@ -53,7 +53,7 @@ USER root ARG TARGETARCH ARG UBUNTU_VERSION -RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" && $BUILD_VERSION != "" ]]; then \ +RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" && $BASE_IMAGE_TYPE != "" ]]; then \ # bug in base image -> replace line in /etc/apt/sources.list to use "r36.3" instead of "r36.0" sed -i 's/https:\/\/repo.download.nvidia.com\/jetson\/common r36.0 main/https:\/\/repo.download.nvidia.com\/jetson\/common r36.3 main/g' /etc/apt/sources.list && \ echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list; \ @@ -207,7 +207,7 @@ RUN if [[ -n $TRITON_VERSION ]]; then \ fi # === final ==================================================================== -FROM "ros${BUILD_VERSION}" as final +FROM "ros${BASE_IMAGE_TYPE}" as final # user setup ENV DOCKER_USER=dockeruser @@ -216,7 +216,7 @@ ENV DOCKER_GID= # print version information during login RUN echo "source /.version_information.sh" >> ~/.bashrc -ARG BUILD_VERSION +ARG BASE_IMAGE_TYPE COPY .version_information.sh /.version_information.sh # container startup setup diff --git a/README.md b/README.md index 0c33748..3e02c7d 100644 --- a/README.md +++ b/README.md @@ -322,7 +322,7 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` docker buildx build \ --pull \ --platform $PLATFORM \ - --build-arg BUILD_VERSION=$BUILD_VERSION \ + --build-arg BASE_IMAGE_TYPE=$BASE_IMAGE_TYPE \ --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ --build-arg ROS_VERSION=$ROS_VERSION \ --build-arg ROS_DISTRO=$ROS_DISTRO \ From 59df2f5224990292fcbe590d40eeb4ae70ff5fdf Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 10:47:57 +0200 Subject: [PATCH 34/64] rename tf and torch version args --- .gitlab-ci/ml-variations/.template.yml | 4 ++-- .gitlab-ci/ml-variations/.tf.yml | 2 +- Dockerfile | 24 ++++++++++++------------ README.md | 6 ++---- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/.gitlab-ci/ml-variations/.template.yml b/.gitlab-ci/ml-variations/.template.yml index 643a73e..e39268e 100644 --- a/.gitlab-ci/ml-variations/.template.yml +++ b/.gitlab-ci/ml-variations/.template.yml @@ -37,8 +37,8 @@ variables: --build-arg ROS_VERSION=$ROS_VERSION --build-arg ROS_DISTRO=$ROS_DISTRO --build-arg ROS_PACKAGE=$ROS_PACKAGE - --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY - --build-arg TF_VERSION_PY=$TF_VERSION_PY + --build-arg TORCH_VERSION=$TORCH_VERSION + --build-arg TF_VERSION=$TF_VERSION --build-arg TRITON_VERSION=$TRITON_VERSION --tag $IMAGE . diff --git a/.gitlab-ci/ml-variations/.tf.yml b/.gitlab-ci/ml-variations/.tf.yml index add0a3b..3dc4ce0 100644 --- a/.gitlab-ci/ml-variations/.tf.yml +++ b/.gitlab-ci/ml-variations/.tf.yml @@ -1,2 +1,2 @@ variables: - TF_VERSION_PY: ${_TF_VERSION} \ No newline at end of file + TF_VERSION: ${_TF_VERSION} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 06cb369..d5fc477 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,8 @@ # --build-arg ROS_VERSION=$ROS_VERSION \ # --build-arg ROS_DISTRO=$ROS_DISTRO \ # --build-arg ROS_PACKAGE=$ROS_PACKAGE \ -# --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY \ -# --build-arg TF_VERSION_PY=$TF_VERSION_PY \ +# --build-arg TORCH_VERSION=$TORCH_VERSION \ +# --build-arg TF_VERSION=$TF_VERSION \ # --build-arg TRITON_VERSION=$TRITON_VERSION \ # --tag $IMAGE \ # . @@ -152,10 +152,10 @@ ARG TARGETARCH ARG UBUNTU_VERSION # install PyTorch -ARG TORCH_VERSION_PY -RUN if [[ -n $TORCH_VERSION_PY ]]; then \ +ARG TORCH_VERSION +RUN if [[ -n $TORCH_VERSION ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ - pip3 install torch==${TORCH_VERSION_PY}; \ + pip3 install torch==${TORCH_VERSION}; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install @@ -163,27 +163,27 @@ RUN if [[ -n $TORCH_VERSION_PY ]]; then \ apt-get install -y libopenblas-base && \ rm -rf /var/lib/apt/lists/* ; \ if [[ $UBUNTU_VERSION == "20.04" ]]; then \ - pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-${TORCH_VERSION_PY}a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl; \ + pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-${TORCH_VERSION}a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl; \ else \ - pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION_PY}a0+f70bd71a48.nv24.06.15634931-cp310-cp310-linux_aarch64.whl; \ + pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION}a0+f70bd71a48.nv24.06.15634931-cp310-cp310-linux_aarch64.whl; \ fi; \ fi; \ fi # install TensorFlow -ARG TF_VERSION_PY -RUN if [[ -n $TF_VERSION_PY ]]; then \ +ARG TF_VERSION +RUN if [[ -n $TF_VERSION ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ - pip3 install tensorflow==${TF_VERSION_PY}; \ + pip3 install tensorflow==${TF_VERSION}; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ apt-get update && \ apt-get install -y libhdf5-dev && \ rm -rf /var/lib/apt/lists/* && \ if [[ $UBUNTU_VERSION == "20.04" ]]; then \ pip3 install h5py==3.7.0 && \ - pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v512 tensorflow==${TF_VERSION_PY}+nv23.06; \ + pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v512 tensorflow==${TF_VERSION}+nv23.06; \ else \ - pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v60 tensorflow==${TF_VERSION_PY}+nv24.07; \ + pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v60 tensorflow==${TF_VERSION}+nv24.07; \ fi; \ fi; \ fi diff --git a/README.md b/README.md index 3e02c7d..37c9259 100644 --- a/README.md +++ b/README.md @@ -327,9 +327,7 @@ docker buildx build \ --build-arg ROS_VERSION=$ROS_VERSION \ --build-arg ROS_DISTRO=$ROS_DISTRO \ --build-arg ROS_PACKAGE=$ROS_PACKAGE \ - --build-arg TORCH_VERSION_PY=$TORCH_VERSION_PY \ - --build-arg TORCH_VERSION_CPP=$TORCH_VERSION_CPP \ - --build-arg TF_VERSION_PY=$TF_VERSION_PY \ - --build-arg TF_VERSION_CPP=$TF_VERSION_CPP \ + --build-arg TORCH_VERSION=$TORCH_VERSION \ + --build-arg TF_VERSION=$TF_VERSION \ --tag $IMAGE . ``` From 69f62a98e6f3f82c5226889f1d93be969b633ab2 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 11:01:12 +0200 Subject: [PATCH 35/64] small adjustments from MR --- .gitlab-ci/ml-variations/ros-triton.yml | 1 - .version_information.sh | 2 +- Dockerfile | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitlab-ci/ml-variations/ros-triton.yml b/.gitlab-ci/ml-variations/ros-triton.yml index 3efeb39..d1b4c86 100644 --- a/.gitlab-ci/ml-variations/ros-triton.yml +++ b/.gitlab-ci/ml-variations/ros-triton.yml @@ -2,7 +2,6 @@ include: - .gitlab-ci/ml-variations/ros-cuda.yml - .gitlab-ci/ml-variations/.triton.yml - variables: IMAGE_REPO: ${IMAGE_BASE}/${ROS_VERSION_NAME}-triton IMAGE_REPO_CI: ${IMAGE_BASE_CI}/${ROS_VERSION_NAME}-triton diff --git a/.version_information.sh b/.version_information.sh index 0c78134..444915d 100755 --- a/.version_information.sh +++ b/.version_information.sh @@ -40,7 +40,7 @@ CMake: $CMAKE_VERSION CUDA: $CUDA_VERSION cuDNN: $CUDNN_VERSION TensorRT: $TENSORRT_VERSION -Triton: $TRITON_VERSION +Triton Client: $TRITON_VERSION TensorFlow: $TF_PIP_VERSION PyTorch: $PT_PIP_VERSION Available GPUs: $NUM_GPUS diff --git a/Dockerfile b/Dockerfile index d5fc477..975f7d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -216,7 +216,6 @@ ENV DOCKER_GID= # print version information during login RUN echo "source /.version_information.sh" >> ~/.bashrc -ARG BASE_IMAGE_TYPE COPY .version_information.sh /.version_information.sh # container startup setup From 7052e65270cc5e45003b2a2359b670d6b7746509 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 11:15:21 +0200 Subject: [PATCH 36/64] write as upper case --- Dockerfile | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index 975f7d6..9df7330 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,35 +16,35 @@ ARG BASE_IMAGE_TYPE ARG UBUNTU_VERSION="22.04" # === ubuntu base images ========================================================================== -FROM --platform=amd64 ubuntu:20.04 as base-ubuntu20.04-amd64 -FROM --platform=amd64 ubuntu:22.04 as base-ubuntu22.04-amd64 -FROM --platform=amd64 ubuntu:24.04 as base-ubuntu24.04-amd64 +FROM --platform=amd64 ubuntu:20.04 AS base-ubuntu20.04-amd64 +FROM --platform=amd64 ubuntu:22.04 AS base-ubuntu22.04-amd64 +FROM --platform=amd64 ubuntu:24.04 AS base-ubuntu24.04-amd64 -FROM --platform=arm64 ubuntu:20.04 as base-ubuntu20.04-arm64 -FROM --platform=arm64 ubuntu:22.04 as base-ubuntu22.04-arm64 -FROM --platform=arm64 ubuntu:24.04 as base-ubuntu24.04-arm64 +FROM --platform=arm64 ubuntu:20.04 AS base-ubuntu20.04-arm64 +FROM --platform=arm64 ubuntu:22.04 AS base-ubuntu22.04-arm64 +FROM --platform=arm64 ubuntu:24.04 AS base-ubuntu24.04-arm64 # === cuda base images ============================================================================ -FROM --platform=amd64 nvcr.io/nvidia/cuda:11.4.3-runtime-ubuntu20.04 as base-cuda-ubuntu20.04-amd64 -FROM --platform=amd64 nvcr.io/nvidia/cuda:12.2.2-runtime-ubuntu22.04 as base-cuda-ubuntu22.04-amd64 -FROM --platform=amd64 nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu24.04 as base-cuda-ubuntu24.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/cuda:11.4.3-runtime-ubuntu20.04 AS base-cuda-ubuntu20.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/cuda:12.2.2-runtime-ubuntu22.04 AS base-cuda-ubuntu22.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu24.04 AS base-cuda-ubuntu24.04-amd64 -FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:11.4.19-runtime as base-cuda-ubuntu20.04-arm64 -FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:12.2.12-runtime as base-cuda-ubuntu22.04-arm64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:11.4.19-runtime AS base-cuda-ubuntu20.04-arm64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:12.2.12-runtime AS base-cuda-ubuntu22.04-arm64 # no l4t-cuda image for ubuntu24 available # === tensorrt base images ======================================================================== -FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 as base-tensorrt-ubuntu20.04-amd64 # TODO: change to version with CUDA 11.4 -FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.09-py3 as base-tensorrt-ubuntu22.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 AS base-tensorrt-ubuntu20.04-amd64 # TODO: change to version with CUDA 11.4 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.09-py3 AS base-tensorrt-ubuntu22.04-amd64 # no tensorrt image for ubuntu24 available -FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime as base-tensorrt-ubuntu20.04-arm64 -FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime as base-tensorrt-ubuntu22.04-arm64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime AS base-tensorrt-ubuntu20.04-arm64 +FROM --platform=arm64 nvcr.io/nvidia/l4t-tensorrt:r8.6.2-runtime AS base-tensorrt-ubuntu22.04-arm64 # no l4t-tensorrt image for ubuntu24 available # === dependencies ================================================================================ -FROM "base${BASE_IMAGE_TYPE}-ubuntu${UBUNTU_VERSION}-${TARGETARCH}" as dependencies +FROM "base${BASE_IMAGE_TYPE}-ubuntu${UBUNTU_VERSION}-${TARGETARCH}" AS dependencies ARG DEBIAN_FRONTEND=noninteractive SHELL ["/bin/bash", "-c"] @@ -96,7 +96,7 @@ RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.d rm -rf /var/lib/apt/lists/* # === install and setup ROS ======================================================================= -FROM dependencies as ros +FROM dependencies AS ros ARG TARGETARCH ARG UBUNTU_VERSION @@ -147,7 +147,7 @@ RUN apt-get update && \ RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc # === install ML frameworks on tensorrt base ====================================================== -FROM ros as ros-tensorrt +FROM ros AS ros-tensorrt ARG TARGETARCH ARG UBUNTU_VERSION @@ -189,7 +189,7 @@ RUN if [[ -n $TF_VERSION ]]; then \ fi # === install tritonclient on cuda base =========================================================== -FROM ros as ros-cuda +FROM ros AS ros-cuda ARG TARGETARCH # install triton client @@ -207,7 +207,7 @@ RUN if [[ -n $TRITON_VERSION ]]; then \ fi # === final ==================================================================== -FROM "ros${BASE_IMAGE_TYPE}" as final +FROM "ros${BASE_IMAGE_TYPE}" AS final # user setup ENV DOCKER_USER=dockeruser From b73226884f7f1757f2193e7ca5d2480d294cbba7 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 11:54:08 +0200 Subject: [PATCH 37/64] use docker-ros entrypoint --- entrypoint.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index afcaf3e..f5399cd 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -3,6 +3,8 @@ set -e # source ROS workspace source /opt/ros/$ROS_DISTRO/setup.bash +[[ -f $WORKSPACE/devel/setup.bash ]] && source $WORKSPACE/devel/setup.bash +[[ -f $WORKSPACE/install/setup.bash ]] && source $WORKSPACE/install/setup.bash # exec as dockeruser with configured UID/GID if [[ $DOCKER_UID && $DOCKER_GID ]]; then @@ -21,11 +23,13 @@ if [[ $DOCKER_UID && $DOCKER_GID ]]; then touch /home/$DOCKER_USER/.sudo_as_admin_successful cp /root/.bashrc /home/$DOCKER_USER ln -s $WORKSPACE /home/$DOCKER_USER/ws - chown -R $DOCKER_UID:$DOCKER_GID $WORKSPACE - chown -R $DOCKER_UID:$DOCKER_GID /home/$DOCKER_USER + chown -h $DOCKER_UID:$DOCKER_GID $WORKSPACE /home/$DOCKER_USER/ws /home/$DOCKER_USER/.sudo_as_admin_successful + if [[ -d $WORKSPACE/src ]]; then + chown -R $DOCKER_USER:$DOCKER_USER $WORKSPACE/src + fi fi [[ $(pwd) == "$WORKSPACE" ]] && cd /home/$DOCKER_USER/ws exec gosu $DOCKER_USER "$@" else exec "$@" -fi +fi \ No newline at end of file From 0adcf968d3070ec6396db452f4be031e5b3926b3 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 12:03:55 +0200 Subject: [PATCH 38/64] add tini --- Dockerfile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9df7330..19e462c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -221,6 +221,10 @@ COPY .version_information.sh /.version_information.sh # container startup setup ENV WORKSPACE=/docker-ros/ws WORKDIR $WORKSPACE +ENV TINI_VERSION=v0.19.0 +ARG TARGETARCH +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${TARGETARCH} /tini +RUN chmod +x /tini COPY entrypoint.sh / -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["/tini", "--", "/entrypoint.sh"] CMD ["bash"] From 603fa5595f95e181561de98eea3ca6db3b50058c Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 12:04:25 +0200 Subject: [PATCH 39/64] also upgrade pip for ubuntu 24.04 --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 19e462c..7187589 100644 --- a/Dockerfile +++ b/Dockerfile @@ -86,8 +86,8 @@ RUN apt-get update && \ x11-apps \ zip \ && rm -rf /var/lib/apt/lists/* -RUN if [[ $UBUNTU_VERSION == "24.04" ]]; then python -m pip config --global set global.break-system-packages true; \ - else python -m pip install --upgrade pip; fi +RUN if [[ $UBUNTU_VERSION == "24.04" ]]; then python -m pip config --global set global.break-system-packages true; fi && \ + python -m pip install --upgrade pip # install more essentials RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ From e90a616ceb3fc80d561c4a7be49888263f35b56a Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 12:31:32 +0200 Subject: [PATCH 40/64] fix Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7187589..9d87ad6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,7 @@ FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:12.2.12-runtime AS base-cuda-ubunt # no l4t-cuda image for ubuntu24 available # === tensorrt base images ======================================================================== -FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 AS base-tensorrt-ubuntu20.04-amd64 # TODO: change to version with CUDA 11.4 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 AS base-tensorrt-ubuntu20.04-amd64 FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.09-py3 AS base-tensorrt-ubuntu22.04-amd64 # no tensorrt image for ubuntu24 available From 6b552e040a8cf32144805441fb23ebaad2bd63b8 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 12:48:53 +0200 Subject: [PATCH 41/64] Revert "also upgrade pip for ubuntu 24.04" This reverts commit 603fa5595f95e181561de98eea3ca6db3b50058c. --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9d87ad6..cacfdb8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -86,8 +86,8 @@ RUN apt-get update && \ x11-apps \ zip \ && rm -rf /var/lib/apt/lists/* -RUN if [[ $UBUNTU_VERSION == "24.04" ]]; then python -m pip config --global set global.break-system-packages true; fi && \ - python -m pip install --upgrade pip +RUN if [[ $UBUNTU_VERSION == "24.04" ]]; then python -m pip config --global set global.break-system-packages true; \ + else python -m pip install --upgrade pip; fi # install more essentials RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ From 9e384280ce571b5074f4ed02dab6008828d966c9 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Thu, 22 Aug 2024 15:11:46 +0200 Subject: [PATCH 42/64] remove custom cuda build --- cuda/.gitignore | 1 - cuda/Dockerfile | 117 ------------------------------------------------ cuda/README.md | 35 --------------- 3 files changed, 153 deletions(-) delete mode 100644 cuda/.gitignore delete mode 100644 cuda/Dockerfile delete mode 100644 cuda/README.md diff --git a/cuda/.gitignore b/cuda/.gitignore deleted file mode 100644 index c776bdf..0000000 --- a/cuda/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.deb \ No newline at end of file diff --git a/cuda/Dockerfile b/cuda/Dockerfile deleted file mode 100644 index 7248e80..0000000 --- a/cuda/Dockerfile +++ /dev/null @@ -1,117 +0,0 @@ -# docker buildx build \ -# --load \ -# --platform $(uname)/$(uname -m) \ -# --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ -# --build-arg CUDA_VERSION=$CUDA_VERSION \ -# --build-arg CUDNN_VERSION=$CUDNN_VERSION \ -# --build-arg TENSORRT_VERSION=$TENSORRT_VERSION \ -# --build-arg INSTALL_AS_DEV=$INSTALL_AS_DEV \ -# --tag $IMAGE \ -# . - -ARG UBUNTU_VERSION=22.04 - -FROM --platform=amd64 ubuntu:20.04 as base-amd64-20.04 -FROM --platform=amd64 ubuntu:22.04 as base-amd64-22.04 -FROM --platform=amd64 ubuntu:24.04 as base-amd64-24.04 -FROM --platform=arm64 nvcr.io/nvidia/l4t-base:35.4.1 as base-arm64-20.04 -FROM --platform=arm64 nvcr.io/nvidia/l4t-base:r36.2.0 as base-arm64-22.04 -# base-arm64-24.04: not supported - -# === dependencies ============================================================= -FROM "base-${TARGETARCH}-${UBUNTU_VERSION}" as dependencies -ARG TARGETARCH -ENV DEBIAN_FRONTEND=noninteractive - -ARG UBUNTU_VERSION -ARG CUDA_VERSION=11.8 -ARG CUDNN_VERSION=8.6.0.163-1 -ARG TENSORRT_VERSION=8.5.3-1 -ARG INSTALL_AS_DEV=0 - -ENV NVIDIA_VISIBLE_DEVICES all -ENV NVIDIA_DRIVER_CAPABILITIES all - -SHELL ["/bin/bash", "-c"] - -# install essentials -RUN apt-get update && \ - apt-get install -y \ - wget \ - gnupg2 && \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y build-essential; fi && \ - rm -rf /var/lib/apt/lists/* - -# set up CUDA apt repositories -RUN if [[ "$TARGETARCH" == "amd64" ]]; then \ - if [[ "$UBUNTU_VERSION" == "20.04" ]]; then \ - CUDA_DEB_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb"; \ - elif [[ "$UBUNTU_VERSION" == "22.04" ]]; then \ - CUDA_DEB_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb"; \ - elif [[ "$UBUNTU_VERSION" == "24.04" ]]; then \ - CUDA_DEB_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb"; \ - fi && \ - wget -q -O /tmp/cuda-keyring_1.0-1_all.deb ${CUDA_DEB_URL}; \ - elif [[ "$TARGETARCH" == "arm64" ]]; then \ - wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/arm64/cuda-keyring_1.0-1_all.deb; \ - fi && \ - dpkg -i /tmp/cuda-keyring_1.0-1_all.deb && \ - rm -rf /tmp/cuda-keyring_1.0-1_all.deb - -# set up L4T apt repositories (NVIDIA Jetson) -RUN if [[ "$TARGETARCH" == "arm64" ]]; then \ - echo "deb https://repo.download.nvidia.com/jetson/common r35.4 main" >> /etc/apt/sources.list && \ - echo "deb https://repo.download.nvidia.com/jetson/t194 r35.4 main" >> /etc/apt/sources.list && \ - apt-key adv --fetch-key http://repo.download.nvidia.com/jetson/jetson-ota-public.asc && \ - mkdir -p /opt/nvidia/l4t-packages/ && \ - touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall && \ - rm -rf /var/lib/apt/lists/* ; \ - fi - -# install CUDA -RUN apt-get update && \ - if [[ "$TARGETARCH" == "amd64" ]]; then \ - apt-get install -y cuda-libraries-${CUDA_VERSION/./-}; \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y cuda-toolkit-${CUDA_VERSION/./-} cuda-demo-suite-${CUDA_VERSION/./-}; fi \ - elif [[ "$TARGETARCH" == "arm64" ]]; then \ - echo "N" | apt-get install -y cuda-runtime-${CUDA_VERSION/./-}; \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then apt-get install -y cuda-toolkit-${CUDA_VERSION/./-}; fi \ - fi && \ - echo "export PATH=/usr/local/cuda/bin:$PATH" >> ~/.bashrc && \ - rm -rf /var/lib/apt/lists/* - -# install cuDNN -RUN --mount=type=bind,source=cudnn-local-repo-${TARGETARCH}.deb,target=/cudnn-local-repo.deb,ro \ - gpg_key=$(dpkg -i cudnn-local-repo.deb | grep -oP "(?<=cp )[^ ]+(?= )") && \ - cp ${gpg_key} /usr/share/keyrings/ && \ - CUDNN_MAJOR_VERSION=${CUDNN_VERSION%%.*} && \ - apt-get update && \ - apt-get install -y libcudnn${CUDNN_MAJOR_VERSION}=${CUDNN_VERSION}+cuda${CUDA_VERSION} && \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then \ - apt-get install -y libcudnn${CUDNN_MAJOR_VERSION}-dev=${CUDNN_VERSION}+cuda${CUDA_VERSION}; \ - fi && \ - rm -rf /var/lib/apt/lists/* - -# install TensorRT -RUN --mount=type=bind,source=nv-tensorrt-local-repo-${TARGETARCH}.deb,target=/nv-tensorrt-local-repo.deb,ro \ - gpg_key=$(dpkg -i nv-tensorrt-local-repo.deb | grep -oP "(?<=cp )[^ ]+(?= )") && \ - cp ${gpg_key} /usr/share/keyrings/ && \ - TENSORRT_MAJOR_VERSION=${TENSORRT_VERSION%%.*} && \ - if [[ "$TENSORRT_VERSION" == "10.0.1.6-1" ]]; then \ - CUDA_VERSION_TENSORRT="12.4"; \ - else \ - CUDA_VERSION_TENSORRT=${CUDA_VERSION}; \ - fi && \ - apt-get update && \ - apt-get install -y \ - libnvinfer${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT} \ - libnvinfer-plugin${TENSORRT_MAJOR_VERSION}=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT} && \ - if [[ "$INSTALL_AS_DEV" == "1" ]]; then \ - apt-get install -y \ - libnvinfer-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT} \ - libnvinfer-plugin-dev=${TENSORRT_VERSION}+cuda${CUDA_VERSION_TENSORRT}; \ - fi && \ - rm -rf /var/lib/apt/lists/* - -# container startup setup -CMD ["bash"] diff --git a/cuda/README.md b/cuda/README.md deleted file mode 100644 index 6089fe0..0000000 --- a/cuda/README.md +++ /dev/null @@ -1,35 +0,0 @@ -## Docker Images for CUDA, cuDNN, TensorRT - -The Dockerfile in this directory can be used to build Docker images including arbitrary versions of CUDA, cuDNN, and TensorRT, either runtime-only or including dev-libraries. The images are well suited as base images for other Dockerfiles. In this repository, they are used as base images for the machine-learning enabled ROS Docker images. - -### Why not use `nvidia/cuda` or `nvcr.io/nvidia/tensorrt`? - -NVIDIA releases official CUDA-related Docker images on both DockerHub (e.g., [`nvidia/cuda`](https://hub.docker.com/r/nvidia/cuda)) and their own NGC (e.g., [`nvcr.io/nvidia/tensorrt`](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tensorrt)). The former offers a variety of different CUDA versions including cuDNN installations, but no support for TensorRT. The latter offers images with CUDA, cuDNN, and TensorRT installed, but uses a monthly update cycle containing only specific versions of those libraries. In contrast, this Dockerfile can be used to build multi-arch combinations of arbitrary CUDA, cuDNN, and TensorRT versions, giving more flexibility. - -### Available Images - -| Tag | Arch | Ubuntu | CUDA | cuDNN | TensorRT | -| ------------------------------------ | :------------: | :-----: | :-----: | :---: | :------: | -| `11.8-cudnn-trt-ubuntu20.04[-devel]` | amd64
arm64 | 20.04.6 | 11.8.89 | 8.6.0 | 8.5.3 | -| `11.8-cudnn-trt-ubuntu22.04[-devel]` | amd64 | 22.04.2 | 11.8.89 | 8.6.0 | 8.5.3 | - -### Build - -1. Download a cuDNN installer deb-package from [NVIDIA's download page](https://developer.nvidia.com/rdp/cudnn-archive) (login required). -2. Place the cuDNN installer deb-package in this directory and rename it to `cudnn-local-repo-$(dpkg --print-architecture).deb`. -3. Download a TensorRT installer deb-package from [NVIDIA's download page](https://developer.nvidia.com/tensorrt-download) (login required). -4. Place the cuDNN installer deb-package in this directory and rename it to `nv-tensorrt-local-repo-$(dpkg --print-architecture).deb`. -5. Build the Docker image with below command. - -```bash -docker buildx build \ - --load \ - --platform $(uname)/$(uname -m) \ - --build-arg UBUNTU_VERSION=$UBUNTU_VERSION \ - --build-arg CUDA_VERSION=$CUDA_VERSION \ - --build-arg CUDNN_VERSION=$CUDNN_VERSION \ - --build-arg TENSORRT_VERSION=$TENSORRT_VERSION \ - --build-arg INSTALL_AS_DEV=$INSTALL_AS_DEV \ - --tag rwthika/cuda:$CUDA_VERSION-cudnn-trt-ubuntu$UBUNTU_VERSION \ - . -``` From 364fd2c03292747be08d9dbf82eb1ab6e48ccd64 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Fri, 23 Aug 2024 14:29:35 +0200 Subject: [PATCH 43/64] use older tensorrt base image for ubuntu 20.04 (amd64) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cacfdb8..6eabc6d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,7 @@ FROM --platform=arm64 nvcr.io/nvidia/l4t-cuda:12.2.12-runtime AS base-cuda-ubunt # no l4t-cuda image for ubuntu24 available # === tensorrt base images ======================================================================== -FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.04-py3 AS base-tensorrt-ubuntu20.04-amd64 +FROM --platform=amd64 nvcr.io/nvidia/tensorrt:21.08-py3 AS base-tensorrt-ubuntu20.04-amd64 FROM --platform=amd64 nvcr.io/nvidia/tensorrt:23.09-py3 AS base-tensorrt-ubuntu22.04-amd64 # no tensorrt image for ubuntu24 available From 222644ee9c5d498928cf42968463fde8db48f610 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Fri, 23 Aug 2024 14:29:55 +0200 Subject: [PATCH 44/64] add cuda libs to tensorrt images --- Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Dockerfile b/Dockerfile index 6eabc6d..84f5fcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,12 +51,19 @@ SHELL ["/bin/bash", "-c"] USER root +ARG BASE_IMAGE_TYPE ARG TARGETARCH ARG UBUNTU_VERSION RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" && $BASE_IMAGE_TYPE != "" ]]; then \ # bug in base image -> replace line in /etc/apt/sources.list to use "r36.3" instead of "r36.0" sed -i 's/https:\/\/repo.download.nvidia.com\/jetson\/common r36.0 main/https:\/\/repo.download.nvidia.com\/jetson\/common r36.3 main/g' /etc/apt/sources.list && \ echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list; \ + elif [[ $TARGETARCH == "amd64" && $BASE_IMAGE_TYPE == "-tensorrt" ]]; then \ + # add cuda apt repository for tensorrt base images + echo "HI" && \ + wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb && \ + dpkg -i /tmp/cuda-keyring_1.0-1_all.deb && \ + rm -rf /tmp/cuda-keyring_1.0-1_all.deb; \ fi # install essentials via apt From 7ea045187390bd5e50775f32d4b3f1aee734f2d5 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Fri, 23 Aug 2024 14:37:49 +0200 Subject: [PATCH 45/64] add yml files for separate ubuntu versions and --- .gitlab-ci/os/.ubuntu20.yml | 5 +++++ .gitlab-ci/os/.ubuntu22.yml | 5 +++++ .gitlab-ci/os/.ubuntu24.yml | 10 ++++++++++ .gitlab-ci/ros-noetic/.ros-noetic.yml | 7 +++---- .gitlab-ci/ros2-humble/.ros2-humble.yml | 9 ++++----- .gitlab-ci/ros2-iron/.ros2-iron.yml | 7 +++---- .gitlab-ci/ros2-jazzy/.ros2-jazzy.yml | 12 +++--------- .gitlab-ci/ros2-rolling/.ros2-rolling.yml | 7 +++---- 8 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 .gitlab-ci/os/.ubuntu20.yml create mode 100644 .gitlab-ci/os/.ubuntu22.yml create mode 100644 .gitlab-ci/os/.ubuntu24.yml diff --git a/.gitlab-ci/os/.ubuntu20.yml b/.gitlab-ci/os/.ubuntu20.yml new file mode 100644 index 0000000..7216d39 --- /dev/null +++ b/.gitlab-ci/os/.ubuntu20.yml @@ -0,0 +1,5 @@ +variables: + UBUNTU_VERSION: "20.04" + _TF_VERSION: 2.12.0 + _TORCH_VERSION: 2.1.0 + _TRITON_VERSION: 2.48.0 \ No newline at end of file diff --git a/.gitlab-ci/os/.ubuntu22.yml b/.gitlab-ci/os/.ubuntu22.yml new file mode 100644 index 0000000..4a3df86 --- /dev/null +++ b/.gitlab-ci/os/.ubuntu22.yml @@ -0,0 +1,5 @@ +variables: + UBUNTU_VERSION: "22.04" + _TF_VERSION: 2.16.1 + _TORCH_VERSION: 2.4.0 + _TRITON_VERSION: 2.48.0 \ No newline at end of file diff --git a/.gitlab-ci/os/.ubuntu24.yml b/.gitlab-ci/os/.ubuntu24.yml new file mode 100644 index 0000000..3d7a50f --- /dev/null +++ b/.gitlab-ci/os/.ubuntu24.yml @@ -0,0 +1,10 @@ +variables: + UBUNTU_VERSION: "24.04" + _TF_VERSION: 2.16.1 + _TORCH_VERSION: 2.4.0 + _TRITON_VERSION: 2.48.0 + DISABLE_TENSORRT: "true" + DISABLE_TORCH: "true" + DISABLE_TF: "true" + DISABLE_ML: "true" + DISABLE_ML_ARM64: "true" \ No newline at end of file diff --git a/.gitlab-ci/ros-noetic/.ros-noetic.yml b/.gitlab-ci/ros-noetic/.ros-noetic.yml index 533876d..79f4832 100644 --- a/.gitlab-ci/ros-noetic/.ros-noetic.yml +++ b/.gitlab-ci/ros-noetic/.ros-noetic.yml @@ -1,8 +1,7 @@ +include: + - .gitlab-ci/os/.ubuntu20.yml + variables: - UBUNTU_VERSION: "20.04" ROS_VERSION: 1 ROS_VERSION_NAME: "ros" ROS_DISTRO: noetic - _TF_VERSION: 2.12.0 - _TORCH_VERSION: 2.1.0 - _TRITON_VERSION: 2.48.0 diff --git a/.gitlab-ci/ros2-humble/.ros2-humble.yml b/.gitlab-ci/ros2-humble/.ros2-humble.yml index 5146f38..21c74c4 100644 --- a/.gitlab-ci/ros2-humble/.ros2-humble.yml +++ b/.gitlab-ci/ros2-humble/.ros2-humble.yml @@ -1,8 +1,7 @@ +include: + - .gitlab-ci/os/.ubuntu22.yml + variables: - UBUNTU_VERSION: "22.04" ROS_VERSION: 2 ROS_VERSION_NAME: "ros2" - ROS_DISTRO: humble - _TF_VERSION: 2.16.1 - _TORCH_VERSION: 2.4.0 - _TRITON_VERSION: 2.48.0 \ No newline at end of file + ROS_DISTRO: humble \ No newline at end of file diff --git a/.gitlab-ci/ros2-iron/.ros2-iron.yml b/.gitlab-ci/ros2-iron/.ros2-iron.yml index 147e6a5..8c59da7 100644 --- a/.gitlab-ci/ros2-iron/.ros2-iron.yml +++ b/.gitlab-ci/ros2-iron/.ros2-iron.yml @@ -1,8 +1,7 @@ +include: + - .gitlab-ci/os/.ubuntu22.yml + variables: - UBUNTU_VERSION: "22.04" ROS_VERSION: 2 ROS_VERSION_NAME: "ros2" ROS_DISTRO: iron - _TF_VERSION: 2.16.1 - _TORCH_VERSION: 2.4.0 - _TRITON_VERSION: 2.48.0 diff --git a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml index a81593a..798aa72 100644 --- a/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml +++ b/.gitlab-ci/ros2-jazzy/.ros2-jazzy.yml @@ -1,13 +1,7 @@ +include: + - .gitlab-ci/os/.ubuntu24.yml + variables: - UBUNTU_VERSION: "24.04" ROS_VERSION: 2 ROS_VERSION_NAME: ros2 ROS_DISTRO: jazzy - _TF_VERSION: 2.16.1 - _TORCH_VERSION: 2.4.0 - _TRITON_VERSION: 2.48.0 - DISABLE_TENSORRT: "true" - DISABLE_TORCH: "true" - DISABLE_TF: "true" - DISABLE_ML: "true" - DISABLE_ML_ARM64: "true" diff --git a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml index 8cdec8f..5fd10a3 100644 --- a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml +++ b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml @@ -1,8 +1,7 @@ +include: + - .gitlab-ci/os/.ubuntu20.yml + variables: - UBUNTU_VERSION: "20.04" ROS_VERSION: 2 ROS_VERSION_NAME: "ros2" ROS_DISTRO: rolling - _TF_VERSION: 2.12.0 - _TORCH_VERSION: 2.1.0 - _TRITON_VERSION: 2.48.0 From d3d37e6c2c65fcd85ac7629ed9ab67d89a507059 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Fri, 23 Aug 2024 14:39:08 +0200 Subject: [PATCH 46/64] build rolling with ubuntu24 --- .gitlab-ci/ros2-rolling/.ros2-rolling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml index 5fd10a3..334aa76 100644 --- a/.gitlab-ci/ros2-rolling/.ros2-rolling.yml +++ b/.gitlab-ci/ros2-rolling/.ros2-rolling.yml @@ -1,5 +1,5 @@ include: - - .gitlab-ci/os/.ubuntu20.yml + - .gitlab-ci/os/.ubuntu24.yml variables: ROS_VERSION: 2 From 4e7380bedfd24af4d044755001dac76c6b204404 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Fri, 23 Aug 2024 14:40:14 +0200 Subject: [PATCH 47/64] fix version information for ROS 1 --- .version_information.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.version_information.sh b/.version_information.sh index 444915d..7cc8801 100755 --- a/.version_information.sh +++ b/.version_information.sh @@ -5,7 +5,7 @@ eval $(cat /etc/os-release | grep ^VERSION=) ARCH=$(uname -m) -if [[ -z "$RMW_IMPLEMENTATION" ]]; then +if [[ -z "$RMW_IMPLEMENTATION" && $ROS_DISTRO != "noetic" ]]; then if ros2 pkg list | grep -q "rmw_fastrtps_cpp"; then export RMW_IMPLEMENTATION=rmw_fastrtps_cpp fi From c03b3d83db581c913995fa6dd4de66536ba0f182 Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Fri, 23 Aug 2024 20:31:57 +0200 Subject: [PATCH 48/64] add script to print version table --- utils/.gitignore | 1 + utils/print_image_versions.py | 74 +++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 utils/.gitignore create mode 100755 utils/print_image_versions.py diff --git a/utils/.gitignore b/utils/.gitignore new file mode 100644 index 0000000..7a3c7d1 --- /dev/null +++ b/utils/.gitignore @@ -0,0 +1 @@ +images.txt diff --git a/utils/print_image_versions.py b/utils/print_image_versions.py new file mode 100755 index 0000000..81624e3 --- /dev/null +++ b/utils/print_image_versions.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 + +import argparse +import os +import subprocess +import tqdm + +VERSION_GETTER_COMMANDS = { + "Arch": "dpkg --print-architecture", + "Ubuntu": "lsb_release -d | awk '{print \$3}'", + "Python": "python --version | awk '{print \$2}'", + "ROS": "echo \$ROS_DISTRO", + "ROS Package": "(dpkg -l | grep ros-\$ROS_DISTRO-desktop-full || dpkg -l | grep ros-\$ROS_DISTRO-ros-base || dpkg -l | grep ros-\$ROS_DISTRO-ros-core) | awk '{print \$2}' | cut -d- -f3-", + "CMake": "cmake --version | grep version | awk '{print \$3}'", + "CUDA": "dpkg -l 2> /dev/null | grep -E 'cuda-cudart-[0-9]' | awk '{ print \$3 }' | cut -d+ -f1 | cut -d- -f1", + "cuDNN": "dpkg -l 2> /dev/null | grep -E 'libcudnn[0-9] ' | awk '{ print \$3 }' | cut -d+ -f1 | cut -d- -f1", + "TensorRT": "dpkg -l 2> /dev/null | grep -E 'libnvinfer[0-9] ' | awk '{ print \$3 }' | cut -d+ -f1 | cut -d- -f1", + "Triton": "echo \$TRITON_VERSION", + "PyTorch": "python -c 'exec(\\\"try:\\n import torch; print(torch.__version__);\\n\\rexcept ImportError:\\n pass\\\")' | cut -d+ -f1 | cut -d- -f1", + "TensorFlow": "export TF_CPP_MIN_LOG_LEVEL='1' && python -c 'exec(\\\"try:\\n import os; import tensorflow as tf; print(tf.__version__);\\n\\rexcept ImportError:\\n pass\\\")' | cut -d+ -f1 | cut -d- -f1", +} + +def parse_arguments(): + parser = argparse.ArgumentParser(description="Prints tool versions for docker-ros-ml-images") + parser.add_argument("images", help="File listing Docker images") + return parser.parse_args() + +def get_image_list(file_path): + with open(file_path, "r") as file: + return [line.strip() for line in file if line.strip()] + +def get_tool_versions(image_name): + result = {} + for tool, command in VERSION_GETTER_COMMANDS.items(): + try: + output = subprocess.check_output( + f"docker run --rm {image_name} bash -c \"{command}\"", + shell=True, + stderr=subprocess.STDOUT + ) + single_line_output = "\\n".join(output.decode("utf-8").strip().splitlines()) + if single_line_output: + result[tool] = single_line_output + except subprocess.CalledProcessError as e: + result[tool] = f"Error: {e.output.decode('utf-8').strip()}" + return result + +def print_markdown_table(data): + headers = ["Tag"] + list(VERSION_GETTER_COMMANDS.keys()) + header_line = " | ".join(headers) + separator_line = " | ".join(["---"] * len(headers)) + print(header_line) + print(separator_line) + for image, versions in data.items(): + row = [image] + [versions.get(tool, "-") for tool in VERSION_GETTER_COMMANDS] + print(" | ".join(row)) + +def main(): + args = parse_arguments() + image_list_file = args.images + if not os.path.exists(image_list_file): + print(f"Error: File {image_list_file} not found.") + return + images = get_image_list(image_list_file) + all_versions = {} + with tqdm.tqdm(images, desc="Getting info") as pbar: + for image in pbar: + pbar.set_postfix(image=image) + all_versions[image] = get_tool_versions(image) + print("") + print_markdown_table(all_versions) + +if __name__ == "__main__": + main() From 95908fe141dfdad12b39019e3232de125d5937a3 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Mon, 26 Aug 2024 15:22:18 +0200 Subject: [PATCH 49/64] improve generation of image version table --- .vscode/launch.json | 32 +++++++++++++ utils/.gitignore | 1 + ...e_versions.py => export_image_versions.py} | 30 +++++++------ utils/generate_table.py | 45 +++++++++++++++++++ 4 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 .vscode/launch.json rename utils/{print_image_versions.py => export_image_versions.py} (75%) create mode 100755 utils/generate_table.py diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..9e496e4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,32 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "export_image_versions (amd64)", + "type": "debugpy", + "request": "launch", + "program": "utils/print_image_versions.py", + "console": "integratedTerminal", + "args": ["utils/images.txt", "--arch", "amd64"], + "justMyCode": true + }, + { + "name": "export_image_versions (arm64)", + "type": "debugpy", + "request": "launch", + "program": "utils/print_image_versions.py", + "console": "integratedTerminal", + "args": ["utils/images.txt", "--arch", "arm64"], + "justMyCode": true + }, + { + "name": "generate_table", + "type": "debugpy", + "request": "launch", + "program": "utils/generate_table.py", + "console": "integratedTerminal", + "args": ["utils/image_versions-amd64.csv", "utils/image_versions-arm64.csv"], + "justMyCode": true + } + ] +} \ No newline at end of file diff --git a/utils/.gitignore b/utils/.gitignore index 7a3c7d1..810452c 100644 --- a/utils/.gitignore +++ b/utils/.gitignore @@ -1 +1,2 @@ images.txt +*.csv diff --git a/utils/print_image_versions.py b/utils/export_image_versions.py similarity index 75% rename from utils/print_image_versions.py rename to utils/export_image_versions.py index 81624e3..f380bfb 100755 --- a/utils/print_image_versions.py +++ b/utils/export_image_versions.py @@ -4,6 +4,7 @@ import os import subprocess import tqdm +import csv VERSION_GETTER_COMMANDS = { "Arch": "dpkg --print-architecture", @@ -20,14 +21,17 @@ "TensorFlow": "export TF_CPP_MIN_LOG_LEVEL='1' && python -c 'exec(\\\"try:\\n import os; import tensorflow as tf; print(tf.__version__);\\n\\rexcept ImportError:\\n pass\\\")' | cut -d+ -f1 | cut -d- -f1", } +SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) + def parse_arguments(): parser = argparse.ArgumentParser(description="Prints tool versions for docker-ros-ml-images") parser.add_argument("images", help="File listing Docker images") + parser.add_argument("--arch", help="Architecture to filter images", choices=["amd64", "arm64"], required=True) return parser.parse_args() -def get_image_list(file_path): +def get_image_list(file_path, arch): with open(file_path, "r") as file: - return [line.strip() for line in file if line.strip()] + return [line.strip() for line in file if line.strip().endswith(f"-{arch}")] def get_tool_versions(image_name): result = {} @@ -45,15 +49,14 @@ def get_tool_versions(image_name): result[tool] = f"Error: {e.output.decode('utf-8').strip()}" return result -def print_markdown_table(data): - headers = ["Tag"] + list(VERSION_GETTER_COMMANDS.keys()) - header_line = " | ".join(headers) - separator_line = " | ".join(["---"] * len(headers)) - print(header_line) - print(separator_line) - for image, versions in data.items(): - row = [image] + [versions.get(tool, "-") for tool in VERSION_GETTER_COMMANDS] - print(" | ".join(row)) +def export_to_csv(data, file_path): + with open(file_path, 'w') as csvfile: + field_names = ["Tag"] + list(VERSION_GETTER_COMMANDS.keys()) + writer = csv.DictWriter(csvfile, fieldnames = field_names) + writer.writeheader() + for image in data: + short_image = image.split("/")[-1] + writer.writerow({"Tag": short_image, **data[image]}) def main(): args = parse_arguments() @@ -61,14 +64,13 @@ def main(): if not os.path.exists(image_list_file): print(f"Error: File {image_list_file} not found.") return - images = get_image_list(image_list_file) + images = get_image_list(image_list_file, args.arch) all_versions = {} with tqdm.tqdm(images, desc="Getting info") as pbar: for image in pbar: pbar.set_postfix(image=image) all_versions[image] = get_tool_versions(image) - print("") - print_markdown_table(all_versions) + export_to_csv(all_versions, os.path.join(SCRIPT_PATH, f"image_versions-{args.arch}.csv")) if __name__ == "__main__": main() diff --git a/utils/generate_table.py b/utils/generate_table.py new file mode 100755 index 0000000..45dc48a --- /dev/null +++ b/utils/generate_table.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import argparse +import os +import pandas as pd + +SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) + +def parse_arguments(): + parser = argparse.ArgumentParser(description="Prints tool versions for docker-ros-ml-images") + parser.add_argument("version_tables", nargs='+', help="List of csv files with version tables") + return parser.parse_args() + +def merge_tables(tables) -> pd.DataFrame: + all_tables = [] + for table in tables: + if not os.path.exists(table): + print(f"Error: File {table} not found.") + return + all_tables.append(pd.read_csv(table)) + merged_table = pd.concat(all_tables, sort=False) + merged_table = merged_table.drop_duplicates() + return merged_table + +def print_markdown_table(data: pd.DataFrame): + headers = list(data.columns) + header_line = " | ".join(headers) + separator_line = " | ".join(["---"] * len(headers)) + print(header_line) + print(separator_line) + + for index, row in data.iterrows(): + print(" | ".join(row.values.astype(str))) + +def main(): + args = parse_arguments() + version_information = merge_tables(args.version_tables) + md_table = version_information.to_markdown(index=False) + print(md_table) + print("\n\n") + print_markdown_table(version_information) + + +if __name__ == "__main__": + main() From 0b8fb5e48bd588dfc823bafb2c7d492a613bf416 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Mon, 26 Aug 2024 15:25:43 +0200 Subject: [PATCH 50/64] improvements for cuda apt lists --- Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 84f5fcb..d38628e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,11 +56,13 @@ ARG TARGETARCH ARG UBUNTU_VERSION RUN if [[ $TARGETARCH == "arm64" && $UBUNTU_VERSION == "22.04" && $BASE_IMAGE_TYPE != "" ]]; then \ # bug in base image -> replace line in /etc/apt/sources.list to use "r36.3" instead of "r36.0" + # touch: https://forums.balena.io/t/getting-linux-for-tegra-into-a-container-on-balena-os/179421/20 sed -i 's/https:\/\/repo.download.nvidia.com\/jetson\/common r36.0 main/https:\/\/repo.download.nvidia.com\/jetson\/common r36.3 main/g' /etc/apt/sources.list && \ - echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list; \ + echo "deb https://repo.download.nvidia.com/jetson/t234 r36.3 main" >> /etc/apt/sources.list && \ + mkdir -p /opt/nvidia/l4t-packages/ && \ + touch /opt/nvidia/l4t-packages/.nv-l4t-disable-boot-fw-update-in-preinstall; \ elif [[ $TARGETARCH == "amd64" && $BASE_IMAGE_TYPE == "-tensorrt" ]]; then \ # add cuda apt repository for tensorrt base images - echo "HI" && \ wget -q -O /tmp/cuda-keyring_1.0-1_all.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${UBUNTU_VERSION/./}/x86_64/cuda-keyring_1.0-1_all.deb && \ dpkg -i /tmp/cuda-keyring_1.0-1_all.deb && \ rm -rf /tmp/cuda-keyring_1.0-1_all.deb; \ From 9c617256e2a0d7d1e1d9097d081f8b84ee8bee9b Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Mon, 26 Aug 2024 18:18:39 +0200 Subject: [PATCH 51/64] finalize version printing utils --- utils/export_image_versions.py | 8 +++--- utils/generate_table.py | 45 ----------------------------- utils/generate_version_table.py | 51 +++++++++++++++++++++++++++++++++ utils/requirements.txt | 2 ++ 4 files changed, 57 insertions(+), 49 deletions(-) delete mode 100755 utils/generate_table.py create mode 100755 utils/generate_version_table.py create mode 100644 utils/requirements.txt diff --git a/utils/export_image_versions.py b/utils/export_image_versions.py index f380bfb..06f3516 100755 --- a/utils/export_image_versions.py +++ b/utils/export_image_versions.py @@ -49,14 +49,14 @@ def get_tool_versions(image_name): result[tool] = f"Error: {e.output.decode('utf-8').strip()}" return result -def export_to_csv(data, file_path): +def export_to_csv(data, file_path, arch): with open(file_path, 'w') as csvfile: field_names = ["Tag"] + list(VERSION_GETTER_COMMANDS.keys()) writer = csv.DictWriter(csvfile, fieldnames = field_names) writer.writeheader() for image in data: - short_image = image.split("/")[-1] - writer.writerow({"Tag": short_image, **data[image]}) + image_tag = "`" + image.split("/")[-1].replace(f"-{arch}", "") + "`" + writer.writerow({"Tag": image_tag, **data[image]}) def main(): args = parse_arguments() @@ -70,7 +70,7 @@ def main(): for image in pbar: pbar.set_postfix(image=image) all_versions[image] = get_tool_versions(image) - export_to_csv(all_versions, os.path.join(SCRIPT_PATH, f"image_versions-{args.arch}.csv")) + export_to_csv(all_versions, os.path.join(SCRIPT_PATH, f"image_versions-{args.arch}.csv"), args.arch) if __name__ == "__main__": main() diff --git a/utils/generate_table.py b/utils/generate_table.py deleted file mode 100755 index 45dc48a..0000000 --- a/utils/generate_table.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import os -import pandas as pd - -SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) - -def parse_arguments(): - parser = argparse.ArgumentParser(description="Prints tool versions for docker-ros-ml-images") - parser.add_argument("version_tables", nargs='+', help="List of csv files with version tables") - return parser.parse_args() - -def merge_tables(tables) -> pd.DataFrame: - all_tables = [] - for table in tables: - if not os.path.exists(table): - print(f"Error: File {table} not found.") - return - all_tables.append(pd.read_csv(table)) - merged_table = pd.concat(all_tables, sort=False) - merged_table = merged_table.drop_duplicates() - return merged_table - -def print_markdown_table(data: pd.DataFrame): - headers = list(data.columns) - header_line = " | ".join(headers) - separator_line = " | ".join(["---"] * len(headers)) - print(header_line) - print(separator_line) - - for index, row in data.iterrows(): - print(" | ".join(row.values.astype(str))) - -def main(): - args = parse_arguments() - version_information = merge_tables(args.version_tables) - md_table = version_information.to_markdown(index=False) - print(md_table) - print("\n\n") - print_markdown_table(version_information) - - -if __name__ == "__main__": - main() diff --git a/utils/generate_version_table.py b/utils/generate_version_table.py new file mode 100755 index 0000000..4c2f1fb --- /dev/null +++ b/utils/generate_version_table.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 + +import argparse +import os +from typing import Dict + +import pandas as pd + +SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) + +def parse_arguments(): + parser = argparse.ArgumentParser(description="Prints tool versions for docker-ros-ml-images") + parser.add_argument("version_tables", nargs='+', help="List of csv files with version tables") + return parser.parse_args() + +def merge_tables(tables) -> Dict[str, pd.DataFrame]: + all_tables = [] + for table in tables: + if not os.path.exists(table): + print(f"Error: File {table} not found.") + return + all_tables.append(pd.read_csv(table)) + merged_table = pd.concat(all_tables, sort=False) # concat tables + merged_table = merged_table.fillna("-") # replace nan by - + merged_table = merged_table.groupby("Tag").agg(lambda x: "
".join([str(e) for e in x]) if len(set(x)) > 1 else str(x.iloc[0])).reset_index() # group by tag, keep unique values joined by
+ merged_table["Repo"] = merged_table["Tag"].str.split(":").str[0].str.replace("`", "") # extract repo name + repo_tables = merged_table.groupby("Repo") + table_by_repo = {repo: table.drop(columns=["Repo"]) for repo, table in repo_tables} + return table_by_repo + +def print_markdown_table(data: pd.DataFrame): + headers = list(data.columns) + header_line = " | ".join(headers) + separator_line = ":---" + " | " + " | ".join([":---:"] * (len(headers)-1)) + print(header_line) + print(separator_line) + for index, row in data.iterrows(): + print(" | ".join(row.values.astype(str))) + +def main(): + args = parse_arguments() + table_by_repo = merge_tables(args.version_tables) + for repo, table in table_by_repo.items(): + print(f"### {repo}") + print("") + print_markdown_table(table) + print("") + + +if __name__ == "__main__": + main() diff --git a/utils/requirements.txt b/utils/requirements.txt new file mode 100644 index 0000000..9da9e48 --- /dev/null +++ b/utils/requirements.txt @@ -0,0 +1,2 @@ +pandas +tqdm \ No newline at end of file From 2f2f2589e4e97a2772b8edefdd9d13c90df7f57b Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Mon, 26 Aug 2024 18:57:03 +0200 Subject: [PATCH 52/64] enable bash completion in container --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index d38628e..ee5c290 100644 --- a/Dockerfile +++ b/Dockerfile @@ -73,6 +73,7 @@ RUN apt-get update && \ apt-get install -y \ bsdmainutils \ build-essential \ + bash-completion \ curl \ dirmngr \ gdb \ @@ -98,6 +99,9 @@ RUN apt-get update && \ RUN if [[ $UBUNTU_VERSION == "24.04" ]]; then python -m pip config --global set global.break-system-packages true; \ else python -m pip install --upgrade pip; fi +# enable bash completion +RUN sed -i '/^#if \[ -f \/etc\/bash_completion \]/,/^#fi/ s/^#//' ~/.bashrc + # install more essentials RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ apt-get update && \ From 2406ea817e6b9328d63a0c7291a5252741892a9e Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Mon, 26 Aug 2024 18:57:37 +0200 Subject: [PATCH 53/64] bring back all pipeline jobs --- .gitlab-ci.yml | 210 ++++++++++++++++++++++++------------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 65da52e..f916176 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,27 +25,27 @@ ros-noetic-ros-core: include: .gitlab-ci/ros-noetic/ros-noetic-ros-core.yml strategy: depend -# ros-noetic-ros-base: -# stage: ROS 1 Noetic -# rules: -# - if: $ROS_DISTROS =~ /.*noetic.*/ -# needs: -# - job: ros-noetic-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml -# strategy: depend - -# ros-noetic-desktop-full: -# stage: ROS 1 Noetic -# rules: -# - if: $ROS_DISTROS =~ /.*noetic.*/ -# needs: -# - job: ros-noetic-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml -# strategy: depend +ros-noetic-ros-base: + stage: ROS 1 Noetic + rules: + - if: $ROS_DISTROS =~ /.*noetic.*/ + needs: + - job: ros-noetic-ros-core + optional: true + trigger: + include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml + strategy: depend + +ros-noetic-desktop-full: + stage: ROS 1 Noetic + rules: + - if: $ROS_DISTROS =~ /.*noetic.*/ + needs: + - job: ros-noetic-ros-base + optional: true + trigger: + include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml + strategy: depend ros2-humble-ros-core: @@ -57,27 +57,27 @@ ros2-humble-ros-core: include: .gitlab-ci/ros2-humble/ros2-humble-ros-core.yml strategy: depend -# ros2-humble-ros-base: -# stage: ROS 2 Humble -# rules: -# - if: $ROS_DISTROS =~ /.*humble.*/ -# needs: -# - job: ros2-humble-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml -# strategy: depend - -# ros2-humble-desktop-full: -# stage: ROS 2 Humble -# rules: -# - if: $ROS_DISTROS =~ /.*humble.*/ -# needs: -# - job: ros2-humble-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml -# strategy: depend +ros2-humble-ros-base: + stage: ROS 2 Humble + rules: + - if: $ROS_DISTROS =~ /.*humble.*/ + needs: + - job: ros2-humble-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml + strategy: depend + +ros2-humble-desktop-full: + stage: ROS 2 Humble + rules: + - if: $ROS_DISTROS =~ /.*humble.*/ + needs: + - job: ros2-humble-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml + strategy: depend ros2-iron-ros-core: @@ -89,27 +89,27 @@ ros2-iron-ros-core: include: .gitlab-ci/ros2-iron/ros2-iron-ros-core.yml strategy: depend -# ros2-iron-ros-base: -# stage: ROS 2 Iron -# rules: -# - if: $ROS_DISTROS =~ /.*iron.*/ -# needs: -# - job: ros2-iron-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml -# strategy: depend - -# ros2-iron-desktop-full: -# stage: ROS 2 Iron -# rules: -# - if: $ROS_DISTROS =~ /.*iron.*/ -# needs: -# - job: ros2-iron-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml -# strategy: depend +ros2-iron-ros-base: + stage: ROS 2 Iron + rules: + - if: $ROS_DISTROS =~ /.*iron.*/ + needs: + - job: ros2-iron-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml + strategy: depend + +ros2-iron-desktop-full: + stage: ROS 2 Iron + rules: + - if: $ROS_DISTROS =~ /.*iron.*/ + needs: + - job: ros2-iron-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml + strategy: depend ros2-jazzy-ros-core: @@ -121,27 +121,27 @@ ros2-jazzy-ros-core: include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml strategy: depend -# ros2-jazzy-ros-base: -# stage: ROS 2 Jazzy -# rules: -# - if: $ROS_DISTROS =~ /.*jazzy.*/ -# needs: -# - job: ros2-jazzy-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml -# strategy: depend - -# ros2-jazzy-desktop-full: -# stage: ROS 2 Jazzy -# rules: -# - if: $ROS_DISTROS =~ /.*jazzy.*/ -# needs: -# - job: ros2-jazzy-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml -# strategy: depend +ros2-jazzy-ros-base: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: + - job: ros2-jazzy-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml + strategy: depend + +ros2-jazzy-desktop-full: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: + - job: ros2-jazzy-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml + strategy: depend ros2-rolling-ros-core: @@ -153,24 +153,24 @@ ros2-rolling-ros-core: include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-core.yml strategy: depend -# ros2-rolling-ros-base: -# stage: ROS 2 Rolling -# rules: -# - if: $ROS_DISTROS =~ /.*rolling.*/ -# needs: -# - job: ros2-rolling-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml -# strategy: depend - -# ros2-rolling-desktop: -# stage: ROS 2 Rolling -# rules: -# - if: $ROS_DISTROS =~ /.*rolling.*/ -# needs: -# - job: ros2-rolling-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml -# strategy: depend +ros2-rolling-ros-base: + stage: ROS 2 Rolling + rules: + - if: $ROS_DISTROS =~ /.*rolling.*/ + needs: + - job: ros2-rolling-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml + strategy: depend + +ros2-rolling-desktop: + stage: ROS 2 Rolling + rules: + - if: $ROS_DISTROS =~ /.*rolling.*/ + needs: + - job: ros2-rolling-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml + strategy: depend From b3e67feb8a48beed79b486199995b4608de5b557 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Mon, 26 Aug 2024 22:49:04 +0200 Subject: [PATCH 54/64] install desktop-full also for rolling --- .gitlab-ci/ros-packages/.desktop.yml | 2 -- .../{ros2-rolling-desktop.yml => ros2-rolling-desktop-full.yml} | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 .gitlab-ci/ros-packages/.desktop.yml rename .gitlab-ci/ros2-rolling/{ros2-rolling-desktop.yml => ros2-rolling-desktop-full.yml} (64%) diff --git a/.gitlab-ci/ros-packages/.desktop.yml b/.gitlab-ci/ros-packages/.desktop.yml deleted file mode 100644 index 93e4ff5..0000000 --- a/.gitlab-ci/ros-packages/.desktop.yml +++ /dev/null @@ -1,2 +0,0 @@ -variables: - ROS_PACKAGE: desktop diff --git a/.gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml b/.gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml similarity index 64% rename from .gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml rename to .gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml index bb91ab5..66e20cb 100644 --- a/.gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml +++ b/.gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml @@ -1,4 +1,4 @@ include: - .gitlab-ci/.template.yml - .gitlab-ci/ros2-rolling/.ros2-rolling.yml - - .gitlab-ci/ros-packages/.desktop.yml + - .gitlab-ci/ros-packages/.desktop-full.yml From 39d3bcdc86a5e2ec8e77daa305b6502dc600eac3 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Mon, 26 Aug 2024 22:51:58 +0200 Subject: [PATCH 55/64] remove docker-clean rule to enable auto-completion for apt commands --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index ee5c290..586d477 100644 --- a/Dockerfile +++ b/Dockerfile @@ -231,6 +231,9 @@ ENV DOCKER_GID= RUN echo "source /.version_information.sh" >> ~/.bashrc COPY .version_information.sh /.version_information.sh +# remove docker-clean rule to enable auto-completion for apt commands +RUN rm -f /etc/apt/apt.conf.d/docker-clean + # container startup setup ENV WORKSPACE=/docker-ros/ws WORKDIR $WORKSPACE From 035e1f99471706e887b360dcfea0f1446584210f Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Mon, 26 Aug 2024 22:53:38 +0200 Subject: [PATCH 56/64] fix rolling desktop-full job --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f916176..1c8c761 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -164,7 +164,7 @@ ros2-rolling-ros-base: include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml strategy: depend -ros2-rolling-desktop: +ros2-rolling-desktop-full: stage: ROS 2 Rolling rules: - if: $ROS_DISTROS =~ /.*rolling.*/ @@ -172,5 +172,5 @@ ros2-rolling-desktop: - job: ros2-rolling-ros-base optional: true trigger: - include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop.yml + include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml strategy: depend From aaa7d0c61feabedc75d44656e196c0a44eea040c Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Mon, 26 Aug 2024 21:27:48 +0000 Subject: [PATCH 57/64] update readme text --- README.md | 257 +++++++++++++++++++++--------------------------------- 1 file changed, 98 insertions(+), 159 deletions(-) diff --git a/README.md b/README.md index 7f89b46..d329862 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,13 @@ # *docker-ros-ml-images* – Machine Learning-Enabled ROS Docker Images -# TODO: add information for ROS 2 Jazzy -

- - + + +

*docker-ros-ml-images* provides machine learning-enabled ROS Docker images. @@ -24,6 +23,12 @@ We recommend to use *docker-ros-ml-images* in combination with our other tools f - [*docker-run*](https://github.com/ika-rwth-aachen/docker-run) is a CLI tool for simplified interaction with Docker images +## Quick Links to Available Images + +[`ros2`](#rwthikaros2-ros-2) | [`ros2-cuda`](#rwthikaros2-cuda-ros-2-nvidia-cuda) | [`ros2-tensorrt`](#rwthikaros2-tensorrt-ros-2-nvidia-cuda-nvidia-tensorrt) | [`ros2-triton`](#rwthikaros2-triton-ros-2-nvidia-cuda-nvidia-triton-client) | [`ros2-torch`](#rwthikaros2-torch-ros-2-nvidia-cuda-nvidia-tensorrt-pytorch) | [`ros2-tf`](#rwthikaros2-tf-ros-2-nvidia-cuda-nvidia-tensorrt-tensorflow) | [`ros2-ml`](#rwthikaros2-ml-ros-2-nvidia-cuda-nvidia-tensorrt-pytorch-tensorflow) +[`ros`](#rwthikaros-ros) | [`ros-cuda`](#rwthikaros-cuda-ros-nvidia-cuda) | [`ros-tensorrt`](#rwthikaros-tensorrt-ros-nvidia-cuda-nvidia-tensorrt) | [`ros-triton`](#rwthikaros-triton-ros-nvidia-cuda-nvidia-triton-client) | [`ros-torch`](#rwthikaros-torch-ros-nvidia-cuda-nvidia-tensorrt-pytorch) | [`ros-tf`](#rwthikaros-tf-ros-nvidia-cuda-nvidia-tensorrt-tensorflow) | [`ros-ml`](#rwthikaros-ml-ros-nvidia-cuda-nvidia-tensorrt-pytorch-tensorflow) + + ## Quick Start ```bash @@ -34,15 +39,18 @@ docker run --rm rwthika/ros2-ml:humble \ ## Variations -With *docker-ros-ml-images*, we provide a variety of lightweight multi-arch machine learning-enabled ROS Docker images. Each of the provided Docker images includes support for popular machine learning frameworks in addition to a ROS distribution. Currently, the supported machine learning frameworks are [*PyTorch*](https://pytorch.org/) and [*TensorFlow*](https://www.tensorflow.org/). Since robotic applications are often implemented in C++ instead of Python for performance reasons, we also offer the C++ APIs of both frameworks. Combining the components listed the table below, we have built more than 100 multi-arch images and make them publicly available on [DockerHub](https://hub.docker.com/u/rwthika). In addition to the provided images, we also publish the [generic Dockerfile](./Dockerfile) used to flexibly build images combining the different components. +With *docker-ros-ml-images*, we provide a variety of lightweight multi-arch machine learning-enabled ROS Docker images. Starting with plain ROS images, we offer successively larger ROS base images that also come with [*NVIDIA CUDA*](https://developer.nvidia.com/cuda-toolkit), [*NVIDIA TensorRT*](https://developer.nvidia.com/tensorrt), [*NVIDIA Triton Client*](https://developer.nvidia.com/triton-inference-server), [*PyTorch*](https://pytorch.org/) and/or [*TensorFlow*](https://www.tensorflow.org/) installations. Combining the components listed in the table below, we have built more than 100 multi-arch images and make them publicly available on [DockerHub](https://hub.docker.com/u/rwthika). In addition to the provided images, we also publish the [generic Dockerfile](./Dockerfile) used to flexibly build images combining the different components. | Component | Variations | | ---------------- | -------------------------------------------------------------------- | | ROS Distribution | noetic, humble, iron, jazzy, rolling | | ROS Components | core, base, desktop-full | -| ML Framework | CUDA, PyTorch Python, PyTorch C++, TensorFlow Python, TensorFlow C++ | +| ML Framework | NVIDIA CUDA, NVIDIA TensorRT, NVIDIA Triton Client, PyTorch, TensorFlow | | Architecture | amd64, arm64 | +> [!NOTE] +> Since robotic applications are often implemented in C++ instead of Python for performance reasons, previous releases of our images also shipped with the C++ APIs of PyTorch and TensorFlow. Installing the C++ libraries often involves cumbersome building from source, so we have decided to drop PyTorch/TensorFlow C++ support for more frequent releases. You may still find those images with ML C++ support under the [23.08 release](https://hub.docker.com/r/rwthika/ros2-ml/tags?page=&page_size=&ordering=&name=-v23.08). + ## Image Configuration @@ -59,258 +67,188 @@ The password of the custom user is set to its username (`dockeruser:dockeruser` ## Available Images -### ROS +### ROS 2 -#### [`rwthika/ros`](https://hub.docker.com/r/rwthika/ros) (ROS) +#### [`rwthika/ros2`](https://hub.docker.com/r/rwthika/ros2) (ROS 2) + +
+ + + +
Click to expand + +TODO: table + +
+
+#### [`rwthika/ros2-cuda`](https://hub.docker.com/r/rwthika/ros2-cuda) (ROS 2, NVIDIA CUDA)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :---: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | -| `noetic-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | - | - | - | - | - | - | - | -| `latest`, `noetic`, `noetic-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `noetic-desktop-full` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | - | - | - | - | - | - | - | +TODO: table
-#### [`rwthika/ros-cuda-trt`](https://hub.docker.com/r/rwthika/ros-cuda-trt) (ROS + CUDA + TensorRT) +#### [`rwthika/ros2-tensorrt`](https://hub.docker.com/r/rwthika/ros2-tensorrt) (ROS 2, NVIDIA CUDA, NVIDIA TensorRT)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :-----: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | -| `noetic-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `latest`, `noetic`, `noetic-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `noetic-desktop-full` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | +TODO: table
-#### [`rwthika/ros-torch`](https://hub.docker.com/r/rwthika/ros-torch) (ROS + PyTorch) +#### [`rwthika/ros2-triton`](https://hub.docker.com/r/rwthika/ros2-triton) (ROS 2, NVIDIA CUDA, NVIDIA Triton Client)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ------------------------------------------------ | :------------: | :----------: | :---------: | :---------: | :---------------: | :---------: | :----------: | :--------: | :--------: | :------------: | :---------: | :---------------: | :------------: | -| `noetic-ros-core-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `latest`, `noetic`, `noetic-ros-base-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `noetic-desktop-full-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `noetic-ros-core-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `noetic-ros-base-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `noetic-desktop-full-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `noetic-ros-core-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | noetic
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `noetic-ros-base-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | noetic
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `noetic-desktop-full-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | noetic
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | +TODO: table
-#### [`rwthika/ros-tf`](https://hub.docker.com/r/rwthika/ros-tf) (ROS + TensorFlow) +#### [`rwthika/ros2-torch`](https://hub.docker.com/r/rwthika/ros2-torch) (ROS 2, NVIDIA CUDA, NVIDIA TensorRT, PyTorch)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ---------------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :-----: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | -| `noetic-ros-core-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `latest`, `noetic`, `noetic-ros-base-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `noetic-desktop-full-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `noetic-ros-core-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `noetic-ros-base-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `noetic-desktop-full-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `noetic-ros-core-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `noetic-ros-base-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `noetic-desktop-full-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | +TODO: table
-#### [`rwthika/ros-ml`](https://hub.docker.com/r/rwthika/ros-ml) (ROS + PyTorch + TensorFlow) +#### [`rwthika/ros2-tf`](https://hub.docker.com/r/rwthika/ros2-tf) (ROS 2, NVIDIA CUDA, NVIDIA TensorRT, TensorFlow)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| --------------------------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :-----: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | -| `noetic-ros-core-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `latest`, `noetic`, `noetic-ros-base-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `noetic-desktop-full-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | +TODO: table
-### ROS 2 +#### [`rwthika/ros2-ml`](https://hub.docker.com/r/rwthika/ros2-ml) (ROS 2, NVIDIA CUDA, NVIDIA TensorRT, PyTorch, TensorFlow) -#### [`rwthika/ros2`](https://hub.docker.com/r/rwthika/ros2) (ROS 2) +
+ + + +
Click to expand + +TODO: table + +
+
+ +### ROS + +#### [`rwthika/ros`](https://hub.docker.com/r/rwthika/ros) (ROS)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ------------------------------------- | :------------: | :-----: | :-----: | :-----: | :----------: | :----: | :---: | :---: | :------: | :------------: | :---------: | :---------------: | :------------: | -| `rolling-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | - | - | - | - | - | - | - | -| `rolling`, `rolling-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `rolling-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | - | - | - | - | - | - | - | -| `iron-ros-core` | amd64
arm64 | 22.04.2 | 3.10.12 | iron | ros-core | 3.27.2 | - | - | - | - | - | - | - | -| `iron`, `iron-ros-base` | amd64
arm64 | 22.04.2 | 3.10.12 | iron | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `iron-desktop-full` | amd64
arm64 | 22.04.2 | 3.10.12 | iron | desktop-full | 3.27.2 | - | - | - | - | - | - | - | -| `humble-ros-core` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-core | 3.27.2 | - | - | - | - | - | - | - | -| `latest`, `humble`, `humble-ros-base` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | ros-base | 3.27.2 | - | - | - | - | - | - | - | -| `humble-desktop-full` | amd64
arm64 | 22.04.2 | 3.10.12 | humble | desktop-full | 3.27.2 | - | - | - | - | - | - | - | -| `jazzy-ros-core` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | ros-core | 3.28.3 | - | - | - | - | - | - | - | -| `jazzy`, `jazzy-ros-base` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | ros-base | 3.28.3 | - | - | - | - | - | - | - | -| `jazzy-desktop-full` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | desktop-full | 3.28.3 | - | - | - | - | - | - | - | +TODO: table
-#### [`rwthika/ros2-cuda-trt`](https://hub.docker.com/r/rwthika/ros2-cuda-trt) (ROS 2 + CUDA + TensorRT) +#### [`rwthika/ros-cuda`](https://hub.docker.com/r/rwthika/ros-cuda) (ROS, NVIDIA CUDA)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ------------------------------------- | :------------: | :----------: | :----------: | :---------: | :---------------: | :---------: | :----------: | :--------: | :--------: | :------------: | :---------: | :---------------: | :------------: | -| `rolling-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `rolling`, `rolling-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `rolling-desktop` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | - | -| `iron-ros-core` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `iron`, `iron-ros-base` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `iron-desktop-full` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `humble-ros-core` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `latest`, `humble`, `humble-ros-base` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | -| `humble-desktop-full` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | - | +TODO: table
-#### [`rwthika/ros2-torch`](https://hub.docker.com/r/rwthika/ros2-torch) (ROS 2 + PyTorch) +#### [`rwthika/ros-tensorrt`](https://hub.docker.com/r/rwthika/ros-tensorrt) (ROS, NVIDIA CUDA, NVIDIA TensorRT)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ------------------------------------------------ | :------------: | :----------: | :----------: | :----------: | :---------------: | :---------: | :----------: | :--------: | :--------: | :------------: | :---------: | :---------------: | :------------: | -| `rolling-ros-core-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `rolling`, `rolling-ros-base-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `rolling-desktop-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | - | - | -| `rolling-ros-core-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `rolling-ros-base-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `rolling-desktop-torch2.0.1-py` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | - | - | - | -| `rolling-ros-core-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | rolling
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `rolling-ros-base-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | rolling
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `rolling-desktop-torch2.0.1-cpp` | amd64
- | 20.04.6
- | 3.8.10
- | rolling
- | desktop
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `iron-ros-core-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `iron`, `iron-ros-base-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `iron-desktop-full-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `iron-ros-core-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `iron-ros-base-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `iron-desktop-full-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `iron-ros-core-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `iron-ros-base-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `iron-desktop-full-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `humble-ros-core-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `latest`, `humble`, `humble-ros-base-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `humble-desktop-full-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | - | - | -| `humble-ros-core-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `humble-ros-base-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `humble-desktop-full-torch2.0.1-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | - | - | - | -| `humble-ros-core-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `humble-ros-base-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | -| `humble-desktop-full-torch2.0.1-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | 2.0.1
- | - | - | +TODO: table
-#### [`rwthika/ros2-tf`](https://hub.docker.com/r/rwthika/ros2-tf) (ROS 2 + TensorFlow) +#### [`rwthika/ros-triton`](https://hub.docker.com/r/rwthika/ros-triton) (ROS, NVIDIA CUDA, NVIDIA Triton Client)
- +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| ---------------------------------------------- | :------------: | :----------: | :----------: | :---------: | :---------------: | :---------: | :----------: | :--------: | :--------: | :------------: | :---------: | :---------------: | :------------: | -| `rolling-ros-core-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `rolling`, `rolling-ros-base-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `rolling-desktop-tf2.11.0` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | 2.11.0 | -| `rolling-ros-core-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `rolling-ros-base-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `rolling-desktop-tf2.11.0-py` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | 2.11.0 | - | -| `rolling-ros-core-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `rolling-ros-base-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `rolling-desktop-tf2.11.0-cpp` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | - | - | - | 2.11.0 | -| `iron-ros-core-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `iron`, `iron-ros-base-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `iron-desktop-full-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `iron-ros-core-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `iron-ros-base-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `iron-desktop-full-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `iron-ros-core-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `iron-ros-base-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `iron-desktop-full-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `humble-ros-core-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `latest`, `humble`, `humble-ros-base-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `humble-desktop-full-tf2.11.0` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | 2.11.0
- | -| `humble-ros-core-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `humble-ros-base-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `humble-desktop-full-tf2.11.0-py` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | 2.11.0
- | - | -| `humble-ros-core-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `humble-ros-base-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | -| `humble-desktop-full-tf2.11.0-cpp` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | - | - | - | 2.11.0
- | +TODO: table
-#### [`rwthika/ros2-ml`](https://hub.docker.com/r/rwthika/ros2-ml) (ROS 2 + PyTorch + TensorFlow) +#### [`rwthika/ros-torch`](https://hub.docker.com/r/rwthika/ros-torch) (ROS, NVIDIA CUDA, NVIDIA TensorRT, PyTorch)
- + + +
Click to expand + +TODO: table + +
+
+ +#### [`rwthika/ros-tf`](https://hub.docker.com/r/rwthika/ros-tf) (ROS, NVIDIA CUDA, NVIDIA TensorRT, TensorFlow) + +
+ + + +
Click to expand + +TODO: table + +
+
+ +#### [`rwthika/ros-ml`](https://hub.docker.com/r/rwthika/ros-ml) (ROS, NVIDIA CUDA, NVIDIA TensorRT, PyTorch, TensorFlow) + +
+ +
Click to expand -| Tag | Arch | Ubuntu | Python | ROS | ROS Packages | CMake | CUDA | cuDNN | TensorRT | PyTorch Python | PyTorch C++ | TensorFlow Python | TensorFlow C++ | -| --------------------------------------------------------- | :------------: | :----------: | :----------: | :---------: | :---------------: | :---------: | :----------: | :--------: | :--------: | :------------: | :---------: | :---------------: | :------------: | -| `rolling-ros-core-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-core | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `rolling`, `rolling-ros-base-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | ros-base | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `rolling-desktop-tf2.11.0-torch2.0.1` | amd64
arm64 | 20.04.6 | 3.8.10 | rolling | desktop | 3.27.2 | 11.8.89 | 8.6.0 | 8.5.3 | 2.0.1
2.0.0 | 2.0.1
- | 2.11.0 | 2.11.0 | -| `iron-ros-core-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `iron`, `iron-ros-base-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `iron-desktop-full-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | iron
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `humble-ros-core-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-core
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `latest`, `humble`, `humble-ros-base-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | ros-base
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | -| `humble-desktop-full-tf2.11.0-torch2.0.1` | amd64
- | 22.04.2
- | 3.10.12
- | humble
- | desktop-full
- | 3.27.2
- | 11.8.89
- | 8.6.0
- | 8.5.3
- | 2.0.1
- | 2.0.1
- | 2.11.0
- | 2.11.0
- | +TODO: table
@@ -329,5 +267,6 @@ docker buildx build \ --build-arg ROS_PACKAGE=$ROS_PACKAGE \ --build-arg TORCH_VERSION=$TORCH_VERSION \ --build-arg TF_VERSION=$TF_VERSION \ + --build-arg TRITON_VERSION=$TRITON_VERSION \ --tag $IMAGE . ``` From a26f247b02277bd16e7f854883c6abd3ee820a1f Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Tue, 27 Aug 2024 18:30:28 +0200 Subject: [PATCH 58/64] install requirements for torch 2.4.0 --- Dockerfile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 586d477..c7f0fff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -178,7 +178,13 @@ RUN if [[ -n $TORCH_VERSION ]]; then \ if [[ $UBUNTU_VERSION == "20.04" ]]; then \ pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-${TORCH_VERSION}a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl; \ else \ - pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION}a0+f70bd71a48.nv24.06.15634931-cp310-cp310-linux_aarch64.whl; \ + wget -q -O /tmp/cusparselt-local-tegra-repo-ubuntu2204-0.6.2_1.0-1_arm64.deb https://developer.download.nvidia.com/compute/cusparselt/0.6.2/local_installers/cusparselt-local-tegra-repo-ubuntu2204-0.6.2_1.0-1_arm64.deb && \ + dpkg -i /tmp/cusparselt-local-tegra-repo-ubuntu2204-0.6.2_1.0-1_arm64.deb && \ + mv /var/cusparselt-local-tegra-repo-ubuntu2204-0.6.2/cusparselt-*-keyring.gpg /usr/share/keyrings/ && \ + apt-get update && \ + apt-get install -y cuda-cupti-12-2 libcusparselt0 && \ + rm -rf /var/lib/apt/lists/* && \ + pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION}a0+3bcc3cddb5.nv24.07.16234504-cp310-cp310-linux_aarch64.whl; \ fi; \ fi; \ fi From 7ca511376804b350db3bbd36dd50a49374a7cb75 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 28 Aug 2024 13:03:25 +0200 Subject: [PATCH 59/64] switch to torch 2.3.0 and also install torchvision --- .gitlab-ci/os/.ubuntu22.yml | 2 +- .gitlab-ci/os/.ubuntu24.yml | 2 -- Dockerfile | 15 ++++++++------- README.md | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.gitlab-ci/os/.ubuntu22.yml b/.gitlab-ci/os/.ubuntu22.yml index 4a3df86..6d23a46 100644 --- a/.gitlab-ci/os/.ubuntu22.yml +++ b/.gitlab-ci/os/.ubuntu22.yml @@ -1,5 +1,5 @@ variables: UBUNTU_VERSION: "22.04" _TF_VERSION: 2.16.1 - _TORCH_VERSION: 2.4.0 + _TORCH_VERSION: 2.3.0 _TRITON_VERSION: 2.48.0 \ No newline at end of file diff --git a/.gitlab-ci/os/.ubuntu24.yml b/.gitlab-ci/os/.ubuntu24.yml index 3d7a50f..28c6b52 100644 --- a/.gitlab-ci/os/.ubuntu24.yml +++ b/.gitlab-ci/os/.ubuntu24.yml @@ -1,7 +1,5 @@ variables: UBUNTU_VERSION: "24.04" - _TF_VERSION: 2.16.1 - _TORCH_VERSION: 2.4.0 _TRITON_VERSION: 2.48.0 DISABLE_TENSORRT: "true" DISABLE_TORCH: "true" diff --git a/Dockerfile b/Dockerfile index c7f0fff..1067b94 100644 --- a/Dockerfile +++ b/Dockerfile @@ -168,23 +168,24 @@ ARG UBUNTU_VERSION ARG TORCH_VERSION RUN if [[ -n $TORCH_VERSION ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ - pip3 install torch==${TORCH_VERSION}; \ + pip3 install torch==${TORCH_VERSION} && \ + if [[ "$TORCH_VERSION" == "2.3.0" ]]; then pip3 install torchversion==0.18.0; fi; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install apt-get update && \ - apt-get install -y libopenblas-base && \ + apt-get install -y libopenblas-base libopenmpi-dev libomp-dev && \ rm -rf /var/lib/apt/lists/* ; \ if [[ $UBUNTU_VERSION == "20.04" ]]; then \ pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-${TORCH_VERSION}a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl; \ else \ - wget -q -O /tmp/cusparselt-local-tegra-repo-ubuntu2204-0.6.2_1.0-1_arm64.deb https://developer.download.nvidia.com/compute/cusparselt/0.6.2/local_installers/cusparselt-local-tegra-repo-ubuntu2204-0.6.2_1.0-1_arm64.deb && \ - dpkg -i /tmp/cusparselt-local-tegra-repo-ubuntu2204-0.6.2_1.0-1_arm64.deb && \ - mv /var/cusparselt-local-tegra-repo-ubuntu2204-0.6.2/cusparselt-*-keyring.gpg /usr/share/keyrings/ && \ apt-get update && \ - apt-get install -y cuda-cupti-12-2 libcusparselt0 && \ + apt-get install -y cuda-cupti-12-2 && \ rm -rf /var/lib/apt/lists/* && \ - pip install --no-cache https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-${TORCH_VERSION}a0+3bcc3cddb5.nv24.07.16234504-cp310-cp310-linux_aarch64.whl; \ + wget -q -O /tmp/torch-${TORCH_VERSION}-cp310-cp310-linux_aarch64.whl https://nvidia.box.com/shared/static/mp164asf3sceb570wvjsrezk1p4ftj8t.whl && \ + wget -q -O /tmp/torchvision-0.18.0a0+6043bc2-cp310-cp310-linux_aarch64.whl https://nvidia.box.com/shared/static/xpr06qe6ql3l6rj22cu3c45tz1wzi36p.whl && \ + pip install --no-cache /tmp/torch*.whl && \ + rm -f /tmp/torch*.whl; \ fi; \ fi; \ fi diff --git a/README.md b/README.md index d329862..c5451f1 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - +

From f7f5b36e548c738a6dd915d45ae44744a256819b Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 28 Aug 2024 13:09:11 +0200 Subject: [PATCH 60/64] temp disable base and desktop for final tests --- .gitlab-ci.yml | 210 ++++++++++++++++++++++++------------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1c8c761..c6f3c42 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,27 +25,27 @@ ros-noetic-ros-core: include: .gitlab-ci/ros-noetic/ros-noetic-ros-core.yml strategy: depend -ros-noetic-ros-base: - stage: ROS 1 Noetic - rules: - - if: $ROS_DISTROS =~ /.*noetic.*/ - needs: - - job: ros-noetic-ros-core - optional: true - trigger: - include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml - strategy: depend - -ros-noetic-desktop-full: - stage: ROS 1 Noetic - rules: - - if: $ROS_DISTROS =~ /.*noetic.*/ - needs: - - job: ros-noetic-ros-base - optional: true - trigger: - include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml - strategy: depend +# ros-noetic-ros-base: +# stage: ROS 1 Noetic +# rules: +# - if: $ROS_DISTROS =~ /.*noetic.*/ +# needs: +# - job: ros-noetic-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml +# strategy: depend + +# ros-noetic-desktop-full: +# stage: ROS 1 Noetic +# rules: +# - if: $ROS_DISTROS =~ /.*noetic.*/ +# needs: +# - job: ros-noetic-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml +# strategy: depend ros2-humble-ros-core: @@ -57,27 +57,27 @@ ros2-humble-ros-core: include: .gitlab-ci/ros2-humble/ros2-humble-ros-core.yml strategy: depend -ros2-humble-ros-base: - stage: ROS 2 Humble - rules: - - if: $ROS_DISTROS =~ /.*humble.*/ - needs: - - job: ros2-humble-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml - strategy: depend - -ros2-humble-desktop-full: - stage: ROS 2 Humble - rules: - - if: $ROS_DISTROS =~ /.*humble.*/ - needs: - - job: ros2-humble-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml - strategy: depend +# ros2-humble-ros-base: +# stage: ROS 2 Humble +# rules: +# - if: $ROS_DISTROS =~ /.*humble.*/ +# needs: +# - job: ros2-humble-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml +# strategy: depend + +# ros2-humble-desktop-full: +# stage: ROS 2 Humble +# rules: +# - if: $ROS_DISTROS =~ /.*humble.*/ +# needs: +# - job: ros2-humble-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml +# strategy: depend ros2-iron-ros-core: @@ -89,27 +89,27 @@ ros2-iron-ros-core: include: .gitlab-ci/ros2-iron/ros2-iron-ros-core.yml strategy: depend -ros2-iron-ros-base: - stage: ROS 2 Iron - rules: - - if: $ROS_DISTROS =~ /.*iron.*/ - needs: - - job: ros2-iron-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml - strategy: depend - -ros2-iron-desktop-full: - stage: ROS 2 Iron - rules: - - if: $ROS_DISTROS =~ /.*iron.*/ - needs: - - job: ros2-iron-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml - strategy: depend +# ros2-iron-ros-base: +# stage: ROS 2 Iron +# rules: +# - if: $ROS_DISTROS =~ /.*iron.*/ +# needs: +# - job: ros2-iron-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml +# strategy: depend + +# ros2-iron-desktop-full: +# stage: ROS 2 Iron +# rules: +# - if: $ROS_DISTROS =~ /.*iron.*/ +# needs: +# - job: ros2-iron-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml +# strategy: depend ros2-jazzy-ros-core: @@ -121,27 +121,27 @@ ros2-jazzy-ros-core: include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml strategy: depend -ros2-jazzy-ros-base: - stage: ROS 2 Jazzy - rules: - - if: $ROS_DISTROS =~ /.*jazzy.*/ - needs: - - job: ros2-jazzy-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml - strategy: depend - -ros2-jazzy-desktop-full: - stage: ROS 2 Jazzy - rules: - - if: $ROS_DISTROS =~ /.*jazzy.*/ - needs: - - job: ros2-jazzy-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml - strategy: depend +# ros2-jazzy-ros-base: +# stage: ROS 2 Jazzy +# rules: +# - if: $ROS_DISTROS =~ /.*jazzy.*/ +# needs: +# - job: ros2-jazzy-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml +# strategy: depend + +# ros2-jazzy-desktop-full: +# stage: ROS 2 Jazzy +# rules: +# - if: $ROS_DISTROS =~ /.*jazzy.*/ +# needs: +# - job: ros2-jazzy-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml +# strategy: depend ros2-rolling-ros-core: @@ -153,24 +153,24 @@ ros2-rolling-ros-core: include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-core.yml strategy: depend -ros2-rolling-ros-base: - stage: ROS 2 Rolling - rules: - - if: $ROS_DISTROS =~ /.*rolling.*/ - needs: - - job: ros2-rolling-ros-core - optional: true - trigger: - include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml - strategy: depend - -ros2-rolling-desktop-full: - stage: ROS 2 Rolling - rules: - - if: $ROS_DISTROS =~ /.*rolling.*/ - needs: - - job: ros2-rolling-ros-base - optional: true - trigger: - include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml - strategy: depend +# ros2-rolling-ros-base: +# stage: ROS 2 Rolling +# rules: +# - if: $ROS_DISTROS =~ /.*rolling.*/ +# needs: +# - job: ros2-rolling-ros-core +# optional: true +# trigger: +# include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml +# strategy: depend + +# ros2-rolling-desktop-full: +# stage: ROS 2 Rolling +# rules: +# - if: $ROS_DISTROS =~ /.*rolling.*/ +# needs: +# - job: ros2-rolling-ros-base +# optional: true +# trigger: +# include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml +# strategy: depend From 917b62287e49fe1227def38430cdf1a5df1d3f5a Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 28 Aug 2024 13:33:01 +0200 Subject: [PATCH 61/64] fix typo --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1067b94..226560b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -169,7 +169,7 @@ ARG TORCH_VERSION RUN if [[ -n $TORCH_VERSION ]]; then \ if [[ "$TARGETARCH" == "amd64" ]]; then \ pip3 install torch==${TORCH_VERSION} && \ - if [[ "$TORCH_VERSION" == "2.3.0" ]]; then pip3 install torchversion==0.18.0; fi; \ + if [[ "$TORCH_VERSION" == "2.3.0" ]]; then pip3 install torchvision==0.18.0; fi; \ elif [[ "$TARGETARCH" == "arm64" ]]; then \ # from: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # and: https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#prereqs-install From 4fb02e8c6209b190a7d7e08ce68d0d92f80e9a3f Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 28 Aug 2024 15:26:38 +0200 Subject: [PATCH 62/64] do not remove docker-clean apt rule --- Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 226560b..af1d7a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -238,9 +238,6 @@ ENV DOCKER_GID= RUN echo "source /.version_information.sh" >> ~/.bashrc COPY .version_information.sh /.version_information.sh -# remove docker-clean rule to enable auto-completion for apt commands -RUN rm -f /etc/apt/apt.conf.d/docker-clean - # container startup setup ENV WORKSPACE=/docker-ros/ws WORKDIR $WORKSPACE From 187d5c27d0cc785bb095ae62546e082129c117e8 Mon Sep 17 00:00:00 2001 From: Lennart Reiher Date: Wed, 28 Aug 2024 15:56:58 +0200 Subject: [PATCH 63/64] update all version tables --- README.md | 138 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 118 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index c5451f1..a925824 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@

-*docker-ros-ml-images* provides machine learning-enabled ROS Docker images. +*docker-ros-ml-images* provides multi-arch machine learning-enabled ROS Docker images. > [!IMPORTANT] > This repository is open-sourced and maintained by the [**Institute for Automotive Engineering (ika) at RWTH Aachen University**](https://www.ika.rwth-aachen.de/). @@ -41,12 +41,15 @@ docker run --rm rwthika/ros2-ml:humble \ With *docker-ros-ml-images*, we provide a variety of lightweight multi-arch machine learning-enabled ROS Docker images. Starting with plain ROS images, we offer successively larger ROS base images that also come with [*NVIDIA CUDA*](https://developer.nvidia.com/cuda-toolkit), [*NVIDIA TensorRT*](https://developer.nvidia.com/tensorrt), [*NVIDIA Triton Client*](https://developer.nvidia.com/triton-inference-server), [*PyTorch*](https://pytorch.org/) and/or [*TensorFlow*](https://www.tensorflow.org/) installations. Combining the components listed in the table below, we have built more than 100 multi-arch images and make them publicly available on [DockerHub](https://hub.docker.com/u/rwthika). In addition to the provided images, we also publish the [generic Dockerfile](./Dockerfile) used to flexibly build images combining the different components. -| Component | Variations | -| ---------------- | -------------------------------------------------------------------- | -| ROS Distribution | noetic, humble, iron, jazzy, rolling | -| ROS Components | core, base, desktop-full | +| Component | Variations | +| ---------------- | ----------------------------------------------------------------------- | +| ROS Distribution | noetic, humble, iron, jazzy, rolling | +| ROS Components | core, base, desktop-full | | ML Framework | NVIDIA CUDA, NVIDIA TensorRT, NVIDIA Triton Client, PyTorch, TensorFlow | -| Architecture | amd64, arm64 | +| Architecture | amd64, arm64 | + +> [!NOTE] +> All images are targeted at NVIDIA GPUs and therefore base off of official [NVIDIA base images](https://catalog.ngc.nvidia.com/containers). The arm64 images, in particular, target NVIDIA Jetson SoCs and are based off of [NVIDIA L4T base images](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-base). Ubuntu 22 images are provided with JetPack 6, Ubuntu 20 images with JetPack 5. > [!NOTE] > Since robotic applications are often implemented in C++ instead of Python for performance reasons, previous releases of our images also shipped with the C++ APIs of PyTorch and TensorFlow. Installing the C++ libraries often involves cumbersome building from source, so we have decided to drop PyTorch/TensorFlow C++ support for more frequent releases. You may still find those images with ML C++ support under the [23.08 release](https://hub.docker.com/r/rwthika/ros2-ml/tags?page=&page_size=&ordering=&name=-v23.08). @@ -77,7 +80,20 @@ The password of the custom user is set to its username (`dockeruser:dockeruser`
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------ | :------------: | :-----: | :-----: | :-----: | :----------: | :----: | :---: | :---: | :------: | :----: | :-----: | :--------: | +| `humble-ros-core` | amd64
arm64 | 22.04.4 | 3.10.12 | humble | ros-core | 3.22.1 | - | - | - | - | - | - | +| `latest`, `humble`, `humble-ros-base` | amd64
arm64 | 22.04.4 | 3.10.12 | humble | ros-base | 3.22.1 | - | - | - | - | - | - | +| `humble-desktop-full` | amd64
arm64 | 22.04.4 | 3.10.12 | humble | desktop-full | 3.22.1 | - | - | - | - | - | - | +| `iron-ros-core` | amd64
arm64 | 22.04.4 | 3.10.12 | iron | ros-core | 3.22.1 | - | - | - | - | - | - | +| `iron`, `iron-ros-base` | amd64
arm64 | 22.04.4 | 3.10.12 | iron | ros-base | 3.22.1 | - | - | - | - | - | - | +| `iron-desktop-full` | amd64
arm64 | 22.04.4 | 3.10.12 | iron | desktop-full | 3.22.1 | - | - | - | - | - | - | +| `jazzy-ros-core` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | ros-core | 3.28.3 | - | - | - | - | - | - | +| `jazzy`, `jazzy-ros-base` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | ros-base | 3.28.3 | - | - | - | - | - | - | +| `jazzy-desktop-full` | amd64
arm64 | 24.04 | 3.12.3 | jazzy | desktop-full | 3.28.3 | - | - | - | - | - | - | +| `rolling-ros-core` | amd64
arm64 | 24.04 | 3.12.3 | rolling | ros-core | 3.28.3 | - | - | - | - | - | - | +| `rolling`, `rolling-ros-base` | amd64
arm64 | 24.04 | 3.12.3 | rolling | ros-base | 3.28.3 | - | - | - | - | - | - | +| `rolling-desktop-full` | amd64
arm64 | 24.04 | 3.12.3 | rolling | desktop-full | 3.28.3 | - | - | - | - | - | - |
@@ -90,7 +106,20 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------ | :------------: | :-----: | :-----: | :-----: | :----------: | :----: | :------: | :---: | :------: | :----: | :-----: | :--------: | +| `humble-ros-core` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-core | 3.22.1 | 12.2.140 | - | - | - | - | - | +| `latest`, `humble`, `humble-ros-base` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-base | 3.22.1 | 12.2.140 | - | - | - | - | - | +| `humble-desktop-full` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | desktop-full | 3.22.1 | 12.2.140 | - | - | - | - | - | +| `iron-ros-core` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-core | 3.22.1 | 12.2.140 | - | - | - | - | - | +| `iron`, `iron-ros-base` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-base | 3.22.1 | 12.2.140 | - | - | - | - | - | +| `iron-desktop-full` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | desktop-full | 3.22.1 | 12.2.140 | - | - | - | - | - | +| `jazzy-ros-core` | amd64 | 24.04 | 3.12.3 | jazzy | ros-core | 3.28.3 | 12.6.37 | - | - | - | - | - | +| `jazzy`, `jazzy-ros-base` | amd64 | 24.04 | 3.12.3 | jazzy | ros-base | 3.28.3 | 12.6.37 | - | - | - | - | - | +| `jazzy-desktop-full` | amd64 | 24.04 | 3.12.3 | jazzy | desktop-full | 3.28.3 | 12.6.37 | - | - | - | - | - | +| `rolling-ros-core` | amd64 | 24.04 | 3.12.3 | rolling | ros-core | 3.28.3 | 12.6.37 | - | - | - | - | - | +| `rolling`, `rolling-ros-base` | amd64 | 24.04 | 3.12.3 | rolling | ros-base | 3.28.3 | 12.6.37 | - | - | - | - | - | +| `rolling-desktop-full` | amd64 | 24.04 | 3.12.3 | rolling | desktop-full | 3.28.3 | 12.6.37 | - | - | - | - | - |
@@ -103,7 +132,14 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------ | :------------: | :-----: | :-----: | :----: | :----------: | :--------------: | :------------------: | :------------------: | :----------------: | :----: | :-----: | :--------: | +| `humble-ros-core` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | - | +| `latest`, `humble`, `humble-ros-base` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | - | +| `humble-desktop-full` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | - | +| `iron-ros-core` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | - | +| `iron`, `iron-ros-base` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | - | +| `iron-desktop-full` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | - |
@@ -116,7 +152,20 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------------------- | :------------: | :-----: | :-----: | :-----: | :----------: | :----: | :------: | :---: | :------: | :----: | :-----: | :--------: | +| `humble-ros-core-triton2.48.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-core | 3.22.1 | 12.2.140 | - | - | 2.48.0 | - | - | +| `latest`, `humble`, `humble-ros-base-triton2.48.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-base | 3.22.1 | 12.2.140 | - | - | 2.48.0 | - | - | +| `humble-desktop-full-triton2.48.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | desktop-full | 3.22.1 | 12.2.140 | - | - | 2.48.0 | - | - | +| `iron-ros-core-triton2.48.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-core | 3.22.1 | 12.2.140 | - | - | 2.48.0 | - | - | +| `iron`, `iron-ros-base-triton2.48.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-base | 3.22.1 | 12.2.140 | - | - | 2.48.0 | - | - | +| `iron-desktop-full-triton2.48.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | desktop-full | 3.22.1 | 12.2.140 | - | - | 2.48.0 | - | - | +| `jazzy-ros-core-triton2.48.0` | amd64 | 24.04 | 3.12.3 | jazzy | ros-core | 3.28.3 | 12.6.37 | - | - | 2.48.0 | - | - | +| `jazzy`, `jazzy-ros-base-triton2.48.0` | amd64 | 24.04 | 3.12.3 | jazzy | ros-base | 3.28.3 | 12.6.37 | - | - | 2.48.0 | - | - | +| `jazzy-desktop-full-triton2.48.0` | amd64 | 24.04 | 3.12.3 | jazzy | desktop-full | 3.28.3 | 12.6.37 | - | - | 2.48.0 | - | - | +| `rolling-ros-core-triton2.48.0` | amd64 | 24.04 | 3.12.3 | rolling | ros-core | 3.28.3 | 12.6.37 | - | - | 2.48.0 | - | - | +| `rolling`, `rolling-ros-base-triton2.48.0` | amd64 | 24.04 | 3.12.3 | rolling | ros-base | 3.28.3 | 12.6.37 | - | - | 2.48.0 | - | - | +| `rolling-desktop-full-triton2.48.0` | amd64 | 24.04 | 3.12.3 | rolling | desktop-full | 3.28.3 | 12.6.37 | - | - | 2.48.0 | - | - |
@@ -129,7 +178,14 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :----------------------------------------------- | :------------: | :-----: | :-----: | :----: | :----------: | :--------------: | :------------------: | :------------------: | :----------------: | :----: | :-----: | :--------: | +| `humble-ros-core-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | - | +| `latest`, `humble`, `humble-ros-base-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | - | +| `humble-desktop-full-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | - | +| `iron-ros-core-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | - | +| `iron`, `iron-ros-base-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | - | +| `iron-desktop-full-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | - |
@@ -142,7 +198,14 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :--------------------------------------------- | :------------: | :-----: | :-----: | :----: | :----------: | :--------------: | :------------------: | :------------------: | :----------------: | :----: | :-----: | :--------: | +| `humble-ros-core-tf2.16.1` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | 2.16.1 | +| `latest`, `humble`, `humble-ros-base-tf2.16.1` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | 2.16.1 | +| `humble-desktop-full-tf2.16.1` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | 2.16.1 | +| `iron-ros-core-tf2.16.1` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | 2.16.1 | +| `iron`, `iron-ros-base-tf2.16.1` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | 2.16.1 | +| `iron-desktop-full-tf2.16.1` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | - | 2.16.1 |
@@ -155,7 +218,14 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :-------------------------------------------------------- | :------------: | :-----: | :-----: | :----: | :----------: | :--------------: | :------------------: | :------------------: | :----------------: | :----: | :-----: | :--------: | +| `humble-ros-core-tf2.16.1-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | 2.16.1 | +| `latest`, `humble`, `humble-ros-base-tf2.16.1-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | 2.16.1 | +| `humble-desktop-full-tf2.16.1-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | humble | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | 2.16.1 | +| `iron-ros-core-tf2.16.1-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-core | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | 2.16.1 | +| `iron`, `iron-ros-base-tf2.16.1-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | ros-base | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | 2.16.1 | +| `iron-desktop-full-tf2.16.1-torch2.4.0` | amd64
arm64 | 22.04.3 | 3.10.12 | iron | desktop-full | 3.24.0
3.22.1 | 12.2.128
12.2.140 | 8.9.5.27
8.9.4.25 | 8.6.1.6
8.6.2.3 | - | 2.3.0 | 2.16.1 |
@@ -170,7 +240,11 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------ | :------------: | :-----: | :----: | :----: | :----------: | :----: | :---: | :---: | :------: | :----: | :-----: | :--------: | +| `noetic-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.16.3 | - | - | - | - | - | - | +| `latest`, `noetic`, `noetic-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.16.3 | - | - | - | - | - | - | +| `noetic-desktop-full` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.16.3 | - | - | - | - | - | - |
@@ -183,7 +257,11 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------ | :------------: | :-----: | :----: | :----: | :----------: | :----: | :------------------: | :---: | :------: | :----: | :-----: | :--------: | +| `noetic-ros-core` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.16.3 | 11.4.148
11.4.298 | - | - | - | - | - | +| `latest`, `noetic`, `noetic-ros-base` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.16.3 | 11.4.148
11.4.298 | - | - | - | - | - | +| `noetic-desktop-full` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.16.3 | 11.4.148
11.4.298 | - | - | - | - | - |
@@ -196,7 +274,11 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------ | :------------: | :----------------: | :----: | :----: | :----------: | :--------------: | :------------------: | :-------------------: | :------------: | :----: | :-----: | :--------: | +| `noetic-ros-core` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-core | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | - | - | +| `latest`, `noetic`, `noetic-ros-base` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-base | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | - | - | +| `noetic-desktop-full` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | desktop-full | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | - | - |
@@ -209,7 +291,11 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :------------------------------------------------- | :------------: | :-----: | :----: | :----: | :----------: | :----: | :------------------: | :---: | :------: | :----: | :-----: | :--------: | +| `noetic-ros-core-triton2.48.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-core | 3.16.3 | 11.4.148
11.4.298 | - | - | 2.48.0 | - | - | +| `latest`, `noetic`, `noetic-ros-base-triton2.48.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | ros-base | 3.16.3 | 11.4.148
11.4.298 | - | - | 2.48.0 | - | - | +| `noetic-desktop-full-triton2.48.0` | amd64
arm64 | 20.04.6 | 3.8.10 | noetic | desktop-full | 3.16.3 | 11.4.148
11.4.298 | - | - | 2.48.0 | - | - |
@@ -222,7 +308,11 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :----------------------------------------------- | :------------: | :----------------: | :----: | :----: | :----------: | :--------------: | :------------------: | :-------------------: | :------------: | :----: | :-----: | :--------: | +| `noetic-ros-core-torch2.1.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-core | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | 2.1.0 | - | +| `latest`, `noetic`, `noetic-ros-base-torch2.1.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-base | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | 2.1.0 | - | +| `noetic-desktop-full-torch2.1.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | desktop-full | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | 2.1.0 | - |
@@ -235,7 +325,11 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :--------------------------------------------- | :------------: | :----------------: | :----: | :----: | :----------: | :--------------: | :------------------: | :-------------------: | :------------: | :----: | :-----: | :--------: | +| `noetic-ros-core-tf2.12.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-core | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | - | 2.12.0 | +| `latest`, `noetic`, `noetic-ros-base-tf2.12.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-base | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | - | 2.12.0 | +| `noetic-desktop-full-tf2.12.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | desktop-full | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | - | 2.12.0 |
@@ -248,7 +342,11 @@ TODO: table
Click to expand -TODO: table +| Tag | Arch | Ubuntu | Python | ROS | ROS Package | CMake | CUDA | cuDNN | TensorRT | Triton | PyTorch | TensorFlow | +| :-------------------------------------------------------- | :------------: | :----------------: | :----: | :----: | :----------: | :--------------: | :------------------: | :-------------------: | :------------: | :----: | :-----: | :--------: | +| `noetic-ros-core-tf2.12.0-torch2.1.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-core | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | 2.1.0 | 2.12.0 | +| `latest`, `noetic`, `noetic-ros-base-tf2.12.0-torch2.1.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | ros-base | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | 2.1.0 | 2.12.0 | +| `noetic-desktop-full-tf2.12.0-torch2.1.0` | amd64
arm64 | 20.04.2
20.04.6 | 3.8.10 | noetic | desktop-full | 3.14.4
3.16.3 | 11.4.108
11.4.298 | 8.2.2.26
8.6.0.166 | 8.0.1
8.5.2 | - | 2.1.0 | 2.12.0 |
From e3ed42bc9e7a8ddc4f93604858a8962a5dfbd83f Mon Sep 17 00:00:00 2001 From: Jean-Pierre Busch Date: Wed, 28 Aug 2024 16:57:04 +0200 Subject: [PATCH 64/64] Revert "temp disable base and desktop for final tests" This reverts commit f7f5b36e548c738a6dd915d45ae44744a256819b. --- .gitlab-ci.yml | 210 ++++++++++++++++++++++++------------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c6f3c42..1c8c761 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,27 +25,27 @@ ros-noetic-ros-core: include: .gitlab-ci/ros-noetic/ros-noetic-ros-core.yml strategy: depend -# ros-noetic-ros-base: -# stage: ROS 1 Noetic -# rules: -# - if: $ROS_DISTROS =~ /.*noetic.*/ -# needs: -# - job: ros-noetic-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml -# strategy: depend - -# ros-noetic-desktop-full: -# stage: ROS 1 Noetic -# rules: -# - if: $ROS_DISTROS =~ /.*noetic.*/ -# needs: -# - job: ros-noetic-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml -# strategy: depend +ros-noetic-ros-base: + stage: ROS 1 Noetic + rules: + - if: $ROS_DISTROS =~ /.*noetic.*/ + needs: + - job: ros-noetic-ros-core + optional: true + trigger: + include: .gitlab-ci/ros-noetic/ros-noetic-ros-base.yml + strategy: depend + +ros-noetic-desktop-full: + stage: ROS 1 Noetic + rules: + - if: $ROS_DISTROS =~ /.*noetic.*/ + needs: + - job: ros-noetic-ros-base + optional: true + trigger: + include: .gitlab-ci/ros-noetic/ros-noetic-desktop-full.yml + strategy: depend ros2-humble-ros-core: @@ -57,27 +57,27 @@ ros2-humble-ros-core: include: .gitlab-ci/ros2-humble/ros2-humble-ros-core.yml strategy: depend -# ros2-humble-ros-base: -# stage: ROS 2 Humble -# rules: -# - if: $ROS_DISTROS =~ /.*humble.*/ -# needs: -# - job: ros2-humble-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml -# strategy: depend - -# ros2-humble-desktop-full: -# stage: ROS 2 Humble -# rules: -# - if: $ROS_DISTROS =~ /.*humble.*/ -# needs: -# - job: ros2-humble-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml -# strategy: depend +ros2-humble-ros-base: + stage: ROS 2 Humble + rules: + - if: $ROS_DISTROS =~ /.*humble.*/ + needs: + - job: ros2-humble-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-humble/ros2-humble-ros-base.yml + strategy: depend + +ros2-humble-desktop-full: + stage: ROS 2 Humble + rules: + - if: $ROS_DISTROS =~ /.*humble.*/ + needs: + - job: ros2-humble-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-humble/ros2-humble-desktop-full.yml + strategy: depend ros2-iron-ros-core: @@ -89,27 +89,27 @@ ros2-iron-ros-core: include: .gitlab-ci/ros2-iron/ros2-iron-ros-core.yml strategy: depend -# ros2-iron-ros-base: -# stage: ROS 2 Iron -# rules: -# - if: $ROS_DISTROS =~ /.*iron.*/ -# needs: -# - job: ros2-iron-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml -# strategy: depend - -# ros2-iron-desktop-full: -# stage: ROS 2 Iron -# rules: -# - if: $ROS_DISTROS =~ /.*iron.*/ -# needs: -# - job: ros2-iron-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml -# strategy: depend +ros2-iron-ros-base: + stage: ROS 2 Iron + rules: + - if: $ROS_DISTROS =~ /.*iron.*/ + needs: + - job: ros2-iron-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-iron/ros2-iron-ros-base.yml + strategy: depend + +ros2-iron-desktop-full: + stage: ROS 2 Iron + rules: + - if: $ROS_DISTROS =~ /.*iron.*/ + needs: + - job: ros2-iron-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-iron/ros2-iron-desktop-full.yml + strategy: depend ros2-jazzy-ros-core: @@ -121,27 +121,27 @@ ros2-jazzy-ros-core: include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-core.yml strategy: depend -# ros2-jazzy-ros-base: -# stage: ROS 2 Jazzy -# rules: -# - if: $ROS_DISTROS =~ /.*jazzy.*/ -# needs: -# - job: ros2-jazzy-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml -# strategy: depend - -# ros2-jazzy-desktop-full: -# stage: ROS 2 Jazzy -# rules: -# - if: $ROS_DISTROS =~ /.*jazzy.*/ -# needs: -# - job: ros2-jazzy-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml -# strategy: depend +ros2-jazzy-ros-base: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: + - job: ros2-jazzy-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-ros-base.yml + strategy: depend + +ros2-jazzy-desktop-full: + stage: ROS 2 Jazzy + rules: + - if: $ROS_DISTROS =~ /.*jazzy.*/ + needs: + - job: ros2-jazzy-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-jazzy/ros2-jazzy-desktop-full.yml + strategy: depend ros2-rolling-ros-core: @@ -153,24 +153,24 @@ ros2-rolling-ros-core: include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-core.yml strategy: depend -# ros2-rolling-ros-base: -# stage: ROS 2 Rolling -# rules: -# - if: $ROS_DISTROS =~ /.*rolling.*/ -# needs: -# - job: ros2-rolling-ros-core -# optional: true -# trigger: -# include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml -# strategy: depend - -# ros2-rolling-desktop-full: -# stage: ROS 2 Rolling -# rules: -# - if: $ROS_DISTROS =~ /.*rolling.*/ -# needs: -# - job: ros2-rolling-ros-base -# optional: true -# trigger: -# include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml -# strategy: depend +ros2-rolling-ros-base: + stage: ROS 2 Rolling + rules: + - if: $ROS_DISTROS =~ /.*rolling.*/ + needs: + - job: ros2-rolling-ros-core + optional: true + trigger: + include: .gitlab-ci/ros2-rolling/ros2-rolling-ros-base.yml + strategy: depend + +ros2-rolling-desktop-full: + stage: ROS 2 Rolling + rules: + - if: $ROS_DISTROS =~ /.*rolling.*/ + needs: + - job: ros2-rolling-ros-base + optional: true + trigger: + include: .gitlab-ci/ros2-rolling/ros2-rolling-desktop-full.yml + strategy: depend