はじめに
Jetson NanoにPyTorchをインストールしようとしたところ、
多少ハマったので、備忘の意味もこめて投稿します。
今では元気にPytorch & detectron2が動いています。
(dockerでインストールした方が早かった気がします。)
目次
-
- 前提
-
- venv インストール&設定
-
- jupyter-notebook インストール&設定
-
- PyTorch インストール&設定
-
- detectron2 インストール&実行
- まとめ
前提
Jetson Nanoはanacondaが使えないので、venvとjupyter notebookを個別インストールした上で、
仮想環境上のノートブックに別PCから接続できるように設定します。
その上で、PyTorchとdetectron2をインストールをすることで、
他の作業用PCからブラウザで遊べる推論環境の構築を目指します。
環境
-
- NVIDIA Jetson Nano
-
- CUDA: 10.2
-
- JetPack: 4.4
-
- KernelVersion: 4.9.140-tegra
-
- python2: 2.7.17
- python3: 3.6.9
venv インストール&設定
- venv インストール
venvが入っていなかったので、インストールします。一行。
user@hostname:~$ sudo apt install python3-venv
- 使い方 (ex. new_envという名前の仮想環境を作成 → activate)
user@hostname:~$ python -V
Python 2.7.17
user@hostname:~$ python3 -V
Python 3.6.9
user@hostname:~$ python3 -m venv new_env
user@hostname:~$ source new_env/bin/activate
(new_env) user@hostname:~$
(new_env) user@hostname:~$ python -V
Python 3.6.9
※deactivateするとき
(new_env) user@hostname:~$ deactivate
user@hostname:~$
以下、作成した仮想環境(new_env)にactivateした状態で作業しています。
jupyter-notebook インストール&設定
- jupyter-notebook インストール
主にこの記事を参考にさせていただきました。
https://vivinko.com/inoue/blog/2020/06/21/113534.html
うっかり必要なパッケージのインストールを忘れて思考停止で次のコマンドを打つと、
pipちゃんに、めちゃくちゃ文句言われます。
~$ pip install jupyter notebook
てことで、先に必要なパッケージのインストール。
(これを後回しにしたせいか、pyzmqが必要だのなんだの言われ、遠回りする羽目になりました。)
試行錯誤したので、結局何をすれば一発で通ったのかは分からないままですが、
先人の教えを見る限り、下のコマンドを実行していれば、たぶん大丈夫な気がします。
~$ sudo apt install libbz2-dev libsqlite3-dev libffi-dev python3-dev
~$ pip install jupyter notebook
- jupyter-notebook 設定
設定ファイルの作成、パスワードの設定、作業用ディレクトリの作成。
~$ jupyter notebook --generate-config
~$ jupyter notebook password
~$ mkdir ~/my-notebooks
設定ファイルの編集。
c.NotebookApp.allow_remote_access = True
c.NotebookApp.base_url = '/jetson/'
c.NotebookApp.open_browser = False
c.NotebookApp.ip = '0.0.0.0'
base_url = ‘/jetson/’とすることで、http://[JetsonのIPアドレス]:8888/jetson/でアクセスできるようにしています。
(他のデバイスのnotebookにもアクセスする予定なので、区別できるようにしています。)
- jupyter-notebookのサービス化(自動起動)
/etc/systemd/system/jupyter.serviceを作成し、以下の通り、編集します。
(venvを利用する場合の設定となっています。)
{USER}と{GROUP}は、自身のユーザ名とグループ名と置き換えて、
{ENV}はvenvで作成した環境名を入力して下さい。
[Unit]
Description = Jupyter Notebook
[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/bin/bash -c ". /home/{USER}/{ENV}/bin/activate;jupyter-notebook --notebook-dir=/home/{USER}/my-notebooks"
WorkingDirectory=/home/{USER}/my-notebooks
User={USER}
Group={GROUP}
Restart=always
[Install]
WantedBy = multi-user.target
venv環境下でサービス化するときのポイントは、
・ExecStartに、activate → jupyter-notebook 起動となるように記載すること
・jupyter-notebook起動時の–notebook-dirとWorkingDirectoryを一致させること
のようです。
後は、以下のコマンドで、jupyter.serviceの開始と自動起動設定。
~$ sudo systemctl start jupyter.service
~$ sudo systemctl enable jupyter.service
systemctl enable jupyter.serviceで、active (running)になっていればOKです。
PyTorch インストール&設定
必要なパッケージをインストールしてから、PyTorchをインストールします。
- opencv-python インストール
~$ pip install opencv-python
~~
No module named 'skbuild'
調べると、pipが古いときに言われる文句らしいので、
pipのアップデートをしてから、再度opencv-pythonインストール。
~$ pip install -U pip
~~
Uninstalling pip-9.0.1:
~~
Successfully installed pip-21.0.1
~$ pip install opencv-python
(pip-9.0.1…。そら文句言われるわ。アップデートの類は最初にしっかりしましょう…。)
- PyTorchインストール
NVIDIA公式のフォーラムを参考にインストールします。
PyTorchのversionはv1.7.0を選びました。
~$ wget https://nvidia.box.com/shared/static/cs3xn3td6sfgtene6jdvsxlr366m2dhq.whl -O torch-1.7.0-cp36-cp36m-linux_aarch64.whl
~$ sudo apt install python3-pip libopenblas-base libopenblas-dev libopenmpi-dev
~$ pip install Cython
~$ pip install numpy torch-1.7.0-cp36-cp36m-linux_aarch64.whl
上記コマンドでインストールできるはずです。libopenblas-devを足しています。
もし、import torchした際に、Illegal instruction (core dumped)と言われたら
numpyのversionが1.19.5の時に起こる問題の可能性があるので、(参考URL)
~$ pip uninstall numpy
~$ pip install numpy==1.19.4
で、numpyのversionを下げてください。
- torchvision インストール
PyTorchのversionに合わせて、インストールします。
公式フォーラムには、PyTorch v1.7 – torchvision v0.8.1の記載があるのですが、
フォーラムに記載の方法では、v0.8.1をインストールできなかったため、
torchvisionはv0.8.0をインストールしていきます。
~$ sudo apt install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
~$ git clone https://github.com/pytorch/vision torchvision
~$ cd torchvision
~/torchvision$ git checkout v0.8.0
~/torchvision$ export BUILD_VERSION=0.8.0
~/torchvision$ python setup.py install
これで、PyTorchのインストールは完了です。
detectron2 インストール&実行
手元にdetectron2で作成したモデルがあるため、ついでにdetectron2もインストールします。
- detectron2 インストール
一行でインストール完了です。
~$ pip install 'git+https://github.com/facebookresearch/detectron2.git'
- detectron2 お試し
まとめ
Jetson NanoにPyTorch(& detectron2)をインストールできました。
公式フォーラムに、
You can now download the l4t-pytorch and l4t-ml containers from NGC for JetPack 4.4 or newer
の記載があるので、dockerで入れると一瞬だった気がしますが、気のせい、気のせい。