【要約】AIの呼び出しを16本同時にしたら、さばけた量は3.1倍が最良だった。1本あたりの待ちは3.3秒から23.3秒へ [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
AIの自動化処理を実装する開発者は、処理速度向上のために並列度を上げようとする。しかし、並列化は単なる速度向上に留まらず、以下の技術的課題を引き起こす可能性がある。
- ・並列度を上げると1本あたりの待ち時間が急増し、既存のタイムアウト設定では処理が全滅する。
- ・CLIが提供する所要時間(duration_ms)が、プロセスの起動・終了コストにより実際の待ち時間を正確に示さない。
- ・エラーが発生しても、結果のsubtypeが「success」のまま返るなど、不完全なエラー通知が行われる。
- ・キャッシュの状態により、同じ仕事量でも料金に大きなばらつきが生じる。
// Approach
検証者は、並列化の影響を正確に測定するために、仕事量を固定した厳密な比較実験を行った。以下の手順で、並列度(1, 2, 4, 8, 16)による挙動の変化を多角的に記録している。
- ・仕事量を8回または16回に固定し、並列度のみを変化させて合計時間とスループットを計測。
- ・プロンプトキャッシュの影響を排除するため、条件ごとに異なる合言葉をプロンプトに含める。
- ・壁時計時間、CLI申告値、料金、終了コード、メモリ使用量を同時に記録。
- ・リポジトリ内の設定(CLAUDE.md)によるノイズを防ぐため、空のフォルダで実行。
// Result
実験の結果、並列化によるスループット向上とレイテンシ増大の明確なトレードオフが判明した。開発者は以下の定量的な知見を得ることができる。
- ・スループットは8並列で最大3.1倍(0.93件/秒)まで向上するが、16並列では頭打ちとなる。
- ・1本あたりの待ち時間は、中央値で3.3秒から23.3秒へと約7倍に増大する。
- ・16並列では、10秒のタイムアウト設定では全ての呼び出しが失敗する。
- ・エラー判定には、subtypeではなく終了コードやis_errorを必ず使用する必要がある。
Senior Engineer Insight
> 並列化は「魔法の杖」ではない。スループット向上と引き換えにレイテンシが指数関数的に増大する。特にAI呼び出しは不確実性が高く、単一の指標(合計時間)に依存した設計は危険である。実戦投入時には、待ち時間の分布に基づいたタイムアウト値の再設計、終了コードによる厳格なエラーハンドリング、およびプロセスの起動コストを考慮した監視設計が必須となる。また、料金の変動性を考慮し、コスト効率の観点からも並列度の最適解を見極めるべきである。