Vitis AIでPytorchの量子化(vai_q_pytorch)する場面があります。
Ver2.5でnvccの並列計算を使うには、環境のセットアップが必要です。
vai_q_pytorchをインストールする方法を紹介します。
Vitis AIでvai_q_pytorchをインストールしてみたメモ
Vitis AI 2.5でPytorchの量子化(vai_q_pytorch)を使う場面です。
GPU+NVCCなどを使った並列計算する場合は、セットアップが必要です。
(簡単なモデルの量子化に関しては、特に気にする必要はありません。)
2つ対応方法があり、vai_q_pytorchを(再)インストールする手法があります。
今回は後者を紹介します。(前者に関しては、最後に別記事のリンク貼っています)
- Docker ContainersのConda環境毎変えてしまう方法
- ソースコードから入れなおす方法
あくまで一例ですので、正しい手順は公式を参照してください。
Vitis-AIの下記マニュアル箇所の「Install from the Source Code」箇所です。
https://docs.xilinx.com/r/en-US/ug1414-vitis-ai/Installing-vai_q_pytorch
vai_q_pytorchをインストールは出来ました。
ただし最終的にPytorchで学習する際にエラーが発生して、別の手段をとりました。
公式の手順に従い、エラーが出た内容まで紹介します。
Vitis AI 2.5のGPU版で動かしています。
Vitis-AI 2.5のGPU dockerで確認しています。
下記記事でインストール・環境構築した内容を紹介しています。(リンク先はこちら)
Pytorchのconda環境を立ち上げて、使用するライブラリのセットアップを進めます。
1 |
conda activate vitis-ai-pytorch |
cuda-toolkitをインストールします
NVIDIAのHPからcuda-toolkitのインストーラを入手して対応します。
今回はGPUで動作させるためです。
(筆者はcudaのVer10-2で確認しました。各自にあったものをダウンロードします)
一番注意するのは、cudaの最後の手順通りに「sudo apt-get install -y cuda」としないこと。
sudo apt-get install -y cuda-toolkit-10-2 とtoolkitとVerまで指定すること。
docker上のインストールが終わらず、conda環境が構築できないためです。
1 2 3 4 5 6 7 8 |
conda activate vitis-ai-pytorch wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub sudo apt-get update sudo apt-get install -y cuda-toolkit-10-2 |
vai_q_pytorchをインストールする
公式の手順通り、bashrcにCUDAの環境変数は追記済です。
ホームディレクトリにて下記コマンドで編集可能です。
sudo vim ~/.bashrc
1 |
export CUDA_HOME=/usr/local/cuda |
Pytorchのconda環境を立ち上げて、使用するライブラリのセットアップを進めます。
各自でPytorchで学習する際に必要なものをインストールしておきます。(筆者例は下記でした)
https://github.com/pometa0507/6th-ai-reference2
「Install other dependencies」箇所は環境で異なります。筆者のは一例です。
requirements.txtをインストールしています。
1 2 3 4 |
~~~~~Install other dependencies~~~~~ cd 6th-ai-reference2/ pip install --user -r docker/requirements.txt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
特に狙ったわけではありませんが、公式の手順のVerと同じでした。
PytorchのVerに関しては1.7.1です。
※おそらくtorch環境を入れていないと最終的にエラーになります。
torch==1.7.1+cu110
torchvision==0.8.2+cu110
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
opencv-python==4.5.5.62 ipywidgets==7.6.5 fire==0.4.0 tensorboardX tensorflow protobuf numba numpy scikit-image scipy pillow psutil seaborn plotly tqdm nuscenes-devkit --find-links https://download.pytorch.org/whl/torch_stable.html torch==1.7.1+cu110 --find-links https://download.pytorch.org/whl/torch_stable.html torchvision==0.8.2+cu110 |
Vitis-AIのpytorch_bindingのフォルダに移動して、インストールします。
ただしvai_q_pytorchの動作確認をすると、Ninjaが必要とエラーが出ます。
RuntimeError: Ninja is required to load C++ extensions
1 2 3 4 5 6 7 8 9 |
cd src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/ python setup.py install python -c "import pytorch_nndct" ~~~~~~~~~~~~~~~~~~~~~~~ File "/home/vitis-ai-user/.local/lib/python3.7/site-packages/torch/utils/cpp_extension.py", line 1323, in verify_ninja_availability raise RuntimeError("Ninja is required to load C++ extensions") RuntimeError: Ninja is required to load C++ extensions ~~~~~~~~~~~~~~~~~~~~~~~ |
ninjaをインストールする
そのままdocker上でninjaをインストールします。
ninjaはCMAKEより高速・軽量というビルドシステムです。下記記事で紹介しています。
下記手順で対応可能です。
1 2 3 4 |
wget https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip sudo unzip ninja-linux.zip -d /usr/local/bin/ sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force /usr/bin/ninja --version |
pytorchのインストールは出来たが…
ninjaインストール後はvai_q_pytorchの動作確認できました。
[VAIQ_NOTE]: Loading NNDCT kernels...
1 2 3 4 5 6 7 |
cd src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/ python setup.py install python -c "import pytorch_nndct" ~~~~~~~~~~~~~~~~~~~~~~~ [VAIQ_NOTE]: Loading NNDCT kernels... ~~~~~~~~~~~~~~~~~~~~~~~ |
但し、実際にPytorchを使った学習をさせてみた所、下記エラーが出ました。
OSError: /opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/_kernels.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN3c106detail12infer_schema20make_function_schemaENS_8ArrayRefINS1_11ArgumentDefEEES4_
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
(vitis-ai-pytorch) Vitis-AI /workspace/6th-ai-reference2/notebook > bash run_quant.sh model quantization... Traceback (most recent call last): File "../second.pytorch/second/pytorch/quant_train.py", line 34, in <module> import pytorch_nndct File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/__init__.py", line 14, in <module> from .apis import * File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/apis.py", line 25, in <module> from .qproc import TorchQuantProcessor File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/qproc/__init__.py", line 1, in <module> from .base import TorchQuantProcessor, dump_xmodel File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/qproc/base.py", line 30, in <module> from pytorch_nndct.quantization import TORCHQuantizer, FakeQuantizer File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/quantization/__init__.py", line 2, in <module> from .torch_qalgo import * File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/quantization/torch_qalgo.py", line 28, in <module> from pytorch_nndct.nn import fake_quantize_per_tensor, fake_quantize_per_channel File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/__init__.py", line 1, in <module> from pytorch_nndct.nn.modules import functional File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/modules/__init__.py", line 16, in <module> from .sigmoid import * File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/modules/sigmoid.py", line 26, in <module> from .fix_ops import NndctSigmoidTableLookup, NndctSigmoidSimulation File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/modules/fix_ops.py", line 26, in <module> from ..load_kernels import * File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/load_kernels.py", line 31, in <module> torch.ops.load_library(lib_abspath) File "/home/vitis-ai-user/.local/lib/python3.7/site-packages/torch/_ops.py", line 105, in load_library ctypes.CDLL(path) File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/ctypes/__init__.py", line 364, in __init__ self._handle = _dlopen(self._name, mode) OSError: /opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/_kernels.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN3c106detail12infer_schema20make_function_schemaENS_8ArrayRefINS1_11ArgumentDefEEES4_ (vitis-ai-pytorch) Vitis-AI /workspace/6th-ai-reference2/notebook > |
エラーを調べると、下記のような内容でした。
- pytorchのverがdockerと合っていないよ
- 別の手法のPytorchのConda環境ごと立ち上げる方法を試してみてね
https://github.com/Xilinx/Vitis-AI/issues/739
https://github.com/Xilinx/Vitis-AI/issues/990
まとめ
Vitis AIでPytorchの量子化(vai_q_pytorch)する場面があります。
Ver2.5でnvccの並列計算を使うには、環境のセットアップが必要です。
ただし今回の手法では、筆者が実施したいPytorchの量子化が出来ませんでした。
今回の手順では上手くいきませんでしたが、別の手段で量子化することが出来ました。
下記記事で紹介しています。(リンク先はこちら)
Vitis AIでPytorchのConda環境を構築してみた
今回の記事含めて、第6回AIエッジコンテストの一環でした。
下記にてコンテストでテスト・実施したことのまとめを紹介しています。
コメント