All Products
Search
Document Center

Platform For AI:Buat komponen kustom

Last Updated:Apr 02, 2026

Platform for AI (PAI) memungkinkan Anda membuat komponen algoritma kustom dan menggabungkannya dengan komponen bawaan di Machine Learning Designer untuk menyusun pipeline pelatihan yang fleksibel. Topik ini memandu Anda dalam membuat komponen kustom di Konsol PAI.

Cara kerja

Komponen kustom berjalan di KubeDL, framework open-source Alibaba Cloud berbasis Kubernetes untuk mengelola beban kerja AI.

Saat membuat komponen kustom, Anda memilih tipe job (TensorFlow, PyTorch, XGBoost, atau ElasticBatch), menentukan pipeline input dan output, serta mengonfigurasi hiperparameter. Setelah komponen dibuat, Anda dapat menyeretnya ke pipeline Machine Learning Designer dan mengonfigurasi pengaturan waktu prosesnya.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Buat komponen kustom

  1. Buka halaman Custom Components.

    1. Masuk ke Konsol PAI.

    2. Di panel navigasi kiri, klik Workspaces. Di halaman Workspaces, klik nama ruang kerja Anda.

    3. Di panel navigasi kiri, pilih AI Asset Management > Custom Components.

  2. Klik Create Component dan konfigurasikan parameter berikut.

    Persyaratan gambar

    Pilih tipe gambar berdasarkan dependensi algoritma Anda:

    • Jika dependensi algoritma Anda dapat diinstal dengan pip, gunakan gambar resmi Alibaba Cloud dan sediakan file requirements.txt di direktori kode Anda. PAI menjalankan pip install -r requirements.txt secara otomatis saat startup.

    • Jika algoritma Anda memerlukan dependensi tingkat sistem tertentu, gunakan custom image.

    Persyaratan tambahan:

    • Gunakan Alibaba Cloud Container Registry (ACR) di wilayah yang sama dengan job Anda untuk keandalan terbaik.

    • Hanya Container Registry Personal Edition yang didukung. Edisi Perusahaan tidak didukung. Tentukan alamat gambar dalam format registry-vpc.${region}.aliyuncs.com.

    • Untuk custom image: hindari memperbarui gambar dalam versi komponen yang sama untuk mencegah penundaan cache gambar saat startup job.

    • Gambar harus menyertakan perintah shell sh. PAI menjalankan perintah menggunakan sh -c.

    • Custom image harus menyertakan lingkungan Python dan pip.

    Kode: Persyaratan Mount OSS Path

    • Simpan hanya file algoritma yang diperlukan di path OSS untuk mencegah penundaan startup.

    • Jika file requirements.txt ada di direktori kode, PAI secara otomatis menjalankan pip install -r requirements.txt saat startup.

    Pipeline dan parameter

    Klik ikon image..png untuk menambahkan pipeline input, pipeline output, dan hiperparameter.

    Persyaratan penamaan untuk semua pipeline dan parameter:

    • Nama harus unik secara global.

    • Nama dapat berisi angka, huruf, garis bawah (_), dan tanda hubung (-), tetapi tidak boleh diawali dengan garis bawah.

    Saat PAI menghasilkan nama variabel lingkungan, semua huruf diubah menjadi huruf kapital dan karakter yang tidak didukung—termasuk tanda hubung (-)—diganti dengan garis bawah (_). Misalnya, test_model dan test-model keduanya menjadi PAI_HPS_TEST_MODEL, yang menyebabkan konflik. Gunakan nama yang berbeda untuk menghindarinya.

    Informasi dasar

    ParameterDeskripsi
    Component nameNama komponen kustom. Harus unik dalam Akun Alibaba Cloud dan wilayah yang sama.
    Component descriptionDeskripsi komponen kustom.
    Component versionNomor versi. Gunakan format x.y.z: naikkan versi patch (misalnya, 1.0.0 ke 1.0.1) untuk perbaikan minor, dan versi minor (misalnya, 1.0.0 ke 1.1.0) untuk pembaruan fitur.
    Version descriptionDeskripsi versi ini. Contoh: initial version.

    Konfigurasi eksekusi

    ParameterDeskripsi
    Job typeFramework untuk menjalankan komponen. Opsi: TensorFlow (TFJob), PyTorch (PyTorchJob), XGBoost (XGBoostJob), dan ElasticBatch (ElasticBatchJob dari KubeDL). Setiap tipe job menyuntikkan variabel lingkungan berbeda untuk pelatihan terdistribusi. Lihat Lampiran 1: Tipe job.
    ImageGambar kontainer yang digunakan. Opsi: Community Image, Alibaba Cloud Image, dan Custom Image. Pilih gambar dari daftar drop-down, atau pilih Image Address dan masukkan URL gambar. Lihat Persyaratan gambar di bawah.
    CodeSumber kode algoritma Anda. Opsi: Mount OSS Path (file diunduh ke /ml/usercode/ saat runtime) dan Git (repositori kode Git).
    CommandPerintah yang dijalankan kontainer. Lihat Konfigurasi perintah di bawah.

    Gambar berikut menunjukkan bagaimana konfigurasi pipeline dan parameter dipetakan ke pengaturan komponen di Machine Learning Designer.

    a8ff0de8871ede6a80f9c642b4f187aa..png

    ParameterDeskripsi
    InputMenentukan tempat komponen membaca data atau model input. Konfigurasikan: Name (nama saluran) dan Source (path Object Storage Service (OSS), path File Storage NAS (NAS), atau path MaxCompute). Data input dimount ke /ml/input/data/{channel_name}/ di kontainer pelatihan.
    OutputMenentukan tempat komponen menulis hasil seperti model terlatih dan checkpoint. Konfigurasikan: Name (nama saluran) dan Storage (direktori OSS atau MaxCompute). Data output dimount ke /ml/output/{channel_name}/ di kontainer pelatihan.
    ParameterMenentukan hiperparameter untuk job. Konfigurasikan: Parameter name, Type (Int, Float, String, atau Bool), dan opsional Constraints (untuk Int, Float, atau String). Jenis constraint: Range (nilai min/maks) atau Enumeration (nilai yang diizinkan).

    Constraints

    Aktifkan Enable Constraints untuk menentukan sumber daya komputasi yang diperlukan oleh komponen. Gambar berikut menunjukkan bagaimana constraint pelatihan dipetakan ke parameter tuning komponen di Machine Learning Designer.

    a7ef2765ff228c04c7764e36b9502c53..png

    ParameterDeskripsi
    Instance typeCPU atau GPU.
    Multiple instancesApakah komponen mendukung pelatihan terdistribusi. Supported: jumlah instans dapat dikonfigurasi saat runtime. Not Supported: tetap satu instans.
    Multiple GPUsTersedia ketika Instance type adalah GPU. Supported: tipe instans single-GPU dan multi-GPU keduanya tersedia. Not Supported: hanya tipe instans single-GPU yang tersedia.
  3. Klik Submit.

