TX2にChainerを入れてJupyterで遠隔お勉強

JetsonTX2にChainerとJupyterを入れてブラウザで少し動かしてみたので環境構築のメモ。環境はJetPack3.1をインストールした状態。ほかは何も入れていない。
(Web検索するとTK1、TX1の情報が混ざって見つかるのでTX2での状況整理もかねて)

CuPy、Chainerのインストール

Chainer自体はこちら*1で紹介されている通りpipだけでインストール可能。ヘッダファイルやライブラリファイルへのパスを設定したりする必要は無し。
なお、CuPyのインストールはコンパイル?か何かをやっているようで結構時間がかかった。

$ sudo apt-get update
$ sudo apt-get insatll python-pip
$ sudo -H pip install -U pip
$ sudo -H pip install chainer cupy

Jupyter、matplotlibのインストール

ここからはこちら*2を参考にした。
matplotlibはこのあとお試し実行するコードで使うので一緒に入れる。Jupyter自体はmatplotlib不要。
なお、pipはsudoを付けないと/usr配下へファイルをインストールできずに失敗する。普通?は「--user」を付けてホームディレクトリ?に入れるっぽい。

$ sudo -H pip install jupyter
$ sudo apt-get install python-matplotlib

[2018/02/10 11:45追記&修正]
pipをsudoで打つときには、sudoの「-H」オプションを付けないとダメらしい。

jupyter_notebook_config.pyを生成する

以下のコマンドでホームディレクトリに.jupyter/jupyter_notebook_config.pyが生成される。

$ jupyter notebook --generate-config

Jupyter用のパスワード(ハッシュ値)を算出する

上記の参考URLだと省略されているが、passwd()関数?を実行したときにパスワードの入力を求められる。以下では「nvidia」をパスワードとして実行したときの出力を掲載している。

nvidia@tegra-ubuntu:~$ ipython
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
Type "copyright", "credits" or "license" for more information.

IPython 5.5.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

In [1]: from IPython.lib import passwd

In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:cc27e93ff4f5:2c4a71d7af7e5c25b1ff971f932b6a3dde8493fb'

In [3]: quit()

Jupyterの設定を変更する

ホームディレクトリに生成された.jupyter/jupyter_notebook_config.pyを編集する。

c.NotebookApp.password
 ⇒コメントアウトされているのを解除する
 ⇒「u''」となっている個所に先ほど算出したパスワードのハッシュ値を入れる。
 ⇒「c.NotebookApp.password = u'sha1:cc27e93ff4f5:2c4a71d7af7e5c25b1ff971f932b6a3dde8493fb'」

c.NotebookApp.ip
 ⇒コメントアウトされているのを解除する
 ⇒「'localhost'」を「'*'」に変更する

c.NotebookApp.open_browser
 ⇒コメントアウトされているのを解除する
 ⇒「True」を「False」に変更する

Jupyterの起動、ブラウザで接続

Jetson上で以下のコマンドを打つ。jupyterが動くのでそのまま動かしっぱなしにする。

$ jupyter notebook

ブラウザでJetsonの8888ポートにアクセスする。Jetsonとは別のPCからアクセスできる。
アドレスは自分の環境だと「http://192.168.10.8:8888」だった。

パスワードの入力画面が出るので先ほどpasswd()関数に入れたパスワードを入力するとログインできる。

初心者向けハンズオンのお試し

こちら*3をそのまま使わせてもらった。
「5. 学習する」までのコードを全部貼り付けてRUNしたらそれっぽく動いた。

注意点

ハンズオンを試していて気付いたことなどを。

  • MNISTのダウンロードは4つ走る。「Downloading from」が4行表示されたら大丈夫
  • ブラウザの画面だと動いているのかどうかわからない。自分は裏でSSHからtopコマンドを実行して監視してた
  • Pythonのバージョンが2.x
  • 自分でいれないとmatplotlibが入ってなかった。たぶんnumpyとかも入ってない
  • print()の引数endはPython3.xじゃないと使えない。print()の代わりにsys.stdout.write()に変えてend引数の指定を削除したら実行できた
  • 学習処理よりもPythonコンパイル?の方が長い気がした。さすがGPU