すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:カスタムコンポーネントの作成

最終更新日:Apr 02, 2026

Platform for AI (PAI) を使用すると、カスタムアルゴリズムコンポーネントを構築し、それらをビジュアルモデリングの組み込みコンポーネントと組み合わせて、柔軟なトレーニングパイプラインを作成できます。このトピックでは、PAI コンソールでカスタムコンポーネントを作成する手順について説明します。

仕組み

カスタムコンポーネントは、Alibaba Cloud のオープンソース Kubernetes ベースの AI ワークロード管理フレームワークである KubeDL で実行されます。

カスタムコンポーネントを作成する際は、ジョブタイプ (TensorFlow、PyTorch、XGBoost、または ElasticBatch) を選択し、入力パイプラインと出力パイプラインを定義し、ハイパーパラメーターを構成します。コンポーネントが作成されたら、それをビジュアルモデリングパイプラインにドラッグして、ランタイム設定を構成できます。

前提条件

開始する前に、以下を確保してください。

  • ワークスペース。カスタムコンポーネントはワークスペースに関連付けられています。ワークスペースを作成するには、「ワークスペースの作成と管理」をご参照ください。

カスタムコンポーネントの作成

  1. [カスタムコンポーネント] ページに移動します。

    1. またはPAI コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。[ワークスペース] ページで、お使いのワークスペースの名前をクリックします。

    3. 左側のナビゲーションウィンドウで、AI アセット管理カスタムコンポーネント を選択します。

  2. [コンポーネントの作成] をクリックし、次のパラメーターを設定します。

    イメージ要件

    ご利用のアルゴリズムの依存関係に基づいてイメージタイプを選択します。

    • ご利用のアルゴリズムの依存関係が pip でインストールできる場合は、Alibaba Cloud 公式イメージを使用し、コードディレクトリに requirements.txt ファイルを提供します。PAI は起動時に pip install -r requirements.txt を自動的に実行します。

    • ご利用のアルゴリズムに特定のシステムレベルの依存関係が必要な場合は、カスタムイメージを使用します。

    追加要件:

    • 最高の信頼性を得るには、ジョブと同じリージョンの Alibaba Cloud Container Registry (ACR) を使用します。

    • Container Registry Personal Edition のみがサポートされています。Enterprise Edition はサポートされていません。イメージアドレスは registry-vpc.${region}.aliyuncs.com 形式で指定します。

    • カスタムイメージの場合: ジョブ起動時のイメージキャッシュの遅延を防ぐため、同じコンポーネントバージョン内でイメージを更新することは避けてください。

    • イメージには sh シェルコマンドを含める必要があります。PAI は sh -c を使用してコマンドを実行します。

    • カスタムイメージには、Python 環境と pip を含める必要があります。

    コード: OSS パスのマウント要件

    • 起動の遅延を防ぐため、必要なアルゴリズムファイルのみを OSS パスに保存します。

    • コードディレクトリに requirements.txt ファイルが存在する場合、PAI は起動時に pip install -r requirements.txt を自動的に実行します。

    パイプラインとパラメーター

    image..png アイコンをクリックして、入力パイプライン、出力パイプライン、およびハイパーパラメーターを追加します。

    すべてのパイプラインとパラメーターの名前要件:

    • 名前はグローバルに一意である必要があります。

    • 名前には数字、文字、アンダースコア (_)、およびハイフン (-) を含めることができますが、アンダースコアで始めることはできません。

    PAI が環境変数名を生成する際、すべての文字を大文字に変換し、ハイフン (-) を含むサポートされていない文字をアンダースコア (_) に置き換えます。たとえば、test_modeltest-model は両方とも PAI_HPS_TEST_MODEL になり、競合が発生します。これを避けるために、異なる名前を使用してください。

    基本情報

    パラメーター説明
    コンポーネント名カスタムコンポーネントの名前。同じ Alibaba Cloud アカウントとリージョン内で一意である必要があります。
    コンポーネントの説明カスタムコンポーネントの説明。
    コンポーネントバージョンバージョン番号。x.y.z 形式を使用します。マイナーな修正の場合はパッチバージョン (例: 1.0.0 から 1.0.1) を増分し、機能更新の場合はマイナーバージョン (例: 1.0.0 から 1.1.0) を増分します。
    バージョンの説明このバージョンの説明。例: initial version

    実行構成

    パラメーター説明
    ジョブタイプコンポーネントを実行するためのフレームワーク。オプション: TensorFlow (TFJob)、PyTorch (PyTorchJob)、XGBoost (XGBoostJob)、および ElasticBatch (KubeDL の ElasticBatchJob)。各ジョブタイプは、分散トレーニング用に異なる環境変数を挿入します。詳細については、「付録 1: ジョブタイプ」をご参照ください。
    イメージ使用するコンテナイメージ。オプション: [コミュニティイメージ][Alibaba Cloud イメージ]、および [カスタムイメージ]。ドロップダウンリストからイメージを選択するか、[イメージアドレス] を選択してイメージ URL を入力します。詳細については、以下の「イメージ要件」をご参照ください。
    コードご利用のアルゴリズムコードのソース。オプション: **[OSS パスのマウント]** (ファイルはランタイム時に /ml/usercode/ にダウンロードされます) および **[Git]** (Git コードリポジトリ)。
    コマンドコンテナが実行するコマンド。詳細については、以下の「コマンドの構成」をご参照ください。

    次の図は、パイプラインとパラメーターの構成がビジュアルモデリングのコンポーネント設定にどのようにマッピングされるかを示しています。

    a8ff0de8871ede6a80f9c642b4f187aa..png

    パラメーター説明
    Inputコンポーネントが入力データまたはモデルを読み取る場所を定義します。以下の項目を設定します:Name(チャンネル名)およびSource(Object Storage Service (OSS) パス、File Storage NAS (NAS) パス、または MaxCompute パス)。入力データは、トレーニングコンテナ内の /ml/input/data/{channel_name}/ にマウントされます。
    Outputコンポーネントが学習済みモデルやチェックポイントなどの結果を書き込む場所を定義します。以下の項目を設定します:Name(チャンネル名)およびStorage(OSS または MaxCompute のディレクトリ)。出力データは、トレーニングコンテナ内の /ml/output/{channel_name}/ にマウントされます。
    Parameterジョブのハイパーパラメーターを定義します。以下の項目を設定します:Parameter nameTypeIntFloatString、またはBool)、および必要に応じてConstraintIntFloat、またはString に対して)。制約の種類は、Range(最小値/最大値)またはEnumeration(許容値の列挙)です。

    制約

    [制約を有効化]」をオンにして、コンポーネントに必要な計算リソースを指定します。次の図は、ビジュアルモデリングにおけるトレーニング制約とコンポーネントのチューニングパラメーターの対応関係を示しています。

    a7ef2765ff228c04c7764e36b9502c53..png

    パラメーター説明
    インスタンスタイプCPU または GPU
    複数インスタンスコンポーネントが分散トレーニングをサポートしているかどうか。サポート:インスタンス数はランタイムで設定可能です。未サポート:インスタンス数は 1 に固定されます。
    複数 GPUインスタンスタイプGPU の場合に利用可能です。サポート:シングル GPU およびマルチ GPU のインスタンスタイプの両方が利用可能です。未サポート:シングル GPU のインスタンスタイプのみ利用可能です。
  3. [送信]をクリックします。