Komponen muncul di halaman Custom Components.

Konfigurasi perintah

Field Command menentukan perintah shell yang dijalankan PAI saat komponen dieksekusi. Gunakan variabel lingkungan berikut untuk meneruskan path pipeline dan hiperparameter ke skrip Anda:

  • $PAI_USER_ARGS — semua hiperparameter, diformat sebagai argumen command-line

  • $PAI_INPUT_{CHANNEL_NAME} — path mount lokal pipeline input (nama saluran dalam huruf kapital)

  • $PAI_OUTPUT_{CHANNEL_NAME} — path mount lokal pipeline output (nama saluran dalam huruf kapital)

Format perintah:

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

Contoh: Untuk pipeline input bernama train dan test, dan pipeline output bernama model dan 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"

Contoh berikut menunjukkan cara main.py mengurai argumen ini:

import os
import argparse
import json

def parse_args():
    """Mengurai argumen."""
    parser = argparse.ArgumentParser(description="Contoh skrip komponen PythonV2.")

    # Saluran input dan output
    parser.add_argument("--train", type=str, default=None, help="saluran input train.")
    parser.add_argument("--test", type=str, default=None, help="saluran input test.")
    parser.add_argument("--model", type=str, default=None, help="saluran output model.")
    parser.add_argument("--checkpoints", type=str, default=None, help="saluran output checkpoints.")

    # Hiperparameter
    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("Saluran input train={}".format(args.train))
    print("Saluran input test={}".format(args.test))
    print("Saluran output model={}".format(args.model))
    print("Saluran output checkpoints={}".format(args.checkpoints))

    print("Parameter param1={}".format(args.param1))
    print("Parameter param2={}".format(args.param2))
    print("Parameter param3={}".format(args.param3))
    print("Parameter param4={}".format(args.param4))
    print("Parameter param5={}".format(args.param5))

