アソシアトロン でMNISTの手書き数字の認識テストをさせたくてシステムを作った。ただ、6万個の学習データを使って、うまく認識させるためにはベクトルの次元を大きくしなくてはならず、それで学習させると、MacPro の24スレッドをフルに使っても計算に50時間かかる(笑)今それをやらせている。
アソシアトロン の学習とディープラーニングの学習の決定的な違いは、前者が極めて単純な行列計算の膨大な積み重ねになっているところだ。ディープラーニングのバックプロパゲーションというのは、多変数の非線形の最適化で、並列処理が難しい。プロは、うまくやっているのだろうが、相互依存が激しくて、並列処理にふさわしく処理を分割できないのだ。
その点、アソシアトロン は、計算をどこまでも細かく分解できる。
こうなると、GPUの並列処理がうまくいくように思う。ということで、CUDAで並列処理を、久しぶりにやってみようという気になった。Linux用の古いTELSAも持っているし、MAC用のTELSAまで持っている。が、ここは、最新のNVIDIAのJetson Xavier (写真左)を使ってみよう。Xavierは、私が奉職している大学の遠い昔の設立者の方と同じ呼び名である。
今年初めに買ったのだが、セットアップが面倒で、なんども失敗したので放置しておいた。しかし、ここはちゃんと動かさなければならない。
ホストコンピュータは、MacProに入れたVirtualBoxのUbuntu_18.04だ。基本、本家の次のサイトをベースにセットアップすべきだ。
(A) How to Install JetPack
MacのVirtualBoxだから、次のサイトからも色々教えていただいた。
(B) MacBook Pro で Jetson AGX Xavier をセットアップ
本家のサイトのインストラクション通りにやったが、途中でうまくいかなくなった。色々試したので、何が良かったのか、正確にはわからなくなってしまったが、特に大事なポイントだけは記録のために押さえておこう。
大きな流れは、ホストコンピュータにCUDAのツールキットなどのシステムをダウンロードし、デバイスに送信するという二段階になっている。本家の手順に、コメントしておこう。
(1)最初は、本家(A)の手順6のComponent Managerでは、Fullを選んでおけば良い。ここを進むと、インストールが開始されるが、それは、ホストコンピュータに必要なシステムがダウンロードされることとと理解しておく。
(2)次に、デバイスに送り込む手続きに入る。手順9にFlash OSを手順6で選ぶかどうかのことが書かれているが、最初は選んだままで良い。その際、ちゃんとUSBでホストとデバイスを繋いでおかなければならない。VirtualBoxの場合は、通常はMACがUSBを使っているので、Ubuntuに変更しなくてはならないことを忘れないように。
(3)そうすると手順10でネットワークの形式を聞いてくるが、ここは標準で選択されているUSB経由のネットワークにしておけば良い。USB経由のネットワークのIPアドレスが割り振られる。
(4)そうすると、手順14が出てくる。この辺りから混乱してくる。当初のリカバリーモードとは違って、一旦 デバイスのUbuntuを立ち上げた後のリカバリーモードで、違うようなのだ。実際、押すボタンも違う。ここは、手順14に忠実にやる。その際、USBがちゃんと繋げてないとエラーになる。
(5)しかし、ここで途中で止まってしまう現象に出くわし、困った。そこで、サイト(B)の教示に従う。つまり、その時は、一旦、CTL-Cでターミナルを閉じて、終了画面を出させて、ダウンロードしたものを削除せずに、インストールウィンドウも閉じる。そして、再度、デバイスを普通に立ち上げて、そこに割り振られたIPアドレスを確認する。
(6)その後、再度、NVIDAのインストーラを立ち上げる。手順9で、FLASH OSのインストールをしないように、no actionにする。ここがポイント。そうすると、次に、デバイスのIPアドレスとユーザー名とパスワードを聞いてくる。ここで、IPアドレスは先に確認したもの、ユーザー名はnvidia、パスワードもnvidiaと入れていけば、次に、インストールが開始される(!!)。なお、(B)では、nvidiaではなく、ubuntuと書いてあるが、私の場合、ubuntuでは失敗した。そのユーザーはあるが、ここは、基本的ユーザーのnvidiaにしなければならなかった。
全く、なんども失敗し、実に面倒だった。
なお、そのままほっておくと、デバイスはチンチかちんに熱くなる。心配になるので、ホームにある、./jetson_clocks.shをsudoで動かすと、ファンがうるさいほど回ってくれるので、すぐ冷却される。
./jetson_clocks.shは、CPUやGPUのクロックを確認するツールらしい。こちらで少し説明がされている。
また、サンプルは、
$ cd $ ./jetson_clocks.sh $ cd /usr/local/cuda/bin $ sudo –user=nvidia ./cuda-install-samples-10.0.sh /home/nvidia $ cd /home/nvidia/NVIDIA_CUDA-8.0_Samples $ make -j 8 $ cd 5_Simulations/smokeParticles $ ./smokeParticles
で実行させることができる。コンパイルには時間がかかるので、注意。実行の様子は、以下のツイッターの動画をみてください。
高度な並列処理ができるコンピュータが必要になり、NVIDIAの最新小型デバイスJetson Xavierをセットアップした。以前に買ったのだが、セットアップに何度も失敗したので放置していた。
今度は気合を入れたので、なんとかできた。GPUが 512個 付いている。サンプルをコンパイルして動かしてみた。 pic.twitter.com/fO04nFcI0O
— わっしー教授(ロボット即興芸) (@wassiisg) 2019年2月18日
こちらを参考にさせていただいた。
これから、こちらもまた面倒なのだが、CUDAでC++プログラミングである。