このコンポーネントは、[カスタム コンポーネント] ページに表示されます。

コマンドの構成

[コマンド] フィールドは、コンポーネントの実行時に PAI が実行するシェルコマンドを指定します。スクリプトにパイプラインパスとハイパーパラメーターを渡すには、次の環境変数を使用します:

  • $PAI_USER_ARGS — すべてのハイパーパラメーターをコマンドライン引数としてフォーマット

  • $PAI_INPUT_{CHANNEL_NAME} — 入力パイプラインのローカルマウントパス (チャンネル名は大文字)

  • $PAI_OUTPUT_{CHANNEL_NAME} — 出力パイプラインのローカルマウントパス (チャンネル名は大文字)

コマンド形式:

python main.py $PAI_USER_ARGS --{CHANNEL_NAME} $PAI_INPUT_{CHANNEL_NAME} --{CHANNEL_NAME} $PAI_OUTPUT_{CHANNEL_NAME}

例: traintest という名前の入力パイプライン、および modelcheckpoints という名前の出力パイプラインの場合:

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():
    """Parse the arguments."""
    parser = argparse.ArgumentParser(description="PythonV2 component script example.")

    # Input and 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.")

    # Hyperparameters
    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

次のステップ

カスタムコンポーネントを作成したら、ビジュアルモデリングで使用します。詳細については、「カスタムコンポーネントの使用」をご参照ください。

