再計算可能なデータの保存
再計算可能なデータの保存について(Konrad Hinsen 著、2014 年 1 月 3 日投稿)
ActivePapers をご紹介する際によく受ける質問に、「なぜ計算結果を保存する必要があるのか?コードさえ残っていれば再実行できるはずだ。保存すべきはコードと入力データだけではないか?」というものがあります。これに対する短い答えは「理論上はその通りだが、実際にはそうとも限らない」というものです。長い答えについては、この先をお読みください。また、ActivePapers が再計算可能なデータの「保存」と「非保存」の両方にどのように役立つかもご理解いただけます。
まず、再計算可能なデータを保存する最も明らかな理由から片付けましょう。それは、計算コストが高すぎて繰り返し実行できない場合があるという点です。これは、(再)計算時間とディスク容量の使用との間の古典的なトレードオフの一例です。多くの場合、適切な妥協点として、新しいアイデアが浮かんだ際に迅速な分析を行えるよう、結果データを一定期間保持しておきつつも、長期アーカイブまでは行わないという選択が有効です。
次に、あまり意識したくないけれども無視できない理由があります。それは、計算が期待ほど再現可能ではない場合があるという点です。実行環境(OS、コンパイラのバージョンなど)によってわずかに異なる結果を返すプログラムは、実は決して珍しくありません。特に浮動小数点演算を用いるプログラムは、ほぼ確実にこのカテゴリに該当します。問題が深刻になるのは、2 回の実行結果の違いが настолько大きく、そこから導かれる結論自体が変わってしまう場合です。はい、実際にそのようなことが起こり得ます。
最後に、計算の出力データそのものを保存することが重要ではないものの、関連するメタデータを保存することが極めて重要な状況が非常に頻繁に見られます。まさにここに ActivePapers の真価が発揮されます。このような状況とは、再計算可能な出力が実際のワークフロー全体においては中間データに過ぎない場合です。例えば、あるシミュレーションを実行して長時間の軌跡データを生成し、その後その軌跡に対して分析を実行し、最終的にプロットを生成するとしましょう。このプロットが最終成果物であれば、それを保持したいと思うはずです。一方、軌跡データや生の分析結果は中間成果物であり、上記の 2 つのケースのいずれかに該当しない限り、必ずしも保存する必要はありません。しかし、プロットが生分析結果から生成され、その生分析結果がさらにシミュレーション軌跡から生成されたという事実自体は記録しておきたいものです。この情報があれば、あなた自身や後日あなたの作業を確認する任何人都が、プロットが実際にシミュレーションおよび分析コードの最新バージョンに対応していることを容易に検証できます。
ActivePapers は、このような状況に対処するための「ダミーデータセット」を提供しています。ダミーデータセットには実際のデータは含まれていませんが、コードレットの実行中に ActivePapers が生成するすべてのメタデータは完全に保持されています。現在の ActivePapers の実装では、このようなダミーデータセットを生成する唯一の方法は、まず実データセットを生成し、それを入力として使用するすべての calclet を実行した後、最後に aptool dummy ... コマンドを用いて実データセットをダミーデータセットに置き換えることです。チュートリアルでもダミーデータセットについて言及しており、元のデータを再計算する方法も示されています。
関連: — ガイド付きターミナルと実際のデータセットを使用したプロジェクトベースのデータ サイエンス パス.
ダミーデータセットに関するユーザーインターフェースには、今後改善の余地が大いにあります。例えば、データセットを作成する calclet がそのデータセットを即座にダミーとしてマークできるようにすれば、ファイルへの書き込みは一切行われず、メモリ上でクライアント calclet に渡すだけで済むようになります。もしこのような機能に関するアイデアをお持ちでしたら、GitHub の Issue トラッカーにて issue を起票していただけると幸いです。
comments powered by Disqus
ブラウザでコーディングして Python を学習する
ブラウザーで直接コーディングするインタラクティブな Python およびデータ サイエンス コース