Conversation
…ackaging Enable BUNDLE_OPEN3D_ML automatically when PyTorch or TensorFlow ops are built, ship Open3D-ML pip deps as extras_require[ml], and validate imports via require_ml_extra. Bundle Filament LLVM libc++ on Linux GUI wheels with a small ldd helper; refresh CI/Docker for Open3D-ML main, CUDA 12.6+ arch defaults, and local style --changed-only.
|
Thanks for submitting this pull request! The maintainers of this repository would appreciate if you could update the CHANGELOG.md based on your changes. |
Contributor
There was a problem hiding this comment.
Pull request overview
Reduces Open3D wheel size by optionalizing ML dependencies and narrowing release CUDA architectures.
Changes:
- Adds the
mlpackage extra and dependency checks. - Updates CUDA targets, CI dependencies, and Open3D-ML checkout behavior.
- Bundles Linux GUI runtime libraries and adds changed-file style checking.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
CMakeLists.txt |
Automates ML bundling and revises CUDA targets. |
cmake/Open3DPrintConfigurationSummary.cmake |
Reports CUDA architecture settings. |
cpp/pybind/CMakeLists.txt |
Revises wheel runtime-library handling. |
cpp/pybind/make_python_package.cmake |
Packages ML requirements and Linux runtimes. |
cpp/pybind/package_linux_wheel_runtime.sh |
Copies required LLVM runtime libraries. |
python/setup.py |
Exposes ML dependencies as an extra. |
python/open3d/_optional_deps.py |
Validates optional ML dependencies. |
python/open3d/ml/configs.py |
Adds ML dependency validation. |
python/open3d/ml/datasets.py |
Adds ML dependency validation. |
python/open3d/ml/utils.py |
Adds ML dependency validation. |
python/open3d/ml/vis.py |
Adds ML dependency validation. |
util/ci_utils.sh |
Aligns runtime dependencies and CUDA architectures. |
util/check_style.py |
Adds changed-files-only formatting. |
docker/Dockerfile.ci |
Updates ML checkout and dependencies. |
3rdparty/README_SYCL.md |
Documents SYCL runtime installation. |
.github/workflows/windows.yml |
Uses Open3D-ML’s default branch. |
.github/workflows/ubuntu.yml |
Revises the documentation ML checkout. |
.github/workflows/ubuntu-wheel.yml |
Uses Open3D-ML’s default branch. |
.github/workflows/macos.yml |
Uses Open3D-ML’s default branch. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Make BUNDLE_OPEN3D_ML an option again, defaulting to ON only when ML ops are built and OPEN3D_ML_ROOT resolves, so local builds can opt out and CI jobs without an Open3D-ML checkout configure instead of erroring out. Windows wheels now bundle Open3D-ML too. Import the Open3D-ML backed submodules of open3d.ml, open3d.ml.torch and open3d.ml.tf lazily and gate them on require_ml_extra(), so the ops and layers stay usable with a core-only install and a missing dependency reports how to install the ml extra. Wheel tests install that extra. Keep Turing usable after dropping its SASS by emitting compute_75 PTX, which also needs a -virtual case when translating architectures for PyTorch. Fall back to the pybind extension when probing for libc++ in static builds, where libOpen3D is not packaged. Co-authored-by: Cursor <cursoragent@cursor.com>
NVIDIA's static CUDA libraries carry device code back to sm_50, ~47MB of which no GPU that Open3D supports can run. nvprune only accepts static libraries, not the linked Open3D library, so the imported CUDA targets are pruned and re-pointed before linking, cached per architecture list. Also fix the Windows path separator assertion in the TensorBoard plugin test, which started running there now that Windows wheels bundle Open3D-ML, and skip the module cleanly when the `ml` extra is not installed. Co-authored-by: Cursor <cursoragent@cursor.com>
Open
3 tasks
Open
3 tasks
Open
3 tasks
3 tasks
3 tasks
|
Check out this pull request on See visual diffs & provide feedback on Jupyter Notebooks. Powered by ReviewNB |
3 tasks
3 tasks
…hing PyTorch/NumPy (#7363)
…7497) Replace AssertTensorDevice(CPU) with .To(CPU) in InverseTransformation and TransformIndexer so callers with CUDA/SYCL tensors do not get device mismatch errors. Both functions read small float64 tensors (3x3 and 4x4) and copy the data into host-side arrays, so a device transfer is cheap and semantically correct. This is a general fix that covers all call sites including VoxelBlockGrid, PointCloud, and Image kernel paths.
Fix compilation error when building with USE_SYSTEM_EIGEN3=ON on macOS with clang++. The AddPoint template functions used Eigen::ArrayBase<Derived3> as an unconstrained parameter type, which causes substitution failures when the compiler instantiates Eigen::ArrayBase for types that don't derive from it. This manifests under stricter C++17 template resolution when Eigen is included from a system path (-isystem) rather than as a project-local header. Fix: - Add std::enable_if constraint requiring Derived3 to be derived from Eigen::ArrayBase<Derived3> - Change parameter from 'const Eigen::ArrayBase<Derived3>&' to 'const Derived3&' (semantically identical since Derived3 IS-A ArrayBase) Applied to both Accumulator::AddPoint and AccumulatorBackprop::AddPoint.
3 tasks
Previously BUNDLE_OPEN3D_ML=ON hardcoded GIT_TAG origin/main in the ExternalProject and ci_utils.sh forced a main branch checkout. This prevented reproducible builds using matching release tags. Add OPEN3D_ML_VERSION CMake cache variable (default: main) that controls the git ref checked out from the Open3D-ML repo. Users can set -DOPEN3D_ML_VERSION=v0.19.0 for reproducible builds or any other tag/branch. Also exposed as a Docker build arg in Dockerfile.ci, forwarded to cmake, and added to ci_build() in docker_build.sh (defaults to main). Removed the checkout -b main workaround in ci_utils.sh and Dockerfile.ci; replaced with fetch --tags so version tags are available when OPEN3D_ML_VERSION is set to one.
3 tasks
Defer Python callbacks via PostToMainThread instead of invoking them during ImGui draw/event processing, and pre-cast O3DVisualizer to py::object at bind time to avoid pybind11 cast blocking after multiple GIL save/restore cycles in ProcessQueuedEvents. Fixes #6979
3 tasks
Add SYCL image kernels for bilateral, Sobel, Gaussian, and nearest-neighbor resize operations used by tensor RGB-D odometry. Support the tested UInt8, UInt16, and Float32 image types with explicit errors for unsupported SYCL dtypes, while retaining the existing IPP and NPP paths. Enable SYCL coverage for point-to-plane, intensity, and hybrid odometry. Update image tests with full CPU/NPP/SYCL references and dtype coverage. Build and run the C++ tests on CPU and SYCL, plus the full 3000-frame Lounge reconstruction workflow with both intensity and hybrid odometry. Update reconstruction tutorials, C++ and Python examples, and tensor notebooks to document and accept SYCL alongside CUDA where the tensor path supports it. Remove duplicated point-cloud setup from the tensor point-cloud notebook and keep the complete creation example in its single intended cell. Keep notebook examples executable with the requested Python 3.12 environment; the cleaned point-cloud setup was run successfully on SYCL. Preserve SYCL device metadata when loading VoxelBlockGrid files and update the ray-casting example to transfer loaded grids to the requested device. Validate the SYCL-loaded grid, ray casting, and focused VoxelBlockGrid tests. Remove generated outputs from the updated Jupyter notebooks and add the missing plotting import required by the point-cloud notebook example.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Type
depth_truncparameter ignored when callingo3d.geometry.PointCloud.create_from_depth_image#6347, Error "vector too long" When Writing Large Point Cloud (>100M Points) to Binary PCD in open3d '0.16.0' #6607, Docs say jupyter visualization available in version 0.4.0, but not installed with latest version 0.18.0 #6979, Tensor reconstruction system cannot run on Intel integrated GPU with SYCL #7354, Tensor version of ICP don't stop when relatives on criteria are met #7367, registration_ransac_based_on_feature_matching cannot be deterministic #7475,compute_unique_block_coordinates()seems inconsistent with CUDA VoxelBlockGrid #7497, MacOS Build withUSE_SYSTEM_EIGEN3=ONError on#include <Eigen/Core>incpp/open3d/ml/impl/misc/VoxelPooling.h#7499,remove_radius_outlieris not thread-safe:std::vector<bool>mask written from a parallel loop #7538mainbranch, should be Open3D version tag for reproducible builds #7502Issues Fixed
depth_truncignored for float depth images increate_from_depth_imageIsContiguousdocs unclear (should be C-contiguous / row-major)IsContiguous/Contiguousdocs as C-contiguous matching PyTorch/NumPyregistration_ransac_based_on_feature_matchingnot deterministic despite seedcompute_unique_block_coordinatesfails with CUDA VoxelBlockGridInverseTransformation/TransformIndexerto accept non-CPU tensorsUSE_SYSTEM_EIGEN3=ONinVoxelPooling.hAddPointtemplatesmainbranch (not reproducible)OPEN3D_ML_VERSIONremove_radius_outlierdata race fromstd::vector<bool>in parallel loopstd::vector<bool>withstd::deque<bool>for thread safetyMotivation and Context
Total open3d wheel install size (blank virtual env): 1.41 GB. Most of the size comes from ML dependencies and CUDA SASS / PTX per-architecture binary code.
Separating ml dependencies saves ~335MB of installed disk space.
Where the CUDA wheel bytes are
Measured on the released
open3d-0.19.0-cp312-manylinux_2_35_x86_64.whl(426.9 MiB) by parsing every fat binary in.nv_fatbin:pybindextension.nv_fatbininside itFatbin bytes still deflate 2.10x inside the wheel, so removing 1 MiB of device code saves ~0.48 MiB of wheel and the full 1 MiB of installed size. Per-architecture slices:
Removing CUDA static libs for old architectures can save up to ~48MB from the wheel, but it was found to cause errors in Google CUDA runners with Tesla T4 GPUs. Reverted for future work.
Checklist:
python util/check_style.py --applyto apply Open3D code styleto my code.
updated accordingly.
results (e.g. screenshots or numbers) here.
Description
Reduce the wheel and installed size along three axes: make the Open3D-ML Python dependencies an optional
[ml]extra, ship Turing as PTX instead of SASS in release CUDA builds, and prune the GPU architectures we don't support out of NVIDIA's static CUDA libraries withnvprune.This PR also bundles multiple bug fixes and improvements — see the Issues Fixed table above for a complete list.
Changes
requirements.txtis packaged asextras_require["ml"], sopip install open3d[ml](oropen3d-cpu[ml]) pulls the models/pipelines/datasets dependencies.open3d.mlsubmodules are imported lazily (PEP 562__getattr__) soimport open3dworks without them, and the wrappers raise an actionable ImportError viarequire_ml_extra().BUNDLE_OPEN3D_MLdefaults to ON when ML ops are built andOPEN3D_ML_ROOTis set (still overridable with-D), Windows wheels bundle Open3D-ML too, and CI setsOPEN3D_ML_ROOTwherever Torch/TF ops are built.libc++/libc++abi/libunwindvia a smalllddhelper.[ml]extra when testing wheels that bundle Open3D-ML.dev_wheels.htmlpage; fix style check failures; fix TensorBoard summary test teardown errors; update copyright years to 2026; various CMake and CI fixes.Behavior changes
open3d[ml].