Highlights
Second pre-release of NCore 20, for testing in downstream projects before the 20.0 release. Install with pip install --pre nvidia-ncore or nvidia-ncore==20.0.0a2. It adds asynchronous APIs at the sequence level, faster opening of remote sequences, and lower memory use of opened sequences; see the v20.0.0-alpha.1 release for the zarr-python 3 support, faster reads and API changes of NCore 20.
Asynchronous compat API
AsyncSequenceLoaderProtocoland the asynchronous sensor / labels / point-cloud protocols (ncore.data) extend the synchronous protocols with*_asyncreads (e.g.get_frame_data_async,get_frame_point_cloud_async).SequenceLoaderV4implements them via the asynchronous component reads; useisinstance(loader, AsyncSequenceLoaderProtocol)to check a loader.SequenceLoaderProtocol.query_camera_labelsreturns aSequenceinstead of aList.
Opening sequences
- Remote
.itarcomponent stores (asynchronous fsspec filesystems, e.g. s3fs) are opened with a single suffix range request (one more if the index doesn't fit intoitar_index_tail_read_size), instead of five requests per store. This applies to the existing synchronous APIs as well. SequenceLoaderV4.open_async/SequenceComponentGroupsReader.open_asyncopen sequences without blocking the event loop, so opening many sequences concurrently overlaps their requests;max_concurrent_requestsbounds the stores opened at once (a number, or anasyncio.Semaphoreshared by sequences). 64 sequences of 2 stores on an S3-compatible object store open in 0.10 s per sequence withopen_async, compared to 2.7 s per sequence one after another and 0.59 s with 16 threads before.- s3fs bounds the requests in flight by its connection pool (
max_pool_connections, default 10); raise it to open many stores concurrently.
Memory of opened sequences
- Readers release the tail read of each
.itarstore (the end of the archive read when opening it, up to 1 MiB) once its hierarchy is opened from its consolidated metadata, and only keep the decoded index: 0 MiB instead of 22 MiB of tail reads held for the 35 stores of the test sequence. Records near the end of the archives are read from storage when accessed.itar_index_tail_retention="keep"restores the previous behavior,"keep_complete_archives"keeps the tail reads of small stores that fit into them completely.
Camera models
- The inverse of
OpenCVFisheyeCameraModel(image points to rays) converges for calibrations where it previously didn't (errors of more than 1 rad, or NaN): Newton iterations safeguarded by a bracket on the increasing branch of the polynomial.newton_iterationsis an upper bound now (default 20 instead of 3); well-conditioned calibrations cost the same as before.
Changes below the components since v20.0.0-alpha.1
IndexedTarArchiveis restructured: its index (de)serialization, record index and record sources are separate internal classes. Its public methods are unchanged;IndexedTarArchive.open_async/IndexedTarZarrStore.open_asyncare added.- Readers no longer check
.itarpaths for existence before opening them (requests that added latency on remote storage): a missing archive still raisesFileNotFoundError, from reading its index.
Changes since v20.0.0-alpha.1
➕ Added
- (data) open sequences asynchronously (dfe3729) - @janickm
- (data) asynchronous reads of SequenceLoaderV4 (d49ca46) - @janickm
- (data) asynchronous compat protocols (d97b7ce) - @janickm
🪲 Fixed
- (sensors) apply the converged Newton step in the bracketed fisheye inverse (16d2f65) - @janickm
- (sensors) bracket the OpenCV fisheye inverse to the monotonic branch (71a0602) - @janickm
⚡ Performance
- (data) release index tail reads of opened archives (10c2609) - @janickm
- (data) open remote indexed tar archives with a single request (f57784c) - @janickm
🔄 Changed
⚙️ CI
🏗️ Build
All changes since v19.8.0
➕ Added
- (data) open sequences asynchronously (dfe3729) - @janickm
- (data) asynchronous reads of SequenceLoaderV4 (d49ca46) - @janickm
- (data) asynchronous compat protocols (d97b7ce) - @janickm
- (data) range reads of remote archives for synchronous reads (1880cb6) - @janickm
- (data) asynchronous component reader API (f67caa3) - @janickm
- BREAKING (data) zarr format v3 stores (c5fce26) - @janickm
- BREAKING (data) support zarr-python 3 (2cee604) - @janickm
- BREAKING (data) typed node API for component groups (ff2eeb0) - @janickm
🪲 Fixed
- (sensors) apply the converged Newton step in the bracketed fisheye inverse (16d2f65) - @janickm
- (sensors) bracket the OpenCV fisheye inverse to the monotonic branch (71a0602) - @janickm
- (data) read single poses with their stored dtype (1de0192) - @janickm
- type narrowing in ncore_export_ply and the argoverse2 converter test (348262a) - @janickm
- (kitti) keep lidar point timestamps integer (5bf8f9f) - @janickm
⚡ Performance
- (data) release index tail reads of opened archives (10c2609) - @janickm
- (data) open remote indexed tar archives with a single request (f57784c) - @janickm
- (data) direct chunk reads with zarr-python 3 (979882a) - @janickm
- (data) node cache for component readers (0d6c43d) - @janickm
- (data) cache decoded label types and schemas in CameraLabelDescriptor.from_dict (1813046) - @janickm
- (data) load label and point-cloud reader data on first use (fe6eaf2) - @janickm
🔄 Changed
- (data) restructure IndexedTarArchive (fd9a4f0) - @janickm
- BREAKING (data) implement IndexedTarArchive independently of zarr-python (cd3078f) - @janickm
⚙️ CI
- release notes tool in Python, commit check in build-and-test (069aee8) - @janickm
- separate the changes since the previous pre-release in release notes (3c48a54) - @janickm
- publish the documentation built by build-and-test (ed2d016) - @janickm
- refresh the Bazel disk cache on every push (09a3665) - @janickm
- remove merge queue triggers (3f52089) - @janickm
- write release notes into the release commit body (ccc650a) - @janickm
- release from main and release branches when the version changes (e8aba41) - @janickm
🏗️ Build
- pinned cocogitto via rules_multitool (e5ca2c9) - @janickm
- don't compress the repacked patched torch wheel (dc91c12) - @janickm
- add python 3.12 / 3.13 test environments (5b5fc02) - @janickm
🎨 Style
🧪 Tests
Changes since v20.0.0-alpha.1: v20.0.0-alpha.1...v20.0.0-alpha.2
Full diff: v19.8.0...v20.0.0-alpha.2