fortran66のブログ

fortran について書きます。

【メモ帳】Binder で Jupyter Fortran Kernel 起動!

Docker 要らずで Binder 行ける

バインダー式の Fortran 教材がこれで可能に!w

f:id:fortran66:20180921010611p:plain

f:id:fortran66:20180921010706p:plain
ただし起動までちょ~時間かかる。(が、かからないこともあるw)

以下のリンクで試せます。Binder

  • lab (Home)

https://mybinder.org/v2/gh/f66blog/binder_test/master?urlpath=lab

  • notebook (example.ipynb)

https://mybinder.org/v2/gh/f66blog/binder_test/master?filepath=examples%2Fexample.ipynb

立ちあがった後、アドレスバーの notebooks の部分を lab に変えれば、jupyter lab のホーム画面に移動可。

github.com

【乞食速報】そもそも Binder とは何ぞや?

Binder (beta)

Jupyter Lab/notebook が、ブラウザからオンラインで無料で試せる。お仕着せの Python kernel だけでよければ github 上に notebook を置くだけで利用可能?

お仕着せ以外は、設定ファイルを書いておくと、それに従って Docker Image を Binder 側が作ってくれ、Jupyter が起動する。その仕組みではどうしてもいけない場合に、自前の Docker Image を用意するようにとの但し書きがあった。これは元々 Binder の目的が、計算結果の再現可能な環境を明示的に作り出すことなので、Dockerfile を持ってこられると、そこに環境依存性が増えてしまって本来の趣旨にそぐわないからだろう。

つまり乞食や幼女は無理して自分で Dockerfile を用意する必要はない。

Medium 記事

以下の記事に頼って、他言語による方法が判明。
blog.jupyter.org

動画でながら見

youtu.be

メモ帳

jupyter は動くようにしてくれる。ので、それ以上を望むなら、以下の三つの設定ファイルを用意すればいい。以下の順序で実行されるようである。(本来はバージョン関係の設定ファイル REQUIRE もあるようだが)

  1. apt.txt
  2. environmental.yml
  3. postBuilld

ここで、apt.txt は、apt install するものを並べるが、apt install に root 権限が必要なもの(sudo が要るもの)は、ここに書いておいて起動時に実行してもらわないと死ぬ。Jupyter Lab は terminal を開けるので、Spack とかあれば 非 root でコンパイラの類も入れられそうだが、よくわからない。

apt-utils
gfortran-8

(たぶん gfortran-8 だけでいい。文句を言われるだけ。本当は gfortran でいい。gcc などはすでに入っていて、それが ver.7 系なので、gfortran とのみ書いておけば gfortran-7 が入って余計なものをインストールしなくて済む。ただでも起動が遅いのに gfortran-8 を選んだせいで、ver.8 系の余計なツールのインストールに時間がかかる。しかも gfortran 8.0.1 でバグがとれていない。Ver. 8.2.0 が欲しい。gfortran のバージョンごとの差のまとめは以下に。)[追記H29.9.29] gfortran-8.2.0が入るようになりました。
www.scivision.co

environmental.yml は pip でインストールしたいものを並べるが、pip は jupyter 起動後でも出来るので、それほど焦らなくてもいい。 依存関係についてはよく分からないw バージョン関係は別の設定ファイルがあるが、よく分からないので細かいことは気にしないことにする。

dependencies:
  - matplotlib
  - numpy
  - pandas
  - pillow  
  - pip

(たぶん pip は要らない、手本にしたファイルの名残り。)

postBuild は起動後の自動実行スクリプト .bashrc とかそんなもの。このあと jupyter が勝手に立ち上がるので、自作カーネルなどは、ここでインストールしておく必要がある。

#!/bin/bash
pip install -e ./jupyter-ifort-kernel
jupyter kernelspec install ./jupyter-ifort-kernel/ifort_spec --user

以上のこれらは、Binder 側で Docker イメージを作る形で実行される。

その他

今の場合は、この3つの設定ファイルの他に、自作 fortran kernel を納めたディレクトリが必要。

github.com

付録で実行例の notebook と補助データも置いた。この notebook は実行できる。

実行するホスト?は、terminal から cat /proc/cpuinfo や /proc/meminfo 見てみると 8CPU Xeon@2.6GHz でメモリーは 64GByte くらい積んでいる模様。Fortran で 10^8 程度の配列をとっても叱られない。