Anda dapat membuat komponen algoritma kustom sesuai dengan kebutuhan bisnis Anda di Platform for AI (PAI). Komponen kustom ini dapat digunakan bersama dengan komponen bawaan di Machine Learning Designer untuk membangun pipeline secara fleksibel. Topik ini menjelaskan cara membuat komponen kustom.
Informasi latar belakang
Komponen kustom menggunakan KubeDL sumber terbuka dari Alibaba Cloud, yaitu kerangka AI berbasis Kubernetes untuk mengelola beban kerja.
Saat membuat komponen kustom, Anda dapat memilih jenis pekerjaan yang akan digunakan, seperti TensorFlow, PyTorch, XGBoost, atau ElasticBatch. Anda juga dapat membuat pipeline input dan output serta mengonfigurasi hyperparameter. Setelah komponen kustom dibuat, Anda dapat mengonfigurasinya di Machine Learning Designer. Untuk informasi lebih lanjut, lihat Prosedur.
KubeDL menetapkan variabel lingkungan berdasarkan jenis pekerjaan. Anda dapat menggunakan variabel lingkungan ini untuk mendapatkan jumlah instance dan informasi topologi. Untuk informasi lebih lanjut, lihat Lampiran 1: Jenis Pekerjaan.
Untuk informasi tentang cara mendapatkan data pipeline input dan output serta hyperparameter melalui konfigurasi variabel lingkungan, lihat Dapatkan Data Hyperparameter Pipeline.
Anda dapat menggunakan variabel lingkungan dalam kode untuk mendapatkan data pipeline input dan output. Selain itu, Anda dapat menggunakan jalur mount di kontainer untuk mengakses data. Untuk informasi lebih lanjut, lihat Struktur Direktori Input dan Output.
Prasyarat
Ruang kerja telah dibuat. Komponen kustom yang Anda buat akan dikaitkan dengan ruang kerja tersebut. Untuk informasi lebih lanjut, lihat Buat dan Kelola Ruang Kerja.
Prosedur
Pergi ke halaman Komponen Kustom.
Masuk ke Konsol PAI.
Di panel navigasi sebelah kiri, klik Workspaces. Di halaman Ruang Kerja, klik nama ruang kerja tempat Anda ingin membuat komponen kustom.
Di panel navigasi sebelah kiri, pilih AI Computing Asset Management > Custom Components.
Di halaman Custom Components, klik Create Component. Di halaman Create Component, konfigurasikan parameter yang dijelaskan dalam tabel berikut.
Informasi Dasar
Parameter
Deskripsi
Component Name
Nama komponen kustom. Nama harus unik di akun Alibaba Cloud yang sama di wilayah yang sama.
Component Description
Deskripsi komponen kustom.
Component Version
Nomor versi komponen kustom.
CatatanKami merekomendasikan Anda mengelola versi komponen dalam format
x.y.z. Sebagai contoh, jika versi utama pertama adalah 1.0.0, Anda dapat meningkatkan versi menjadi 1.0.1 saat memperbaiki masalah kecil, dan menjadi 1.1.0 saat meningkatkan fitur kecil. Ini membantu Anda mengelola versi komponen dengan cara yang sederhana dan efektif.Version Description
Deskripsi versi saat ini dari komponen kustom. Contoh: versi awal.
Konfigurasi Eksekusi
Parameter
Deskripsi
Job Type
Jenis pekerjaan di mana Anda ingin menggunakan komponen kustom. Nilai valid: Tensorflow untuk TFJob, PyTorch untuk PyTorchJob, XGBoost untuk XGBoostJob, dan ElasticBatch untuk ElasticBatchJob dari KubeDL. Untuk informasi lebih lanjut tentang jenis pekerjaan, lihat Lampiran: Jenis pekerjaan.
Image
Image yang ingin Anda gunakan. Nilai valid: Community Image, Alibaba Cloud Image, dan Custom Image. Anda dapat memilih image dari daftar drop-down, atau pilih Image Address dan tentukan alamat image.
CatatanUntuk memastikan stabilitas pekerjaan, kami merekomendasikan Anda menggunakan Container Registry (ACR) Alibaba Cloud di wilayah yang sama.
Anda hanya dapat menggunakan Container Registry Edisi Pribadi. Container Registry Edisi Perusahaan tidak didukung. Tentukan alamat citra dalam format
registry-vpc.${region}.aliyuncs.com.Jika Anda menggunakan image kustom, kami merekomendasikan Anda tidak sering memperbarui image dalam versi komponen kustom yang sama. Jika Anda sering memperbarui image, cache image mungkin tidak diperbarui pada kesempatan pertama, menyebabkan penundaan startup pekerjaan.
Untuk memastikan bahwa citra berjalan sesuai harapan, citra harus berisi perintah
sh shell. Citra menggunakan metodesh -cuntuk menjalankan perintah.Jika Anda menggunakan image kustom, pastikan image berisi lingkungan yang diperlukan dan perintah pip untuk Python. Jika tidak, pekerjaan mungkin gagal.
Code
Nilai valid:
Mount OSS Path: Saat Anda menjalankan komponen, semua file di jalur Object Storage Service (OSS) diunduh ke jalur
/ml/usercode/. Anda dapat menjalankan perintah untuk mengeksekusi file di jalur tersebut.CatatanUntuk mencegah kemungkinan penundaan atau timeout selama startup komponen, kami merekomendasikan Anda menyimpan hanya file algoritma yang diperlukan di jalur ini.
Jika file requirements.txt ada di direktori kode, algoritma secara otomatis mengeksekusi perintah
pip install -r requirements.txtuntuk menginstal dependensi terkait.
Konfigurasi Kode: Konfigurasikan repositori kode Git.
Command
Perintah yang dieksekusi oleh image. Tentukan perintah dalam format berikut:
python main.py $PAI_USER_ARGS --{CHANNEL_NAME} $PAI_INPUT_{CHANNEL_NAME} --{CHANNEL_NAME} $PAI_OUTPUT_{CHANNEL_NAME} && sleep 150 && echo "pekerjaan selesai"Untuk mendapatkan informasi tentang hyperparameter dan pipeline input dan output, Anda dapat mengonfigurasi variabel lingkungan berikut: PAI_USER_ARGS, PAI_INPUT_{CHANNEL_NAME}, dan PAI_OUTPUT_{CHANNEL_NAME}. Untuk informasi lebih lanjut tentang cara mendapatkan data, lihat Dapatkan data pipeline dan hyperparameter.
Sebagai contoh, nama pipeline input adalah test dan train, dan nama pipeline output adalah model dan checkpoints. Contoh perintah:
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 "pekerjaan selesai"File main.py memberikan contoh logika untuk parsing argumen. Anda dapat memodifikasi file berdasarkan kebutuhan bisnis Anda. Contoh isi file:
import os import argparse import json def parse_args(): """Parse the arguments.""" parser = argparse.ArgumentParser(description="Contoh skrip komponen PythonV2.") # saluran input & 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.") # parameter 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))Anda dapat mendapatkan informasi tentang pipeline input dan output serta parameter dalam log eksekusi perintah. Contoh 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 pekerjaan selesaiPipeline dan Parameter
Klik ikon
untuk mengonfigurasi pipeline input dan output serta parameter komponen kustom. Tentukan nama pipeline dan parameter dalam format berikut:Nama harus unik secara global.
Nama dapat berisi digit, huruf, garis bawah (_), dan tanda hubung (-), tetapi tidak boleh dimulai dengan garis bawah (_).
CatatanJika nama berisi karakter yang tidak didukung, karakter tersebut akan diganti dengan garis bawah (_) saat sistem menghasilkan variabel lingkungan. Perhatikan bahwa tanda hubung (-) juga diganti dengan garis bawah (_). Huruf kecil dalam nama secara otomatis diubah menjadi huruf besar. Sebagai contoh, jika Anda menentukan nama parameter sebagai test_model dan test-model, nama tersebut diubah menjadi PAI_HPS_TEST_MODEL, yang dapat menyebabkan konflik.
Gambar berikut menunjukkan pemetaan antara konfigurasi pipeline dan parameter serta parameter komponen di Machine Learning Designer.

Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
Input
Sumber dari mana komponen kustom mendapatkan data input atau model. Konfigurasikan parameter berikut:
Name: Tentukan nama input pipeline.
Source: Tentukan jalur di OSS, File Storage NAS (NAS), atau MaxCompute di mana alur kerja input mendapatkan data. Data input dipasang ke direktori
/ml/input/data/{channel_name}/dari kontainer pelatihan. Komponen dapat membaca data dari OSS, NAS, atau MaxCompute dengan membaca file lokal.
Output
Pipeline output digunakan untuk menyimpan hasil seperti model yang dilatih dan checkpoint. Konfigurasikan parameter berikut:
Name: nama pipeline output.
Storage: Tentukan direktori OSS atau MaxCompute untuk setiap alur kerja output. Direktori yang ditentukan dipasang ke direktori
/ml/output/{channel_name}/dari kontainer pelatihan.
Parameter
Informasi tentang hyperparameter. Konfigurasikan parameter berikut:
Parameter Name: nama parameter.
Type: tipe parameter. Nilai valid: Int, Float, String, dan Bool.
Batasan: Setelah memilih tipe selain Bool (Int, Float, atau String), di kolom Default Value, klik Constraint untuk mengonfigurasi batasan parameter. Nilai valid untuk Tipe Batasan:
Range: Tentukan nilai maksimum dan minimum untuk menetapkan rentang nilai.
Enumeration: Konfigurasikan nilai enumerasi untuk parameter.
Batasan
Batasan pelatihan digunakan untuk menentukan sumber daya komputasi yang diperlukan oleh pekerjaan pelatihan. Aktifkan Enable Constraints untuk mengonfigurasi batasan pelatihan.
Gambar berikut menunjukkan pemetaan antara batasan pelatihan dan parameter tuning komponen di Machine Learning Designer.

Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
Instance Type
Nilai valid: CPU dan GPU.
Multiple Instances
Menentukan apakah komponen mendukung pelatihan terdistribusi pada beberapa instance. Nilai valid:
Supported: Anda dapat mengonfigurasi jumlah instance saat komponen berjalan.
Not Supported: Jumlah instance hanya bisa 1 saat komponen berjalan dan tidak dapat diubah.
Multiple GPUs
Parameter ini hanya tersedia jika Anda menyetel parameter Instance Type ke GPU.
Tentukan apakah komponen kustom mendukung beberapa GPU:
Jika Anda menyetel parameter ini ke Supported, Anda dapat memilih tipe instance single-GPU atau multi-GPU untuk menjalankan komponen.
Jika Anda menyetel parameter ini ke Not Supported, Anda hanya dapat memilih tipe instance single-GPU untuk menjalankan komponen.
Klik Submit.
Komponen kustom yang Anda buat akan ditampilkan di halaman Komponen Kustom.
Setelah membuat komponen kustom, Anda dapat menggunakannya di Machine Learning Designer. Untuk informasi lebih lanjut, lihat Gunakan Komponen Kustom.
Lampiran 1: Jenis pekerjaan
TensorFlow (TFJob)
Jika Anda menyetel parameter Jenis Pekerjaan ke TensorFlow, sistem menyuntikkan informasi topologi instance tempat pekerjaan dijalankan dengan menggunakan variabel lingkungan TF_CONFIG. Contoh berikut menunjukkan format variabel lingkungan:
{
"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
}
}Tabel berikut menjelaskan parameter dalam kode sebelumnya.
Parameter | Deskripsi |
cluster | Deskripsi kluster TensorFlow.
|
task |
|
PyTorch (PyTorchJob)
Jika Anda menyetel parameter Jenis Pekerjaan ke PyTorch, sistem menyuntikkan variabel lingkungan berikut:
RANK: peran instance. Nilai 0 menandakan bahwa instance adalah node master. Nilai selain 0 menandakan bahwa instance adalah node worker.
WORLD_SIZE: jumlah instance dalam pekerjaan.
MASTER_ADDR: alamat node master.
MASTER_PORT: port node master.
XGBoost (XGBoostJob)
Jika Anda menyetel parameter Jenis Pekerjaan ke XGBoost, sistem menyuntikkan variabel lingkungan berikut:
RANK: peran instance. Nilai 0 menandakan bahwa instance adalah node master. Nilai selain 0 menandakan bahwa instance adalah node worker.
WORLD_SIZE: jumlah instance dalam pekerjaan.
MASTER_ADDR: alamat node master.
MASTER_PORT: port node master.
WORKER_ADDRS: alamat node worker, diurutkan berdasarkan RANK.
WORKER_PORT: port node worker.
Contoh:
Pekerjaan terdistribusi (beberapa instance)
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=9999Pekerjaan single-instance
CatatanJika pekerjaan hanya memiliki satu instance, instance tersebut adalah node master, dan variabel lingkungan WORKER_ADDRS dan WORKER_PORT tidak tersedia.
WORLD_SIZE=1 MASTER_PORT=9999 MASTER_ADDR=train1pt84cj****-master-0 RANK=0
ElasticBatch (ElasticBatchJob)
ElasticBatch adalah jenis pekerjaan inferensi offline terdistribusi. Pekerjaan ElasticBatch memiliki manfaat berikut:
Menyediakan paralelisme tinggi yang mendukung throughput dua kali lipat.
Mengurangi waktu tunggu untuk pekerjaan. Node worker dapat langsung berjalan setelah node dialokasikan sumber daya.
Mendukung pemantauan startup instance dan secara otomatis mengganti instance yang mengalami startup tertunda dengan node worker cadangan. Ini mencegah ekor panjang atau pekerjaan macet.
Mendukung distribusi dinamis global dari shard data, yang menggunakan sumber daya secara lebih efisien.
Mendukung penghentian dini pekerjaan. Setelah semua data diproses, sistem tidak memulai node worker yang belum dimulai untuk menghindari peningkatan waktu aktif pekerjaan.
Mendukung toleransi kesalahan. Jika satu node worker gagal, sistem secara otomatis memulai ulang instance tersebut.
Pekerjaan ElasticBatch terdiri dari jenis node berikut: AIMaster dan Worker.
Node AIMaster digunakan untuk kontrol global pekerjaan, termasuk distribusi dinamis shard data, pemantauan kinerja throughput data setiap node worker, dan toleransi kesalahan.
Node worker mendapatkan shard dari AIMaster, dan membaca, memproses, lalu menulis kembali data. Distribusi dinamis shard data memungkinkan instance yang efisien memproses lebih banyak data daripada instance lambat.
Setelah Anda memulai pekerjaan ElasticBatch, node AIMaster dan node worker dijalankan. Kode dijalankan pada node worker. Sistem menyuntikkan variabel lingkungan ELASTICBATCH_CONFIG ke dalam node worker. Contoh berikut menunjukkan format nilai variabel lingkungan:
{
"task": {
"type": "worker",
"index": 0
},
"environment": "cloud"
}Perhatikan parameter berikut:
task.type: jenis pekerjaan instance saat ini.
task.index: indeks instance dalam daftar alamat jaringan dari peran tersebut.
Lampiran 2: Prinsip komponen kustom
Dapatkan data pipeline dan hyperparameter
Dapatkan data pipeline input
Data pipeline input disuntikkan ke dalam kontainer pekerjaan dengan menggunakan variabel lingkungan PAI_INPUT_{CHANNEL_NAME}.
Sebagai contoh, jika komponen kustom memiliki dua alur kerja input bernama train dan test, dan nilainya adalah oss://<YourOssBucket>.<OssEndpoint>/path-to-data/ dan oss://<YourOssBucket>.<OssEndpoint>/path-to-data/test.csv, variabel lingkungan berikut disuntikkan:
PAI_INPUT_TRAIN=/ml/input/data/train/
PAI_INPUT_TEST=/ml/input/data/test/test.csvDapatkan data pipeline output
Sistem mendapatkan data dengan menggunakan variabel lingkungan PAI_OUTPUT_{CHANNEL_NAME}.
Sebagai contoh, 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/Dapatkan data hyperparameter
Sistem mendapatkan data hyperparameter dengan menggunakan variabel lingkungan berikut.
PAI_USER_ARGS
Saat komponen berjalan, semua informasi hiperparameter pekerjaan disuntikkan ke kontainer pekerjaan dengan menggunakan variabel lingkungan PAI_USER_ARGS dalam format
--{hyperparameter_name} {hyperparameter_value}.Sebagai contoh, jika Anda menentukan hiperparameter berikut untuk pekerjaan:
{"epochs": 10, "batch-size": 32, "learning-rate": 0.001}, bagian berikut menunjukkan nilai variabel lingkungan PAI_USER_ARGS:PAI_USER_ARGS="--epochs 10 --batch-size 32 --learning-rate 0.001"PAI_HPS_{HYPERPARAMETER_NAME}
Nilai hyperparameter tunggal disuntikkan ke dalam kontainer pekerjaan dengan menggunakan variabel lingkungan PAI_HPS_{HYPERPARAMETER_NAME}. Dalam nama hyperparameter, karakter yang tidak didukung diganti dengan garis bawah (_).
Sebagai contoh, jika Anda menentukan hiperparameter berikut untuk pekerjaan:
{"epochs": 10, "batch-size": 32, "train.learning_rate": 0.001}, maka nilai variabel lingkungan adalah:PAI_HPS_EPOCHS=10 PAI_HPS_BATCH_SIZE=32 PAI_HPS_TRAIN_LEARNING_RATE=0.001PAI_HPS
Informasi hyperparameter pekerjaan pelatihan disuntikkan ke dalam kontainer dengan menggunakan variabel lingkungan PAI_HPS dalam format JSON.
Sebagai contoh, jika Anda menentukan hiperparameter berikut untuk pekerjaan:
{"epochs": 10, "batch-size": 32}, bagian berikut menunjukkan nilai variabel lingkungan PAI_HPS:PAI_HPS={"epochs": 10, "batch-size": 32}
Struktur direktori input dan output
Anda dapat menggunakan variabel lingkungan dalam kode untuk mendapatkan informasi pipeline input dan output. Anda juga dapat mengakses data melalui jalur mount di kontainer. Saat pekerjaan yang dikirimkan oleh komponen dijalankan dalam kontainer, jalur dibuat berdasarkan aturan berikut:
Jalur kode:
/ml/usercode/.File konfigurasi hiperparameter:
/ml/input/config/hyperparameters.json.File konfigurasi pekerjaan pelatihan:
/ml/input/config/training_job.json.Direktori alur kerja input:
/ml/input/data/{channel_name}/.Direktori alur kerja output:
/ml/output/{channel_name}/.
Kode berikut memberikan contoh struktur direktori input dan output pekerjaan yang dikirimkan oleh komponen kustom:
/ml
|-- usercode # Kode pengguna dimuat ke direktori /ml/usercode, yang juga merupakan direktori kerja kode pengguna. Anda dapat mendapatkan nilai dengan menggunakan variabel lingkungan PAI_WORKING_DIR.
| |-- requirements.txt
| |-- main.py
|-- input # Data input dan informasi konfigurasi pekerjaan.
| |-- config # Direktori config berisi informasi konfigurasi pekerjaan. Anda dapat mendapatkan informasi konfigurasi dengan menggunakan variabel lingkungan PAI_CONFIG_DIR.
| |-- training_job.json # Konfigurasi pekerjaan.
| |-- hyperparameters.json # Hyperparameter pekerjaan.
| |-- data # Pipeline input pekerjaan. Dalam contoh ini, direktori berisi pipeline bernama train_data dan test_data.
| |-- test_data
| | |-- test.csv
| |-- train_data
| |-- train.csv
|-- output # Pipeline output pekerjaan: Dalam contoh ini, direktori berisi pipeline bernama model dan checkpoints.
|-- model # Anda dapat menggunakan variabel lingkungan PAI_OUTPUT_{OUTPUT_CHANNEL_NAME} untuk mendapatkan jalur output.
|-- checkpointsBagaimana cara menentukan apakah instans tersebut adalah instans GPU-accelerated dan jumlah GPU yang dikandungnya?
Setelah Anda memulai pekerjaan, Anda dapat menggunakan variabel lingkungan NVIDIA_VISIBLE_DEVICES untuk memeriksa jumlah GPU. Sebagai contoh, NVIDIA_VISIBLE_DEVICES=0,1,2,3 menunjukkan bahwa instance memiliki empat GPU.