全部產品
Search
文件中心

Platform For AI:建立自訂群組件

更新時間:Jul 14, 2026

自訂群組件支援您封裝自有演算法,並在 Designer 中與 PAI 官方組件串聯使用,實現靈活的工作流程編排。

背景資訊

自訂群組件底層採用阿里雲開源的 KubeDL,一個基於 Kubernetes 的 AI 工作負載管理架構。

建立自訂群組件時,您可以選擇任務類型(Tensorflow、PyTorch、XGBoost、ElasticBatch)、建立輸入輸出管道、配置超參等。組件建立後會轉換為 Designer 介面可視化參數,詳情參見操作步驟

前提條件

已建立工作空間。自訂群組件與工作空間綁定。詳情參見建立及管理工作空間

操作步驟

  1. 進入組件管理頁面。

    1. 登入PAI 控制台

    2. 在左側導覽列單擊工作空间列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。

    3. 在左側導覽列,選擇AI资产管理>自定义组件

  2. 在組件列表頁面,單擊新群組件,並在新群組件頁面配置以下參數。

    • 基本資料配置

      參數

      描述

      组件名称

      自訂群組件名稱,在同一個地區下要求主帳號內唯一。

      組件描述

      簡要描述自訂群組件,便於區分不同組件。

      组件版本

      建立的自訂群組件版本號碼。

      說明

      建議使用 x.y.z 格式管理版本。例如首個版本為 1.0.0,修複問題時升級為 1.0.1,功能更新時升級為 1.1.0。

      版本描述

      對當前建立的自訂群組件版本進行描述。例如:初始版本。

    • 執行配置

      參數

      描述

      任务类型

      選擇任務類型。支援 TensorflowPyTorchXGBoostElasticBatch 四種類型,分別對應KubeDL中的TFJobPyTorchJobXGBoostJob、ElasticBatchJob四種任務類型。詳情參見附錄:任務類型介紹

      執行鏡像

      當前支援選擇社区镜像官方镜像自定义镜像,您也可以在镜像地址頁簽配置三種類型的鏡像地址。

      說明
      • 為保證任務穩定性,請使用同一 Region 下阿里雲鏡像服務(ACR)。

      • 僅支援 ACR 個人版,不支援企業版。鏡像地址請填寫 VPC 地址,格式為:registry-vpc.${region}.aliyuncs.com

      • 請勿在同一版本中頻繁更新自訂鏡像,否則鏡像緩衝無法及時重新整理,導致任務啟動時間延長。

      • 鏡像中必須包含 sh shell 命令,系統通過 sh -c 方式執行命令。

      • 自訂鏡像中須包含 Python 環境和 pip 命令,否則任務可能運行失敗。

      執行代碼

      自訂群組件的代碼目錄支援 OSS 目錄和 Git 地址:

      • OSS 掛載:組件運行時,該 OSS 目錄中的檔案會下載到/ml/usercode/目錄下,您可以通過命令執行該目錄下的檔案。

        說明
        • 建議該目錄只存放演算法必需的檔案,檔案過多會導致啟動逾時。

        • 代碼目錄中存在 requirements.txt 時,運行時會自動執行pip install -r requirements.txt安裝相關依賴。

      • PAI 代碼配置:配置 Git 程式碼程式庫。

      执行命令

      組件鏡像的執行命令。通過環境變數擷取實際值,格式如下:

      python main.py $PAI_USER_ARGS --{CHANNEL_NAME} $PAI_INPUT_{CHANNEL_NAME} --{CHANNEL_NAME} $PAI_OUTPUT_{CHANNEL_NAME} && sleep 150 && echo "job finished"

      通過 PAI_USER_ARGSPAI_INPUT_{CHANNEL_NAME}、PAI_OUTPUT_{CHANNEL_NAME} 環境變數讀取超參、輸入和輸出管道資料,詳情參見如何讀取管道及超參資料

      例如:輸入管道名稱分別為test、train;輸出管道名稱分別為model、checkpoints,則配置樣本如下:

      python main.py $PAI_USER_ARGS --train $PAI_INPUT_TRAIN --test $PAI_INPUT_TEST --model $PAI_OUTPUT_MODEL --checkpoints $PAI_OUTPUT_CHECKPOINTS && sleep 150 && echo "job finished"

      代碼入口檔案 main.py 的參數解析邏輯樣本如下,實際使用時將您的演算法邏輯整合進去即可:

      import os
      
      import argparse
      import json
      
      def parse_args():
          """解析給到指令碼的arguments."""
          parser = argparse.ArgumentParser(description="PythonV2 component script example.")
      
          # input & output channels
          parser.add_argument("--train", type=str, default=None, help="input channel train.")
          parser.add_argument("--test", type=str, default=None, help="input channel test.")
          parser.add_argument("--model", type=str, default=None, help="output channel model.")
          parser.add_argument("--checkpoints", type=str, default=None, help="output channel checkpoints.")
      
          # parameters
          parser.add_argument("--param1", type=int, default=None, help="param1")
          parser.add_argument("--param2", type=float, default=None, help="param2")
          parser.add_argument("--param3", type=str, default=None, help="param3")
          parser.add_argument("--param4", type=bool, default=None, help="param4")
          parser.add_argument("--param5", type=int, default=None, help="param5")
      
          args, _ = parser.parse_known_args()
          return args
      
      if __name__ == "__main__":
          args = parse_args()
      
          print("Input channel train={}".format(args.train))
          print("Input channel test={}".format(args.test))
          print("Output channel model={}".format(args.model))
          print("Output channel checkpoints={}".format(args.checkpoints))
      
          print("Parameters param1={}".format(args.param1))
          print("Parameters param2={}".format(args.param2))
          print("Parameters param3={}".format(args.param3))
          print("Parameters param4={}".format(args.param4))
          print("Parameters param5={}".format(args.param5))
      

      範例程式碼運行時的日誌輸出如下:

      Input channel train=/ml/input/data/train
      Input channel test=/ml/input/data/test/easyrec_config.config
      Output channel model=/ml/output/model/
      Output channel checkpoints=/ml/output/checkpoints/
      Parameters param1=6
      Parameters param2=0.3
      Parameters param3=test1
      Parameters param4=True
      Parameters param5=2
      job finished
    • 管道及參數

      單擊image..png配置自訂群組件的輸入管道(Input Channel)、輸出管道(Output Channel)和參數。名稱命名格式如下:

      • 要求全域唯一,且互相不能重複。

      • 支援數字、字母、底線(_)和減號(-),不能以底線開頭。

        說明

        名稱中不支援的字元(僅支援字母、數字和底線)會被替換為底線,小寫字母會轉為大寫。請避免轉換後產生衝突,例如 test_model 和 test-model 轉換後都是 PAI_HPS_TEST_MODEL。

      管道及參數配置與 Designer 組件介面參數的對應關係:a8ff0de8871ede6a80f9c642b4f187aa..png

      具體參數配置說明如下:

      參數

      描述

      輸入

      通過輸入管道擷取輸入資料或 Fine-tune 模型,支援配置以下參數:

      • 輸入名稱:參照介面提示配置輸入管道名稱。

      • 輸入來源:指定輸入管道讀取 OSS、NAS 或 MaxCompute 路徑的資料。輸入資料會掛載到訓練容器的/ml/input/data/{channel_name}/目錄下,組件可像讀取本地檔案一樣訪問 OSS、NAS 或 MaxCompute 上的資料。

      输出

      輸出管道用於儲存訓練模型、Checkpoints等結果,支援配置以下參數:

      • 輸出名稱:參照介面提示配置輸出管道名稱。

      • 存储类型:指定一個 OSS 或 MaxCompute 目錄,該目錄會掛載到訓練容器的/ml/output/{channel_name}/下。

      参数

      超參資訊,支援配置以下參數:

      • 參數名稱:參照介面提示配置參數名稱。

      • 參數類型:目前支援配置Int、Float、String、Bool四種類型。

      • 約束:選擇除Bool外的參數類型(包括Int、Float、String)後,在默认值列,單擊約束,來配置參數約束關係。約束類型取值如下:

        • 范围:通過配置最大值和最小值來指定取值範圍。

        • 枚舉:為參數配置枚舉值。

    • 訓練約束

      訓練約束定義訓練任務所需的計算資源。開啟開啟訓練約束開關即可配置。

      配置訓練約束後,在 Designer 工作流程中使用該組件時,右側執行調優面板中的機器執行個體類型規格選擇機器數量最大運行時間長度(秒)等參數將受約束限制。

      具體參數說明如下:

      參數

      描述

      機器類型

      選擇組件支援 CPU 或 GPU 機器。

      支援多機

      是否支援多機分布式運行:

      • 支持:運行時支援配置節點數。

      • 不支持:運行時節點數固定為 1,不可修改。

      支援多卡

      僅當機器類型選擇GPU時,支援配置該參數。

      是否支援多卡 GPU:

      • 支持機器類型支援選擇單卡或多卡GPU機器。

      • 不支持機器類型僅支援選擇單卡GPU機器。

  3. 單擊提交

    組件列表頁面顯示已建立的自訂群組件。

