ack-kube-queue は、Container Service for Kubernetes(ACK)クラスターにおける AI、機械学習、およびバッチ処理ワークロードの管理を最適化し、リソース使用率を向上させるように設計されたジョブキューマネージャーです。 ack-kube-queue は、柔軟なジョブキュー管理機能を提供し、ワークロードの割り当てとリソースクォータ管理を自動的に最適化し、システム管理者が ACK クラスター内のワークロードのリソース使用率とジョブ実行効率を向上させるのに役立ちます。 このトピックでは、ack-kube-queue をインストールおよび構成する方法と、ack-kube-queue をインストールした後にジョブを送信する方法について説明します。
制限事項
Kubernetes バージョン 1.18 以降を実行している ACK マネージドクラスター、ACK Edge クラスター、および ACK Lingjun クラスター のみがサポートされています。
ACK マネージドクラスター および ACK Edge クラスター
クラウドネイティブ AI スイートがインストールされていない場合
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、
を選択します。[クラウドネイティブ AI スイート] ページの下部にある [デプロイ] をクリックします。
[スケジューリング] セクションで、[kube Queue] を選択します。 [インタラクティブモード] セクションで、[arena] を選択します。「クラウドネイティブ AI スイートのデプロイ」ページの下部にある [クラウドネイティブ AI スイートのデプロイ] をクリックします。
クラウドネイティブ AI スイートがインストールされている場合
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、
を選択します。[ack-arena] と [ack-kube-queue] をインストールします。
[クラウドネイティブ AI スイート] ページで、[ack-arena] を見つけ、[アクション] 列の [デプロイ] をクリックします。 [パラメーター] パネルで、[OK] をクリックします。
[クラウドネイティブ AI スイート] ページで、[ack-kube-queue] を見つけ、[アクション] 列の [デプロイ] をクリックします。 表示されたパネルで、[OK] をクリックします。
[ack-arena] と [ack-kube-queue] がインストールされると、[コンポーネント] セクションの [ステータス] 列に [デプロイ済み] と表示されます。
ACK Lingjun クラスター
ACK コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[マーケットプレイス] ページで、検索ボックスに [ack-kube-queue] と入力し、検索アイコンをクリックします。 ack-kube-queue が表示されたら、その名前をクリックします。
アプリケーション詳細ページの右上隅にある [デプロイ] をクリックします。 [基本情報] ステップで、クラスター、名前、およびリリース名のパラメーターを設定します。 次に、[次へ] をクリックします。
[パラメーター] ステップで、[チャートバージョン] を最新バージョンに設定します。 次に、[OK] をクリックします。
ack-kube-queue を使用すると、TensorFlow ジョブ、PyTorch ジョブ、Message Passing Interface(MPI)ジョブ、Argo ワークフロー、Ray ジョブ、Spark アプリケーション、Kubernetes ネイティブジョブなど、さまざまなタイプのジョブのキューイングを有効にできます。 デフォルトでは、ack-kube-queue は TensorFlow ジョブと PyTorch ジョブのみをサポートしています。 ビジネス要件に基づいて、他のタイプのジョブのサポートを有効にすることができます。
制限事項
TensorFlow ジョブ、PyTorch ジョブ、および MPI ジョブをキューに送信するには、ack-arena が提供する Operator を使用する必要があります。
Kubernetes ネイティブジョブのキューイングを有効にするには、クラスターの Kubernetes バージョンが 1.22 以降である必要があります。
MPI ジョブをキューに送信できるのは、Arena を使用する場合のみです。
Argo ワークフローのみをキューに送信できます。 Argo ワークフローのステップをキューに送信することはできません。 次のアノテーションを追加して、Argo ワークフローによってリクエストされるリソースを指定できます。
... annotations: kube-queue/min-resources: | cpu: 5 memory: 5G ...
特定のタイプのジョブのサポートを有効にする
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、
を選択します。[ack-kube-queue] を見つけ、[アクション] 列の [更新] をクリックします。
次の表の説明に基づいて YAML テンプレートを変更し、特定のタイプのジョブのサポートを有効にします。
パラメーター
説明
extension.argo.enable
をtrue
に設定します。Argo ワークフローのサポートを有効にします。
extension.mpi.enable
をtrue
に設定します。MPI ジョブのサポートを有効にします。
extension.ray.enable
をtrue
に設定します。Ray ジョブのサポートを有効にします。
extension.spark.enable
をtrue
に設定します。Spark アプリケーションのサポートを有効にします。
extension.tf.enable
をtrue
に設定します。TensorFlow ジョブのサポートを有効にします。
extension.pytorch.enable
をtrue
に設定します。PyTorch ジョブのサポートを有効にします。
ジョブを送信する
TensorFlow ジョブ、PyTorch ジョブ、および MPI ジョブをキューに送信する
scheduling.x-k8s.io/suspend="true"
アノテーションをジョブに追加する必要があります。 次のサンプルコードは、TensorFlow ジョブをキューに送信します。
apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
name: "job1"
annotations:
scheduling.x-k8s.io/suspend: "true"
spec:
...
Kubernetes ネイティブジョブをキューに送信する
suspend
フィールドを true
に設定する必要があります。 前の例では、CPU リクエストが 100m
に設定されているジョブがキューに入れられます。 ジョブがキューから削除されると、ジョブの suspend
フィールドの値が false
に変更され、ジョブはクラスター内の関連コンポーネントによって実行されます。
apiVersion: batch/v1
kind: Job
metadata:
generateName: pi-
spec:
suspend: true
...
Argo ワークフローをキューに送信する
最初に、ACK コンソールのマーケットプレイスページから Argo Workflows コンポーネントをインストール する必要があります。
suspend
タイプの kube-queue-suspend
という名前のカスタムテンプレートを Argo Workflows を使用して追加します。 ワークフローを送信するときは、suspend
を true
に設定します。 例:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: $example-name
spec:
suspend: true # このフィールドを true に設定します。
entrypoint: $example-entrypoint
templates:
# suspend タイプの kube-queue-suspend という名前のテンプレートを追加します。
- name: kube-queue-suspend
suspend: {}
- name: $example-entrypoint
...
Spark アプリケーションをキューに送信する
最初に、ACK コンソール の Marketplace ページから ack-spark-operator をインストールする必要があります。
Spark アプリケーションを送信するときは、scheduling.x-k8s.io/suspend="true"
アノテーションを Spark アプリケーション
の構成に追加します。
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
generateName: spark-pi-suspend-
namespace: spark-operator
annotations:
scheduling.x-k8s.io/suspend: "true"
spec:
...
Ray ジョブをキューに送信する
最初に、ACK コンソールのアドオンページから Kuberay-Operator をインストールする必要があります。 詳細については、「コンポーネントを管理する」をご参照ください。
Ray ジョブを送信するときは、spec.suspend
を true
に設定します。
apiVersion: ray.io/v1
kind: RayJob
metadata:
name: rayjob-sample
spec:
# suspend は、RayJob コントローラーが RayCluster インスタンスを作成するかどうかを指定します。
# suspend フィールドを true に設定してジョブを適用すると、RayCluster は作成されず、false への遷移を待ちます。
# RayCluster がすでに作成されている場合は、削除されます。 false に遷移した場合、新しい RayCluster が作成されます。
suspend: true
...