目的
前回のブログでは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とかだとフルで動かせるのかな?
使用マシンとバージョンはJetson AGX Xavier、Jetpack4.5.1Oです。
返信削除Open3Dのディレクトリでbuildディレクトリを作って移動後のcmake〜を実行すると、
tendorflowとOpen3DのAVIが非マッチになり、
またPytorchの場合はTorchConfig.cmakeを”Torch_DIR"に設定しろと怒られ、その通りにしても同じことで怒られ続けます。
Open3Dビルドの前のCXX_AVIの確認ではご記載の通りの表示になります。
このエラーの解決に心当たりはありますでしょうか?
ご都合がよろしければご教示いただければ幸いです。
宜しくお願いいたします。
Open3Dのリビジョンはいつのものでしょうか?
削除最近のcommitでGLIBCXX_USE_CXX11_ABIがデフォルトでONになったと思います。
GLIBCXX_USE_CXX11_ABI=OFFにする必要があると思います。
PyTorchのエラーについてはちょっといまのところ思い当たるところがありません。最近のリビジョンでどうか試してみる必要がありそうです。