Argo Workflows は、スケジュールされたタスク、機械学習、ETL に広く使用されている強力なワークフロー管理ツールです。しかし、YAML でワークフローを定義するには学習コストが高いです。Hera Python SDK は、シンプルな代替手段を提供します。Hera を使用すると、ユーザーは Python でワークフローを構築できます。これにより、複雑なタスクをサポートし、テストを簡素化し、Python エコシステムとシームレスに統合できるため、複雑なワークフローの設計がはるかに容易になります。本トピックでは、Python SDK を使用して大規模な Argo Workflows を構築する方法について説明します。
背景情報
Argo Workflows は、Kubernetes 環境向けに特別に設計されたオープンソースのワークフロー管理ツールです。複雑なワークフローオーケストレーションに重点を置き、ユーザーは一連のタスクを定義し、その実行順序と依存関係を柔軟に設定できます。Argo Workflows は、高度にカスタマイズされた自動化ワークフローを効率的に構築および管理するのに役立ちます。
Argo Workflows には、スケジュールされたタスク、機械学習、シミュレーションコンピューティング、科学計算、ETL、モデルトレーニング、CI/CD など、幅広いユースケースがあります。主に YAML を使用してワークフローを定義しますが、これは明確さとシンプルさを目的とした設計上の選択です。しかし、YAML に慣れていないユーザーにとって、特に複雑なワークフローの場合、その厳密なインデントと階層構造は学習コストが高くなる可能性があります。
Hera は、Argo Workflows を構築および送信するために設計された Python SDK フレームワークです。ワークフローの作成と送信を簡素化します。データサイエンティストにとって、Python を使用することは、一般的なプラクティスと一致しており、YAML の課題を克服するのに役立ちます。
作成方法の比較
|
|
YAML |
Hera |
|
シンプルさ |
高い |
高い、コード行数が少ない |
|
複雑なワークフローの作成 |
難しい |
簡単、YAML の構文エラーの可能性を効果的に回避できます |
|
Python エコシステムの統合 |
難しい |
簡単、豊富な Python ライブラリにアクセス可能 |
|
テスト容易性 |
難しい、構文エラーが発生しやすい |
簡単、テストフレームワークを使用して、コードの品質と保守性を向上させることができます。 |
Hera は、Python エコシステムと Argo Workflows フレームワークを接続し、ワークフロー設計をより直感的にします。YAML の複雑さなしに大規模なタスクオーケストレーションを可能にし、データサイエンティストやエンジニアが好みの Python 環境で作業できるようにします。これにより、機械学習ワークフローの構築と最適化がシームレスかつ効率的になり、アイデアからデプロイまでのイテレーションサイクルが加速します。以下の例では Hera を使用します。
ステップ1:クラスターの作成とトークンの取得
-
Argo Workflows クラスターを作成し、次にArgo Server を有効にしてワークフローコンソールにアクセスします。
-
クラスタートークンを作成します。
kubectl create token default -n default
ステップ2:Hera を使用したワークフローの送信
-
Hera をインストールします。
pip install hera -
ワークフローを作成して送信します。
単純な DAG ダイヤモンド
Argo Workflows では、有向非巡回グラフ (DAG) が複雑なタスクの依存関係を定義するためによく使用されます。ダイヤモンドは、タスクが分岐してから収束する一般的なパターンです。この構造は、結果が共通の下流タスクに集約される並列処理に効果的です。次の例は、Hera を使用してダイヤモンド構造のワークフローを定義する方法を示しています。タスク A が最初に実行され、次に 2 つの並列タスク B と C が実行されます。最後のタスク D は、B と C の両方が終了した後に実行され、ワークフローが完了します。
-
simpleDAG.pyという名前のファイルを作成し、次の内容を記述します。# 必要なパッケージをインポートします。 from hera.workflows import DAG, Workflow, script from hera.shared import global_config import urllib3 urllib3.disable_warnings() # ホストアドレスとトークンを設定します。 global_config.host = "https://{{argo_server_IP}}:2746" global_config.token = "abcdefgxxxxxx" # 取得したトークンに置き換えます。 global_config.verify_ssl = False # @script デコレーターは、Python 関数をほぼネイティブにオーケストレーションできる Hera の主要な機能です。 # これにより、Workflow や Steps コンテキストなどの Hera コンテキストマネージャー内で装飾された関数を呼び出すことができます。 # この関数は Hera コンテキスト外でも正常に実行されるため、ユニットテストを作成できます。 # この例では、入力メッセージを出力します。 @script(image="mirrors-ssl.aliyuncs.com/python:3.10") def echo(message: str): print(message) # Workflow は Argo の主要なリソースであり、Hera の重要なクラスです。 テンプレートを保存し、エントリポイントを設定して実行します。 with Workflow( generate_name="dag-diamond-", entrypoint="diamond", namespace="default", ) as w: with DAG(name="diamond"): A = echo(name="A", arguments={"message": "A"}) # テンプレートを構築します。 B = echo(name="B", arguments={"message": "B"}) C = echo(name="C", arguments={"message": "C"}) D = echo(name="D", arguments={"message": "D"}) A >> [B, C] >> D # 依存関係を定義します:タスクBとCはAに依存し、タスクDはBとCに依存します。 # ワークフローを作成します。 w.create() -
ワークフローを送信します。
python simpleDAG.py -
ワークフローの実行後、タスクの DAG とその結果を [ワークフローコンソール] で表示できます。
ワークフローの例
dag-diamond-g9v45は、ダイヤモンド型の DAG トポロジーを示しています。最上位ノード A が完了し、次にノード B と C が並行して実行され、最後にノード D で収束します。すべてのノードは正常に実行されたとマークされます。
MapReduce
Argo Workflows では、DAG テンプレートを使用して MapReduce スタイルのデータ処理を実装し、map フェーズと reduce フェーズをシミュレートできます。次の例は、Hera を使用して単純な MapReduce ワークフローを構築する方法を示しています。このワークフローは、タスクを複数の並列 map タスクに分割し、その結果を最後の reduce タスクで集約します。各ステップは Python 関数であるため、Python エコシステムとの統合が容易になります。
-
アーティファクトを設定します。
-
map-reduce.pyという名前のファイルを作成し、次の内容を記述します。 -
ワークフローを送信します。
python map-reduce.py -
ワークフローの実行後、タスクの DAG とその結果を [ワークフローコンソール] で表示できます。[WORKFLOW DETAILS] ページでは、DAG ビューには
splitノード、4 つの並列mapノード、およびreduceノードがすべて正常に実行されたことが (緑色のチェックマークで) 示されます。
-
関連ドキュメント
-
Hera のドキュメント:
-
Hera の詳細については、「Heraの概要」をご参照ください。
-
Hera を使用して大規模言語モデル (LLM) をトレーニングする方法については、「Heraを使用したLLMのトレーニング」をご参照ください。
-
-
YAML デプロイメントの例:
-
YAML を使用して単純なダイヤモンドの例をデプロイするには、「dag-diamond.yaml」をご参照ください。
-
YAML を使用して map-reduce の例をデプロイするには、「map-reduce.yaml」をご参照ください。
-