diff --git a/Dockerfile b/Dockerfile index 0785e81b..c007ace2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -82,7 +82,7 @@ ARG ONNX_RUNTIME_VERSION # note: built with CUDA and TensorRT providers WORKDIR /opt/onnxruntime RUN curl -S -L -# -o ort.tgz \ - https://urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/onnxruntime/onnxruntime-${ONNX_RUNTIME_VERSION}-cuda-12.1-$(uname -m).tar.gz + https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/onnxruntime/onnxruntime-${ONNX_RUNTIME_VERSION}-cuda-12.1-$(uname -m).tar.gz RUN tar -xf ort.tgz --strip-components 1 ############################################################ @@ -97,7 +97,7 @@ ARG GPU_TYPE WORKDIR /opt/libtorch/ RUN ARCH=$(uname -m) && if [ "$ARCH" = "aarch64" ]; then ARCH="${ARCH}-${GPU_TYPE}"; fi && \ curl -S -# -o libtorch.tgz -L \ - https://urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/libtorch/libtorch-${LIBTORCH_VERSION}-${ARCH}.tar.gz + https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/libtorch/libtorch-${LIBTORCH_VERSION}-${ARCH}.tar.gz RUN mkdir -p ${LIBTORCH_VERSION} RUN tar -xf libtorch.tgz -C ${LIBTORCH_VERSION} --strip-components 1 # Remove kineto from config to remove warning, not needed by holoscan @@ -115,7 +115,7 @@ ARG GPU_TYPE WORKDIR /opt/torchvision/ RUN ARCH=$(uname -m) && if [ "$ARCH" = "aarch64" ]; then ARCH="${ARCH}-${GPU_TYPE}"; fi && \ curl -S -# -o torchvision.tgz -L \ - https://urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/torchvision/torchvision-${TORCHVISION_VERSION}-${ARCH}.tar.gz + https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/torchvision/torchvision-${TORCHVISION_VERSION}-${ARCH}.tar.gz RUN mkdir -p ${TORCHVISION_VERSION} RUN tar -xf torchvision.tgz -C ${TORCHVISION_VERSION} --strip-components 1 @@ -233,7 +233,7 @@ ARG GXF_VERSION WORKDIR /opt/nvidia/gxf RUN if [ $(uname -m) = "aarch64" ]; then ARCH=arm64; else ARCH=x86_64; fi \ && curl -S -# -L -o gxf.tgz \ - https://urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/gxf/gxf_${GXF_VERSION}_holoscan-sdk_${ARCH}.tar.gz + https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/gxf/gxf_${GXF_VERSION}_holoscan-sdk_${ARCH}.tar.gz RUN mkdir -p ${GXF_VERSION} RUN tar -xzf gxf.tgz -C ${GXF_VERSION} --strip-components 1 diff --git a/docs/emergent_setup.md b/docs/emergent_setup.md index 9d030db6..02cfac6b 100644 --- a/docs/emergent_setup.md +++ b/docs/emergent_setup.md @@ -43,10 +43,7 @@ refer to the Software Installation section of EVT [Camera User's Manual](https:/ able to download Camera User's Manual. :::{note} -The Emergent SDK depends on Rivermax SDK and Mellanox OFED Network Drivers -which are pre-installed by the SDK Manager on the Holoscan Developer Kits. To -avoid duplicate installation of the Rivermax SDK and the Mellanox OFED Network -Drivers, use the following command when installing the Emergent SDK: +The Emergent SDK depends on Rivermax SDK and the Mellanox OFED Network Drivers. If they're already installed on your system, use the following command when installing the Emergent SDK to avoid duplicate installation: >```bash >sudo ./install_eSdk.sh no_mellanox diff --git a/docs/examples/video_replayer.md b/docs/examples/video_replayer.md index 3cd9501c..f1011042 100644 --- a/docs/examples/video_replayer.md +++ b/docs/examples/video_replayer.md @@ -207,6 +207,6 @@ flexibility for the user to run the script from any directory by setting the `HO ## Running the Application -Running the application should bring up video playback of the surgical video referenced in the YAML file. +Running the application should bring up video playback of the video referenced in the YAML file. ![](../images/video_replayer.png) diff --git a/docs/examples/video_replayer_distributed.md b/docs/examples/video_replayer_distributed.md index 1802f59d..4c0cff47 100644 --- a/docs/examples/video_replayer_distributed.md +++ b/docs/examples/video_replayer_distributed.md @@ -197,7 +197,7 @@ This particular distributed application only has one operator per fragment, so t ## Running the Application -Running the application should bring up video playback of the surgical video referenced in the YAML file. +Running the application should bring up video playback of the video referenced in the YAML file. ![](../images/video_replayer.png) diff --git a/docs/holoscan_create_distributed_app.md b/docs/holoscan_create_distributed_app.md index 10623806..f11e359f 100644 --- a/docs/holoscan_create_distributed_app.md +++ b/docs/holoscan_create_distributed_app.md @@ -204,17 +204,17 @@ ip -o -4 addr show | awk '{print $2, $4}' # to show interface name and IP The following are known limitations of the distributed application support in the SDK, which will be addressed in future updates: -#### 1. The driver calls the compose() method of the fragments. - -Although the driver doesn't execute fragments, it still invokes the `compose()` method of the fragments to determine the number of connections between them. - -#### 2. A connection error message is displayed even when the distributed application is running correctly. +#### 1. A connection error message is displayed even when the distributed application is running correctly. The message `Connection dropped with status -25 (Connection reset by remote peer)` appears in the console even when the application is functioning properly. This is a known issue and will be addressed in future updates, ensuring that this message will only be displayed in the event of an actual connection error. -#### 3. GPU tensors can only currently be sent/received by UCX from a single device on a given node. +#### 2. GPU tensors can only currently be sent/received by UCX from a single device on a given node. By default, device ID 0 is used by the UCX extensions to send/receive data between fragments. To override this default, the user can set environment variable `HOLOSCAN_UCX_DEVICE_ID`. + +#### 3. "Address already in use" errors in distributed applications due to the health check service. + +In scenarios where distributed applications have both the driver and workers running on the same host, either within a Docker container or directly on the host, there's a possibility of encountering "Address already in use" errors. A potential solution is to assign a different port number to the `HOLOSCAN_HEALTH_CHECK_PORT` environment variable (default: `8777`), for example, by using `export HOLOSCAN_HEALTH_CHECK_PORT=8780`. ````` `````{note} diff --git a/docs/holoscan_packager.md b/docs/holoscan_packager.md index b3bddac7..a48741ee 100644 --- a/docs/holoscan_packager.md +++ b/docs/holoscan_packager.md @@ -12,7 +12,7 @@ Ensure the following are installed in the environment where you want to run the - [**PIP dependencies**](https://github.com/nvidia-holoscan/holoscan-sdk/blob/main/python/requirements.txt) (automatically installed with the holoscan python wheel) - [**NVIDIA Container Toolkit with Docker**](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker) - - Developer Kits (aarch64): already included in HoloPack and JetPack + - Developer Kits (aarch64): already included in IGX Software and JetPack - x86_64: tested with NVIDIA Container Toolkit 1.13.3 w/Docker v24.0.1 - **Docker BuildX plugin** 1. Check if it is installed: diff --git a/docs/images/video_replayer.png b/docs/images/video_replayer.png index 47130025..949508bd 100644 Binary files a/docs/images/video_replayer.png and b/docs/images/video_replayer.png differ diff --git a/docs/overview.md b/docs/overview.md index 5cdbc5cc..14675e6e 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -39,11 +39,7 @@ As highlighted in the relevant technologies section, the soul of the Holoscan pr - a {ref}`Video Pipeline Latency Measurement Tool ` to measure and estimate the total end-to-end latency of a video streaming application including the video capture, processing, and output using various hardware and software components that are supported by the Holoscan Developer Kits. - the [Data Flow Tracking](./flow_tracking.md) feature to profile your application and analyze the data flow between operators in its graph. -8. **Container to leverage both iGPU and dGPU on Holoscan devkits** - -The Holoscan developer kits can - at this time - only be flashed to leverage the integrated GPU (Tegra SoC) or the added discrete GPU. The [L4T Compute Assist container](./use_igpu_with_dgpu.md) on NGC is a mechanism to leverage both concurrently. - -9. **Documentation** +8. **Documentation** The Holoscan SDK documentation is composed of: diff --git a/docs/sdk_installation.md b/docs/sdk_installation.md index 063a6963..19639950 100644 --- a/docs/sdk_installation.md +++ b/docs/sdk_installation.md @@ -2,10 +2,10 @@ # SDK Installation -The section below refers to the installation of the Holoscan SDK referred to as the **development stack**, designed for NVIDIA Developer Kits based on HoloPack or JetPack, and for x86_64 Linux compute platforms, ideal for development and testing of the SDK. +The section below refers to the installation of the Holoscan SDK referred to as the **development stack**, designed for NVIDIA Developer Kits (arm64), and for x86_64 Linux compute platforms, ideal for development and testing of the SDK. :::{note} -For Holoscan Developer Kits such as the [IGX Orin Developer Kit](https://www.nvidia.com/en-us/edge-computing/products/igx/), an alternative option is the [deployment stack](./deployment_stack.md), based on [OpenEmbedded](https://www.openembedded.org/wiki/Main_Page) ([Yocto](https://www.yoctoproject.org/) build system) instead of Ubuntu. This is recommended to limit your stack to the software components strictly required to run your Holoscan application. The runtime Board Support Package (BSP) can be optimized with respect to memory usage, speed, security and power requirements. +An alternative for the [IGX Orin Developer Kit](https://www.nvidia.com/en-us/edge-computing/products/igx/) is the [deployment stack](./deployment_stack.md), based on [OpenEmbedded](https://www.openembedded.org/wiki/Main_Page) ([Yocto](https://www.yoctoproject.org/) build system) instead of Ubuntu. This is recommended to limit your stack to the software components strictly required to run your Holoscan application. The runtime Board Support Package (BSP) can be optimized with respect to memory usage, speed, security and power requirements. ::: ## Prerequisites @@ -15,12 +15,24 @@ For Holoscan Developer Kits such as the [IGX Orin Developer Kit](https://www.nvi Set up your developer kit: -Developer Kit | User Guide | L4T | GPU Mode -------------- | ---------- | -------- | --- -[NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/) | [Guide](https://developer.nvidia.com/igx-orin-developer-kit-user-guide) | HoloPack 2.1 | iGPU **or*** dGPU -[NVIDIA Jetson AGX Orin](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-orin/) | [Guide](https://developer.nvidia.com/embedded/learn/jetson-agx-orin-devkit-user-guide/index.html) | JetPack 6.0 | iGPU - -_* iGPU and dGPU can be used concurrently on a single developer kit in dGPU mode with the [L4T Compute Assist container](./use_igpu_with_dgpu.md)_ +Developer Kit | User Guide | OS | GPU Mode +------------- | ---------- | --- | --- +[NVIDIA IGX Orin][igx] | [Guide][igx-guide] | [IGX Software][igx-sw] 1.0 DP | iGPU **or*** dGPU +[NVIDIA Jetson AGX Orin and Orin Nano][jetson-orin] | [Guide][jetson-guide] | [JetPack][jp] 6.0 | iGPU +[NVIDIA Clara AGX][clara-agx]
_Only supporting the NGC container_ | [Guide][clara-guide] | [HoloPack][sdkm] 1.2 | iGPU **or*** dGPU + +[clara-agx]: https://www.nvidia.com/en-gb/clara/intelligent-medical-instruments +[clara-guide]: https://github.com/nvidia-holoscan/holoscan-docs/blob/main/devkits/clara-agx/clara_agx_user_guide.md +[sdkm]: https://developer.nvidia.com/drive/sdk-manager +[igx]: https://www.nvidia.com/en-us/edge-computing/products/igx/ +[igx-guide]: https://developer.nvidia.com/igx-orin-developer-kit-user-guide +[igx-sw]: https://developer.nvidia.com/igx-downloads +[meta-tegra]: https://github.com/nvidia-holoscan/meta-tegra-holoscan +[jetson-orin]: https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-orin/ +[jetson-guide]: https://developer.nvidia.com/embedded/learn/jetson-agx-orin-devkit-user-guide/index.html +[jp]: https://developer.nvidia.com/embedded/jetpack + +_* iGPU and dGPU can be used concurrently on a single developer kit in dGPU mode. See [details here](./use_igpu_with_dgpu.md)._ ```` ````{tab-item} x86_64 @@ -29,14 +41,14 @@ You'll need the following to use the Holoscan SDK on x86_64: - OS: Ubuntu 22.04 (GLIBC >= 2.35) - NVIDIA discrete GPU (dGPU) - Ampere or above recommended for best performance - - [Quadro/NVIDIA RTX](https://www.nvidia.com/en-gb/design-visualization/desktop-graphics/) necessary for [GPUDirect RDMA][gpudirect] support + - [Quadro/NVIDIA RTX](https://www.nvidia.com/en-gb/design-visualization/desktop-graphics/) necessary for RDMA support - Tested with [NVIDIA Quadro RTX 6000](https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/quadro-product-literature/quadro-rtx-6000-us-nvidia-704093-r4-web.pdf) and [NVIDIA RTX A6000](https://www.nvidia.com/en-us/design-visualization/rtx-a6000/) - [NVIDIA dGPU drivers](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes): 535 or above ```` ````` -- For RDMA Support ([RoCE over ConnectX][roce] and/or [GPUDirect RDMA][gpudirect]), follow the instructions in the [Enabling RDMA](./set_up_gpudirect_rdma.md) section. +- For RDMA Support, follow the instructions in the [Enabling RDMA](./set_up_gpudirect_rdma.md) section. - Additional software dependencies might be needed based on how you choose to install the SDK (see section below). - Refer to the [Additional Setup](./additional_setup.md) and [Third-Party Hardware Setup](./third_party_hw_setup.md) sections for additional prerequisites. @@ -44,11 +56,70 @@ You'll need the following to use the Holoscan SDK on x86_64: We provide multiple ways to install and run the Holoscan SDK: -| | [NGC Container][container] | [Debian Package][deb] | [Python Wheels][pypi] | +### Instructions + +`````{tab-set} +````{tab-item} NGC Container +- **dGPU** (x86_64, IGX Orin dGPU, Clara AGX dGPU) + ```bash + docker pull nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu + ``` +- **iGPU** (Jetson, IGX Orin iGPU, Clara AGX iGPU) + ```bash + docker pull nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-igpu + ``` +See details and usage instructions on [NGC][container]. +```` +````{tab-item} Debian package + +- **IGX Orin**: Ensure the [compute stack is pre-installed](https://docs.nvidia.com/igx-orin/user-guide/latest/base-os.html#installing-the-compute-stack). +- **Jetson**: Install the latest [CUDA keyring package](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#network-repo-installation-for-ubuntu) for `ubuntu2204/arm64`. +- **x86_64**: Install the latest [CUDA keyring package](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#network-repo-installation-for-ubuntu) for `ubuntu2204/x86_64`. + +Then, install the holoscan SDK: +```sh +sudo apt update +sudo apt install holoscan +``` + +:::{note} +To leverage the python module included in the debian package (instead of installing the python wheel), include the path below to your python path. For example: +```sh +export PYTHONPATH="/opt/nvidia/holoscan/python/lib" +``` +::: + +```` +````{tab-item} Python wheel +```bash +pip install holoscan +``` +See details and troubleshooting on [PyPI][pypi]. + +:::{note} +For x86_64, ensure that the CUDA Runtime is installed, whether through [the CUDA Toolkit debian installation](https://developer.nvidia.com/cuda-12-2-2-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04) or with `python3 -m pip install nvidia-cuda-runtime-cu12`. +::: + +```` +````` + +[container]: https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/containers/holoscan +[pypi]: https://pypi.org/project/holoscan + +### Not sure what to choose? + +- The [**Holoscan container image on NGC**][container] it the safest way to ensure all the dependencies are present with the expected versions (including Torch and ONNX Runtime). It is the simplest way to run the embedded examples, while still allowing you to create your own C++ and Python Holoscan application on top of it. These benefits come at a cost: + - large image size from the numerous (some of them optional) dependencies. If you need a lean runtime image, see {ref}`section below`. + - standard inconvenience that exist when using Docker, such as more complex run instructions for proper configuration. + - supporting the CLI require more work than the other solutions at this time. +- If you are confident in your ability to manage dependencies on your own in your host environment, the **Holoscan Debian package** should provide all the capabilities needed to use the Holoscan SDK. +- If you are not interested in the C++ API but just need to work in Python, or want to use a different version than Python 3.10, you can use the [**Holoscan python wheels**][pypi] on PyPI. While they are the easiest solution to install the SDK, it might require the most work to setup your environment with extra dependencies based on your needs. + +| | NGC dev Container | Debian Package | Python Wheels | |---|:---:|:---:|:---:| | | | | | | Runtime libraries | **Included** | **Included** | **Included** | -| Python module | 3.8 | 3.8 | **3.8 to 3.11** | +| Python module | 3.10 | 3.10 | **3.8 to 3.11** | | C++ headers and
CMake config | **Included** | **Included** | N/A | | Examples (+ source) | **Included** | **Included** | [retrieve from
GitHub][examples] | | Sample datasets | **Included** | [retrieve from
NGC][data] | [retrieve from
NGC][data] | @@ -59,13 +130,9 @@ We provide multiple ways to install and run the Holoscan SDK: | [V4L2][v4l2] support [^6] | **Included** | automatically [^2]
installed | require manual
installation | | [Torch][torch] support [^7] | **Included** | require manual [^8]
installation | require manual [^8]
installation | | [ONNX Runtime][ort] support [^9] | **Included** | require manual [^10]
installation | require manual [^10]
installation | -| [MOFED RoCE][roce] support [^11] | **Included** | require manual [^13]
installation | require manual [^13]
installation | -| [Rivermax][rivermax] support [^11] | add on top [^12]
of the image | require manual [^13]
installation | require manual [^13]
installation | +| [MOFED][mofed] support [^11] | **User space included**
Install kernel drivers on the host | require manual
installation | require manual
installation | | [CLI] support | needs docker dind
with buildx plugin
on top of the image | needs docker w/
buildx plugin | needs docker w/
buildx plugin | -[container]: https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/containers/holoscan -[deb]: https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/resources/holoscan_dev_deb -[pypi]: https://pypi.org/project/holoscan [examples]: https://github.com/nvidia-holoscan/holoscan-sdk/blob/main/examples#readme [data]: https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/collections/clara_holoscan [npp]: https://developer.nvidia.com/npp @@ -74,34 +141,19 @@ We provide multiple ways to install and run the Holoscan SDK: [v4l2]: https://en.wikipedia.org/wiki/Video4Linux [torch]: https://pytorch.org/ [ort]: https://onnxruntime.ai/ -[rivermax]: https://developer.nvidia.com/networking/rivermax -[rivermax-program]: https://developer.nvidia.com/nvidia-rivermax-sdk -[mofed-dl]: https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ -[roce]: -[gpudirect]: -[sdkm]: https://developer.nvidia.com/sdk-manager +[mofed]: https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ [cli]: ./holoscan_packager.md -[^1]: [CUDA 12](https://docs.nvidia.com/cuda/archive/12.1.1/cuda-installation-guide-linux/index.html) is required. Already installed on NVIDIA developer kits with HoloPack and JetPack. +[^1]: [CUDA 12](https://docs.nvidia.com/cuda/archive/12.1.1/cuda-installation-guide-linux/index.html) is required. Already installed on NVIDIA developer kits with IGX Software and JetPack. [^2]: Debian installation on x86_64 requires the [latest cuda-keyring package](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#network-repo-installation-for-ubuntu) to automatically install all dependencies. -[^3]: NPP 12 needed for the FormatConverter and BayerDemosaic operators. Already installed on NVIDIA developer kits with HoloPack and JetPack. -[^4]: TensorRT 8.6.1+ and cuDNN needed for the Inference operator. Already installed on NVIDIA developer kits with HoloPack and JetPack. -[^5]: Vulkan 1.3.204+ loader needed for the HoloViz operator (+ libegl1 for headless rendering). Already installed on NVIDIA developer kits with HoloPack and JetPack. -[^6]: V4L2 1.22+ needed for the V4L2 operator. Already installed on NVIDIA developer kits with HoloPack and JetPack. +[^3]: NPP 12 needed for the FormatConverter and BayerDemosaic operators. Already installed on NVIDIA developer kits with IGX Software and JetPack. +[^4]: TensorRT 8.6.1+ and cuDNN needed for the Inference operator. Already installed on NVIDIA developer kits with IGX Software and JetPack. +[^5]: Vulkan 1.3.204+ loader needed for the HoloViz operator (+ libegl1 for headless rendering). Already installed on NVIDIA developer kits with IGX Software and JetPack. +[^6]: V4L2 1.22+ needed for the V4L2 operator. Already installed on NVIDIA developer kits with IGX Software and JetPack. [^7]: Torch support requires LibTorch 2.1+, TorchVision 0.16+, OpenBLAS 0.3.20+, OpenMPI (aarch64 only), MKL 2021.1.1 (x86_64 only), libpng and libjpeg. [^8]: To install LibTorch and TorchVision, either build them from source, download our [pre-built packages](https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/), or copy them from the holoscan container (in `/opt`). [^9]: ONNXRuntime 1.15.1+ needed for the Inference operator. Note that ONNX models are also supported through the TensoRT backend of the Inference Operator. [^10]: To install ONNXRuntime, either build it from source, download our [pre-built package](https://edge.urm.nvidia.com/artifactory/sw-holoscan-thirdparty-generic-local/) with CUDA 12 and TensoRT execution provider support, or copy it from the holoscan container (in `/opt/onnxruntime`). -[^11]: Tested with MOFED 23.07 and Rivermax SDK 1.31.10 -[^12]: Ensure to install the Rivermax license file on the host and mount it in the container -[^13]: Rivermax SDK and OFED drivers and libraries are installed on NVIDIA developer kits with [SDKM][sdkm] though the [Rivermax SDK program][rivermax-program] - -Refer to the documentation in each of these for specific install and run instructions. - -### Not sure what to choose? - -* The [Holoscan container image on NGC][container] it the safest way to ensure all the dependencies are present with the expected versions (including torch [^8]). It is the simplest way to run the embedded examples, while still allowing you to create your own C++ and Python Holoscan application on top of it. These benefits come with the standard inconvenience that exist when using Docker, such as more complex run instructions for proper configuration. Also, supporting Rivermax or the CLI require more work than the other solutions at this time. -* If you are confident in your ability to manage dependencies on your own in your host environment, the [Holoscan Debian package](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/resources/holoscan_dev_deb) should provide all the capabilities needed to use the Holoscan SDK. -* If you are not interested in the C++ API but just need to work in Python, or want to use a newer version than Python 3.8 (up to 3.11), you can use the [Holoscan python wheels](https://pypi.org/project/holoscan/) on PyPI (just `pip install holoscan`). While they are the easiest solution to get started, you might need additional work to setup your environment with adequate dependencies depending on your needs. +[^11]: Tested with MOFED 23.07 ### Need more control over the SDK? @@ -110,3 +162,9 @@ The [Holoscan SDK source repository](https://github.com/nvidia-holoscan/holoscan :::{attention} We only recommend building the SDK from source if you need to build it with debug symbols or other options not used as part of the published packages. If you want to write your own operator or application, you can use the SDK as a dependency (and contribute to [HoloHub](https://github.com/nvidia-holoscan/holohub)). If you need to make other modifications to the SDK, [file a feature or bug request](https://forums.developer.nvidia.com/c/healthcare/holoscan-sdk/320/all). ::: + +(runtime-container)= + +### Looking for a light runtime container image? + +The current Holoscan container on NGC has a large size due to including all the dependencies for each of the built-in operators, but also because of the development tools and libraries that are included. Follow the [instructions on GitHub](https://github.com/nvidia-holoscan/holoscan-sdk#runtime-container) to build a runtime container without these development packages. This page also includes detailed documentation to assist you in only including runtime dependencies your Holoscan application might need. diff --git a/docs/set_up_gpudirect_rdma.md b/docs/set_up_gpudirect_rdma.md index 677cda27..ca5a458f 100644 --- a/docs/set_up_gpudirect_rdma.md +++ b/docs/set_up_gpudirect_rdma.md @@ -15,14 +15,10 @@ _Skip to the next section if you do not plan to leverage a ConnectX SmartNIC._ The NVIDIA IGX Orin developer kit comes with an embedded [ConnectX Ethernet adapter](https://www.nvidia.com/en-us/networking/ethernet-adapters/) to offer advanced hardware offloads and accelerations. You can also purchase an individual ConnectX adapter and install it on other systems such as x86_64 workstations. -The following steps are required to ensure your ConnectX can be used for RDMA: +The following steps are required to ensure your ConnectX can be used for RDMA over Converged Ethernet ([RoCE](https://docs.nvidia.com/networking/display/mlnxofedv23070512/rdma+over+converged+ethernet+(roce))): ### 1. Install MOFED drivers -:::{tip} -On NVIDIA developer kits, the Mellanox OFED drivers can be installed by selecting the **Rivermax** option in the [SDK Manager](https://developer.nvidia.com/sdk-manager) after having joined the [Rivermax SDK program](https://developer.nvidia.com/nvidia-rivermax-sdk). -::: - Ensure the Mellanox OFED drivers version 23.07 or above are installed: ```bash @@ -108,7 +104,7 @@ CA 'mlx5_1' ``` If no results appear after `ibstat` and `sudo lsmod | grep ib_core` returns a result like this: ```sh -ib_core 425984 1 ib_uverbs +ib_core 425984 1 ib_uverbs ``` Consider running the following command or rebooting: @@ -218,12 +214,14 @@ For example, to communicate with `192.168.1.1/24` above (`/24` -> `255.255.255.0 Only supported on NVIDIA's Quadro/workstation GPUs (not GeForce). ::: +Follow the instructions below to enable [GPUDirect RDMA](https://developer.nvidia.com/gpudirect): + `````{tab-set} ````{tab-item} dGPU On dGPU, the GPUDirect RDMA drivers are named `nvidia-peermem`, and are installed with the rest of the NVIDIA dGPU drivers. :::{attention} -To enable the use of GPUDirect RDMA with a ConnectX SmartNIC (section above), the following steps are required if the MOFED drivers were installed after the peermem driver, which is currently the case with SDKManager on IGX Orin: +To enable the use of GPUDirect RDMA with a ConnectX SmartNIC (section above), the following steps are required if the MOFED drivers were installed after the peermem drivers: ```bash nv_driver_version=$(modinfo nvidia | awk '/^version:/ {print $2}' | cut -d. -f1) @@ -247,7 +245,7 @@ Run the following to load it automatically during boot: ````{tab-item} iGPU :::{warning} -At this time the HoloPack 2.1 and JetPack 6.0 support for GPU Direct RDMA with `nvidia-p2p` is missing. The instructions below are for HoloPack 2.0 and Jetpack 5.1.2, but they're not compatible with Holoscan SDK 1.0, only 0.6. +At this time the IGX SW 1.0 DP and JetPack 6.0 DP are missing the `nvidia-p2p` kernel for support for GPU Direct RDMA support. They're planned in the respective GA releases. The instructions below are to load the kernel module once it is packaged in the GA releases. ::: On iGPU, the GPUDirect RDMA drivers are named `nvidia-p2p`. Run the following to load the kernel module manually: @@ -274,8 +272,6 @@ then be used as samples in order to develop custom applications that use the Rivermax SDK to optimize data transfers. :::{note} -The Rivermax SDK can be installed onto the Developer Kit via SDK Manager by selecting it as an additional SDK during the HoloPack installation. Access to the Rivermax SDK Developer Program as well as a valid Rivermax software license is required to use the Rivermax SDK. - The Linux default path where Rivermax expects to find the license file is `/opt/mellanox/rivermax/rivermax.lic`, or you can specify the full path and file name for the environment variable `RIVERMAX_LICENSE_PATH`. ::: @@ -392,7 +388,7 @@ rivermax_sdk=$DOWNLOAD_PATH/1.31.10 b. Build the `generic_receiver` app with GPUDirect support from the [Rivermax GitHub Repo](https://github.com/NVIDIA/Rivermax). Before following the instructions to [build with CUDA-Toolkit support](https://github.com/NVIDIA/Rivermax/blob/master/generic_receiver/README.md#how-to-build), apply the changes to file `generic_receiver/generic_receiver.cpp` in [this PR](https://github.com/NVIDIA/Rivermax/pull/3/files), this was tested on the IGX Orin Developer Kit with Rivermax 1.31.10. - c. Launch the `generic_receiver` application from the `build` directory: + c. Launch the `generic_receiver` application from the `build` directory: ```bash $ sudo ./generic_receiver -i 10.0.0.2 -m 10.0.0.2 -s 10.0.0.1 -p 5001 -g 0 diff --git a/docs/use_igpu_with_dgpu.md b/docs/use_igpu_with_dgpu.md index 41fda552..5062c6e5 100644 --- a/docs/use_igpu_with_dgpu.md +++ b/docs/use_igpu_with_dgpu.md @@ -1,9 +1,23 @@ # Use both Integrated and Discrete GPUs on Holoscan developer kits -Holoscan developer kits like the [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/) or the [NVIDIA Clara AGX](https://www.nvidia.com/en-gb/clara/intelligent-medical-instruments/) have both a discrete GPU (dGPU - optional on IGX Orin) and an integrated GPU (iGPU - Tegra SoC). At this time, when these developer kits are flashed (using HoloPack) to leverage the discrete GPU, the integrated GPU cannot be used due to conflicts between the CUDA libraries for dGPU and iGPU stack. +Holoscan developer kits like the [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/) or the [NVIDIA Clara AGX](https://www.nvidia.com/en-gb/clara/intelligent-medical-instruments/) have both a discrete GPU (dGPU - optional on IGX Orin) and an integrated GPU (iGPU - Tegra SoC). -Starting with the Holoscan SDK 0.5, we provide a utility container on NGC named [L4T Compute Assist](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/containers/l4t-compute-assist) which isolates the iGPU stack in order to enable iGPU compute on the developer kits configured for dGPU. Other applications can run concurrently on the dGPU, natively or in another container. +As of this release, when these developer kits are flashed to leverage the dGPU, there are two limiting factors preventing the use of the iGPU: + +1. Conflict between the dGPU kernel mode driver and the iGPU display kernel driver (both named `nvidia.ko`). This conflict is not addressable at this time, meaning that **the iGPU cannot be used for display while the dGPU is enabled**. +2. Conflicts between the user mode driver libraries (ex: `libcuda.so`) and the compute stack (ex: `libcuda_rt.so`) for dGPU and iGPU. + +We provide utilities to work around the second conflict: + +`````{tab-set} +````{tab-item} IGX SW 1.0 DP +An improved solution will be introduced alongside the IGX SW 1.0 GA release. +```` +````{tab-item} HoloPack 1.2+ +The [L4T Compute Assist](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/containers/l4t-compute-assist) is a container on NGC which isolates the iGPU stack in order to enable iGPU compute on the developer kits configured for dGPU. Other applications can run concurrently on the dGPU, natively or in another container. +```` +````` :::{attention} -This container enables using the iGPU for compute capabilities only (not graphics). +These utilities enable using the iGPU for capabilities other than **display** only, since they do not address the first conflict listed above. ::: diff --git a/run b/run index 17429b8b..68d8c5ca 100755 --- a/run +++ b/run @@ -930,6 +930,11 @@ launch() { mount_device_opt+=" --device $video_dev" done + # Mount Tegra's Video Input unit (capture data from CSI) device nodes + for capture_dev in $(find /dev -regex '/dev/capture-vi-channel[0-9]+'); do + mount_device_opt+=" --device $capture_dev" + done + # Mount AJA device nodes for aja_dev in $(find /dev -regex '/dev/ajantv2[0-9]+'); do mount_device_opt+=" --device $aja_dev" @@ -1000,6 +1005,9 @@ launch() { # --device /dev/video${i} # Mount video capture devices for V4L2 # + # --device /dev/capture-vi-channel${i} + # Mount Tegra's Video Input unit to capture from CSI + # # --device /dev/ajantv2${i} # Mount AJA capture cards for NTV2 #