組件建立成功後,後續您可以在Designer中使用該自訂群組件,詳情參見使用自訂群組件

附錄1:任務類型介紹

Tensorflow(TFJob)

任務類型為 Tensorflow(TFJob) 時,節點拓撲資訊通過環境變數 TF_CONFIG 注入,格式樣本如下:

{
  "cluster": {
    "chief": [
      "dlc17****iui3e94-chief-0.t104140334615****.svc:2222"
    ],
    "evaluator": [
      "dlc17****iui3e94-evaluator-0.t104140334615****.svc:2222"
    ],
    "ps": [
      "dlc17****iui3e94-ps-0.t104140334615****.svc:2222"
    ],
    "worker": [
      "dlc17****iui3e94-worker-0.t104140334615****.svc:2222",
      "dlc17****iui3e94-worker-1.t104140334615****.svc:2222",
      "dlc17****iui3e94-worker-2.t104140334615****.svc:2222",
      "dlc17****iui3e94-worker-3.t104140334615****.svc:2222"
    ]
  },
  "task": {
    "type": "chief",
    "index": 0
  }
}

關鍵參數說明:

參數

描述

cluster

TensorFlow 叢集描述,Map 類型:

  • Key:節點的角色類型(Chief、Worker、PS、Evaluator 或 Master)。

  • Value:該角色的機器網路地址清單。

