跳转至

Jetson Xavier NX (ARM) 使用 PyTorch 安装 Open3D-ML 指南

由于 Jetson 为 ARM64 (aarch64) 的系统架构,所以不能用pip install 直接安装,需要通过源码编译。

升级系统 JetPack

由于 Open3D-ML 目前只支持 CUDA 10.0 以及 CUDA 11.*,并且 JetPack 的 CUDA 开发环境只有10.2、11.4以及12.2,所以我们只能选择 CUDA 11.4 进行安装。

使用 jtop命令查看 JetPack 版本。如果 Jetson 系统的 JetPack 低于 5.1.2 则需要通过 SDK Manager 升级到 JetPack 5.1.2。

如果你的系统已经是 JetPack 5.1.2 那我也推荐你通过 SDK Manager 重新安装一遍,排除难以发现的错误。

详细指南参考文章[Jetson Xavier NX 升级或重新安装 JetPack 指南]。

安装 PyTorch

安装教程参考文章[Jetson Xavier NX 安装 CUDA 支持的 Pytorch 指南]。

注意,PyTorch 的 CUDA 支持版本需要和 Open3D-ML 的一致,同为 CUDA 11.4。否则与最后安装 Open3D-ML 的时候会报错:

Open3D-ML Pytorch CUDA Version dont match

下载源码

下载 Open3D 源码

如果你之前下载过则不需要再下载:

git clone https://github.com/isl-org/Open3D.git

下载 Open3D-ML 源码

git clone https://github.com/isl-org/Open3D-ML.git

前提准备

安装依赖:

cd Open3D
bash util/install_deps_ubuntu.sh
pip install yapf

重新链接 6.0.29 的 libstdc++.so,否则会出现undefined reference to 'std::__throw_bad_array_new_Length()@GLIBCXX_3.4.29'的错误。

ln -sf /usr/local/lib64/libstdc++.so.6.0.29 /lib/aarch64-linux-gnu/libstdc++.so.6

编译安装

国际惯例,先创建一个 build 文件夹。

mkdir build
cd build
sudo cmake \
-DBUILD_CUDA_MODULE=ON \
-DBUILD_PYTORCH_OPS=ON \
-DBUILD_TENSORFLOW_OPS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DGLIBCXX_USE_CXX11_ABI=ON \
-DBUILD_PYTHON_MODULE=ON \
-DBUNDLE_OPEN3D_ML=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-DPython3_EXECUTABLE=/path/to/python \
-DOPEN3D_ML_ROOT=../../Open3D-ML \
..

-DBUILD_PYTORCH_OPS-DBUILD_TENSORFLOW_OPS分别为构建 PyTorch 版和构建 Tensorflow 版选项,两个选择可以同时为ON,本指南只构建 PyTorch。

-DBUILD_EXAMPLES表示是否构建官方示例,这里设置OFF不构建,可以缩短构建时间。

如果没有使用 Python 虚拟环境,则不需要-DPython3_EXECUTABLE;如果使用了 Python 虚拟环境,需要改成虚拟环境的 Python 的路径,使用which python查看路径。

-DOPEN3D_ML_ROOT为刚刚下载的 Open-ML 的源代码路径。

编译:

make -j$(nproc)

编译过程需要数个小时的时间。

编译完毕后需要添加一个环境变量:

vim ~/.zsh #或者 ~/.bashrc

在文件末尾添加一行:

export LD_PRELOAD=/usr/local/lib/libOpen3D.so

安装 Open3D C++ 库:

make install

安装 Open3D 与 Open3D-ML Python 库:

make install-pip-package -j$(nproc)

错误解决

undefined reference to '***' @GLIBCXX_3.4.29

这个错误问题出在系统的 libstdc++ 版本不够高。尝试使用strings /lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX命令查看 libstdc++ 是否支持 GLIBCXX_3.4.29,如果缺少 GLIBCXX_3.4.29 则请尝试软链接 libstdc++.so.6 到正确版本。

ln -sf /usr/local/lib64/libstdc++.so.6.0.29 /lib/aarch64-linux-gnu/libstdc++.so.6

如果提示找不到 libstdc++.so.6.0.29 文件,则请升级 libstdc++ 库。

undefined reference to GLIBCXX_3.4.29

CMAKE_CUDA_ARCHITECTURES now detected for NVCC

检查系统默认 CUDA 版本是否存在 nvcc 二进制文件。

sudo stat /usr/local/cuda/bin/nvcc

若提示不存在文件,则 CUDA 开发环境已经损坏,需要重新安装 JetPack。详细参考文章 [Jetson Xavier NX 升级或重新安装 JetPack 指南]。

/lib/Release/libOpen3D.so: cannot allocate memory in static TLS block

vim ~/.zsh #或者 ~/.bashrc

在文件末尾添加一行:

export LD_PRELOAD=/usr/local/lib/libOpen3D.so

ModuleNotFoundError: No module named ‘jupyter_packaging’

pip install jupyter-packaging

ModuleNotFoundError: No module named ‘ipywidgets’

pip install ipywidgets

Open3D was built with CUDA 11.4 but PyTorch was built with CUDA 10.2

这个警告表示,PyTorch 的 CUDA 版本和 Open3D-ML 的 CUDA 版本不一致。需要使用与 Open3D-ML 一致的 CUDA 版本重新构建安装 PyTorch。详细请参考文章[Jetson Xavier NX 安装 CUDA 支持的 Pytorch 指南]。

8481697106387_.pic

测试验证

python3 -c "import open3d.ml.torch"

若无任何输出,则表示安装成功。