付録 1: ジョブタイプ

KubeDL は、選択したジョブタイプに応じて異なる環境変数を挿入します。これらの変数をご利用のトレーニングコードで使用して、分散ロジックを実装します。

TensorFlow (TFJob)

TensorFlow ジョブの場合、KubeDL はクラスタートポロジーを含む 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
  }
}
フィールド説明
clusterTensorFlow クラスタートポロジー。各キーはロール (chiefworkerevaluatorps) であり、各値はそのロールのネットワークアドレスのリストです。
task.type現在のインスタンスのロール。
task.indexロールのアドレスリスト内の現在のインスタンスのインデックス。

PyTorch (PyTorchJob)

PyTorch ジョブの場合、KubeDL は次の環境変数を挿入します。

変数説明
RANKインスタンスのロール。0 = マスターノード。その他の値 = ワーカーノード。
WORLD_SIZEジョブ内のインスタンスの総数。
MASTER_ADDRマスターノードのネットワークアドレス。
MASTER_PORTマスターノードのポート。

例 (2 インスタンス分散ジョブ):

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

XGBoost (XGBoostJob)

XGBoost ジョブの場合、KubeDL は次の環境変数を挿入します。

変数説明
RANKインスタンスのロール。0 = マスターノード。その他の値 = ワーカーノード。
WORLD_SIZEジョブ内のインスタンスの総数。
MASTER_ADDRマスターノードのネットワークアドレス。
MASTER_PORTマスターノードのポート。
WORKER_ADDRSすべてのワーカーノードのアドレス。RANK でソートされます。シングルインスタンスジョブでは利用できません。
WORKER_PORTワーカーノードのポート。シングルインスタンスジョブでは利用できません。

例: 分散ジョブ (6 インスタンス)

WORLD_SIZE=6
RANK=0
MASTER_ADDR=train1pt84cj****-master-0
MASTER_PORT=9999
WORKER_ADDRS=train1pt84cj****-worker-0,train1pt84cj****-worker-1,train1pt84cj****-worker-2,train1pt84cj****-worker-3,train1pt84cj****-worker-4
WORKER_PORT=9999

例: シングルインスタンスジョブ

WORLD_SIZE=1
RANK=0
MASTER_ADDR=train1pt84cj****-master-0
MASTER_PORT=9999
シングルインスタンス XGBoost ジョブの場合、WORKER_ADDRSWORKER_PORT は挿入されません。

ElasticBatch (ElasticBatchJob)

ElasticBatch は、次の機能を備えた分散オフライン推論ジョブタイプです。

  • 高い並列性でスループットを倍増。

  • ジョブの待機時間を短縮。ワーカーノードはリソースが割り当てられた直後に実行できます。

  • 起動の遅いインスタンスをバックアップワーカーで自動的に置き換え、ロングテール遅延やジョブのハングを防ぎます。

  • グローバルな動的データシャードディストリビューション — より高速なワーカーは、より低速なワーカーよりも多くのデータを処理します。

  • ジョブの早期終了 — すべてのデータが処理されると、未開始のワーカーノードは起動されません。

  • シングルワーカーのフォールトトレランス — 1 つのワーカーが失敗した場合、システムは自動的に再起動します。

