For eachタスク
結構最近のジョブの機能にFor each
(それぞれ)タスクというものがあります。名前の通り、特定のタスクのそれぞれを処理するループを組むことができる機能です。
こちらでウォークスルーしています。ループしたいパラメータをリストで定義すれば、ロジックを実装したノートブックに対するループ処理を簡単に実装することができます。
SDKを用いた並列タスク
しかし、for each
タスクの登場前でも(ある意味力技で)ジョブでループ処理を実装することができていました。タスクは直列、並列に組み合わせることができるので、異なるパラメータを受け取るノートブックを並列に配置されたタスクに設定すれば、ループ処理を行うことができます。ただし、多数のタスクを手動で設定するのは手間なので、SDKを用いてプログラムからタスクを設定することをお勧めします。
アプローチの比較
これら二つのアプローチには一長一短がありますので、要件に基づいて選択いただくことをお勧めします。
for eachタスク | 並列タスク | |
---|---|---|
計算リソース | ループのそれぞれのイテレーションが割り当てられたリソースを共有します。同時実行性を上げるとリソースの競合が起きるので注意ください。 | タスクごとにリソースを再利用、あるいは別のリソースを割り当てることができます。 |
失敗タスクの再実行 | 特定のイテレーションを再実行する機能がないので、自前で修復処理を実装する必要があります。 | ジョブの修復で可能です。 |
タスクの作成 | 引数のリストを作成するだけで簡単にループ処理を実装できます。 | タスクに分けてループを実装する際、個別のタスクを多数作る必要があります。SDKを用いてプログラム的に作成することをお勧めします。 |
簡単かつリトライの必要性のないワークロードであればfor each
タスクがお勧めですが、リトライ処理やリソース最適化が必要であれば、タスクを組み合わせてループ処理を組んだほうが良いかと思います。