Saat job berjalan, path yang diselesaikan dan nilai parameter muncul di log:

Saluran input train=/ml/input/data/train
Saluran input test=/ml/input/data/test/easyrec_config.config
Saluran output model=/ml/output/model/
Saluran output checkpoints=/ml/output/checkpoints/
Parameter param1=6
Parameter param2=0.3
Parameter param3=test1
Parameter param4=True
Parameter param5=2
job finished

Langkah selanjutnya

Setelah membuat komponen kustom, gunakan di Machine Learning Designer. Lihat Gunakan komponen kustom.

Lampiran 1: Tipe job

KubeDL menyuntikkan variabel lingkungan berbeda tergantung pada tipe job yang Anda pilih. Gunakan variabel ini dalam kode pelatihan Anda untuk mengimplementasikan logika terdistribusi.

TensorFlow (TFJob)

Untuk job TensorFlow, KubeDL menyuntikkan variabel lingkungan TF_CONFIG dengan topologi kluster:

{
  "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
  }
}
FieldDeskripsi
clusterTopologi kluster TensorFlow. Setiap kunci adalah role (chief, worker, evaluator, ps); setiap nilai adalah daftar alamat jaringan untuk role tersebut.
task.typeRole instans saat ini.
task.indexIndeks instans saat ini dalam daftar alamat role-nya.

PyTorch (PyTorchJob)

Untuk job PyTorch, KubeDL menyuntikkan variabel lingkungan berikut:

VariableDeskripsi
RANKRole instans. 0 = node master; nilai lain = node pekerja.
WORLD_SIZEJumlah total instans dalam job.
MASTER_ADDRAlamat jaringan node master.
MASTER_PORTPort node master.

Contoh (job terdistribusi 2 instans):

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

XGBoost (XGBoostJob)

Untuk job XGBoost, KubeDL menyuntikkan variabel lingkungan berikut:

VariableDeskripsi
RANKRole instans. 0 = node master; nilai lain = node pekerja.
WORLD_SIZEJumlah total instans dalam job.
MASTER_ADDRAlamat jaringan node master.
MASTER_PORTPort node master.
WORKER_ADDRSAlamat semua node pekerja, diurutkan berdasarkan RANK. Tidak tersedia untuk job single-instans.
WORKER_PORTPort node pekerja. Tidak tersedia untuk job single-instans.

Contoh: job terdistribusi (6 instans)

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

Contoh: Single-instance job

WORLD_SIZE=1
RANK=0
MASTER_ADDR=train1pt84cj****-master-0
MASTER_PORT=9999
Untuk job XGBoost single-instans, WORKER_ADDRS dan WORKER_PORT tidak disuntikkan.

ElasticBatch (ElasticBatchJob)

ElasticBatch adalah tipe job inferensi offline terdistribusi dengan kemampuan berikut:

  • Paralelisme tinggi dengan throughput dua kali lipat.

  • Mengurangi waktu tunggu job. Node pekerja dapat berjalan segera setelah sumber daya dialokasikan.

  • Penggantian otomatis instans yang lambat start dengan pekerja cadangan, mencegah penundaan long-tail atau job hang.

  • Distribusi shard data dinamis global — pekerja yang lebih cepat memproses lebih banyak data daripada yang lebih lambat.

  • Penghentian job lebih awal — begitu semua data diproses, node pekerja yang belum dimulai tidak diluncurkan.

  • Toleransi kesalahan single-worker — jika satu pekerja gagal, sistem secara otomatis me-restart-nya.

