JModelica.org の Docker イメージ を作って Jupyter Notebook で利用する

はじめに

JModelica.org は、Modelica 言語に基づいて複雑な動的システムのモデル化、シミュレーション、最適化および分析などを行うプラットフォームとなるソフトウェアです。Lund 大学などの学術機関と民間企業の協力を得て、Modelon AB によってオープンソースソフトウェアとして維持開発されてきました。Modelon は、2019年12月18日に、Assimulo, PyFMI, FMI Library を除くコンパイラや最適化機能など含む部分を一般に使用可能なオープンソースとすることを止めてしまいました。今後も開発は続けられて商用および学術的用途で利用は可能だそうです。

現在、https://jmodelica.org/ のフォームに登録することによって、最後のオープンソースバージョンのソースコードと Windows用バイナリのダウンロードが可能です。

ここでは、この最後のオープンソースバージョンのソースコードである JModelica.org-2.14 をインストールした Dockerイメージを作成します。Dockerfile は作成せず、手作業でJModelica.org と Jupyter Notebook をインストールしたコンテナからイメージを作成します。そして、Jupyter Notebook を使用して Mac のブラウザから利用する環境を構築します。

作業環境

ここでは最近 Mac にインストールした Docker Desktop for Mac を使用しますが、Docker が使用できる環境であれば、Linux や Windows でも同様の作業が行えます。MacへのDockerアプリのインストールの手順は、Docker Desktop for Mac のアンインストールと再インストール に記しました。

 

JModelica.org のソースコードのダウンロードする

https://jmodelica.org/ の form に登録し、ソースコードの zipファイル JModelica-2.14.zip をダウンロードします。任意の作業フォルダを作成して、この zip ファイルをコピーします。ここでは、作業フォルダを /Users/xxxxx/jmodelica とします。(xxxxxはユーザ名)

 

Dockder コンテナを作成する

Docker Desktop for Mac を起動し、サインインした状態にします。

Dicjerコンテナを作成するために、ターミナルから以下を実行します。

docker run コマンドは、ベースとなるDockerイメージからDockerコンテナを生成して起動します。

  • -it は、コンテナの標準入力を開く(-i)と端末デバイスを使う(-t)を同時に設定するオプションで、コンテナをインタラクティブに操作する場合に設定します。
  • –name jm0 は、コンテナにコンテナ名 jm0 を付けます。
  • -p 8888:8888 はホストとコンテナで通信するためのポートマッピングで、-p [ホストのポート番号]:[コンテナのポート番号]のように設定します。Jupyter Notebook で使用するポート番号を設定します。
  • -u root は root ユーザとしてコンテナにログインします。
  • -v /Users/xxxxx/jmodelica:/home/jmodelica/jmodelica は、ホストの作業ディレクトリ /Users/xxxxx/jmodelica をコンテナの /home/jmodelica/jmodelica にマウントします。
  • ubuntu:18.04 は、コンテナの元となるベースイメージです。

以下のようなプロンプトが表示され、作成した Docker コンテナにインタラクティブにアクセスできる状態になります。aa8385bf0ef7 はコンテナIDです。

 

コンテナに必要な環境やツールをインストールする

コンテナで以下のようなコマンドを実行して、JModelica.org のビルドに必要な環境を整えます。

インストール中に、Geographic area と Time Zone の入力を促されますが、それぞれ 6. Asia と 79. Tokyoを設定します。

さらに以下をインストールします。

ここでインストールしたものは、以下を除いて JModelica.org User Guide に記されています。

  • vim: テキストエディタ
  • wget: ダウンローダ
  • unzip: zip の解凍ツール
  • pkg-config, libblas-dev, liblapack-dev: これらをインストールすると、CasADi のビルド時の cmake コマンドによって PKGCONFIG, BLAS, LAPAK などが認識されます。

 

Jupyter Notebook をインストールする

まず pip コマンドをインストールし、pip を使って Jupyter をインストールします。

設定ファイルを編集します。

設定ファイル jupyter_notebook_config.py の内容

動作テストをします。

Mac のプラウザから http://localhost:8888 にアクセスします。Password or token: の欄に jmodelica と入力してログインします。

Jupyter Notebook のログイン画面

起動を確認したら、右上の方に表示される [Quit] をクリックして Jupyter を止めます。