ElasticBatch ジョブは、次の 2 つのノードタイプで構成されます。

  • AIMaster: コントロールノード。グローバルジョブ調整、動的データシャードディストリビューション、スループットモニタリング、およびフォールトトレランスを管理します。

  • Worker: 計算ノード。AIMaster からデータシャードをフェッチし、処理して、結果を書き戻します。

ご利用のコードはワーカーノードで実行されます。KubeDL は、各ワーカーに ELASTICBATCH_CONFIG 環境変数を挿入します。

{
  "task": {
    "type": "worker",
    "index": 0
  },
  "environment": "cloud"
}
フィールド説明
task.type現在のインスタンスのロール (worker)。
task.indexロール内の現在のインスタンスのインデックス。

付録 2: コンポーネントへのデータの渡し方

パイプラインデータとハイパーパラメーターデータの取得

入力パイプラインデータ

PAI は、PAI_INPUT_{CHANNEL_NAME} 環境変数 (チャンネル名は大文字) を使用して、各入力パイプラインのローカルパスを挿入します。

例: traintest という名前の 2 つの入力パイプラインを持つコンポーネントの場合:

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

出力パイプラインデータ

PAI は、PAI_OUTPUT_{CHANNEL_NAME} (チャンネル名は大文字) を使用して、各出力パイプラインのローカルパスを挿入します。

例: modelcheckpoints という名前の出力パイプラインの場合:

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

ハイパーパラメーターデータ

PAI は、3 つの環境変数を通じてハイパーパラメーターを提供します。

PAI_USER_ARGS — すべてのハイパーパラメーターを --name value 形式の単一のコマンドライン文字列として。

{"epochs": 10, "batch-size": 32, "learning-rate": 0.001} のハイパーパラメーターの場合:

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 文字列として。

{"epochs": 10, "batch-size": 32} のハイパーパラメーターの場合:

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

入力および出力ディレクトリ構造

ジョブがコンテナで実行されると、PAI は次のディレクトリ構造を作成します。

パス説明
/ml/usercode/ご利用のアルゴリズムコード (作業ディレクトリでもあります。PAI_WORKING_DIR 経由でアクセス可能)。
/ml/input/config/ジョブ構成ファイル (PAI_CONFIG_DIR 経由でアクセス可能)。
/ml/input/config/hyperparameters.jsonハイパーパラメーター構成。
/ml/input/config/training_job.jsonトレーニングジョブ構成。
/ml/input/data/{channel_name}/入力パイプラインデータ。入力パイプラインごとに 1 つのディレクトリ。
/ml/output/{channel_name}/出力パイプラインデータ。出力パイプラインごとに 1 つのディレクトリ。PAI_OUTPUT_{OUTPUT_CHANNEL_NAME} 経由でアクセス可能。

ディレクトリレイアウトの例:

/ml
|-- usercode                    # Algorithm code and working directory
|   |-- requirements.txt
|   |-- main.py
|-- input
|   |-- config                  # Job configuration files
|   |   |-- training_job.json
|   |   |-- hyperparameters.json
|   |-- data                    # Input pipelines
|       |-- test_data
|       |   |-- test.csv
|       |-- train_data
|           |-- train.csv
|-- output                      # Output pipelines
    |-- model
    |-- checkpoints

GPU の可用性の検出

ジョブの開始後、NVIDIA_VISIBLE_DEVICES 環境変数を使用して GPU の可用性を確認します。たとえば、NVIDIA_VISIBLE_DEVICES=0,1,2,3 は、インスタンスに 4 つの GPU があることを示します。