All Products
Search
Document Center

Platform For AI:Buat komponen kustom

Last Updated:Jun 22, 2026

Platform for AI (PAI) memungkinkan Anda membuat komponen kustom untuk kasus penggunaan tertentu. Komponen kustom ini dapat diintegrasikan dengan komponen resmi PAI di Designer guna membangun pipeline yang lebih fleksibel. Artikel ini menjelaskan cara membuat komponen kustom.

Informasi latar belakang

Komponen kustom dibangun di atas KubeDL, sebuah framework manajemen workload AI open-source dari Alibaba Cloud yang berbasis Kubernetes.

Saat membuat komponen kustom, Anda dapat memilih tipe job—seperti TensorFlow, PyTorch, XGBoost, atau ElasticBatch—menentukan pipeline input dan output, serta mengonfigurasi hiperparameter. Setelah komponen kustom dibuat, Designer akan mengonversi pengaturannya menjadi panel konfigurasi visual. Untuk informasi selengkapnya, lihat Prosedur.

  • KubeDL menyediakan serangkaian variabel lingkungan yang disinkronkan untuk setiap tipe job. Variabel ini dapat digunakan untuk mendapatkan jumlah instans dan informasi topologi. Untuk informasi selengkapnya, lihat Lampiran 1: Tipe Job.

  • Anda dapat membaca data dari pipeline input dan output serta mengakses data hiperparameter dengan menyetel variabel lingkungan dalam perintah. Untuk informasi selengkapnya, lihat Cara membaca data pipeline dan hiperparameter.

  • Dalam kode eksekusi Anda, pipeline input atau output dapat diakses baik melalui variabel lingkungan maupun langsung melalui jalur mount di dalam kontainer. Untuk informasi selengkapnya, lihat Struktur direktori input dan output.

Prasyarat

Ruang kerja diperlukan. Semua komponen kustom yang Anda buat terikat pada ruang kerja ini. Untuk informasi selengkapnya, lihat Buat dan kelola ruang kerja.

