Go2Py/docker/Dockerfile.aarch64

246 lines
8.1 KiB
Docker

# Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.
#
# NVIDIA CORPORATION and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto. Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA CORPORATION is strictly prohibited.
# Docker file for aarch64 based Jetson device
ARG BASE_IMAGE="nvcr.io/nvidia/l4t-cuda:12.2.12-devel"
FROM ${BASE_IMAGE}
# Store list of packages (must be first)
RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/aarch64-start-packages.csv
# Disable terminal interaction for apt
ENV DEBIAN_FRONTEND=noninteractive
ENV SHELL /bin/bash
SHELL ["/bin/bash", "-c"]
# Ensure we have universe
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y \
software-properties-common \
&& add-apt-repository universe \
&& apt-get update
# Fundamentals
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y \
apt-utils \
bash-completion \
build-essential \
ca-certificates \
curl \
git \
git-lfs \
gnupg2 \
iputils-ping \
libgoogle-glog-dev \
locales \
lsb-release \
software-properties-common \
sudo \
tar \
unzip \
vim \
wget \
zlib1g-dev
# Add Isaac apt repository
RUN --mount=type=cache,target=/var/cache/apt \
wget -qO - https://isaac.download.nvidia.com/isaac-ros/repos.key | apt-key add - && \
grep -qxF "deb https://isaac.download.nvidia.com/isaac-ros/release-3 $(lsb_release -cs) release-3.0" /etc/apt/sources.list || \
echo "deb https://isaac.download.nvidia.com/isaac-ros/release-3 $(lsb_release -cs) release-3.0" | tee -a /etc/apt/sources.list \
&& apt-get update
# Setup Jetson debian repositories
RUN --mount=type=cache,target=/var/cache/apt \
apt-key adv --fetch-keys https://repo.download.nvidia.com/jetson/jetson-ota-public.asc \
&& apt-key adv --fetch-keys http://l4t-repo.nvidia.com/jetson-ota-internal.key \
&& echo 'deb https://repo.download.nvidia.com/jetson/common r36.3 main' > /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \
&& echo 'deb https://repo.download.nvidia.com/jetson/t234 r36.3 main' >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \
&& apt-get update
# Python basics
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y \
python3-dev \
python3-distutils \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-venv \
python3-zmq \
python3.10 \
python3.10-venv
# Set Python3 as default
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1
# Core dev libraries
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y \
ffmpeg \
gfortran \
graphicsmagick-libmagick-dev-compat \
jq \
kmod \
lcov \
libasio-dev \
libassimp-dev \
libatlas-base-dev \
libblas3 \
libatlas3-base \
libboost-all-dev \
libboost-dev \
libceres-dev \
libbullet-dev \
libcunit1-dev \
libffi7 \
libfreetype6 \
libgraphicsmagick++1-dev \
libhidapi-libusb0 \
libinput10 \
libjpeg8 \
liblapack3 \
libmnl0 \
libmnl-dev \
libncurses5-dev \
libode-dev \
libopenblas0 \
libopencv-dev=4.5.4+dfsg-9ubuntu4 \
libopenmpi3 \
libpcap-dev \
libpcl-dev \
libsuitesparse-dev \
libtinyxml2-dev \
libturbojpeg \
linuxptp \
libunwind8 \
libv4l-0 \
libx264-dev \
libxaw7-dev \
libyaml-cpp-dev \
llvm-14 \
nlohmann-json3-dev \
python3-opencv=4.5.4+dfsg-9ubuntu4 \
python3-scipy
# Additional Python dependencies
RUN python3 -m pip install -U \
Cython \
pymongo \
wheel \
scikit-learn \
ninja \
networkx \
numpy \
numpy-quaternion \
pyyaml \
setuptools_scm>=6.2 \
trimesh \
yourdfpy>=0.0.53 \
warp-lang>=0.9.0 \
scipy>=1.7.0 \
tqdm \
importlib_resources
# Update environment
RUN update-alternatives --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-14 14
ENV LD_LIBRARY_PATH="/opt/nvidia/vpi3/lib64:${LD_LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/tegra:${LD_LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="/usr/local/cuda-12.2/targets/aarch64-linux/lib:${LD_LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/tegra-egl:${LD_LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/tegra/weston:${LD_LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib/aarch64-linux-gnu-host"
ENV PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/src/tensorrt/bin:${PATH}"
# Install CUDA packages
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y --no-install-recommends \
cuda-cudart-12-2 \
cuda-libraries-12-2 \
cuda-nvml-dev-12-2 \
cuda-sanitizer-12-2 \
cuda-toolkit-12-2 \
libcublas-12-2 \
libcudnn8 \
libcusparse-12-2 \
libnpp-12-2
# Install TensorRT and VPI
RUN --mount=type=cache,target=/var/cache/apt \
mkdir -p /lib/firmware && \
apt-get update && apt-get install -y \
libnvvpi3 \
tensorrt \
vpi3-dev
# Install Tao converter
RUN mkdir -p /opt/nvidia/tao && cd /opt/nvidia/tao && \
wget --content-disposition 'https://api.ngc.nvidia.com/v2/resources/org/nvidia/team/tao/tao-converter/v5.1.0_jp6.0_aarch64/files?redirect=true&path=tao-converter' -O tao-converter && \
chmod 755 tao-converter
ENV PATH="${PATH}:/opt/nvidia/tao"
ENV TRT_LIB_PATH="/usr/lib/aarch64-linux-gnu"
ENV TRT_INCLUDE_PATH="/usr/include/aarch64-linux-gnu"
# PyTorch (NV CUDA edition)
# https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html
RUN python3 -m pip install --no-cache \
https://developer.download.nvidia.com/compute/redist/jp/v60dp/pytorch/torch-2.2.0a0+6a974be.nv23.11-cp310-cp310-linux_aarch64.whl
# Install Triton server from https://github.com/triton-inference-server/server/releases/tag/v2.40.0
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y --no-install-recommends \
libb64-0d \
libre2-9 \
rapidjson-dev \
libopenblas-dev \
libarchive-dev
RUN --mount=type=cache,target=/var/cache/apt \
cd /opt \
&& wget https://github.com/triton-inference-server/server/releases/download/v2.40.0/tritonserver2.40.0-igpu.tar.gz \
&& tar -xzvf tritonserver2.40.0-igpu.tar.gz \
&& chmod 644 /opt/tritonserver/backends/tensorflow/libtensorflow_cc.so.2 \
&& chmod 644 /opt/tritonserver/backends/tensorflow/libtensorflow_framework.so.2 \
&& rm tritonserver2.40.0-igpu.tar.gz
ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/tritonserver/lib"
# Install boost version >= 1.78 for boost::span
# Current libboost-dev apt packages are < 1.78, so install from tar.gz
RUN --mount=type=cache,target=/var/cache/apt \
wget -O /tmp/boost.tar.gz \
https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz \
&& (cd /tmp && tar xzf boost.tar.gz) \
&& cd /tmp/boost_1_80_0 \
&& ./bootstrap.sh --prefix=/usr \
&& ./b2 install \
&& rm -rf /tmp/boost*
# Install CV-CUDA
RUN --mount=type=cache,target=/var/cache/apt \
cd /tmp && \
wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-lib-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \
dpkg -i nvcv-lib-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \
wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-dev-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \
dpkg -i nvcv-dev-0.5.0_beta_DP-cuda12-aarch64-linux.deb
# Add MQTT binaries and libraries
RUN --mount=type=cache,target=/var/cache/apt \
apt-add-repository ppa:mosquitto-dev/mosquitto-ppa \
&& apt-get update && apt-get install -y \
mosquitto \
mosquitto-clients
# Install jtop
RUN python3 -m pip install -U \
jetson-stats
# Store list of packages (must be last)
RUN mkdir -p /opt/nvidia/isaac_ros_dev_base && dpkg-query -W | sort > /opt/nvidia/isaac_ros_dev_base/aarch64-end-packages.csv