富岳にdonkeycarパッケージをインストールする


表題の手順をgithub上に公開しました。

GitHub: Donkeycar on Fugaku
https://github.com/coolerking/donkeycar_on_fugaku

去年あたりからニュース画像でもおなじみになってきたスーパーコンピュータ富岳ですが、OSSを使った計算を行う場合は多少厄介になります。

すでにインストール済みのものであればよいのですが、未インストールであり、さらに依存関係のあるOSパッケージ管理ツール管理化のパッケージを使用する場合、一般ユーザの許可されている権限でなんとかしないといけないので、いろいろややこしくなります。

自分が思いつく方法は、以下の2種類になります。

  • ホームディレクトリ上でソースからコンパイル
  • spack を使ってコンパイル&インストール

ホームディレクトリ上にソースコードを展開して、手動でビルドするときに、--prefix オプションでホームディレクトリ上のサブディレクトリ(ex. ~/local/aarch64fx )にしてmake installしたときにこのディレクトリに書き込まれるようにする方法です。

自分は Slackware 時代からのLinuxユーザなので、この手の手順にはなれていますが、依存関係のあるパッケージをたどっていくと..やがて LLVM まで到達してしまい、この方法であっているのか?..と。

で、富岳ポータルサイト(登録ユーザのみが参照可能)のコンテンツを調べ直したところ、Spackを使うことを推奨しているようです。

Spackは、スーパーコンピュータ上でOSSをインストールするためのツールで、Pythonで動作します(富岳にも最初からインストールされている)。なので、http://github.com/spack/spack.git をチェックアウトするだけで動作します。

Spackはpyenvやvirtualenv、condaなどのように"環境"を作ることができるので、デフォルトの環境ではなく、用途に合わせて個々の"環境"を作ることができます(削除もコマンド1発)。この"環境"の中にインストールすればOKです。最初の環境であるルート環境に入るには、用意されたセットアップシェルを実行します。

# インストール
git clone https://github.com/spack/spack.git ~/spack
cd ~/spack
git checkout releases/<使いたいバージョン>

# ルート環境に入る
. ~/spack/share/setup-env.sh

これでspackコマンドが使用可能になります。

独自の"環境"を作る場合も、spackコマンドを使用します。

# 環境 hogehoge を作成する
spack env create hogehoge
# 環境 hogehoge に入る
spack env activate hogehoge
# インストール可能なOSSパッケージをリスト
spack list
# インストール済みパッケージのリスト
spack find
# openblasパッケージをインストール
spack install openblas
# 環境 hogehoge から抜ける(ルート環境にもどる)
spack env deactivate
# 環境 hogehoge を削除する(確認なし)
spack env remove hogehoge

spack install で指定する引数によっては、OSSバージョン、使用するコンパイラおよびバージョン、リンクオプションなどを指定可能です。

# 富岳ではterminfoをリンクする場合-ltinfoを使う
spack install mesa ldlibs="-ltinfo"

spack install されると、~/spack/var/spack/environments/<Spack環境名>/.spack-env/view 以下の binlibinclude へインストールされます。これらへのパスなどの環境変数は spack env activate 時にセットされます。

ただし、pip からフォークされる cmake などのオプションにまで到達しない場合があるので、個別にセットする必要があるケースもあります(Pythonパッケージを pip でインストールする際には内部で cmake することがあります)。このあたりはトライ&エラーでみつけていくしかありません。

Pythonパッケージの一部もspackからインストールできます。もちろんpipも可能ですが、一般ユーザではグローバルインストールはできないので、--user オプションを付けないと動きません。

富岳は会話型とジョブ型の2種類の実行方法がありますが、spack install が会話型だと制限時間内に終わらないことがあるため、それなりのボリュームのパッケージはジョブ型で実行( pjsubコマンドでシェルを実行)する必要があります。

あと、TensorFlow2.2.0/PyTorch1.7.0はあらかじめインストールされたパスが公開されているので、これらへパスを変更することで使用可能になります。Spackでもインストールできそうですが、富岳管理者が提供しているので、コンパイラ最適化オプションをきちんとつけて作成している(..とおもいます)はずなので、こちらをつかうほうがよいでしょう。

なのでvirtualenvなどのPython環境と、Spack環境を併用するのがよいと、私は判断しました。最初に紹介したGitHub上のスクリプトも、それを前提に作成しています。

細かい使い方は Spackのドキュメント を参照してみてください。チュートリアルもありますし、Youtubeに英語ですが 概要紹介のセッション動画 も投稿されています(字幕翻訳させれば内容はわかるとおもいます)。