Prosedur

  1. Buka halaman manajemen komponen.

    1. Login ke PAI console.

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

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

  2. Di halaman daftar komponen, klik New Component. Di halaman New Component, konfigurasikan parameter berikut.

    • Informasi dasar

      Parameter

      Deskripsi

      Component Name

      Nama komponen kustom. Nama harus unik dalam Akun Alibaba Cloud Anda di wilayah yang sama.

      Description

      Deskripsi singkat komponen kustom untuk membantu membedakannya dari komponen lain.

      Component Version

      Nomor versi untuk komponen kustom yang sedang Anda buat.

      Catatan

      Kami menyarankan Anda menggunakan format pengendalian versi x.y.z untuk mengelola versi. Misalnya, Anda dapat menetapkan versi utama pertama sebagai 1.0.0. Untuk perbaikan bug minor, Anda dapat memperbarui nomor versi menjadi 1.0.1. Untuk peningkatan fitur minor, Anda dapat memperbarui nomor versi menjadi 1.1.0. Metode pengendalian versi ini jelas dan mudah dipahami, serta membantu Anda memahami perbedaan dan pembaruan antar versi.

      Version Description

      Deskripsi untuk versi saat ini dari komponen kustom. Contoh: Versi awal.

    • Konfigurasi eksekusi

      Parameter

      Deskripsi

      Job type

      Saat membuat komponen kustom, Anda harus memilih tipe job. PAI mendukung TensorFlow, PyTorch, XGBoost, dan ElasticBatch, yang masing-masing sesuai dengan tipe TFJob, PyTorchJob, XGBoostJob, dan ElasticBatchJob di KubeDL. Untuk informasi selengkapnya tentang setiap tipe job, lihat Lampiran: Tipe Job.

      Image

      Anda dapat memilih Community Image, Alibaba Cloud Image, atau Custom Image. Anda juga dapat mengonfigurasi alamat untuk jenis gambar tersebut di tab Image URL.

      Catatan
      • Untuk memastikan stabilitas job, gunakan gambar dari Container Registry (ACR) di wilayah yang sama dengan ruang kerja Anda. Lebar pita jaringan publik terbatas.

      • Saat ini, hanya ACR Personal Edition yang didukung, bukan Edisi Perusahaan. Alamat gambar harus berupa alamat VPC dalam format: registry-vpc.${region}.aliyuncs.com.

      • Pembaruan yang sering dapat menunda pembaruan cache gambar, sehingga meningkatkan waktu startup job.

      • Untuk memastikan gambar dieksekusi dengan benar, gambar tersebut harus berisi perintah sh shell. Selain itu, perintah dalam gambar dieksekusi menggunakan sh -c.

      • Jika Anda menggunakan custom image, pastikan gambar tersebut mencakup lingkungan eksekusi Python dan perintah pip. Jika tidak, job mungkin gagal.

      Code

      Kode untuk komponen kustom dapat berasal dari direktori OSS atau repositori Git:

      • OSS mount: Saat komponen dijalankan, semua file di direktori OSS yang dimount diunduh ke direktori /ml/usercode/. Anda kemudian dapat menggunakan perintah untuk mengeksekusi file-file tersebut.

        Catatan
        • Kami menyarankan hanya menyimpan file yang penting untuk algoritma saat ini di direktori ini. Menyertakan file yang tidak diperlukan dapat meningkatkan waktu startup komponen atau menyebabkan timeout.

        • Jika file requirements.txt ada di direktori kode, runtime algoritma secara otomatis mengeksekusi pip install -r requirements.txt untuk menginstal dependensi yang diperlukan.

      • Konfigurasi kode PAI: Konfigurasikan repositori Git.

      Command

      Perintah yang dijalankan dalam gambar komponen. Anda dapat menggunakan variabel lingkungan untuk mengambil nilai aktual saat runtime. Format konfigurasinya adalah sebagai berikut:

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

      Dalam perintah tersebut, Anda dapat membaca data untuk hiperparameter, pipeline input, dan pipeline output menggunakan variabel lingkungan PAI_USER_ARGS, PAI_INPUT_{CHANNEL_NAME}, dan PAI_OUTPUT_{CHANNEL_NAME}. Untuk detail cara membaca data ini, lihat Cara membaca data pipeline dan hiperparameter.

      Misalnya, jika pipeline input bernama test dan train, dan pipeline output bernama model dan checkpoints, perintahnya akan tampak seperti ini:

      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"

      File titik masuk yang menyertainya, main.py, memberikan contoh logika untuk parsing argumen. Anda dapat mengintegrasikan logika algoritma Anda sendiri ke dalam file ini. Berikut adalah contoh isinya:

      import os
      
      import argparse
      import json
      
      def parse_args():
          """Parse arguments passed to the script."""
          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))
      

      Log berikut dicetak saat kode contoh dijalankan. Metode ini memungkinkan Anda mengakses informasi parameter untuk job:

      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
    • Pipeline dan parameter

      Klik image..png untuk mengonfigurasi pipeline input, pipeline output, dan parameter untuk komponen kustom. Ikuti konvensi penamaan berikut:

      • Nama harus unik secara global.

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

        Catatan

        Jika nama berisi karakter yang tidak didukung oleh variabel lingkungan (yang hanya mengizinkan huruf, angka, dan garis bawah), karakter tersebut akan diganti dengan garis bawah saat variabel lingkungan dihasilkan. Selain itu, huruf kecil dikonversi menjadi huruf kapital. Untuk menghindari konflik, jangan gunakan nama yang bisa menjadi identik setelah konversi ini. Misalnya, nama parameter seperti test_model dan test-model keduanya akan menjadi PAI_HPS_TEST_MODEL, menyebabkan konflik.

      Gambar berikut menunjukkan bagaimana konfigurasi pipeline dan parameter dipetakan ke UI komponen di Designer:a8ff0de8871ede6a80f9c642b4f187aa..png

      Tabel berikut menjelaskan parameter-parameter tersebut.

      Parameter

      Deskripsi

      Input

      Pipeline input menyediakan data input atau model untuk fine-tuning kepada komponen kustom. Anda dapat mengonfigurasi parameter berikut:

      • Input Name: Nama pipeline input. Lihat UI untuk persyaratan penamaan.

      • Input source: Menentukan bahwa pipeline input membaca data dari jalur di OSS, NAS, atau MaxCompute. Data input dimount ke direktori /ml/input/data/{channel_name}/ di kontainer pelatihan. Hal ini memungkinkan komponen membaca data dari OSS, NAS, atau MaxCompute dengan membaca file lokal.

      Output

      Pipeline output menyimpan hasil, seperti model yang telah dilatih dan checkpoint. Anda dapat mengonfigurasi parameter berikut:

      • Output Name: Nama pipeline output. Lihat UI untuk persyaratan penamaan.

      • Storage: Untuk setiap pipeline output, Anda harus menentukan direktori OSS atau MaxCompute. Direktori ini akan dimount ke jalur /ml/output/{channel_name}/ di kontainer pelatihan.

      Arguments

      Konfigurasikan pengaturan hiperparameter berikut:

      • Parameter Name: Nama parameter. Lihat UI untuk persyaratan penamaan.

      • Type: Jenis yang didukung adalah Int, Float, String, dan Bool.

      • Constraint: Setelah memilih jenis selain Bool (Int, Float, atau String), klik Constraints di kolom Default Value untuk mengonfigurasi batasan parameter. Jenis batasan adalah sebagai berikut:

        • Range: Tentukan rentang nilai dengan menetapkan nilai maksimum dan minimum.

        • Enumeration: Definisikan daftar nilai enumerasi untuk parameter.

    • Batasan pelatihan

      Batasan pelatihan menentukan sumber daya komputasi untuk job pelatihan. Anda dapat mengaktifkan sakelar Enable Training Constraints untuk mengonfigurasinya.

      Batasan ini membatasi opsi yang tersedia di panel Execution Tuning saat Anda menggunakan komponen ini dalam pipeline, seperti Instance Type, Specification, Number of Instances, dan Max Running Time (sec).

      Tabel berikut menjelaskan parameter-parameter tersebut.

      Parameter

      Description

      Machine Type

      Tentukan apakah komponen kustom dijalankan pada instans CPU atau GPU.

      Support Multi-machine

      Menentukan apakah komponen mendukung eksekusi terdistribusi pada multiple mesin:

      • Supported: Saat komponen dijalankan, Anda dapat mengonfigurasi jumlah node.

      • Not Supported: Saat komponen dijalankan, jumlah node tetap 1 dan tidak dapat diubah.

      Support Multi-GPU

      Parameter ini tersedia hanya ketika Anda memilih GPU untuk Machine Type.

      Menentukan apakah komponen kustom mendukung multiple GPU:

      • Supported: Anda dapat memilih instans single-GPU atau multi-GPU untuk instance type.

      • Not Supported: Anda hanya dapat memilih instans single-GPU untuk instance type.

  3. Klik Submit.

    Komponen kustom yang baru dibuat muncul di halaman daftar komponen.

