全部產品
Search
文件中心

Container Service for Kubernetes:使用任務隊列ack-kube-queue管理AI/ML工作負載

更新時間:Jan 24, 2025

ack-kube-queue是面向ACK叢集的任務隊列系統,旨在最佳化AI/ML和批處理工作負載的管理和資源利用。它通過提供靈活的作業隊列管理、自動最佳化工作負載分配和資源配額管理,協助系統管理員提升叢集資源使用率和任務執行效率。本文將介紹如何安裝和配置ack-kube-queue任務隊列並提交任務。

使用限制

僅支援1.18及以上的ACK託管叢集ACK Edge叢集ACK靈駿叢集

安裝ack-kube-queue組件

ACK託管叢集ACK Edge叢集

未部署雲原生AI套件

  1. 開通雲原生AI套件

  2. 登入Container Service管理主控台,在左側導覽列單擊叢集列表

  3. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > 雲原生AI套件

  4. 雲原生AI套件頁面下方,單擊一鍵部署

  5. 調度地區,選中Kube Queue,在互動方式地區,選中Arena,然後在頁面下方單擊部署雲原生AI套件

已部署雲原生AI套件

  1. 開通雲原生AI套件

  2. 登入Container Service管理主控台,在左側導覽列單擊叢集列表

  3. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > 雲原生AI套件

  4. 安裝ack-arenaack-kube-queue

    • 雲原生AI套件頁面的操作列,單擊組件ack-arena對應的部署。在參數配置頁面,單擊確定

    • 雲原生AI套件頁面的操作列,單擊組件ack-kube-queue對應的部署。在彈出頁面,單擊確定

    ack-arenaack-kube-queue安裝完成後,組件列表地區的組件狀態已部署

ACK靈駿叢集

  1. 登入Container Service管理主控台,在左側導覽列選擇市場 > 應用市場

  2. 應用市場頁面,搜尋ack-kube-queue,然後單擊該應用。

  3. 在應用詳情頁面,單擊右上方的一鍵部署,進入基本資料頁面,填寫目的地組群、命名空間和發布名稱後,單擊下一步

  4. 參數配置頁面, 選擇最新的chart 版本後,單擊確定

配置ack-kube-queue組件

ack-kube-queue支援多種任務類型的排隊功能,包括TfJob、PytorchJob、MpiJob、Argo Workflow、RayJob、SparkApplication以及原生Job。預設情況下,ack-kube-queue組件僅啟用原生BatchJob的排隊功能,您可以根據需要開啟或關閉任意類型任務的排隊功能。

使用限制

  • TfJob、PytorchJob、MpiJob需要使用ack-arena組件中提供的Operator。

  • 使用原生Job類型排隊功能時,叢集版本需為1.22及以上。

  • MpiJob當前僅支援通過Arena提交MpiJob。

  • Argo Workflow當前僅支援對整個工作流程進行排隊,可以通過在Annotation中聲明如下內容,指定Workflow需要的資源。

    ...
     annotations:
       kube-queue/min-resources: |
         cpu: 5
         memory: 5G
    ...

開啟任務類型支援

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  3. 找到ack-kube-queue應用,單擊其右側操作列下的更新

  4. 若需開啟相關工作負載的支援,請參照表格修改YAML內容。

    配置項

    說明

    extension.argo.enable設定為true

    開啟Argo Workflow支援。

    extension.mpi.enable設定為true

    開啟MpiJob支援。

    extension.ray.enable設定為true

    開啟RayJob支援。

    extension.spark.enable設定為true

    開啟SparkApplication支援。

    extension.tf.enable設定為true

    開啟TfJob支援。

    extension.pytorch.enable設定為true

    開啟PytorchJob支援。

提交任務

提交TfJob、PytorchJob、MpiJob

您需要在Job的Annotation中添加scheduling.x-k8s.io/suspend="true"的標識。以下以TfJob為例進行說明。

apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
  name: "job1"
  annotations:
    scheduling.x-k8s.io/suspend: "true"
spec:
...

提交原生Job

您需要將Job的suspend欄位設定成true。以下樣本將產生一個需求100mCPU的排隊單元,當該排隊單元出隊後,Job的suspend欄位會被改為false,此時叢集組件將開始執行該Job。

apiVersion: batch/v1
kind: Job
metadata:
  generateName: pi-
spec:
  suspend: true
...

提交Argo Workflow

說明

請提前在應用市場中安裝Argo Workflows組件

請在Argo Workflow中添加一個名為kube-queue-suspend的自訂模板,其類型為suspend。同時,在提交Workflow時,將其suspend狀態設定為true。樣本如下。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: $example-name
spec:
  suspend: true # 需要將該項設定為true。
  entrypoint: $example-entrypoint
  templates:
  # 需要添加名為kube-queue-suspend的suspend模板。
  - name: kube-queue-suspend
    suspend: {}
  - name: $example-entrypoint
...

提交SparkApplication

說明

請提前在應用市場中安裝ack-spark-operator組件

在提交SparkApplication時,請在SparkApplication的註解中添加 scheduling.x-k8s.io/suspend="true" 標籤。

apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
  generateName: spark-pi-suspend-
  namespace: spark-operator
  annotations:
    scheduling.x-k8s.io/suspend: "true"
spec:
...

提交RayJob

說明

請提前在叢集組件管理中安裝託管Kuberay-Operator組件。具體操作,請參見管理組件

在提交 RayJob 時,請將spec.suspend欄位設定成true

apiVersion: ray.io/v1
kind: RayJob
metadata:
  name: rayjob-sample
spec:

  # Suspend specifies whether the RayJob controller should create a RayCluster instance.
  # If a job is applied with the suspend field set to true, the RayCluster will not be created and we will wait for the transition to false.
  # If the RayCluster is already created, it will be deleted. In the case of transition to false, a new RayCluste rwill be created.
  suspend: true
...