「OACIS」はオープンソースのシミュレーション実行管理フレームワークです。
計算機シミュレーションによって研究を行う際には「ある決められたパラメータやモデルで一度計算したら終わり」というようなことはほとんどなく、パラメータやモデルを試行錯誤的に変えながら計算していくことが多いです。 しかし、パラメータを変えながら数値実験しているとすぐに数百から数万もの実験結果がまれ、それらを手動で管理するのは効率が悪いだけでなく、間違いのもとになりかねません。 例えば、手動でシミュレーションを実行する場合の典型的な手順は以下のようになるでしょう
上記の手続きの大部分をOACISによって自動化することができます。 研究者が計算したいシミュレーターを登録することにより、実行時の記録(パラメータ、実行日時、ホスト、シミュレーターのバージョン)を結果とひも付けて自動的にDBに保存することができます。 またジョブの実行や結果の閲覧をブラウザ上から効率的に行うことができ、研究者はより本質的な作業に集中できるようになります。
OACISはRubyとPythonのAPIを持っており、パラメータの選択やジョブの実行を自動化することができます。 これらを利用するとパラメータスイープや最適化、感度解析などを簡単に行うことができます。
例えば、あるシミュレーターの”p1”と”p2”というパラメータを変化させながらジョブを実行したいとします。 OACISのAPIを使って書く場合、以下のようになります。 詳細は How to use APIs をみてください。
sim = Simulator.where(name: "my_simulator").first
p1_values = [1.0,2.0,3.0,4.0,5.0] # a standard way to make an array
p2_values = [2.0,4.0,6.0,8.0,10.0]
base_param = sim.default_parameters # => {"p1"=>1.0, "p2"=>2.0, "p3"=>3.0}
host = Host.where(name: "localhost").first
host_param = host.default_host_parameters
# We are going to fix the parameters other than "p1" and "p2"
p1_values.each do |p1| # iterate over p1
p2_values.each do |p2| # iterate over p2
param = base_param.merge({"p1"=>p1,"p2"=>p2}) # => {"p1"=>p1, "p2"=>p2, "p3"=>3.0}
ps = sim.find_or_create_parameter_set( param ) # => ParameterSet of the given parameters
runs = ps.find_or_create_runs_upto(5, submitted_to: host, host_param: host_param) # creating runs under given parameter sets
end
end
本ドキュメントではOACISの使い方を説明します。構成は以下のようになっています。
とりあえず使ってみたい場合は「基本的な使い方」の章までを見れば使い始められるようになっています。 それ以降の章は必要に応じて読んでください。
質問、機能リクエスト、バグ報告は oacis-dev at googlegroups.com までメールを送ってください。