Setelah komponen dibuat, Anda dapat menggunakannya di Designer. Untuk informasi selengkapnya, lihat Gunakan Komponen Kustom.

Lampiran 1: Tipe Job

TensorFlow (TFJob)

Jika tipe job komponen kustom Anda adalah TensorFlow (TFJob), informasi topologi node job disuntikkan melalui variabel lingkungan TF_CONFIG. Contoh berikut menunjukkan format nilai variabel lingkungan tersebut:

{
  "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
  }
}

Parameter utama dijelaskan sebagai berikut:

Parameter

Deskripsi

cluster

Deskripsi kluster TensorFlow. Ini bertipe map:

  • Kunci: Peran node, seperti Chief, Worker, PS, Evaluator, atau Master.

  • Nilai: Daftar alamat jaringan untuk node dengan peran tersebut.

task

  • type: Jenis tugas node saat ini.

  • index: Indeks node saat ini dalam daftar alamat jaringan untuk perannya.

PyTorch (PyTorchJob)

Jika tipe job komponen kustom Anda adalah PyTorch (PyTorchJob), variabel lingkungan berikut disuntikkan:

  • RANK: Nilai 0 menunjukkan bahwa node saat ini adalah node master. Nilai bukan nol menunjukkan node pekerja.

  • WORLD_SIZE: Jumlah total mesin dalam job.

  • MASTER_ADDR: Alamat node master.

  • MASTER_PORT: Port node master.

