LiDAR-based Panoptic Segmentation via Dynamic Shifting Network
dockerでDS-Netを使うための環境構築を行う。
docker container作成
以下のコマンドを実行。pytorchのバージョンは1.5, cuda=10.1, cudnn=7。
docker run -it \
--name dsnet2 \
--gpus all \
--env DISPLAY=$DISPLAY \
--env XAUTHORITY=$XAUTH \
--volume /tmp/.X11-unix:/tmp/.X11-unix \
--volume /home:/home \
--volume /usr/local:/usr/local \
--workdir ~ \
pytorch/pytorch:1.5-cuda10.1-cudnn7-runtime
コンテナ内で以下をインストールする。
Dockerfileを書いてimageを作る際にインストールするのがより良さそう。
- apt install
- gcc
- g++
- build-essential
- git
- cmake=3.13
- wget
- libboost-all-dev
- pip
- easydict
- hdbscan
- numba
- numpy
- pyyaml
- scikit-learn
- scipy
- tensorboard=2.3.0
- torchvision=0.6.0
- torch-cluster=1.5.7
- torch-scatter=1.3.2
- tqdm
- spconv=1.1
cmakeをインストール
cmake=3.13のインストールは以下のコマンドで行う。
wget https://cmake.org/files/v3.13/cmake-3.13.4-Linux-x86_64.sh
chmod +x cmake-3.13.4-Linux-x86_64.sh
./cmake-3.13.4-Linux-x86_64.sh --prefix=/usr/local --skip-license
spconvをインストール
spconv=1.1をgitからcloneしてインストールする。
v1.1を使うためにspconvディレクトリの中で以下のコマンドを実行する。
git checkout v1.1
third_partyディレクトリにあるpybind11の中身が空になっているので以下のサイトからgit cloneする。
そして、ディレクトリに入り以下のコマンドを実行してチェックアウトする。
git checkout 085a294
以下のコマンドを実行してspconvをインストールするが、下に示すようなエラーが出てくる。
python setup.py bdist_wheel
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_CUBLAS
linked by target "cuhash" in directory /root/spconv/src/cuhash
linked by target "spconv" in directory /root/spconv/src/spconv
このエラーはlibcublas.soが見つからないといったもの。
cuda10.1を使っており、それらのファイルはcuda10.2の方になぜかあるようだった。
以下のコマンドで探すとcuda-10.2以下に入っていることが分かる。
find /usr -name libcublas*
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt_static.a
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10.2.3.254
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublas.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublasLt.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas_static.a
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10.2.3.254
/usr/local/cuda-10.1/doc/man/man7/libcublas.7
/usr/local/cuda-10.1/doc/man/man7/libcublas.so.7
なので、/usr/local/cuda-10.1/lib64以下にシンボリックリンクを貼ることで対応は可能。
pytorchのバージョンに注意
また、pytorchのバージョンが1.5(>1.1)なので、以下に気をつけ、修正する必要がある。
if you are using pytorch 1.4+ and encounter “nvcc fatal: unknown -Wall”, you need to go to torch package dir and remove flags contains “-Wall” in INTERFACE_COMPILE_OPTIONS in Caffe2Targets.cmake. This problem can’t be fixed in this project (to avoid this, I need to remove all torch dependency in cuda sources and drop half support).
まず、以下のコマンドでPyTorch パッケージディレクトリの場所を確認する。
このコマンドは、torch
パッケージのディレクトリへのパスを表示する。通常、/opt/conda/lib/python3.7/site-packages/torch
などのパスになる。
python -c "import torch; print(torch.__file__)"
#/opt/conda/lib/python3.7/site-packages/torch/__init__.py
次にCaffe2 の CMake ディレクトリに移動する
torch
パッケージディレクトリ内の caffe2
ディレクトリに移動する。Caffe2Targets.cmake
ファイルを探す。
INTERFACE_COMPILE_OPTIONS
に含まれる -Wall
フラグを含む行を探す。そして-Wallを削除する。削除したのは以下のようになる。
INTERFACE_COMPILE_OPTIONS "-Wextra;-Wno-unused-parameter;-Wno-missing-field-initializers;-Wno-write-strings;-Wno-unknown-pragmas;-Wno-missing-braces;-fopenmp"
自分の場合はINTERFACE_COMPILE_OPTIONSごとすべてコメントアウトする必要があった。
最後に以下を実行してspconvのインストールを完了する。
cd dist
pip install ./spconv-1.1-cp37-cp37m-linux_x86_64.whl
.bashrcにはCUDA関連のパスは以下のようにしている。
#CUDA
export PATH="/usr/local/cuda-10.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH"
export CUDNN_INCLUDE_PATH=/usr/local/cuda-10.1/include
export CUDNN_LIBRARY_PATH=/usr/local/cuda-10.1/lib64
export CUDACXX=/usr/local/cuda-10.1/bin/nvcc # これがないとエラー
参考