Release Artifacts
- π Docker container: tag
v2.9.0-dgpu
andv2.9.0-igpu
- π Python wheel:
pip install holoscan==2.9.0
- π¦οΈ Debian packages:
2.9.0.0-1
- π Documentation
See supported platforms for compatibility.
Release Notes
New Features and Improvements
Core
-
It is now possible to define custom
Condition
classes from Holoscan SDK's C++ and Python APIs. This native condition functionality can be used to implement custom control over when an operator will be scheduled to execute. See the new condition creation guide and ping_peridoic_native examples for more details. -
Extended support for wrapping Holoscan SDK components for use in GXF with the new
ResourceWrapper
class and an extended CMake support module. -
Release v2.8 added the ability to pass message-based
Condition
types as an argument tomake_operator
(C++) or as a positional argument to the operator's constructor (Python). For example, aMessageAvailableCondition
orCudaStreamCondition
could be specified by using the name of the input or output port passed as the value of the "receiver" or "transmitter" parameter. Connection to the actualReceiver
orTransmitter
object that gets created internally by the SDK for that port will happen automatically. As of release v2.9, any ports involved in such a user-provided condition will not automatically also have the defaultMessageAvailableCondition
orDownstreamMessageAffordableCondition
added to them. This avoids forcing the user to modify the Operator'ssetup
method to add aConditionType::kNone
(C++) /ConditionType.NONE
(Python) on the port so that no default condition is added. -
A default
CudaStreamPool
resource is now automatically added to all operators (unless the node on which the application is running does not have a CUDA-capable device). This makes the new stream handling APIs added in v2.8 easier to use as the user does not need to manually configure their own stream pools unless they want to use a pool with non-default flags or priority settings.
Operators/Resources/Conditions
-
The
V4L2VideoCaptureOp
now supports new features- capture to CUDA pinned memory or on L4T to CUDA managed memory
- support setting the frame rate
- print selected format, resolution and frame rate
- support for FOURCC formats which have a equivalent GXF video format: AB24, RA24, BA24, AR24, XB24, RX24, BX24, XR24, RGB3, BGR3, GREY, Y16 , NV12, YU12, NV24 (fixes issue 43254684325468)
- output FOURCC format and YCbCr transfer function as metadata
- for formats not supported by GXF video buffer, output a tensor
- workaround for HDMI IN reporting the wrong pixel format on R34 and below (issue 4168439)
-
The
V4L2VideoCaptureOp
format conversion to RGBA and parameterspass_throgh
andallocator
are now deprecated and will be removed in a future version. -
The
v4l2_camera
examples now checks the metadata output byV4L2VideoCaptureOp
to build aHolovizOp
InputSpec. -
The
FormatConverterOp
now supports conversion from YUYV to RGB. -
The
HolovizOp
now prints more information about the current input buffer format and the supported formats if an input buffer format is not supported.
Holoviz module
Holoinfer module
Utils
HoloHub
Documentation
Breaking Changes
-
In previous releases, for all
Condition
classes, thereceiver
,receivers
,transmitter
ortransmitters
parameter and methods all used the genericholoscan::gxf::GXFResource
base class. In v2.9.0 these have been changed to use the respectiveholoscan::Receiver
orholoscan::Transmitter
types instead of the parentholoscan::gxf::GXFResource
class so that methods for determining thesize
andcapacity
of the transmitter or receiver queue are directly available. This change is unlikely to affect existing application code as creation and connection ofReceiver
andTransmitter
objects for an operator's input or output ports is not done directly by the application author (they are created internally by theGXFExecutor
class during application start). -
The health check service in a distributed application now runs on the same port as the App Driver (default:
8765
) and/or the App Worker. Therefore, the environment variableHOLOSCAN_HEALTH_CHECK_PORT
is no longer supported. However, the health check service can still be turned on or off by settingHOLOSCAN_ENABLE_HEALTH_CHECK
.
Bug fixes
Issue | Description |
---|
Known Issues
This section describes unresolved issues identified during development and QA for 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. |
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 |