XGBoost (XGBoostJob)

Jika tipe job komponen kustom Anda adalah XGBoost (XGBoostJob), variabel lingkungan berikut disuntikkan:

  • RANK: Nilai 0 menunjukkan bahwa node saat ini adalah node master. Nilai bukan nol menunjukkan node pekerja.

  • WORLD_SIZE: Jumlah total mesin dalam job.

  • MASTER_ADDR: Alamat node master.

  • MASTER_PORT: Port node master.

  • WORKER_ADDRS: Alamat node pekerja, diurutkan berdasarkan RANK.

  • WORKER_PORT: Port node pekerja.

Berikut adalah contohnya:

  • Job terdistribusi (lebih dari satu node)

    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
  • Job single-node

    Catatan

    Jika hanya ada satu node, node tersebut bertindak sebagai node master. Dalam kasus ini, variabel lingkungan WORKER_ADDRS dan WORKER_PORT tidak disuntikkan.

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

ElasticBatch (ElasticBatchJob)

ElasticBatch adalah tipe job yang dirancang untuk inferensi batch offline yang terdistribusi, elastis, dan efisien. Job ElasticBatch memiliki fitur-fitur berikut:

  • Paralelisme mudah untuk meningkatkan throughput.

  • Waktu tunggu job berkurang secara signifikan. Job dapat dimulai segera setelah beberapa node pekerja memiliki sumber daya.

  • Mendeteksi secara otomatis mesin lambat dan memulai pekerja cadangan untuk menggantikannya, mencegah latensi ekor panjang atau job hang.

  • Mendistribusikan shard data secara global dan dinamis, memungkinkan node yang lebih cepat memproses lebih banyak data.

  • Mendukung Penghentian Dini. Setelah semua data diproses, pekerja yang belum dimulai tidak diluncurkan, sehingga mencegah peningkatan total runtime job.

  • Menyediakan Toleransi kesalahan. Jika satu pekerja gagal, pekerja tersebut secara otomatis dimulai ulang.

Job ElasticBatch terdiri dari dua jenis node: AIMaster dan Worker.

  • AIMaster: Bertanggung jawab atas manajemen global job, termasuk distribusi dinamis shard data, pemantauan throughput data setiap pekerja, dan toleransi kesalahan.

  • Worker: Node pekerja mengambil shard data dari AIMaster, memproses data, menulis kembali hasilnya, lalu mengambil shard berikutnya. Proses dinamis ini memungkinkan node yang lebih cepat memproses lebih banyak data dan node yang lebih lambat memproses lebih sedikit.

Saat job ElasticBatch dimulai, job tersebut meluncurkan node AIMaster dan node pekerja. Kode Anda dijalankan pada node pekerja. Variabel lingkungan ELASTICBATCH_CONFIG disuntikkan ke node pekerja. Berikut adalah contoh format nilainya:

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

Parameter dijelaskan sebagai berikut:

  • task.type: Menunjukkan jenis tugas node saat ini.

  • task.index: Indeks node saat ini dalam daftar alamat jaringan untuk perannya.

Lampiran 2: Cara kerja komponen kustom

Baca data pipeline dan hiperparameter

Baca data pipeline input

Jalur untuk setiap pipeline input disuntikkan ke kontainer job melalui variabel lingkungan PAI_INPUT_{CHANNEL_NAME}.

Misalnya, jika komponen kustom memiliki dua pipeline input, train dan test, dengan nilai oss://<YourOssBucket>.<OssEndpoint>/path-to-data/ dan oss://<YourOssBucket>.<OssEndpoint>/path-to-data/test.csv masing-masing, variabel lingkungan yang disuntikkan adalah sebagai berikut:

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

Baca data pipeline output

Komponen mengambil jalur pipeline output dari variabel lingkungan PAI_OUTPUT_{CHANNEL_NAME}.

