Open3D (v1.7)
When you install certain 3D detection frameworks, such as mmdetection3d, Open3D is often installed automatically. However, pip install open3d installs a pre-compiled version that includes a GPU binary incompatible with PPU. You must rebuild it from source using the steps below.
The following steps use Open3D v0.18.0 as an example and have been tested and verified in a Docker environment with Torch 2.4 and CUDA 12.3.
Build steps
git clone -b v0.18.0 https://github.com/isl-org/Open3D
cd Open3D
apt update
apt install -y xorg-dev libxcb-shm0 libglu1-mesa-dev libc++-dev libc++abi-dev
# for cuda 12.4+
# If you use CUDA 12.4 or later, apply the community patch to upgrade the stdgpu version
git cherry-pick -X theirs b7e5f163e47213fb59eb93148ebd133360cbab26
# for cuda 11.x
touch /usr/local/PPU_SDK/CUDA_SDK/lib64/liblapack_static.a
# for torch 2.x
sed -i 's/CMAKE_CXX_STANDARD 14/CMAKE_CXX_STANDARD 17/g' CMakeLists.txt
mkdir build
cd build
cmake -DBUILD_CUDA_MODULE=ON \
-DBUILD_PYTORCH_OPS=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
..
make -j$(nproc)
make install
pip install yapf
make pip-package
pip install lib/python_package/pip_package/*.whl
python -c "import open3d"Unit test results
dir | file | |
. | test_color_map_optimization.py | 1 passed |
test_flags.py | 1 passed | |
test_octree.py | 9 passed | |
test_open3d_eigen.py | 39 passed | |
core | test_core.py | 552 passed |
test_hashmap.py | 16 passed | |
test_linalg.py | 2 failed, 82 passed | |
test_nn.py | 12 passed | |
test_size_vector.py | 3 passed | |
test_sycl_utils.py | 1 skipped | |
test_tensor_function.py | 40 passed | |
test_torch_integration.py | 5 passed | |
data | test_data.py | 31 passed, 4 skipped |
io | test_io.py rpc/test_remote_functions.py rpc/test_serialization.py | 3 passed, 1 skipped |
ml | test_contrib_iou.py | 4 passed |
test_contrib_subsample.py | 2 passed | |
ml_ops | test_cconv.py | 8 passed, 3 skipped |
test_fixed_radius_search.py | 3842 passed | |
test_general_sparseconv.py | 8 passed | |
test_invert_neighbors_list.py | 2 failed, 42 passed | |
test_ragged_tensor.py | 16 failed, 10 passed | |
test_voxelize.py | 2688 passed | |
... | 682 passed, 12 skipped | |
t | geometry/test_image.py | 6 passed |
geometry/test_lineset.py | 4 passed | |
geometry/test_pointcloud.py | 12 passed | |
geometry/test_raycasting_scene.py | 18 passed | |
geometry/test_tensormap.py | 9 passed | |
geometry/test_trianglemesh.py | 43 passed | |
io/test_noise.py | 1 passed | |
io/test_realsense.py | 2 skipped | |
registration/test_registration.py | 12 passed | |
registration/test_transformation_estimation.py | 8 passed | |
visualization | test_cpu_rendering.py | 1 skipped |
test_tensorboard_plugin.py | 4 skipped |
core/test_linalg.pyfails because it uses the unsupportedcusolverDnSgesvd_bufferSizeandcusolverDnDgesvd_bufferSizefunctions.A few test cases in the
ml_opsdirectory result in acore dumpederror at runtime.The current pass rate is 99.7% (8193/8213).
Known issues
Unit test runtime issues
test_linalg.py::test_svdThe
open3d.core.svdoperation fails because it uses the unsupportedcusolverDnSgesvd_bufferSizeandcusolverDnDgesvd_bufferSizefunctions.
test_invert_neighbors_list.pyPassing an incorrectly shaped input to
ml.ops.invert_neighbors_listcauses asegmentation fault (core dumped)error instead of the expectedException.
test_ragged_tensor.pyIterating through the elements of a
RaggedTensorcauses asegmentation fault (core dumped)error.