task

  • type:當前節點的角色類型。

  • index:當前節點在其角色對應的網路地址清單中的索引。

Pytorch(PyTorchJob)

任務類型為 Pytorch(PyTorchJob) 時,注入以下環境變數:

  • RANK:當前節點的序號。0 表示 Master 節點,非 0 為 Worker 節點。

  • WORLD_SIZE:任務中機器的總數量。

  • MASTER_ADDR:Master 節點的地址。

  • MASTER_PORT:Master 節點的連接埠。

XGBoost(XGBoostJob)

任務類型為 XGBoost(XGBoostJob) 時,注入以下環境變數:

  • RANK:當前節點的序號。0 表示 Master 節點,非 0 為 Worker 節點。

  • WORLD_SIZE:任務中機器的總數量。

  • MASTER_ADDR:Master 節點的地址。

  • MASTER_PORT:Master 節點的連接埠。

  • WORKER_ADDRS:Worker 節點的地址,按 RANK 順序排列。

  • WORKER_PORT:Worker 節點的連接埠。

樣本如下:

  • 分布式任務(節點數超過 1)

    WORLD_SIZE=6
    WORKER_ADDRS=train1pt84cj****-worker-0,train1pt84cj****-worker-1,train1pt84cj****-worker-2,train1pt84cj****-worker-3,train1pt84cj****-worker-4
    MASTER_PORT=9999
    MASTER_ADDR=train1pt84cj****-master-0
    RANK=0
    WORKER_PORT=9999
  • 單節點運行

    說明

    單節點運行時,節點為 Master 節點,不會注入 WORKER_ADDRS 和 WORKER_PORT 環境變數。

    WORLD_SIZE=1
    MASTER_PORT=9999
    MASTER_ADDR=train1pt84cj****-master-0
    RANK=0

ElasticBatch(ElasticBatchJob)

ElasticBatch 是一種分布式離線彈性批量推理作業類型,具有以下特點:

  • 輕鬆並行,輸送量翻倍。

  • 任務等待時間大幅降低,部分 Worker 有資源即可運行。

  • 自動監測慢機並啟動 Backup Worker 替換,避免任務長尾或掛起。

  • 支援資料分區全域動態分發,讓快節點處理更多資料。

  • 支援任務早停,資料全部處理完成後,未啟動的 Worker 不再啟動。

  • 支援容錯處理,單 Worker 偶發失敗會自動重啟。

ElasticBatch Job 包含 AIMaster 和 Worker 兩類節點:

  • AIMaster:負責 Job 的全域管控,包括資料分區動態分發、Worker 效能監測和容錯處理。

  • Worker:工作節點,從 AIMaster 擷取分區後執行資料讀取、處理和寫回,然後擷取下一個分區。動態分區機制使快機器處理更多資料,慢機器少處理資料。

