v2.7.0
Release Artifacts
- π Docker container: tag
v2.7.0-dgpu
andv2.7.0-igpu
- π Python wheel:
pip install holoscan==2.7.0
- π¦οΈ Debian packages:
2.7.0.0-1
- π Documentation
See supported platforms for compatibility.
Release Notes
New Features and Improvements
-
Flow Tracking API now has an option to have limited tracking only between root and leaf operators.
Intermediate operators are not timestamped if this feature is enabled withis_limited_tracking
parameter to thetrack()
method. This feature is useful when the user wants to track only the
end-to-end latency of the whole application and does not want fine-grained tracking data of each operator. -
The
requirements.txt
files for Python are no longer pinned to specific versions of each dependency. Instead a range of versions is allowed to make it easier to install the Python wheels alongside other third-party Python packages.
Core
-
Support for adding additional files and dependencies have been added to the Holoscan CLI Packager.
-
Flow Tracking in distributed applications are now supported on multiple machines.
-
It is now possible to use user-defined thread pools with applications using the
EventBasedScheduler
orMultiThreadScheduler
. Operators can be assigned to thread pools in order to pin operators to a specific thread. This new functionality is described in the user guide section on creating an application and has basic C++ and Python examples. -
Added the
HOLOSCAN_REGISTER_GXF_EXTENSIONS
option to register GXF extensions to the local Graph Composer
extension registry at build time (x86 build environment only).
Operators/Resources
-
The
HolovizOp
parameterwindow_close_scheduling_term
has been renamed towindow_close_condition
. For now, the old parameter name will also continue to work, but please migrate to the new name as the old one will be removed in a future release. -
The
HolovizOp
parameterwindow_close_condition
is also now available from the Python API. In most cases the user does not need to provide this parameter explicitly, but it can be used if there is a desire to also share the sameBooleanCondition
with other operators. -
There are two new
Condition
types which can be applied to control operator execution based on message arrival across multiple input ports of an operator. For example, only execute when some specific number of messages has arrived across multiple input ports (or alternatively, execute after a timeout interval even if not all messages have arrived). See the descriptions forMultiMessageAvailableCondition
andMultiMessageAvailableTimeoutCondition
in the docs section on conditions. Examples of use from both C++ and Python are given in https://github.com/nvidia-holoscan/holoscan-sdk/tree/main/examples/conditions/multi_message.
Holoviz module
- The Holoviz module now has a new API function 'PrimitiveCudaDevice()` which supports geometry data in CUDA memory.
Holoinfer module
- The ONNX runtime backend now
- supports end-to-end CUDA-based data buffers
- supports CUDA based inference on ARM
- is using the TensorRT provider additionally to the CUDA provider
- supports fp16 inference provided by the TensorRT provider
- writes engine cache files
Utils
HoloHub
Documentation
Breaking Changes
Bug fixes
Issue | Description |
---|---|
4930333 | It's possible that both AppDriver and AppWorker are launching a gRPC server on the same port, causing a conflict without any error message. This is fixed by ensuring that AppDriver and AppWorker use different ports for the gRPC server and display an error message if the port is already in use. |
4938973 | Holoscan log level settings are not applied to GXF log messages in Python applications. When using Pybind11 to create a Python extension module (e.g., _core.cpython-310-x86_64-linux-gnu.so), it links against the same C++ libraries as the main application (such as libholoscan_core.so ). However, without proper configuration, the dynamic linker may load separate copies of these shared libraries. This results in separate instances of global symbols, meaning each loaded library maintains its own set of global variables and functions. Consequently, nvidia::LoggingFunction exists in both the main application and the Python extension module, but at different memory addresses. The solution is to use the RTLD_GLOBAL flag when loading the holoscan.core._core module in Python. |
4824619 | iGPU: Rendering YUV images with HolovizOp fails on first run |
4956212 | Image is sometimes corrupted when using Holoviz to display YUV images which are in CUDA device memory |
Known Issues
This section details issues discovered during development and QA but unresolved in this release.
Issue | Description |
---|---|
4062979 | When Operators connected in a Directed Acyclic Graph (DAG) are executed in a multithreaded scheduler, it is not ensured that their execution order in the graph is adhered. |
4267272 | AJA drivers cannot be built with RDMA on IGX SW 1.0 DP iGPU due to missing nv-p2p.h . Expected to be addressed in IGX SW 1.0 GA. |
4384768 | No RDMA support on JetPack 6.0 DP and IGX SW 1.0 DP iGPU due to missing nv-p2p kernel module. Expected to be addressed in JP 6.0 GA and IGX SW 1.0 GA respectively. |
4190019 | Holoviz segfaults on multi-gpu setup when specifying device using the --gpus flag with docker run . Current workaround is to use CUDA_VISIBLE_DEVICES in the container instead. |
4210082 | v4l2 applications seg faults at exit or crashes at start with '_PyGILState_NoteThreadState: Couldn't create autoTSSkey maping' |
4339399 | High CPU usage observed with video_replayer_distributed application. While the high CPU usage associated with the GXF UCX extension has been fixed since v1.0, distributed applications using the MultiThreadScheduler (with the check_recession_period_ms parameter set to 0 by default) may still experience high CPU usage. Setting the HOLOSCAN_CHECK_RECESSION_PERIOD_MS environment variable to a value greater than 0 (e.g. 1.5 ) can help reduce CPU usage. However, this may result in increased latency for the application until the MultiThreadScheduler switches to an event-based multithreaded scheduler. |
4318442 | UCX cuda_ipc protocol doesn't work in Docker containers on x86_64. As a workaround, we are currently disabling the UCX cuda_ipc protocol on all platforms via the UCX_TLS environment variable. |
4325468 | The V4L2VideoCapture operator only supports YUYV and AB24 source pixel formats, and only outputs the RGBA GXF video format. Other source pixel formats compatible with V4L2 can be manually defined by the user, but they're assumed to be equivalent to RGBA8888. |
4325585 | Applications using MultiThreadScheduler may exit early due to timeouts. This occurs when the stop_on_deadlock_timeout parameter is improperly set to a value equal to or less than check_recession_period_ms , particularly if check_recession_period_ms is greater than zero. |
4301203 | HDMI IN fails in v4l2_camera on IGX Orin Devkit for some resolution or formats. Try the latest firmware as a partial fix. Driver-level fixes expected in IGX SW 1.0 GA. |
4384348 | UCX termination (either ctrl+c , press 'Esc' or clicking close button) is not smooth and can show multiple error messages. |
4481171 | Running the driver for a distributed applications on IGX Orin devkits fails when connected to other systems through eth1. A workaround is to use eth0 port to connect to other systems for distributed workloads. |
4458192 | 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 . |
4782662 | Installing Holoscan wheel 2.0.0 or later as root causes error. |
4768945 | Distributed applications crash when the engine file is unavailable/generating engine file. |
4753994 | Debugging Python application may lead to segfault when expanding an operator variable. |
Wayland: holoscan::viz::Init() with existing GLFW window fails. | |
4394306 | When Python bindings are created for a C++ Operator, it is not always guaranteed that the destructor will be called prior to termination of the Python application. As a workaround to this issue, it is recommended that any resource cleanup should happen in an operator's stop() method rather than in the destructor. |
4902749 | V4L2 applications segfault at start if using underlying NVV4L2 |
4909073 | V4L2 and AJA applications in x86 container report Wayland XDG_RUNTIME_DIR not set error |
4909088 | CPP video_replayer_distributed example throws UCX errors and segfaults on close |
4911129 | HoloHub Endoscopy Tool Tracking application latency exceeds 50ms on Jetson devices |
4903377 | The newly introduced RMMAllocator and StreamOrderedAllocator incorrectly parse the Bytes suffix ("B") as Megabytes ("MB") for all parameters related to memory size. Please specify any memory size parameters using the "KB", "MB", "GB" or "TB" suffixes instead. |
4966295 | Holoscan CLI Packager is unable to package Python application due to missing apt package. To workaround this issue, see issue 35. |