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-kube-queue をインストールする
ACK マネージドクラスター および ACK Edge クラスター
クラウドネイティブ AI スイートがインストールされていない場合
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、ターゲットクラスターを見つけ、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[クラウドネイティブ AI スイート] ページの下部にある [デプロイ] をクリックします。 [スケジューリング] セクションで、[Kube-Queue] を選択します。 [エコシステムツール] セクションで、[Kubeflow And Arena] を選択します。 次に、[クラウドネイティブ 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 を構成する
ack-kube-queue を使用すると、TensorFlow ジョブ、PyTorch ジョブ、Message Passing Interface(MPI)ジョブ、Argo ワークフロー、Ray ジョブ、Spark アプリケーション、Kubernetes ネイティブジョブなど、さまざまなタイプのジョブのキューイングを有効にできます。 デフォルトでは、ack-kube-queue は TensorFlow ジョブと PyTorch ジョブのみをサポートしています。 ビジネス要件に基づいて、他のタイプのジョブのサポートを有効にできます。
制限事項
ack-arena が提供する Operator を使用して、TensorFlow ジョブ、PyTorch ジョブ、および MPI ジョブをキューに送信する必要があります。
Kubernetes ネイティブジョブのキューイングを有効にする場合は、クラスターの Kubernetes バージョンが 1.22 以降である必要があります。
Arena を使用してのみ、MPI ジョブをキューに送信できます。
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 コンソールのアドオンページから 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
...