2 つの並列化レベル
Ionworks は最適化中に 2 つのレベルで並列化を適用します:バッチレベル: マルチスタート実行
複数のマルチスタートを設定すると、各実行は個別の Ray タスクとしてディスパッチされます。各タスクはコーディネーターとして機能する 1 CPU を確保し、Ray のスケジューラが並行性を管理します。利用可能なリソースよりも多くのマルチスタートが要求された場合、余剰タスクはキューに入り、リソースが解放されると実行されます。オプティマイザレベル: 分散評価
集団ベースのオプティマイザは、各反復で候補解の集団を評価します。ワーカーが利用可能な場合、これらの評価はActorPoolEvaluator を使用して Ray ワーカープロセスに分散され、ノード間分散のために SPREAD placement groups が使用されます。
以下のオプティマイザは集団ベースであり、分散評価をサポートしています:
| オプティマイザ | 説明 |
|---|---|
| Differential Evolution(デフォルト) | 適応的変異と交叉によるグローバル探索 |
| CMA-ES | Covariance Matrix Adaptation Evolution Strategy |
| PSO | Particle Swarm Optimization |
| XNES | Exponential Natural Evolution Strategy |
非同期評価モード
非同期モードが有効な場合、集団ベースのオプティマイザは候補評価を送信し、バッチ全体の完了を待つのではなく、いずれかのワーカーが完了するとすぐに結果の処理を開始します。これにより、個々の評価の所要時間にばらつきがある場合のアイドル時間が削減されます。高速な評価は即座にオプティマイザにフィードバックされ、遅い評価はバックグラウンドで継続します。 非同期モードは、分散評価が利用可能な場合に自動的に有効になります。すべての集団ベースオプティマイザ(Differential Evolution、CMA-ES、PSO、XNES、SNES)に適用されます。非集団ベースのオプティマイザには影響しません。非同期評価は最適化結果を変更しません。評価の順序に関係なく、オプティマイザは同じ候補-結果のペアを受け取ります。スループットのみに影響します。
リソース割り当て
ワーカーの割り当てはクラスタの種類と設定に依存します: 上限なし Anyscale(デフォルト): 各マルチスタートジョブは固定数のワーカー(デフォルト: 4、ANYSCALE_WORKERS_PER_JOB で設定可能)を受け取ります。Anyscale のオートスケーラーは、placement group がリクエストされると必要なリソースをプロビジョニングし、需要に基づいてクラスタをスケールアップ/ダウンします。各ジョブは固定の CPU プールを奪い合うことなく、完全なワーカー割り当てを受けます。
上限あり Anyscale / ローカルクラスタ: ワーカーは利用可能な CPU と同時コーディネーター数に基づいて動的に分割されます。計算式は (max_cpus - concurrent_coordinators) // concurrent_coordinators です。Anyscale では上限は ANYSCALE_MAX_CLUSTER_CPUS で設定されます。ローカルクラスタでは現在のクラスタ CPU 数が使用されます。結果のワーカー数が最小しきい値を下回る場合、分散評価はスキップされ、オプティマイザは逐次的に評価します。
上限なし Anyscale クラスタでは、ジョブあたりのワーカー数は
ANYSCALE_WORKERS_PER_JOB
環境変数で設定できます。上限あり/ローカルクラスタでは、ワーカーは利用可能な
リソースから自動的に決定されます。シナリオ
以下の例は、異なる設定でリソースがどのように割り当てられるかを示しています。シナリオ 1: 集団ベースオプティマイザでの複数マルチスタート(上限なし Anyscale)
CMA-ES で 4 マルチスタート 各マルチスタートは 1 コーディネーター CPU を確保し、分散評価用に 4 ワーカーが割り当てられます。オートスケーラーは合計 20 CPU(4 コーディネーター + 16 ワーカー)をプロビジョニングします。各実行の集団評価はActorPoolEvaluator を介してワーカーに分散されます。
シナリオ 2: 集団ベースオプティマイザでの単一マルチスタート(上限なし Anyscale)
PSO で 1 マルチスタート 単一のコーディネーターに 4 ワーカーが割り当てられます。オートスケーラーは合計 5 CPU をプロビジョニングします。すべてのワーカーがその単一実行の集団評価の分散に専念します。シナリオ 3: 多数のマルチスタート(上限なし Anyscale)
CMA-ES で 32 マルチスタート 各マルチスタートはコーディネーターと 4 ワーカーを受け取ります。オートスケーラーは需要に応じてクラスタをスケールします。Ray のスケジューラが並行性を管理し、クラスタが完全にスケールアップしていない場合、余剰タスクはキューに入り、リソースが利用可能になると開始されます。シナリオ 4: ローカルクラスタでの複数マルチスタート
20 CPU ローカルクラスタで CMA-ES の 4 マルチスタート ワーカーは動的に分割されます:(20 - 4) // 4 = 4 ワーカー/ジョブ。各実行は 4 ワーカーと 1 コーディネーターを受け取り、20 CPU すべてを使用します。同じ 4 マルチスタートでより小さな 8 CPU クラスタの場合、各ジョブは (8 - 4) // 4 = 1 ワーカーとなり、最小しきい値を下回るため、分散評価はスキップされます。
シナリオ 5: 非集団ベースオプティマイザでの単一マルチスタート
Nelder-Mead で 1 マルチスタート 単一のコーディネーターが 1 つの最適化ジョブを実行します。Nelder-Mead は集団ベースではないため、評価をワーカーに分散できません。コーディネーターが候補を逐次的に評価します。まとめ
| シナリオ | コーディネーター | ワーカー/ジョブ | 分散評価 | 非同期モード | 動作 |
|---|---|---|---|---|---|
| N マルチスタート、集団ベース(Anyscale) | N | 4(デフォルト) | あり | あり | オートスケーラーが N x 5 CPU をプロビジョニング、結果は到着次第処理 |
| N マルチスタート、集団ベース(ローカル/上限あり) | N | 動的 | あり | あり | ワーカー = (max_cpus - N) / N、結果は到着次第処理 |
| 1 マルチスタート、集団ベース | 1 | 4(デフォルト)または動的 | あり | あり | 非同期ディスパッチでワーカーが集団を並列評価 |
| N マルチスタート、非集団ベース | N | 0 | なし | なし | ジョブごとに逐次評価 |
| 1 マルチスタート、非集団ベース | 1 | 0 | なし | なし | 単一コーディネーター、逐次処理 |