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.
KubeDL menyuntikkan variabel lingkungan berdasarkan tipe job. Gunakan variabel ini untuk mengakses jumlah instans dan informasi topologi. Lihat Lampiran 1: Tipe job.
Untuk mengakses data pipeline dan hiperparameter melalui variabel lingkungan, lihat Mendapatkan data pipeline dan hiperparameter.
Untuk mengakses data input dan output secara langsung dari path mount kontainer, lihat Struktur direktori input dan output.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Ruang kerja. Komponen kustom dikaitkan dengan ruang kerja. Untuk membuatnya, lihat Buat dan kelola ruang kerja.
Buat komponen kustom
Buka halaman Custom Components.
Masuk ke Konsol PAI.
Di panel navigasi kiri, klik Workspaces. Di halaman Workspaces, klik nama ruang kerja Anda.
Di panel navigasi kiri, pilih AI Asset Management > Custom Components.
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 filerequirements.txtdi direktori kode Anda. PAI menjalankanpip install -r requirements.txtsecara 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 menggunakansh -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.txtada di direktori kode, PAI secara otomatis menjalankanpip install -r requirements.txtsaat startup.
Pipeline dan parameter
Klik ikon
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_modeldantest-modelkeduanya menjadiPAI_HPS_TEST_MODEL, yang menyebabkan konflik. Gunakan nama yang berbeda untuk menghindarinya.Informasi dasar
Parameter Deskripsi Component name Nama komponen kustom. Harus unik dalam Akun Alibaba Cloud dan wilayah yang sama. Component description Deskripsi komponen kustom. Component version Nomor versi. Gunakan format x.y.z: naikkan versi patch (misalnya,1.0.0ke1.0.1) untuk perbaikan minor, dan versi minor (misalnya,1.0.0ke1.1.0) untuk pembaruan fitur.Version description Deskripsi versi ini. Contoh: initial version.Konfigurasi eksekusi
Parameter Deskripsi Job type Framework 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. Image Gambar 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. Code Sumber kode algoritma Anda. Opsi: Mount OSS Path (file diunduh ke /ml/usercode/saat runtime) dan Git (repositori kode Git).Command Perintah yang dijalankan kontainer. Lihat Konfigurasi perintah di bawah. Gambar berikut menunjukkan bagaimana konfigurasi pipeline dan parameter dipetakan ke pengaturan komponen di Machine Learning Designer.

Parameter Deskripsi Input Menentukan 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.Output Menentukan 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.Parameter Menentukan hiperparameter untuk job. Konfigurasikan: Parameter name, Type ( Int,Float,String, atauBool), dan opsional Constraints (untukInt,Float, atauString). 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.

Parameter Deskripsi Instance type CPUatauGPU.Multiple instances Apakah komponen mendukung pelatihan terdistribusi. Supported: jumlah instans dapat dikonfigurasi saat runtime. Not Supported: tetap satu instans. Multiple GPUs Tersedia ketika Instance type adalah GPU. Supported: tipe instans single-GPU dan multi-GPU keduanya tersedia. Not Supported: hanya tipe instans single-GPU yang tersedia.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 finishedLangkah 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
}
}| Field | Deskripsi |
|---|---|
cluster | Topologi kluster TensorFlow. Setiap kunci adalah role (chief, worker, evaluator, ps); setiap nilai adalah daftar alamat jaringan untuk role tersebut. |
task.type | Role instans saat ini. |
task.index | Indeks instans saat ini dalam daftar alamat role-nya. |
PyTorch (PyTorchJob)
Untuk job PyTorch, KubeDL menyuntikkan variabel lingkungan berikut:
| Variable | Deskripsi |
|---|---|
RANK | Role instans. 0 = node master; nilai lain = node pekerja. |
WORLD_SIZE | Jumlah total instans dalam job. |
MASTER_ADDR | Alamat jaringan node master. |
MASTER_PORT | Port node master. |
Contoh (job terdistribusi 2 instans):
RANK=0
WORLD_SIZE=2
MASTER_ADDR=train1pt84cj****-master-0
MASTER_PORT=9999XGBoost (XGBoostJob)
Untuk job XGBoost, KubeDL menyuntikkan variabel lingkungan berikut:
| Variable | Deskripsi |
|---|---|
RANK | Role instans. 0 = node master; nilai lain = node pekerja. |
WORLD_SIZE | Jumlah total instans dalam job. |
MASTER_ADDR | Alamat jaringan node master. |
MASTER_PORT | Port node master. |
WORKER_ADDRS | Alamat semua node pekerja, diurutkan berdasarkan RANK. Tidak tersedia untuk job single-instans. |
WORKER_PORT | Port 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=9999Contoh: Single-instance job
WORLD_SIZE=1
RANK=0
MASTER_ADDR=train1pt84cj****-master-0
MASTER_PORT=9999Untuk job XGBoost single-instans,WORKER_ADDRSdanWORKER_PORTtidak 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"
}| Field | Deskripsi |
|---|---|
task.type | Role instans saat ini (worker). |
task.index | Indeks 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.csvData 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:
| Path | Deskripsi |
|---|---|
/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.json | Konfigurasi hiperparameter. |
/ml/input/config/training_job.json | Konfigurasi 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
|-- checkpointsDeteksi 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.