last updated on 09 October 2023

はじめに


OACISとは?

「OACIS」はオープンソースのシミュレーション実行管理フレームワークです。

計算機シミュレーションによって研究を行う際には「ある決められたパラメータやモデルで一度計算したら終わり」というようなことはほとんどなく、パラメータやモデルを試行錯誤的に変えながら計算していくことが多いです。 しかし、パラメータを変えながら数値実験しているとすぐに数百から数万もの実験結果がまれ、それらを手動で管理するのは効率が悪いだけでなく、間違いのもとになりかねません。 例えば、手動でシミュレーションを実行する場合の典型的な手順は以下のようになるでしょう

  1. リモートホストにログイン
  2. 実行用ディレクトリを作成
  3. ジョブ実行用スクリプト(ジョブスクリプトと呼ぶ)を作成。実行時のパラメータを記入
  4. スケジューラにサブミット
  5. ジョブ実行完了まで待つ
  6. 結果をローカルホストに転送
  7. 結果の解析
  8. (他のパラメータでの計算が必要であれば)最初に戻る

上記の手続きの大部分をOACISによって自動化することができます。 研究者が計算したいシミュレーターを登録することにより、実行時の記録(パラメータ、実行日時、ホスト、シミュレーターのバージョン)を結果とひも付けて自動的にDBに保存することができます。 またジョブの実行や結果の閲覧をブラウザ上から効率的に行うことができ、研究者はより本質的な作業に集中できるようになります。

OACISはRubyとPythonのAPIを持っており、パラメータの選択やジョブの実行を自動化することができます。 これらを利用するとパラメータスイープや最適化、感度解析などを簡単に行うことができます。

スクリーンショット

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 までメールを送ってください。

Next »