右上の Quit をクリックしてサーバーを停止する。

これらの手順は、Docker上でubuntuをベースにPythonのjupyter環境を構築する方法 を参考にしました。

 

Ipopt をインストールする

Ipopt のソースコードを root のホームディレクトリにダウンロードして解凍します。

ThirdPartyソフトウェアのソースを入手します。

試行錯誤の結果、インストール先を /usr/local に設定すると CasADi のビルド時の cmake によって IPOPT が認識されることがわかりました。

以下のように configure でインストール先を設定して Ipopt をビルドインストールします。

 

JModelica.org をインストールする

JModelica.org-2.14.zip を root のホームディレクトリにコピーして解凍します。

configure やシェルスクリプトのパーミッションとして実行権を付けます。

ソースコードの solver_opbect.output を solver_object.getOutput に置き換えます。

この修正は、

を参考にしました。

以下の環境変数を設定して、使用する Java の環境を OpneJDK-8 にします。

以下の手順で、インストール先を /usr/local/jmodelica にして、JModelica.org をビルドインストールします。

インストールした JModelica.org の動作テストを行う

以下のようにしてJupyter Notebook の起動スクリプトを作成します。

/usr/local/jmodelica/bin/jm_start.sh の内容

このスクリプトを実行します。

Mac のブラウザで http://localhost:8888 にアクセスします。ログイン画面が表示された場合は、Password or toke: の欄に jmodelica と入力します。右上の方に表示されるメニューで New > Python 2 を選択します。

New > Python 2 を選択する。

JModelica.org User Guide に記載されているデモを実行します。表示されるセルに以下のように入力して Shift + Return を押します。

JModelica.org のデモ

同様に以下のような内容をセルに入力し、グラフが表示されることを確認します。

 

DyMat と Pandas をインストールする

[2020年3月6日追加]

DyMat は、JModelica, Dymola, OpenModelica の mat ファイル を読み込んだり、他のファイル形式にエクスポートすることができるライブラリです。Pandas はデータ解析を支援するライブラリです。便利なのでこれらをインストールします。

ブラウザで Home に移動し、Quit をクリックしてサーバーと停止します。

 

Docker コンテナから Dockerイメージを作成する

Mac上で Dock のターミナルアイコンを右クリック(トラックパッドの2本指クリック)して新規ウィンドウを開きます。以下のように、 docker ps コマンドで、Dockerコンテナ jm0 が実行中であることを確認します。

Dockerコンテナ jm0 を停止します。

DockerコンテナからDockerイメージを作成します。作成するコマンドは、

docker container commit コンテナ識別子 ユーザー名/イメージ名:タグ

です。ユーザー名 finback9、イメージ名 jmodelica、タグ jm0 としました。イメージが生成できると docker image ls コマンドで確認できます。このユーザー名は Docker Hub のログインIDです。

この他にも、 docker export コマンドでコンテナを tar ファイルに出力し、この tar ファイルから docker import コマンドでイメージを作成する方法もあります。

 

作成した Docker イメージから Docker コンテナを起動する

ターミナルから以下のコマンドを実行すると jm1 という名前のコンテナが起動します。コマンド内の/Users/xxxxx/jmodelica はホスト上の作業ディレクトリでコマンド実行前に存在する必要があります。コマンドの一番最後につけた /usr/local/jmodelica/bin/jm_start.sh でJupyter Notebook が起動します。

Mac のブラウザで hppt://localhost:8888 にアクセスして、Jupyter Notebook にログインして先程と同様に JModelica.org の動作テストを行います。

このようにして起動した場合、Jupyter Notebook の Quit をクリックするとコンテナが停止します。

次のようにして再びコンテナを起動することができます。

.zshrc に次のような alias を追記しておくと、ターミナルで jmodelica_start と入力することによってコンテナを作成して起動させることができます。

 

Docker イメージをファイルとして保存する

次のようなコマンドで作成した Dockerイメージをファイルに保存します。

docker image save -o ファイル名 リポジトリ:タグ

ファイルからDockerイメージを復元するにはつぎのようなコマンドを実行します。

docker image load -i ファイル名

 

参考


プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化

以上。

スポンサーリンク

 

JModelica.org の Docker イメージ を作って Jupyter Notebook で利用する” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です