# 動的タスクグラフ ## 定義 動的タスクグラフ(Dynamic Task Graph)とは、プログラムの実行中にグラフの形状が変化する計算グラフモデルである。節はタスク(関数実行)またはデータオブジェクト、辺はデータ依存(データ辺)・呼び出し依存(制御辺)・ステート依存(ステートフル辺)を表す。事前にグラフ全体が確定している静的 DAG と異なり、タスクの完了結果が次に生成するタスクを決定できる。 ## 構造 Ray の動的タスクグラフは 3 種の辺を持つ。 - **データ辺**: データオブジェクトとタスクを結ぶ。入力/出力の依存を表す - **制御辺**: ネストされた遠隔関数呼び出しにより生成。T1 が T2 を呼び出す場合 T1→T2 の制御辺が追加される - **ステートフル辺**: 同一アクター上の連続するメソッド呼び出し間の依存。内部ステートの共有を表す ステートフル辺を明示的にグラフに含めることで、ステートレスタスクグラフにアクターを透明に埋め込め、かつ血統追跡と再実行による障害回復が可能になる。 ## 動的性の意義 RL アプリケーションでは(1)シミュレーション結果の完了順序が事前に確定せず、(2)シミュレーション結果が次の訓練ステップを決定する。静的 DAG(TensorFlow の初期設計等)はこのような動的依存を自然に表現できない。動的タスクグラフは「実行しながらグラフを伸ばす」という計算モデルでこれを解決する。 ## 横断的知見 *注: 本節は複数ソースが揃い次第拡充する。現時点は OSDI 2018 (Ray) の単一ソースに基づく。* - **静的 DAG と動的タスクグラフのトレードオフ**: 静的グラフは事前最適化(カーネル融合・通信スケジューリング等)が可能だが柔軟性に欠ける。動的グラフはランタイム最適化が限られるが RL・エージェントのような動的ワークロードに不可欠である([[@2018__OSDI__Ray A Distributed Framework for Emerging AI Applications]])。TensorFlow Fold が部分的に動的グラフを試みたが制限があった - **アクターのステートフル辺は血統追跡の鍵**: ステートフル辺を血統グラフに含めることで、アクターメソッドの再実行がタスク再実行と統一的に扱える。Orleans/Akka はこの辺を明示的に持たず、開発者が手動チェックポイントを実装する必要があった ## 未解決の問い - 超大規模 LLM 訓練のような単一静的計算グラフが支配的なワークロードでも動的タスクグラフは有効か? - 動的タスクグラフとコンパイラ最適化(XLA・inductor 等)の統合は実用的か? ## 関連 - [[タスク並列フレームワーク]] — 動的タスクグラフを実行基盤として利用するフレームワーク - [[Ray]] — 動的タスクグラフに基づく汎用 AI フレームワークの代表実装 - [[LLM分散学習]] — 静的 DAG 前提の訓練フレームワークと動的グラフの比較が生じる領域 ## 出典 - [[@2018__OSDI__Ray A Distributed Framework for Emerging AI Applications]] — 動的タスクグラフモデルをタスク・アクター・3 種の辺で定式化