Misalnya, jika komponen kustom memiliki dua pipeline output bernama model dan checkpoints, variabel lingkungan berikut disuntikkan:

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

Baca data hiperparameter

Anda dapat membaca data hiperparameter dengan menggunakan variabel lingkungan berikut:

  • PAI_USER_ARGS

    Saat komponen dijalankan, semua hiperparameter untuk job disuntikkan ke kontainer job pelatihan sebagai variabel lingkungan PAI_USER_ARGS, menggunakan format --{hyperparameter_name} {hyperparameter_value}.

    Misalnya, jika job pelatihan menentukan hiperparameter {"epochs": 10, "batch-size": 32, "learning-rate": 0.001}, nilai variabel lingkungan PAI_USER_ARGS adalah:

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

    Nilai setiap hiperparameter juga disuntikkan ke kontainer job sebagai variabel lingkungan terpisah. Dalam nama hiperparameter, karakter apa pun yang tidak didukung oleh variabel lingkungan (yang hanya mengizinkan huruf, angka, dan garis bawah) diganti dengan garis bawah.

    Misalnya, jika job pelatihan menentukan hiperparameter {"epochs": 10, "batch-size": 32, "train.learning_rate": 0.001}, variabel lingkungan yang sesuai adalah sebagai berikut:

    PAI_HPS_EPOCHS=10
    PAI_HPS_BATCH_SIZE=32
    PAI_HPS_TRAIN_LEARNING_RATE=0.001
  • PAI_HPS

    Semua hiperparameter disuntikkan ke kontainer job sebagai variabel lingkungan PAI_HPS dalam format JSON.

    Misalnya, jika job pelatihan meneruskan hiperparameter {"epochs": 10, "batch-size": 32}, nilai variabel lingkungan PAI_HPS adalah:

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

Struktur direktori input dan output

Dalam kode eksekusi Anda, selain menggunakan variabel lingkungan, Anda juga dapat mengakses pipeline input dan output langsung melalui jalur mount-nya. Saat tugas komponen dijalankan dalam kontainer, sistem membuat struktur direktori berikut:

  • Jalur kode: /ml/usercode/.

  • File konfigurasi hiperparameter: /ml/input/config/hyperparameters.json.

  • File konfigurasi lengkap untuk job pelatihan adalah /ml/input/config/training_job.json.

  • Jalur direktori pipeline input: /ml/input/data/{channel_name}/.

  • Jalur direktori pipeline output: /ml/output/{channel_name}/.

Berikut adalah contoh lengkap struktur direktori input dan output untuk job yang dieksekusi oleh komponen kustom:

/ml
|-- usercode                        # Kode pengguna dimuat ke direktori /ml/usercode. Ini juga merupakan direktori kerja untuk kode pengguna. Anda dapat mendapatkan jalur ini dari variabel lingkungan PAI_WORKING_DIR.
|   |-- requirements.txt
|   |-- main.py
|-- input                           # Data input dan konfigurasi job.
|   |-- config                      # Direktori config berisi informasi konfigurasi job. Anda dapat mendapatkan jalur ini dari variabel lingkungan PAI_CONFIG_DIR.
|       |-- training_job.json       # Konfigurasi job lengkap.
|       |-- hyperparameters.json    # Hiperparameter untuk job pelatihan.
|   |-- data                        # InputChannels job: Direktori berikut berisi dua channel: train_data dan test_data.
|       |-- test_data
|       |   |-- test.csv
|       |-- train_data
|           |-- train.csv
|-- output                          # OutputChannels job: Contoh ini memiliki dua channel output: model dan checkpoints.
        |-- model                   # Jalur output dapat diambil dari variabel lingkungan PAI_OUTPUT_{OUTPUT_CHANNEL_NAME}.
        |-- checkpoints

Tentukan jumlah GPU

Setelah tugas dimulai, Anda dapat menggunakan variabel lingkungan NVIDIA_VISIBLE_DEVICES untuk menentukan apakah mesin saat ini memiliki GPU dan jumlah kartu GPU-nya. Misalnya, NVIDIA_VISIBLE_DEVICES=0,1,2,3 menunjukkan bahwa mesin saat ini memiliki 4 kartu GPU.