Job ElasticBatch terdiri dari dua tipe node:

  • AIMaster: node kontrol. Mengelola koordinasi job global, distribusi shard data dinamis, pemantauan throughput, dan toleransi kesalahan.

  • Worker: node komputasi. Mengambil shard data dari AIMaster, memprosesnya, dan menulis hasil kembali.

Kode Anda berjalan di node pekerja. KubeDL menyuntikkan variabel lingkungan ELASTICBATCH_CONFIG ke setiap pekerja:

{
  "task": {
    "type": "worker",
    "index": 0
  },
  "environment": "cloud"
}
FieldDeskripsi
task.typeRole instans saat ini (worker).
task.indexIndeks instans saat ini dalam rolenya.

Lampiran 2: Cara data diteruskan ke komponen Anda

Mendapatkan data pipeline dan hiperparameter

Data pipeline input

PAI menyuntikkan path lokal setiap pipeline input menggunakan variabel lingkungan PAI_INPUT_{CHANNEL_NAME} (nama saluran dalam huruf kapital).

Contoh: Untuk komponen dengan dua pipeline input bernama train dan test:

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

Data pipeline output

PAI menyuntikkan path lokal setiap pipeline output menggunakan PAI_OUTPUT_{CHANNEL_NAME} (nama saluran dalam huruf kapital).

Contoh: Untuk pipeline output bernama model dan checkpoints:

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

Data hiperparameter

PAI menyediakan hiperparameter melalui tiga variabel lingkungan:

`PAI_USER_ARGS` — semua hiperparameter sebagai string command-line tunggal dalam format --name value.

Untuk hiperparameter {"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}` — setiap hiperparameter sebagai variabel individual. Karakter yang tidak didukung dalam nama (termasuk tanda hubung) diganti dengan garis bawah dan diubah menjadi huruf kapital.

Untuk hiperparameter {"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` — semua hiperparameter sebagai string JSON.

Untuk hiperparameter {"epochs": 10, "batch-size": 32}:

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

Struktur direktori input dan output

Saat job berjalan di kontainer, PAI membuat struktur direktori berikut:

PathDeskripsi
/ml/usercode/Kode algoritma Anda (juga direktori kerja; dapat diakses melalui PAI_WORKING_DIR).
/ml/input/config/File konfigurasi job (dapat diakses melalui PAI_CONFIG_DIR).
/ml/input/config/hyperparameters.jsonKonfigurasi hiperparameter.
/ml/input/config/training_job.jsonKonfigurasi job pelatihan.
/ml/input/data/{channel_name}/Data pipeline input, satu direktori per pipeline input.
/ml/output/{channel_name}/Data pipeline output, satu direktori per pipeline output. Dapat diakses melalui PAI_OUTPUT_{OUTPUT_CHANNEL_NAME}.

Contoh tata letak direktori:

/ml
|-- usercode                    # Kode algoritma dan direktori kerja
|   |-- requirements.txt
|   |-- main.py
|-- input
|   |-- config                  # File konfigurasi job
|   |   |-- training_job.json
|   |   |-- hyperparameters.json
|   |-- data                    # Pipeline input
|       |-- test_data
|       |   |-- test.csv
|       |-- train_data
|           |-- train.csv
|-- output                      # Pipeline output
    |-- model
    |-- checkpoints

Deteksi ketersediaan GPU

Setelah job dimulai, gunakan variabel lingkungan NVIDIA_VISIBLE_DEVICES untuk memeriksa ketersediaan GPU. Misalnya, NVIDIA_VISIBLE_DEVICES=0,1,2,3 menunjukkan instans memiliki empat GPU.