# Start with Jetson AGX Orin Developer Kit.
## 1. SDK-Manager
#### Flash the last version of jetpack to NVME
22.04 Ubuntu is compatible with JetPack 6.0.
**Taking account NVME must be in GPT format and ext4 partition.**
With JetPack 6 install complete installation. Optional: DeepStream
## Build your kernel
### install-path is your path, check it with pwd
```bash
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
cd ~/
mkdir Projects && cd Projects
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/tegra_linux_sample-root-filesystem_r36.3.0_aarch64.tbz2
tar -xvjf jetson_linux_r36.3.0_aarch64.tbz2
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.8.9.tar.xz
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/tegra_linux_sample-root-filesystem_r36.3.0_aarch64.tbz2
tar -xvjf tegra_linux_sample-root-filesystem_r36.3.0_aarch64.tbz2
# -C ./Linux_for_Tegra/
xz -d linux-6.8.9.tar.xz
tar -xf linux-6.8.9.tar
mv linux-6.8.9 kernel-jammy-src
cd Linux_for_Tegra/source/
./source_sync.sh -k -t jetson_36.3
cd kernel && rm -rf kernel-jammy-src
cd ~/Projects
mv kernel-jammy-src Linux_for_Tegra/source/kernel/
cd Linux_for_Tegra/source/
# modify defconfig
cd ~/Projects/Linux_for_Tegra/source/kernel/kernel-jammy-src/configs/aarch
# Edit defconfig
CONFIG_ARM64_PMEM=y
CONFIG_PCIE_TEGRA194=y
CONFIG_PCIE_TEGRA194_HOST=y
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_CORE=y
CONFIG_FB_SIMPLE=y
or
make defconfig
scripts/config --file .config --enable ARM64_PMEM
scripts/config --file .config --enable PCIE_TEGRA194
scripts/config --file .config --enable PCIE_TEGRA194_HOST
scripts/config --file .config --enable BLK_DEV_NVME
scripts/config --file .config --enable NVME_CORE
scripts/config --file .config --enable FB_SIMPLE
# Build kernel
make -j $(nproc) -C kernel
export INSTALL_MOD_PATH=/home/johnny/Projects/Linux_for_Tegra/rootfs
sudo -E make install -C kernel
cp kernel/kernel-jammy-src/arch/arm64/boot/Image \
~/Projects/Linux_for_Tegra/kernel/Image
# make modules
export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
export INSTALL_MOD_PATH=~/Projects/Linux_for_Tegra/rootfs
make modules
sudo -E make modules_install
# OUT TREE MODULES
cd ~/Projects/Linux_for_Tegra/source
KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
make modules
sudo -E make modules_install
# edit boot
sudo gedit /boot/extlinux/exlinux.conf
# make dtbs
export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
make dtbs
sudo cp nvidia-oot/device-tree/platform/generic-dts/dtbs/* /boot/dtb
```
## Recommended libraries
```bash
# Update package lists
sudo apt-get -y update
# MANDATORY Install a set of tools and libraries required for building and development
sudo apt-get install -f -y --no-install-recommends \
ninja-build \
libopenblas-dev \
libopenmpi-dev \
openmpi-bin \
openmpi-common \
libomp-dev \
autoconf \
bc \
build-essential \
cmake \
ffmpeg \
g++ \
gcc \
gettext-base \
git \
gfortran \
hdf5-tools \
iputils-ping \
libatlas-base-dev \
libavcodec-dev \
libavdevice-dev \
libavfilter-dev \
libavformat-dev \
libavutil-dev \
libblas-dev \
libbz2-dev \
libc++-dev \
libcgal-dev \
libeigen3-dev \
libffi-dev \
libfreeimage-dev \
libfreetype6-dev \
libglew-dev \
libgflags-dev \
libgoogle-glog-dev \
libgtk-3-dev \
libgtk2.0-dev \
libhdf5-dev \
libjpeg-dev \
libjpeg-turbo8-dev \
libjpeg8-dev \
liblapack-dev \
liblapacke-dev \
liblzma-dev \
libncurses5-dev \
libncursesw5-dev \
libomp-dev \
libopenblas-dev \
libopenblas-base \
libopenexr-dev \
libopenjp2-7 \
libopenjp2-7-dev \
libopenmpi-dev \
libpng-dev \
libprotobuf-dev \
libreadline-dev \
libsndfile1 \
libsqlite3-dev \
libssl-dev \
libswresample-dev \
libswscale-dev \
libtbb-dev \
libtbb2 \
libtesseract-dev \
libtiff-dev \
libv4l-dev \
libx264-dev \
libxine2-dev \
libxslt1-dev \
libxvidcore-dev \
libxml2-dev \
locales \
moreutils \
openssl \
pkg-config \
python3-dev \
python3-numpy \
python3-pip \
python3-matplotlib \
qv4l2 \
rsync \
scons \
v4l-utils \
zlib1g-dev \
zip \
nvidia-l4t-gstreamer \
ubuntu-restricted-extras \
libsoup2.4-dev \
libjson-glib-dev
# libwebp-dev
# libpostproc-dev
# GStreamer
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio gstreamer1.0-rtsp libgstrtspserver-1.0-dev
```
```bash
# Install package
sudo apt install -y ccache
# Update symlinks
sudo /usr/sbin/update-ccache-symlinks
# Prepend ccache into the PATH
echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc
# Source bashrc to test the new PATH
source ~/.bashrc && echo $PATH
```
# Install last version of CUDA, Cudnn, TensorRT (Optional)
```bash
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/arm64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-8 cuda-compat-12-8
sudo apt-get install cudnn python3-libnvinfer python3-libnvinfer-dev tensorrt
````
## Install cmake
```bash
VERSION="3.31.7"
sudo apt remove cmake
wget https://cmake.org/files/v3.31/cmake-${VERSION}.tar.gz
tar xf cmake-${VERSION}.tar.gz
cd cmake-${VERSION}
./configure
make -j $(nproc)
sudo make install
cmake --version
```
## Install clang18
```bash
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main"
sudo apt update
sudo apt install clang-18 lldb-18 lld-18
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 100
```
## Build OpenBlas
```bash
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS/
export OMP_NUM_THREADS=12
make TARGET=ARMV8 USE_OPENMP=1
sudo make PREFIX=/usr/local install
sudo ldconfig
```
```bash
grep OPENBLAS_VERSION /usr/local/include/openblas_config.h
```
## 3.1 Install Pytorch Native
```bash
export TORCH_INSTALL=https://developer.download.nvidia.com/compute/redist/jp/v60dp/pytorch/torch-2.2.0a0+81ea7a4.nv24.01-cp310-cp310-linux_aarch64.whl
```
```bash
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade --no-cache $TORCH_INSTALL
```
## 3.2 Install Tensorflow Native
```bash
sudo apt-get -y update
```
```bash
sudo pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v60dp/tensorflow/tensorflow-2.14.0+nv24.01-cp310-cp310-linux_aarch64.whl
```
## 4. Install Miniconda ARM
```bash
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
chmod +x Miniconda3-latest-Linux-aarch64.sh
bash Miniconda3-latest-Linux-aarch64.sh
```
After install Miniconda, I recommend create a Python 3.12 Environment.
```bash
conda create -n py312 python=3.12
```
## Build from Source Pytorch 2.4 with Miniconda and Cuda 12.6, Python 3.12 or download it [here](https://ubarcelona-my.sharepoint.com/:u:/g/personal/jnunezca11_alumnes_ub_edu/ESIIS5vgF21KtSxeDb9uUs0Bsnbphv9qPwxd-rSHzH6ipQ?e=2YSvaL)
### Required upgrade CUDA
```bash
sudo nvpmodel -m 0 # this reboot system
sudo jetson_clocks
```
```bash
git clone --recursive --branch v2.6.0 http://github.com/pytorch/pytorch
export PYTORCH_BUILD_NUMBER=1 \
export TORCH_CXX_FLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" \
export USE_NCCL=0 && \
export USE_QNNPACK=0 && \
export USE_PYTORCH_QNNPACK=0 && \
export USE_NATIVE_ARCH=1 && \
export USE_DISTRIBUTED=1 && \
export USE_TENSORRT=0 && \
export TORCH_CUDA_ARCH_LIST="8.7"
export PYTORCH_BUILD_VERSION=2.6.0 && \
export MAX_JOBS="-j$(nproc)"
cd pytorch
pip3 install --no-cache-dir -r requirements.txt
pip3 install --no-cache-dir scikit-build ninja
conda install -c conda-forge libstdcxx-ng=12
sudo apt remove cmake -y
pip install cmake --upgrade
python setup.py bdist_wheel
```
## Build TorchVision or download it [here](https://ubarcelona-my.sharepoint.com/:u:/g/personal/jnunezca11_alumnes_ub_edu/Ea29cyNJlLxDnrahZa-FZ8oBVyvCpghVcq6uqPPnp8-JJQ?e=kpRk38)
```bash
git clone --branch v0.21.0 https://github.com/pytorch/vision torchvision # see below for version of torchvision to download
cd torchvision
export BUILD_VERSION=0.21.0 # where 0.x.0 is the torchvision version
export TORCH_CUDA_ARCH_LIST="8.7"
python setup.py bdist_wheel
```
## Build TorchAudio or download it [here](https://ubarcelona-my.sharepoint.com/:u:/g/personal/jnunezca11_alumnes_ub_edu/EW_ayOzz2PlJqdry6QUeoL4BmkbBZNo1MMvptfbDXD7JSg?e=qjIxXv)
```bash
git clone --branch v2.6.0 https://github.com/pytorch/audio torchaudio # see below for version of torchvision to download
cd torchaudio
export BUILD_VERSION=2.6.0 # where 0.x.0 is the torchvision version
export TORCH_CUDA_ARCH_LIST="8.7"
python setup.py bdist_wheel
```
## Build TorchText or download it [here](https://ubarcelona-my.sharepoint.com/:u:/g/personal/jnunezca11_alumnes_ub_edu/EWiYlWdgZRxFm0MA3UtW5lEBg340Ge2Spdu6kyiblQAc4Q?e=SmEBWt)
```bash
git clone --branch v0.19.1 https://github.com/pytorch/text.git torchtext # see below for version of torchvision to download
cd torchtext
export BUILD_VERSION=0.19.1 # where 0.x.0 is the torchvision version
export TORCH_CUDA_ARCH_LIST="8.7"
python setup.py build_ext -j $(nproc) bdist_wheel
```
## Built TensorRT or download it [here](https://ubarcelona-my.sharepoint.com/:u:/g/personal/jnunezca11_alumnes_ub_edu/EccP4FiKIUFKsix8xRFywSoBpBF1mFFEfk_mWC4cie5ZFA?e=41dBcK) or for C++ [here](https://ubarcelona-my.sharepoint.com/:f:/g/personal/jnunezca11_alumnes_ub_edu/EivHsg55wClBsmL0EOSjgsMBim_CiE68i5IO7JMo_M9_hA?e=48lVqb)
#### Python 3.12
```bash
export EXT_PATH=~/external
export TRT_OSSPATH=~/external/TensorRT
mkdir -p $EXT_PATH && cd $EXT_PATH
git clone https://github.com/pybind/pybind11.git
wget https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tgz
tar -xvf Python-3.12.8.tgz
mkdir -p $EXT_PATH/python3.12/include
cp -r Python-3.12.2/Include/* $EXT_PATH/python3.12/include
wget http://http.us.debian.org/debian/pool/main/p/python3.12/libpython3.12-dev_3.12.8-5_arm64.deb
ar x libpython3.12-dev*.deb
mkdir debian && tar -xf data.tar.zst -C debian
cp debian/usr/include/aarch64-linux-gnu/python3.12/pyconfig.h python3.12/include/
git clone --branch release/10.7 --recursive https://github.com/NVIDIA/TensorRT.git
cd TensorRT
mkdir -p build && cd build
export TRT_LIBPATH=/usr/lib/aarch64-linux-gnu/
cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DTRT_PLATFORM_ID=aarch64 -DCUDA_VERSION=12.6 -DCUDNN_VERSION=9.6 -DGPU_ARCHS="87"
CC=/usr/bin/gcc make -j$(nproc)
cd ../python
TENSORRT_MODULE=tensorrt PYTHON_MAJOR_VERSION=3 PYTHON_MINOR_VERSION=12 TARGET_ARCHITECTURE=aarch64 TRT_OSSPATH=~/external/TensorRT ./build.sh
pip install ./build/bindings_wheel/dist/tensorrt-*.whl
```
#### Python 3.11
```bash
export EXT_PATH=~/external
export TRT_OSSPATH=~/external/TensorRT
mkdir -p $EXT_PATH && cd $EXT_PATH
git clone https://github.com/pybind/pybind11.git
wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
tar -xvf Python-3.11.9.tgz
mkdir -p $EXT_PATH/python3.11/include
cp -r Python-3.11.9/Include/* $EXT_PATH/python3.11/include
wget http://http.us.debian.org/debian/pool/main/p/python3.11/libpython3.11-dev_3.11.9-1_arm64.deb
ar x libpython3.11-dev*.deb
mkdir debian && tar -xf data.tar.xz -C debian
cp debian/usr/include/aarch64-linux-gnu/python3.11/pyconfig.h python3.11/include/
git clone --branch release/10.7 --recursive https://github.com/NVIDIA/TensorRT.git
cd TensorRT
mkdir -p build && cd build
export TRT_LIBPATH=/usr/lib/aarch64-linux-gnu/
cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DTRT_PLATFORM_ID=aarch64 -DCUDA_VERSION=12.6 -DCUDNN_VERSION=9.6 -DGPU_ARCHS="87"
CC=/usr/bin/gcc make -j$(nproc)
cd ../python
TENSORRT_MODULE=tensorrt PYTHON_MAJOR_VERSION=3 PYTHON_MINOR_VERSION=11 TARGET_ARCHITECTURE=aarch64 TRT_OSSPATH=~/external/TensorRT ./build.sh
pip install ./build/bindings_wheel/dist/tensorrt-*.whl
```
```bash
pip3 install -U tensorrt-10.7-cp311-none-linux_aarch64.whl
```
#### Python 3.10
```bash
export EXT_PATH=~/external
export TRT_OSSPATH=~/external/TensorRT
mkdir -p $EXT_PATH && cd $EXT_PATH
git clone https://github.com/pybind/pybind11.git
wget https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz
tar -xvf Python-3.10.11.tgz
mkdir -p $EXT_PATH/python3.10/include
cp -r Python-3.10.11/Include/* $EXT_PATH/python3.11/include
wget http://http.us.debian.org/debian/pool/main/p/python3.10/libpython3.10-dev_3.10.12-1_amd64.deb
ar x libpython3.10-dev*.deb
mkdir debian && tar -xf data.tar.xz -C debian
cp debian/usr/include/aarch64-linux-gnu/python3.10/pyconfig.h python3.10/include/
git clone --branch release/10.7 --recursive https://github.com/NVIDIA/TensorRT.git
cd TensorRT
mkdir -p build && cd build
export TRT_LIBPATH=/usr/lib/aarch64-linux-gnu/
cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DTRT_PLATFORM_ID=aarch64 -DCUDA_VERSION=12.6 -DCUDNN_VERSION=9.6 -DGPU_ARCHS="87"
CC=/usr/bin/gcc make -j$(nproc)
cd ../python
TENSORRT_MODULE=tensorrt PYTHON_MAJOR_VERSION=3 PYTHON_MINOR_VERSION=10 TARGET_ARCHITECTURE=aarch64 TRT_OSSPATH=~/external/TensorRT ./build.sh
pip install ./build/bindings_wheel/dist/tensorrt-*.whl
```
```bash
pip3 install -U tensorrt-10.4-cp311-none-linux_aarch64.whl
```
## Build OpenCV CUDA
```bash
conda create -n py311 python=3.11
conda activate py311
conda install cmake numpy --yes
cd Projects
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.x.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.x.zip
unzip opencv.zip
unzip opencv_contrib.zip
# -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_PREFIX_PATH="/usr/lib/aarch64-linux-gnu;/usr/include" \
mkdir -p build && cd build
export ENABLE_CONTRIB=1
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_PREFIX_PATH="/usr/lib/aarch64-linux-gnu;/usr/include" \
-DCPACK_BINARY_DEB=ON \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DBUILD_opencv_java=OFF \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCUDA_ARCH_BIN=8.7 \
-DCUDA_ARCH_PTX= \
-DCUDA_FAST_MATH=ON \
-DCUDNN_INCLUDE_DIR=/usr/include/ \
-DEIGEN_INCLUDE_PATH=/usr/include/eigen3 \
-DWITH_EIGEN=ON \
-DENABLE_NEON=ON \
-DOPENCV_DNN_CUDA=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.6 \
-DOPENCV_ENABLE_NONFREE=ON \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.x/modules \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOpenGL_GL_PREFERENCE=GLVND \
-DWITH_CUBLAS=ON \
-DWITH_CUDA=ON \
-DWITH_CUDNN=ON \
-DWITH_GSTREAMER=ON \
-DWITH_LIBV4L=ON \
-DWITH_GTK=ON \
-DWITH_OPENGL=OFF \
-DWITH_OPENCL=OFF \
-DWITH_IPP=OFF \
-DWITH_TBB=ON \
-DBUILD_TIFF=ON \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_NEW_PYTHON_SUPPORT=ON \
-DBUILD_opencv_python3=ON \
-DHAVE_opencv_python3=ON \
../opencv-4.x
cmake --build .
sudo make install
```
## Built OpenCV Python or download it [here](https://ubarcelona-my.sharepoint.com/:u:/g/personal/jnunezca11_alumnes_ub_edu/EeYJgPoinetLo6VAxIlyfA8BJC-uI9EsLQm0xeGz897wWA?e=UrwiUa)
```bash
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
```
```bash
wget https://raw.githubusercontent.com/dusty-nv/jetson-containers/master/packages/opencv/patches.diff
git apply patches.diff || echo "failed to apply git patches"
sed -i 's|weight != 1.0|(float)weight != 1.0f|' opencv/modules/dnn/src/cuda4dnn/primitives/normalize_bbox.hpp
sed -i 's|nms_iou_threshold > 0|(float)nms_iou_threshold > 0.0f|' opencv/modules/dnn/src/cuda4dnn/primitives/region.hpp
grep 'weight' opencv/modules/dnn/src/cuda4dnn/primitives/normalize_bbox.hpp
grep 'nms_iou_threshold' opencv/modules/dnn/src/cuda4dnn/primitives/region.hpp
export export ENABLE_CONTRIB=1
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
export CMAKE_ARGS="\
-DCPACK_BINARY_DEB=ON \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DBUILD_opencv_java=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCUDA_ARCH_BIN=8.7 \
-DCUDA_ARCH_PTX= \
-DCUDA_FAST_MATH=ON \
-DCUDNN_INCLUDE_DIR=/usr/include/ \
-DEIGEN_INCLUDE_PATH=/usr/include/eigen3 \
-DWITH_EIGEN=ON \
-DENABLE_NEON=ON \
-DOPENCV_DNN_CUDA=ON \
-DOPENCV_ENABLE_NONFREE=ON \
-DOPENCV_EXTRA_MODULES_PATH=$(pwd)/opencv_contrib/modules \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOpenGL_GL_PREFERENCE=GLVND \
-DWITH_CUBLAS=ON \
-DWITH_CUDA=ON \
-DWITH_CUDNN=ON \
-DWITH_GSTREAMER=ON \
-DWITH_LIBV4L=ON \
-DWITH_GTK=ON \
-DWITH_OPENGL=OFF \
-DWITH_OPENCL=OFF \
-DWITH_IPP=OFF \
-DWITH_TBB=ON \
-DBUILD_TIFF=ON \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_TESTS=OFF"
pip3 wheel --verbose .
```
Install OpenCV.
```bash
pip install -U opencv_contrib_python-4.9.0.80-cp312-cp312-linux_aarch64.whl
```
## Build OnnxRuntime-GPU
```bash
git clone --recursive https://github.com/microsoft/onnxruntime
cd onnxruntime
export PATH="/usr/local/cuda/bin:${PATH}"
export CUDACXX="/usr/local/cuda/bin/nvcc"
pip3 install -U packaging
./build.sh --config Release --update --parallel --build --build_wheel --build_shared_lib --skip_tests \
--use_tensorrt --cuda_home /usr/local/cuda --cudnn_home /usr/lib/aarch64-linux-gnu \
--tensorrt_home /usr/lib/aarch64-linux-gnu --cmake_extra_defines CMAKE_CXX_FLAGS="-Wno-unused-variable -I/usr/local/cuda/include" --cmake_extra_defines CMAKE_CUDA_ARCHITECTURES="87"
```
# Install torch2trt
```bash
git clone --recursive https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt
python setup.py install
# cmake -B build . && cmake --build build --target install && sudo ldconfig
cd scripts
bash build_contrib.sh
```
# Install trt-Pose
```bash
git clone --recursive https://github.com/NVIDIA-AI-IOT/trt_pose
cd trt_pose
python3 setup.py develop --user
```
# Example nanoSAM
```
git clone https://github.com/NVIDIA-AI-IOT/nanosam.git
cd nanosam
```
Download the folder data(models) and unzip in nanosam folder. [Data Folder](https://drive.google.com/file/d/1CHaxy_4eP3mSjkgb9ViStjszMQkj_jrN/view?usp=sharing)
```
pip install -U pillow transformers
```
RUN
```
python3 examples/demo_click_segment_track.py
```
If your external camera doesn't work.
```bash
sudo apt update
sudo apt upgrade
sudo apt install libffi-dev
sudo apt install libglib2.0-0
sudo apt install --reinstall libffi7
sudo apt install v4l-utils
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libffi.so.7 # recommented to put in bashrc
# LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1
# export LD_PRELOAD='/home/jetson/miniconda3/lib/python3.12/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0'
```
```bash
v4l2-ctl --list-devices
```

Check if your camera works.
```bash
sudo apt install guvcview
```
Now update the code in demo_click_segment_track.py:
Original code:
```python=3.12
cap = cv2.VideoCapture(0)
```
to
```python=3.12
camera_id = "/dev/video0"
cap = cv2.VideoCapture(camera_id, cv2.CAP_V4L2)
```

# Example llamaspeak
1. **Open a terminal** and Configure ngc cli
2. Download [riva](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/riva/resources/riva_quickstart_arm64)
3. Add "default-runtime": "nvidia" in /etc/docker/daemon.json.
```bash
sudo gedit /etc/docker/daemon.json
```
```json
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
```
Save it and execute.
```bash
sudo systemctl restart docker
```
4. Init riva to download models
```bash
bash riva_init.sh
bash riva_start.sh
```
5. **Open another terminal** and clone jetson-containers
```bash
git clone --recursive https://github.com/dusty-nv/jetson-containers.git
cd jetson-containers
```
6. Create a folder and download the model(.bin are deprecated)
```bash
mkdir data/models/text-generation-webui && cd $_
wget https://huggingface.co/TheBloke/Llama-2-13B-GGUF/resolve/main/llama-2-13b.Q4_0.gguf
```
7. Move to jetson containers folders
```bash
cd /path/to/your/jetson-containers/
```
9. Run text-web-ui
```bash
./run.sh --workdir /opt/text-generation-webui $(./autotag text-generation-webui) \
python3 server.py --listen --verbose --api \
--model-dir=/data/models/text-generation-webui \
--model=llama-2-13b.Q4_0.gguf \
--loader=llamacpp \
--n-gpu-layers=128 \
--n_ctx=4096 \
--n_batch=4096 \
--threads=$(($(nproc) - 2))
```
9. **Open another terminal** and move on jetson-containers folder
```bash
cd /path/to/your/jetson-containers/data
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj '/CN=localhost'
```
10. Run and enjoy it!
```bash
cd /path/to/your/jetson-containers
./run.sh --workdir=/opt/llamaspeak \
--env SSL_CERT=/data/cert.pem \
--env SSL_KEY=/data/key.pem \
$(./autotag llamaspeak) \
python3 chat.py --verbose
```
11. Open navigator
```bash
```
Optional:
You can try anothers model like codellama, mistral etc.

## 6. Install Docker with CUDA Support for use [Jetson Generative AI Playground](http://jetson-ai-playground.com/)
```bash
sudo apt install -y curl
sudo apt-get update
```
```bash
curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
```
```bash
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
```
```bash
sudo apt-get update
```
```bash
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
sudo nvidia-ctk runtime configure --runtime=containerd
sudo systemctl restart containerd
sudo nvidia-ctk runtime configure --runtime=crio
sudo systemctl restart crio
```
### Add permission user for not use "sudo docker" all time
```bash
sudo chmod 666 /var/run/docker.sock
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```
### Add "default-runtime": "nvidia" in /etc/docker/daemon.json.
```bash
sudo gedit /etc/docker/daemon.json
```
```json
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
```
```bash
sudo systemctl restart docker
```
# Build FFMPEG
```bash
wget https://www.ffmpeg.org/releases/ffmpeg-7.0.2.tar.gz && \
tar -xvzf ffmpeg-7.0.2.tar.gz
```
```bash
cd ffmpeg-7.0.2
mkdir -p ./libaom && \
cd ./libaom && \
git clone https://aomedia.googlesource.com/aom && \
mkdir -p aom_build && \
cd aom_build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_TESTS=OFF -DENABLE_NASM=on ../aom && \
PATH="$HOME/bin:$PATH" make && \
sudo make install
```
```bash
cd ffmpeg-7.0.2
git -C SVT-AV1 pull 2> /dev/null || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git && \
mkdir -p SVT-AV1/build && \
cd SVT-AV1/build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF .. && \
PATH="$HOME/bin:$PATH" make && \
sudo make install
```
```bash
cd ffmpeg-7.0.2
sudo apt-get update && sudo apt-get install -y --no-install-recommends libdav1d-dev
```
```bash
cd ffmpeg-7.0.2
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
# --pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-cflags="-I/usr/src/jetson_multimedia_api/include/" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib -L/usr/lib/aarch64-linux-gnu/tegra" \
--extra-libs="-lpthread -lm -lnvbufsurface -lnvbufsurftransform" \
--ld="g++" \
--bindir="$HOME/bin" \
--enable-shared --disable-doc \
--enable-libaom --enable-libsvtav1 --enable-libdav1d \
--enable-nvv4l2dec --enable-libv4l2 && \
make && \
make install && \
ldconfig
```
```bash
ffmpeg -version
ffmpeg -decoders
ffmpeg -decoders | grep av1 || true
ffmpeg -decoders | grep h264_nvv4l2dec || true
```
# Extra
## To join more models, please go to Jetson-Containes, thanks to Dusty and JetsonHacks.
https://github.com/dusty-nv/jetson-containers.git