AI解説
実装: Nextflow。https://www.nextflow.io/ 情報源: このノートの技術的な内容は、Nextflow 公式ドキュメント(docs.seqera.io、”Caching and resuming” ページ)に基づく。Nature Biotechnology 論文自体は、出版社のペイウォールと Semantic Scholar API 側での本文非公開(”abstract elided by the publisher”)により、要旨も含めて本文を確認できなかった。したがって本節は、対象論文そのものではなく実装の公式ドキュメントを情報源とする点で、このリポジトリの他のノートとは性質が異なることを明記する。著者・書誌情報(Di Tommaso, Chatzou, Floden, Prieto Barja, Palumbo, Notredame, Nature Biotechnology 35, 316–319, 2017)は Semantic Scholar の書誌データで確認済み。
一言で(公式ドキュメントの範囲)
Nextflow は、タスク(プロセス)の実行結果をキャッシュし、-resume オプションで再実行時に完了済みのタスクを飛ばして未完了の部分だけを実行し直せるワークフローエンジン。各タスクの実行環境・入力・スクリプトから計算したハッシュをキャッシュ台帳と照合し、一致してかつ出力ファイルが実際に残っていれば、そのタスクをスキップする。
提案手法(公式ドキュメントの範囲)
タスクハッシュの構成要素
Nextflow はタスクごとに、次の要素からハッシュを計算する。
- セッション ID(
workflow.sessionId) - タスク名とコンテナイメージ
- 実行環境の設定(モジュール、Conda、Spack、CPU アーキテクチャ)
- タスクの入力(ファイルは「フルパス、最終更新時刻、ファイルサイズ」でハッシュ化され、値はそのまま)
- タスクのスクリプト本体と、それが束ねる補助スクリプト
- スクリプトが参照する大域変数
- スクリプト中で参照されるタスクの
extプロパティ - eval コマンド(バージョン25.10以降)
- スタブ実行かどうか
さらに、既存の実行ディレクトリと一致しないハッシュ値が見つかるまで反復できるよう、インクリメントする要素をハッシュ計算に含めている。
キャッシュの参照と再開の判定
-resume を有効にすると、Nextflow は次の手順で動く。
- 実行前にタスクのハッシュを計算する。
- タスクキャッシュに一致するハッシュがあるかを確認する。
- 作業ディレクトリに必要な出力が実際に残っているかを確認する。
- 両方の条件が満たされればそのタスクをスキップし、そうでなければ再実行する。
作業ディレクトリにはタスクの入力ファイル・スクリプト・出力が保存されている。再開時にタスクキャッシュから前回の実行が見つかると、Nextflow は対応する作業ディレクトリを確認し、必要な出力が全て揃っていて終了コードが正常であれば、そのタスクはキャッシュとして正しく扱われる。
キャッシュを無効化する要因
次の変更はキャッシュを無効化し、タスクの再実行を引き起こす。
- 入力ファイルやプロセス名の変更
- コンテナイメージ、Conda 環境、タスクスクリプトの変更
- 束ねられたスクリプトの変更
- クロージャ内の大域変数における競合状態(非決定的な実行)
- チャネルの非決定的なマージ(暗黙のマージではなく
joinオペレータの使用が推奨される)
ファイルシステムに関する注意:NFS のような一部の共有ファイルシステムは、ファイルのタイムスタンプが一貫しないことがあり、これがキャッシュを無効化しうる。この場合、タイムスタンプを無視してパスとサイズだけに頼る 'lenient' キャッシュモードを使うことができる。
関連研究との関係(メモ)
- Pegasus(cite key
deelman2015pegasus):どちらもタスク粒度の完了済み成果物の再利用によって再計算範囲を最小化するが、Pegasus はデータカタログへの登録済みファイルに基づく “make” 風のワークフロー刈り込みで判定するのに対し、Nextflow はタスクの入力・スクリプト・環境から計算したハッシュとキャッシュ台帳の照合で判定する、という設計の違いがある。 - 分野横断的な位置づけは アプリケーションレベルのチェックポイント の §3.7 を参照。
Q&A
(自分がAIに実際に質問したことだけをQ/A形式で残す。まだなし。)
自分のコメント
(ここは自分で都度書く欄。論文本文が入手できたら、このノートを論文本文ベースに書き直す必要がある。)