Google ColaboratoryでJModelica
概要
Google Colaboratoryは機械学習の研究や教育用途であれば無償で使用できるツールで、Googleのアカウントがあればブラウザを使用してJupyter Notebookをクラウド上で動かすことができる。JModelicaが使用できたからといって何かいいことがあるかはよく分からないけれど、以下の記事でOpenFOAMを動かしているのを見て面白いと思ったのでJModelicaでもやってみた。時間帯にもよるかもしれないが、けっこう時間がかかった(30~40分くらい)ので決して手軽ではない。
注意点
基本的にはユーザーガイドのインストールの方法でよいが以下の部分だけ注意。
- Python2のノートブックを使う。
- ホームディレクトリ(~)が/rootになっているが初期位置の/contentでビルドした。
- apt-getのときにfileとjccもインストールする。
- JModelica.org/external/Assimuloをダウンロードしてくる。
JModelicaをビルドしてサンプルを実行
まずはGoogle ColaboratoryでGoogleのアカウントにログインした状態で「ファイル→Python2の新しいノートブックを開く」で新規ファイルを作成する。あとは以下のコードのまとまりをそれぞれ入力してShift+Enterを押していけばよいだけである。前の処理が終わって無くてもShift+Enterを押しておけば順番に逐次実行していってくれる。
JModelicaをビルドしたらサンプルとしてBuildingsライブラリのBuildings.Examples.Tutorial.SpaceCooling.System3(室温をオンオフ制御して空調するもの)を実行してみる。
ビルドの環境を整える
%%bash apt-get update apt-get -y install g++ subversion gfortran ipython cmake swig ant openjdk-8-jdk python-dev python-numpy python-scipy python-matplotlib cython python-lxml python-nose python-jpype zlib1g-dev libboost-dev jcc file
Ipoptのビルド(JModelicaのビルドの前に必要)
%%bash mkdir /content/Ipopt cd /content/Ipopt wget http://www.coin-or.org/download/source/Ipopt/Ipopt-3.12.12.tgz tar xzf Ipopt-3.12.12.tgz cd Ipopt-3.12.12/ThirdParty/Blas ./get.Blas cd ../Lapack ./get.Lapack cd ../Mumps ./get.Mumps cd ../Metis ./get.Metis cd ../../ mkdir build cd build ../configure --prefix=/content/Ipopt/ make install
JModelicaのビルド
%%bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server mkdir -p /content/JModelica cd /content/JModelica svn co https://svn.jmodelica.org/trunk JModelica.org svn co https://svn.jmodelica.org/assimulo/trunk JModelica.org/external/Assimulo cd JModelica.org mkdir build cd build ../configure --prefix=/content/JModelica --with-ipopt=/content/Ipopt/ make install make casadi_interface
Buildingsライブラリの用意
%%bash mkdir -p /content/JModelica/work cd /content/JModelica/work wget https://github.com/lbl-srg/modelica-buildings/releases/download/v5.1.0/Buildings-v5.1.0.zip unzip Buildings-v5.1.0.zip mv "Buildings 5.1.0" Buildings
JModelicaの計算設定ファイルの書き出し
with open('/content/JModelica/work/settings.py', 'w') as f: f.write('import os\n') f.write('from pymodelica import compile_fmu\n') f.write('from pyfmi import load_fmu\n') f.write('os.chdir(\'/content/JModelica/work\')\n') f.write('fmufile = compile_fmu(\'Buildings.Examples.Tutorial.SpaceCooling.System3\',\'Buildings\')\n') f.write('model = load_fmu(\'Buildings_Examples_Tutorial_SpaceCooling_System3.fmu\')\n') f.write('opts = model.simulate_options()\n') f.write('opts[\'ncp\'] = 144\n') f.write('opts[\'solver\'] = \'Radau5ODE\'\n') f.write('opts[\'Radau5ODE_options\'][\'rtol\'] = 1.0e-6 \n') f.write('model.simulate(start_time=15552000.,final_time=15638400., options=opts)\n')
計算の実行
%%bash /content/JModelica/bin/jm_ipython.sh /content/JModelica/work/settings.py
計算結果のダウンロード
from google.colab import files files.download('/content/JModelica/work/Buildings_Examples_Tutorial_SpaceCooling_System3_result.mat')
以上で結果ファイルをダウンロードできるので自分のPCで結果を見る。
問題なく計算ができていそうである。
ファイルの入力方法
今回はpythonで設定ファイルを書き出したが、実際はファイルを用意してアップロードする方が楽だと思われる。以下を実行するとファイル選択ダイアログを開くことができる。
from google.colab import files uploaded = files.upload()
または以下を実行して出たリンクからアカウント認証をしてコードを取得し、入力することでGoogleドライブのマウントができる。"/content/drive/My Drive"にマウントされるので自分のGoogleドライブに置いたファイルを使用することができるようになる。
from google.colab import drive drive.mount('/content/drive')
時間の把握
時間は以下のようにして把握する。これが0.5daysを超えるとインスタンスが落とされるらしい。
!cat /proc/uptime | awk '{print $1 /60 /60 /24 "days (" $1 "sec)"}'
おわりに
Google Colaboratoryはセッションをはじめに立ち上げてから12時間、またはPCのスリープやブラウザを閉じるなどでセッションが切れて90分のどちらかでインスタンスが落ちるので注意が必要である。
Buildingsライブラリのユーザーガイドに熱流体を扱う場合のソルバーはDymolaだとデフォルトの残差1e-4のdasslでなく残差1e-6のradauがよいと書いてあったので、JModelicaでRadau5ODEにしてみた。別にデフォルトでも計算は問題なくできる。ちなみにJModelicaのデフォルトのソルバーは相対残差1e-4のCVodeというものになっている。アウトプットの時間間隔は10分になるように回数を144に設定した。
ポスト処理は自分のPC上で行ったが、matファイルはたぶんpythonで処理できると思うので、Google Colaboratory上でできるのではないかと思う。とりあえずJModelicaは動いたのでFMIを使った計算もできると思われる。Google Colaboratoryの本来の目的の機械学習との連携についてはまだよくわからない。