2021年2月22日月曜日

Jetson (JetPack 4.5) でOpen3D + Open3D-MLをビルドする

目的


前回のブログではJetson Nano (Jetpack 4.5) でOpen3DをUSE_SYSTEM_LIBREALSENSE(インストール済みライブラリをリンク)でビルドした。

今回は、Open3D-MLも含めてビルドする。


リファレンス




準備


Pythonの仮想環境のインストール


Open3D-MLを含めてビルド後、Python パッケージをインストールすると、システムでインストール済みのpyyamlを競合してしまう。
このため、Pythonの仮想環境にインストールする。

好みでvirtualenv virtualenvwrapperを選択。
$ sudo pip3 install virtualenv virtualenvwrapper

# Add to .bashrc
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin

$ source .bashrc
$ mkvirtualenv --python=python3 open3d
$ workon open3d


TensorFlowのインストール


リファレンスを参考にインストール。
(open3d) $ sudo apt-get update
(open3d) $ sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran

(open3d) $ pip3 install numpy==1.16.1 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11
(open3d) $ pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v45 tensorflow


PyTorchのインストル


こちらもフォーラムにあるとおりにインストール。
(open3d) $ wget https://nvidia.box.com/shared/static/cs3xn3td6sfgtene6jdvsxlr366m2dhq.whl -O torch-1.7.0-cp36-cp36m-linux_aarch64.whl
(open3d) $ sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
(open3d) $ pip3 install Cython
(open3d) $ pip3 install numpy torch-1.7.0-cp36-cp36m-linux_aarch64.whl


Open3Dのビルド


まずは、TensorFlow、PyTorchのCXX ABIの確認。
Open3Dのドキュメントにもあるとおり、TensorFlow、PyTorch、Open3Dで異なる CXX ABIであると問題が発生する。
(open3d) $ python -c "import torch; print(torch._C._GLIBCXX_USE_CXX11_ABI)"
True
(open3d) $ python -c "import tensorflow; print(tensorflow.__cxx11_abi_flag__)"
2021-02-22 18:53:09.238147: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2
1

CXX ABIはすべてCXX11 ABIであることが確認できた。

事前にInstall dependenciesにあるソフトウェアをインストール。

メモリを確保するため、CUIモードで作業。
(open3d) $ sudo systemctl set-default multi-user.target
(open3d) $ sudo reboot

あとは、ビルドするだけ。
CMakeのオプションで注意する点は以下。
  • BUILD_CUDA_MODULEをON
  • GLIBCXX_USE_CXX11_ABIをON
  • BUNDLE_OPEN3D_MLをONにして、OPEN3D_ML_ROOTにOpen3D-MLのパスを指定
  • BUILD_TENSORFLOW_OPS、BUILD_PYTORCH_OPSをON
  • make pip-packageする前にyapfパッケージをpipでインストールする
    (なぜかmakeで失敗する。たぶん、requirements.txtに必要?)
$ workon open3d
(open3d) $ git clone --recursive https://github.com/intel-isl/Open3D
(open3d) $ git clone https://github.com/intel-isl/Open3D-ML.git
(open3d) $ cd Open3D/
(open3d) $ mkdir build && cd build
(open3d) $ cmake \
    -DPYTHON_EXECUTABLE=$(which python3) \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_BENCHMARKS=ON \
    -DBUILD_CUDA_MODULE=ON \
    -DBUILD_CACHED_CUDA_MANAGER=ON \
    -DBUILD_GUI=ON \
    -DGLIBCXX_USE_CXX11_ABI=ON \
    -DBUILD_RPC_INTERFACE=ON \
    -DBUILD_TENSORFLOW_OPS=ON \
    -DBUILD_PYTORCH_OPS=ON \
    -DBUNDLE_OPEN3D_ML=ON \
    -DOPEN3D_ML_ROOT=../../Open3D-ML \
    -DCMAKE_BUILD_TYPE=Release \
    ..
(open3d) $ make -j 3 
(open3d) $ sudo make install
(open3d) $ pip install yapf
(open3d) $ sudo make pip-package
(open3d) $ pip install /home/jetson/Open3D/build/lib/python_package/pip_package/open3d-0.12.0+408d9d0a-cp36-cp36m-linux_aarch64.whl


確認


GUIモードに戻して、Window managerをLXDEに変更する(使えるメモリを増やすため)。
$ sudo systemctl set-default graphical.target
$ sudo reboot

その後、Open3D-MLのサンプルを動作させてみる。

ただ、Jetson Nanoのメモリ(4GB)では不足しているので
  • モデルはKPConvのみをロード
  • データも1種類(000700)だけロード
するように変更して実行する。



表示まで1、2分待ってなんとか動いた〜😅
(サンプルはPyTorchのモデルを実行するみたい。TensorFlowはどうだろうか?)

Jetson AGX XavierやJetson Xavier NXとかだとフルで動かせるのかな?

2 件のコメント:

  1. 使用マシンとバージョンはJetson AGX Xavier、Jetpack4.5.1Oです。
    Open3Dのディレクトリでbuildディレクトリを作って移動後のcmake〜を実行すると、
    tendorflowとOpen3DのAVIが非マッチになり、
    またPytorchの場合はTorchConfig.cmakeを”Torch_DIR"に設定しろと怒られ、その通りにしても同じことで怒られ続けます。
    Open3Dビルドの前のCXX_AVIの確認ではご記載の通りの表示になります。

    このエラーの解決に心当たりはありますでしょうか?

    ご都合がよろしければご教示いただければ幸いです。

    宜しくお願いいたします。

    返信削除
    返信
    1. Open3Dのリビジョンはいつのものでしょうか?
      最近のcommitでGLIBCXX_USE_CXX11_ABIがデフォルトでONになったと思います。
      GLIBCXX_USE_CXX11_ABI=OFFにする必要があると思います。
      PyTorchのエラーについてはちょっといまのところ思い当たるところがありません。最近のリビジョンでどうか試してみる必要がありそうです。

      削除