Skip to content

Parallelization(並列化)

複数のLLM呼出を同時実行し、結果をプログラムで集約する。独立サブタスクの分割実行(Sectioning)と、同一タスクの多重実行による確度向上(Voting)の2変種を持つ。

別名

呼称出典
Concurrent OrchestrationMicrosoft Azure
Fan-out/Fan-in、Scatter-Gather、Map-ReduceMicrosoft Azure
Sectioning、VotingAnthropic「Building Effective Agents」

問題

直列処理では、独立した作業まで順番に待つため遅すぎる。複数の観点を1回のLLM呼出に混ぜると、各観点への注意が薄まり品質が落ちる。

また、単一の判断に頼ると、モデルの偶然の誤判定をそのまま採用するリスクが高い。時間を短縮しながら多視点性または判断の確度を得るには、呼出を明示的に並列化し、結果を集約する必要がある。

コンテキスト

適用する:

  • サブタスクが独立で並列化可能
  • 多視点の独立分析
  • 時間予算が厳しい
  • 多数決・閾値投票で確度を上げたい(脆弱性レビュー等)

適用しない(不要な)ケース:

  • サブタスク間に依存や順序制約がある(→ Prompt Chaining
  • 並列エージェントが共有状態を同時変更する
  • 矛盾結果の解決戦略を定義できない
  • レート制限で並列が非効率になる

解決

タスクを独立した呼出へ分け、同時に実行する。Sectioning は異なるサブタスクを並列化し、Voting は同一タスクをN回実行する。完了後、決定論的なコードで結果を集約する。

分類は多数決、スコアは重み付き統合、物語的な統合はLLMによる合成とする。1つの呼出が応答を生成し、別の呼出が安全審査を行うガードレール実装も、Sectioning の応用である(Anthropic)。

python
def parallelize(task, mode, count=3):
    inputs = split(task) if mode == "sectioning" else [task] * count
    results = run_concurrently([llm(item) for item in inputs])

    if mode == "voting":
        decision = majority_vote(results)
    else:
        decision = aggregate_by_subtask(results)

    if needs_semantic_synthesis(decision):
        return llm({"task": task, "candidates": results})
    return decision

実装の要点:

  • 独立性を先に確認する。 先行結果を次の入力が必要とするなら、並列化ではなく直列の Prompt Chaining を選ぶ
  • 集約規則を事前に定義する。 分類は多数決、数値は重み付き統合など、結果の型に応じて決定論的な規則を置く
  • 並列度と失敗を管理する。 レート制限、タイムアウト、部分的な失敗、矛盾結果を記録し、必要なら閾値未達として扱う

トレードオフ

  • ✅ 独立呼出を同時実行することで、全体のレイテンシを短縮できる
  • ✅ Voting により単一判断への依存を減らし、確度を向上できる
  • ⚠️ 呼出数に比例してコストが増え、レート制限にも到達しやすくなる
  • ⚠️ 集約戦略を設計しないと、矛盾した結果を混ぜて品質を低下させる

クラウドパターンとの対応

クラウドパターン本パターンでの再定義
Fan-out/Fan-inワーカーが決定論的関数を実行する構造から、非決定論的なLLMを並列実行する構造へ。集約にも意味の合成や多数決が加わった
Scatter-Gather(EIP)メッセージの分散・応答集約を、同一タスクの多重推論と投票に適用したもの。Voting の直系にあたる

関連パターン

  • Orchestrator-Workers — サブタスクが事前定義か動的生成かが異なる。Parallelization は独立性を前提に並列化する
  • Prompt Chaining — サブタスク間に依存や順序制約がある場合に選ぶ直列パターン
  • Evaluator-Optimizer — Voting が並列評価なのに対し、Evaluator-Optimizer は評価と改善を逐次実行する
  • Budget Guard — 並列度と総トークン上限を制御し、コストとレート制限を管理する

出典・参考

本文: CC BY 4.0 / コード片: MIT。GitHub で寄稿を受け付けています。