ElasticBatch 任務啟動後,您的代碼運行在 Worker 節點中。Worker 節點會注入 ELASTICBATCH_CONFIG 環境變數,格式樣本如下:

{
  "task": {
    "type": "worker",
    "index": 0
  },
  "environment": "cloud"
}

參數說明:

  • task.type:當前節點的角色類型。

  • task.index:當前節點在其角色對應的網路地址清單中的索引。

附錄2:自訂群組件實現原理

如何讀取管道及超參資料

讀取輸入管道資料

每個輸入管道的資料路徑通過 PAI_INPUT_{CHANNEL_NAME} 環境變數注入到容器中。

例如組件有 train、test 兩個輸入管道,其值分別為:oss://<YourOssBucket>.<OssEndpoint>/path-to-data/oss://<YourOssBucket>.<OssEndpoint>/path-to-data/test.csv,注入的環境變數如下:

PAI_INPUT_TRAIN=/ml/input/data/train/
PAI_INPUT_TEST=/ml/input/data/test/test.csv

讀取輸出管道資料

通過 PAI_OUTPUT_{CHANNEL_NAME} 環境變數擷取輸出路徑。

例如組件有 model 和 checkpoints 兩個輸出管道,注入的環境變數如下:

PAI_OUTPUT_MODEL=/ml/output/model/
PAI_OUTPUT_CHECKPOINTS=/ml/output/checkpoints/

讀取超參資料

超參資料通過以下環境變數讀取:

  • PAI_USER_ARGS

    所有超參以 --{hyperparameter_name} {hyperparameter_value} 的形式注入到 PAI_USER_ARGS 環境變數中。

    例如指定超參 {"epochs": 10, "batch-size": 32, "learning-rate": 0.001},則 PAI_USER_ARGS 的值為:

    PAI_USER_ARGS="--epochs 10 --batch-size 32 --learning-rate 0.001"
  • PAI_HPS_{HYPERPARAMETER_NAME}

    每個超參也會單獨以環境變數注入。超參名中不支援的字元(僅支援字母、數字和底線)會被替換為底線。

    例如指定超參 {"epochs": 10, "batch-size": 32, "train.learning_rate": 0.001},對應的環境變數如下:

    PAI_HPS_EPOCHS=10
    PAI_HPS_BATCH_SIZE=32
    PAI_HPS_TRAIN_LEARNING_RATE=0.001
  • PAI_HPS

    所有超參以 JSON 格式通過 PAI_HPS 環境變數注入。

    例如傳遞超參 {"epochs": 10, "batch-size": 32},則 PAI_HPS 的值為:

    PAI_HPS={"epochs": 10, "batch-size": 32}

輸入輸出目錄結構

除了通過環境變數擷取管道路徑,也可以直接存取容器內的掛載路徑。任務在容器內執行時,按以下規則建立路徑:

  • 代碼路徑:/ml/usercode/

  • 超參設定檔:/ml/input/config/hyperparameters.json

  • 訓練作業的完整設定檔:/ml/input/config/training_job.json

  • 輸入管道的目錄路徑:/ml/input/data/{channel_name}/

  • 輸出管道的目錄路徑:/ml/output/{channel_name}/

輸入輸出目錄結構完整樣本如下:

/ml
|-- usercode                        # 使用者代碼載入到/ml/usercode目錄,這裡也是使用者代碼的工作目錄. 可以通過環境變數PAI_WORKING_DIR獲得。
|   |-- requirements.txt
|   |-- main.py
|-- input                           # 作業輸入資料和配置資訊
|   |-- config                      # config目錄包含了作業的配置資訊, 可以通過PAI_CONFIG_DIR擷取。
|       |-- training_job.json       # 作業的完整配置。
|       |-- hyperparameters.json    # 訓練作業超參.
|   |-- data                        # 作業的InputChannels: 以下目錄包含了兩個channel: train_data和test_data。
|       |-- test_data
|       |   |-- test.csv
|       |-- train_data
|           |-- train.csv
|-- output                          # 作業的輸出Channels: 這裡有model/checkpoints兩個輸出channel。
        |-- model                   # 通過環境變數PAI_OUTPUT_{OUTPUT_CHANNEL_NAME}可以獲輸出路徑。
        |-- checkpoints

如何判斷是否是GPU機器以及GPU卡數

任務啟動後,通過環境變數 NVIDIA_VISIBLE_DEVICES 判斷當前機器是否有 GPU 及 GPU 卡數。例如 NVIDIA_VISIBLE_DEVICES=0,1,2,3 表示當前機器有 4 張 GPU 卡。