Vitis AIでvai_q_pytorchをインストールしてみたメモ

本サイトはアフィリエイト広告を利用しています。
AI

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で確認しています。

下記記事でインストール・環境構築した内容を紹介しています。(リンク先はこちら)

Vitis AI GPU dockerの環境構築をしたメモ

Vitis AI GPU dockerの環境構築をしたメモ
XilinxのFPGAのAI開発環境である、Vitis-AI 2.5のGPU版を立ち上げてみました。 dockerやCUDAなど多くのものを事前にインストールする必要があります。 実際にGPU dockerの環境構築をした手順を紹介します。

 

Pytorchのconda環境を立ち上げて、使用するライブラリのセットアップを進めます。

conda activate vitis-ai-pytorch

 

 

 

cuda-toolkitをインストールします

NVIDIAのHPからcuda-toolkitのインストーラを入手して対応します。

今回はGPUで動作させるためです。

(筆者はcudaのVer10-2で確認しました。各自にあったものをダウンロードします)

CUDA Toolkit 10.2 Download
Get CUDA Toolkit 10.2 for Windows, Linux, and Mac OSX.

 

一番注意するのは、cudaの最後の手順通りに「sudo apt-get install -y cuda」としないこと。

sudo apt-get install -y cuda-toolkit-10-2 とtoolkitとVerまで指定すること。

docker上のインストールが終わらず、conda環境が構築できないためです。

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

export CUDA_HOME=/usr/local/cuda

 

Pytorchのconda環境を立ち上げて、使用するライブラリのセットアップを進めます。

各自でPytorchで学習する際に必要なものをインストールしておきます。(筆者例は下記でした)

 https://github.com/pometa0507/6th-ai-reference2

 

「Install other dependencies」箇所は環境で異なります。筆者のは一例です。

requirements.txtをインストールしています。

~~~~~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

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

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より高速・軽量というビルドシステムです。下記記事で紹介しています。

Ubuntuでninja-buildをインストールしてみた

Ubuntuでninja-buildをインストールしてみた
CMAKEよりも高速にビルドできると言われるninjaがあります。 機械学習などのライブラリを使うときにもninjaを求められる場合があります Ubuntuでインストールしてみましたので紹介します。

 

下記手順で対応可能です。

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...

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_

(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環境を構築してみた

Vitis AIでPytorchのConda環境を新しく構築してみた
Vitis AIでPytorchのConda環境を立ち上げてみました。 量子化(vai_q_pytorch)する上でgpuとnvccを使うには、環境のセットアップが必要です。 FPGAに向けてPytorchのモデルを量子化する内容を紹介します。

 

今回の記事含めて、第6回AIエッジコンテストの一環でした。

下記にてコンテストでテスト・実施したことのまとめを紹介しています。

第6回AIエッジコンテストが凄く難しいけど勉強になった感想

第6回AIエッジコンテストが凄く難しいけど勉強になった感想
第6回AIエッジコンテストに参加していました。 RISC-Vを使って、画像とLIDAR点群からの3D物体検出が課題でした。 ただ貴重な勉強の機会になりましたし、自身への忘備録としても内容を紹介します。

コメント