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

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

CMAKEよりも高速にビルドできると言われるninjaがあります。

機械学習などのライブラリを使うときにもninjaを求められる場合があります

Ubuntuでインストールしてみましたので紹介します。

 

スポンサーリンク

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

Ubuntuでninjaをインストールしました。

下記手順で対応可能でした。(現時点での最新Ver1.11.1をUbuntu18.04にインストール)

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

 

GitHub上にあるninjaのソースコードとしては下記です。

GitHub - ninja-build/ninja: a small build system with a focus on speed
a small build system with a focus on speed. Contribute to ninja-build/ninja development by creating an account on GitHub...

 

今回インストールしたように、すぐ使えるようにバイナリをZIP形式でダウンロードできます。

 https://github.com/ninja-build/ninja/releases

 

手順を参考にさせていただいた記事は下記となります。

下記はUbuntu14.04にninjaの1.82Verをインストールしていました。

 https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty

 

RuntimeError: Ninja is required to load C++ extensions

今回ninjaを使用した理由としては、FPGAの開発環境(Vitis-AI)で必要になったためです。

「pytorch_nndct」というpytorchでの量子化で使うモジュールです。

下記記事で紹介しています。(リンク先はこちら)

Vitis AIでvai_q_pytorchをインストールしてみたメモ
Vitis AI でPytorchの量子化(vai_q_pytorch)する場面があります。 Ver2.5でnvccの並列計算を使うには、環境のセットアップが必要です。 vai_q_pytorchをインストールする方法を紹介します。

 

ninjaインストール前はインポートする際に下記エラーになりました。

RuntimeError: Ninja is required to load C++ extensions

(vitis-ai-pytorch) Vitis-AI /workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding > python -c "import pytorch_nndct"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/__init__.py", line 14, in <module>
    from .apis import *
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/apis.py", line 25, in <module>
    from .qproc import TorchQuantProcessor
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/qproc/__init__.py", line 1, in <module>
    from .base import TorchQuantProcessor, dump_xmodel
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/qproc/base.py", line 30, in <module>
    from pytorch_nndct.quantization import TORCHQuantizer, FakeQuantizer
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/quantization/__init__.py", line 2, in <module>
    from .torch_qalgo import *
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/quantization/torch_qalgo.py", line 28, in <module>
    from pytorch_nndct.nn import fake_quantize_per_tensor, fake_quantize_per_channel
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/nn/__init__.py", line 1, in <module>
    from pytorch_nndct.nn.modules import functional
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/nn/modules/__init__.py", line 16, in <module>
    from .sigmoid import *
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/nn/modules/sigmoid.py", line 26, in <module>
    from .fix_ops import NndctSigmoidTableLookup, NndctSigmoidSimulation
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/nn/modules/fix_ops.py", line 24, in <module>
    from ..load_kernels import *
  File "/workspace/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/nn/load_kernels.py", line 104, in <module>
    is_python_module=is_python_module)
  File "/home/vitis-ai-user/.local/lib/python3.7/site-packages/torch/utils/cpp_extension.py", line 997, in load
    keep_intermediates=keep_intermediates)
  File "/home/vitis-ai-user/.local/lib/python3.7/site-packages/torch/utils/cpp_extension.py", line 1202, in _jit_compile
    with_cuda=with_cuda)
  File "/home/vitis-ai-user/.local/lib/python3.7/site-packages/torch/utils/cpp_extension.py", line 1268, in _write_ninja_file_and_build_library
    verify_ninja_availability()
  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

 

ググって同様のissueを見つけると、素直にninjaをインストールすればOKということでした。

 https://github.com/Xilinx/Vitis-AI/issues/128

 

一番最初で紹介した手順でインストール出来ました。

(下記はPCの環境にインストールしていますが、docker環境でもインストール出来ています)

ninjaをインストールすることでエラー解消できました。

iotengineer@iotengineer-Inspiron-3650:~/Vitis-AI$ wget https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip
--2022-10-23 08:14:44--  https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip
Resolving github.com (github.com)... 20.27.177.113
Connecting to github.com (github.com)|20.27.177.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/1335132/005a4a3d-e7df-4538-b14e-b755068548c5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221022%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221022T231444Z&X-Amz-Expires=300&X-Amz-Signature=61a1ab3f1cc7d6ab70dd14985e45a235724da63e45eaf54087ddf047e546411b&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=1335132&response-content-disposition=attachment%3B%20filename%3Dninja-linux.zip&response-content-type=application%2Foctet-stream [following]
--2022-10-23 08:14:44--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/1335132/005a4a3d-e7df-4538-b14e-b755068548c5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221022%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221022T231444Z&X-Amz-Expires=300&X-Amz-Signature=61a1ab3f1cc7d6ab70dd14985e45a235724da63e45eaf54087ddf047e546411b&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=1335132&response-content-disposition=attachment%3B%20filename%3Dninja-linux.zip&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.109.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 119463 (117K) [application/octet-stream]
Saving to: ‘ninja-linux.zip’

ninja-linux.zip                                    100%[================================================================================================================>] 116.66K  --.-KB/s    in 0.02s   

2022-10-23 08:14:45 (6.03 MB/s) - ‘ninja-linux.zip’ saved [119463/119463]

iotengineer@iotengineer-Inspiron-3650:~/Vitis-AI$ sudo unzip ninja-linux.zip -d /usr/local/bin/
[sudo] password for iotengineer: 
Archive:  ninja-linux.zip
  inflating: /usr/local/bin/ninja    
iotengineer@iotengineer-Inspiron-3650:~/Vitis-AI$ sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force
update-alternatives: using /usr/local/bin/ninja to provide /usr/bin/ninja (ninja) in auto mode
iotengineer@iotengineer-Inspiron-3650:~/Vitis-AI$ /usr/bin/ninja --version
1.11.1

 

まとめ

Ubuntuでninjaをインストール出来ました。

色々な箇所で使われているビルド環境ですので、必要な際はインストールしてみて下さい。

 

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

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

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

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

コメント