PAI SDK untuk Python menyediakan API tingkat tinggi yang mudah digunakan. Anda dapat menggunakan SDK ini untuk mengirimkan pekerjaan pelatihan ke Platform for AI (PAI) dan menjalankan pekerjaan tersebut di cloud. Topik ini menjelaskan cara menyiapkan skrip pekerjaan pelatihan serta menggunakan SDK untuk mengirimkan pekerjaan pelatihan.
Penagihan
Saat mengirimkan pekerjaan pelatihan, pekerjaan tersebut berjalan pada sumber daya Deep Learning Containers (DLC), dan Anda akan dikenakan biaya untuk penggunaan sumber daya tersebut. Untuk informasi lebih lanjut, lihat Penagihan DLC.
Ikhtisar
Anda dapat menggunakan kelas Estimator dalam modul pai.estimator dari PAI SDK untuk Python untuk mengirimkan pekerjaan pelatihan. Langkah-langkahnya adalah sebagai berikut:
Buat instance
Estimatoruntuk mengonfigurasi pekerjaan pelatihan, termasuk skrip pelatihan, perintah startup, hyperparameter, gambar, dan sumber daya komputasi.Gunakan metode
Estimator.fit()untuk menentukan data pelatihan dan mengirimkan pekerjaan pelatihan.
Contoh kode:
from pai.estimator import Estimator
# Buat instance Estimator untuk mengonfigurasi pekerjaan pelatihan.
est = Estimator(
command="<LaunchCommand>"
source_dir="<SourceCodeDirectory>"
image_uri="<TrainingImageUri>"
instance_type="<TrainingInstanceType>",
hyperparameters={
"n_estimators": 500,
"max_depth": 5,
},
)
# Tentukan data pelatihan dan kirimkan pekerjaan pelatihan.
est.fit(
inputs={
"train_data": "oss://<YourOssBucket>/path/to/train/data/",
}
)
# Dapatkan jalur model keluaran.
print(est.model_data())
Siapkan skrip pekerjaan pelatihan dan dependensi yang diperlukan
Siapkan Skrip Pekerjaan Pelatihan
Anda dapat membuat skrip pekerjaan pelatihan di lingkungan lokal dan mengirimkannya ke PAI. PAI mengonfigurasi lingkungan cloud dan menjalankan skrip tersebut. Contoh skrip pekerjaan pelatihan:
import argparse import os import json def train(hps, train_data, test_data): """Tambahkan kode Anda untuk pelatihan model.""" pass def save_model(model): """Simpan model keluaran.""" # Dapatkan jalur tempat model keluaran akan disimpan dengan menggunakan variabel lingkungan PAI_OUTPUT_MODEL. Jalur default: /ml/output/model/. output_model_path = os.environ.get("PAI_OUTPUT_MODEL") # Tulis model keluaran ke jalur yang diperoleh. pass def load_hyperparameters(): """Baca hyperparameter.""" # Dapatkan jalur yang berisi hyperparameter dengan menggunakan variabel lingkungan PAI_CONFIG_DIR. Jalur default: /ml/input/config/. hps_path = os.path.join(os.environ.get("PAI_CONFIG_DIR"), "hyperparameters.json") with open(hps_path, "r") as f: hyperparameters = json.load(f) return hyperparameters def run(): #1. Muat hyperparameter. hps = load_hyperparameters() print("Hyperparameter: ", hps) #2. Muat data masukan. # Panggil metode est.fit() untuk memuat data masukan yang disimpan di File Storage NAS (NAS) atau Object Storage Service (OSS) ke dalam kontainer. # Dapatkan jalur data masukan di lingkungan lokal dengan menggunakan variabel lingkungan PAI_INPUT_{CHANNEL_NAME}. train_data = os.environ.get("PAI_INPUT_TRAIN") test_data = os.environ.get("PAI_INPUT_TEST") model = train(hps, train_data, test_data) #3. Tambahkan kode pelatihan. Saat pelatihan selesai, model keluaran disimpan ke jalur yang ditentukan. save_model(model) if __name__ == "__main__": run()Skrip pekerjaan pelatihan harus memenuhi standar tertentu untuk memuat hyperparameter, memuat data masukan, dan menyimpan model keluaran. Bagian berikut menjelaskan persyaratannya.
Muat Hyperparameter
Setelah mengonfigurasi parameter
hyperparametersuntuk instanceEstimator, file bernamahyperparameters.jsondibuat di jalur yang ditentukan oleh variabel lingkunganPAI_CONFIG_DIR. Jalur default adalah/ml/input/config/. Di dalam skrip pekerjaan pelatihan, Anda dapat memperoleh hyperparameter dengan membaca file{PAI_CONFIG_DIR}/hyperparameters.json.Sebagai contoh, jika Anda menentukan hyperparameters={"batch_size": 32, "learning_rate": 0.01} untuk instance
Estimator, berikut adalah isi file{PAI_CONFIG_DIR}/hyperparameters.json:{ "batch_size": "32", "learning-rate": "0.01" }Muat Data Masukan
Gunakan parameter
inputsdari metodeEstimator.fit()untuk menentukan jalur data masukan. Tentukan jalur dalam format pasangan kunci-nilai, di mana kunci adalah nama data masukan (ChannelName) dan nilainya adalah jalur penyimpanan data masukan. Contoh kode:estimator.fits( inputs={ "train": "oss://<YourOssBucket>/train/data/train.csv", "test": "oss://<YourOssBucket>/test/data/", } )Data masukan dipasang ke jalur
/ml/input/data/{ChannelName}. Di dalam skrip pekerjaan pelatihan, Anda dapat memperoleh jalur pemasangan data masukan menggunakan variabel lingkunganPAI_INPUT_{ChannelName}dan membaca data seperti membaca file lokal. Dalam contoh sebelumnya, gunakan variabel lingkunganPAI_INPUT_TRAINdanPAI_INPUT_TEST.Simpan Model Keluaran
Simpan model keluaran ke jalur yang diperlukan untuk menjaga persistensi model. Gunakan variabel lingkungan
PAI_OUTPUT_MODELuntuk mendapatkan jalur penyimpanan model. Jalur default adalah/ml/output/model.
Jika skrip pekerjaan pelatihan memerlukan dependensi paket Python tambahan yang tidak disediakan dalam gambar yang digunakan, buat file requirements.txt di direktori tempat skrip pekerjaan pelatihan berada. Sebelum skrip dijalankan, dependensi pustaka pihak ketiga dipasang di lingkungan pekerjaan.
Simpan skrip pekerjaan pelatihan dan file dependensi terkait di direktori tertentu. Misalnya, simpan skrip pekerjaan pelatihan dan file dependensi di direktori train_src yang Anda buat di lingkungan lokal. Saat membuat instance Estimator, tentukan source_dir="train_src" untuk mengemas dan mengunggah isi direktori train_src ke PAI.
|-- train_src # Direktori yang berisi skrip pekerjaan pelatihan.
|-- requirements.txt # Dependensi pihak ketiga tambahan dari skrip pekerjaan pelatihan.
'-- train.py # Skrip pekerjaan pelatihan. Anda dapat menjalankan skrip dengan menggunakan perintah python train.py.
`-- utils.py
Dapatkan gambar PAI
Untuk mengirimkan pekerjaan pelatihan, tentukan gambar yang ingin digunakan untuk menjalankan pekerjaan. Gambar tersebut harus berisi dependensi skrip pekerjaan pelatihan, termasuk framework pembelajaran mesin dan pustaka pihak ketiga. Anda dapat menggunakan gambar kustom dari Container Registry (ACR) atau gambar pra-bangun dari PAI. PAI menyediakan gambar pra-bangun untuk framework pembelajaran mesin umum. Gunakan metode pai.image.retrieve untuk mendapatkan gambar PAI. Contoh kode:
Untuk informasi tentang pustaka Python pihak ketiga yang sudah diinstal sebelumnya di gambar PAI, lihat Gambar Publik.
from pai.image import retrieve, list_images, ImageScope
# Dapatkan semua gambar PAI untuk pelatihan dengan PyTorch.
for image_info in list_images(framework_name="PyTorch"):
print(image_info)
# Dapatkan gambar PAI untuk pelatihan dengan TensorFlow 2.3 pada CPU.
print(retrieve(framework_name="TensorFlow", framework_version="2.3"))
# Dapatkan gambar PAI terbaru untuk pelatihan dengan TensorFlow pada GPU.
# Tentukan framework_version="latest" untuk mendapatkan gambar terbaru.
print(retrieve(framework_name="TensorFlow", framework_version="latest",
accelerator_type="GPU"))
# Dapatkan gambar PAI untuk pelatihan dengan PyTorch 1.12 pada GPU.
print(retrieve(framework_name="PyTorch", framework_version="1.12",
accelerator_type="GPU"))
Jalankan pekerjaan pelatihan
Jalankan pekerjaan pelatihan di PAI
Untuk menjalankan pekerjaan pelatihan di PAI, buat instance Estimator untuk mengonfigurasi pekerjaan pelatihan, lalu panggil metode Estimator.fit() untuk mengirimkan pekerjaan. Setelah pekerjaan dikirimkan, sistem mencetak URL halaman detail pekerjaan dan terus mencetak log pekerjaan hingga status pekerjaan berubah menjadi berhasil, gagal, atau dihentikan. Anda dapat menggunakan URL yang dicetak untuk melihat detail eksekusi pekerjaan, log pekerjaan, penggunaan sumber daya, dan metrik pelatihan di konsol PAI.
Secara default, metode Estimator.fit() keluar setelah pekerjaan selesai. Gunakan metode estimator.model_data() untuk mendapatkan jalur OSS model keluaran.
Contoh kode:
from pai.estimator import Estimator
from pai.image import retrieve
# Dapatkan gambar PAI terbaru untuk pelatihan dengan PyTorch.
torch_image_uri = retrieve("PyTorch", framework_version="1.12").image_uri
est = Estimator(
# Perintah startup pekerjaan pelatihan.
command="python train.py",
# Jalur skrip pekerjaan pelatihan. Anda dapat menentukan jalur relatif atau absolut di sistem file lokal. Anda juga dapat menentukan jalur OSS dari paket TAR. Contoh: oss://<YourOssBucket>/your-code-path-to/source.tar.gz.
# Jika file requirements.txt ada di direktori yang berisi skrip pekerjaan pelatihan, dependensi dalam file tersebut secara otomatis diinstal sebelum skrip dijalankan.
source_dir="./train_src/",
# Gambar yang ingin Anda gunakan untuk pelatihan.
image_uri=torch_image_uri,
# Jenis instans yang ingin Anda gunakan untuk pelatihan.
instance_type="ecs.c6.large",
# Hyperparameter untuk pelatihan.
hyperparameters={
"n_estimators": 500,
"objective": "reg:squarederror",
"max_depth": 5,
},
# Awalan nama pekerjaan pelatihan. Nama dalam format {base_job_name}_{submitted-datetime}.
base_job_name="example_train_job",
)
# Kirim pekerjaan pelatihan dan cetak URL halaman detail pekerjaan. Secara default, metode Estimator.fit() keluar setelah status pekerjaan berubah menjadi berhasil, gagal, atau dihentikan.
est.fit()
# Dapatkan jalur model keluaran.
print(est.model_data())Jalankan pekerjaan pelatihan di lingkungan lokal
Debugging sulit dilakukan di lingkungan cloud. Oleh karena itu, Anda dapat menjalankan pekerjaan pelatihan dan melakukan debugging di lingkungan lokal. Untuk menjalankan pekerjaan pelatihan di lingkungan lokal, tentukan instance_type="local" saat membuat instance Estimator. Dengan cara ini, pekerjaan pelatihan dijalankan di kontainer Docker.
estimator = Estimator(
image_uri=image_uri,
entry_point="train.py",
# Jalankan pekerjaan pelatihan di lingkungan lokal.
instance_type="local",
)
estimator.fit(
inputs={
# Anda dapat menggunakan data OSS. Data diunduh dan kemudian dipasang ke kontainer.
"train": "oss://<BucketName>/path-to-data/",
# Anda juga dapat menggunakan data di mesin host. Data dipasang ke direktori yang sesuai.
"test": "/data/to/test/data"
}
)
# Dapatkan jalur model keluaran.
print(estimator.model_data())Referensi
Lampiran
Variabel lingkungan preset pekerjaan pelatihan
Jika Anda mengirimkan pekerjaan pelatihan ke PAI, PAI menyimpan informasi berikut tentang pekerjaan sebagai variabel lingkungan: hyperparameter, jalur data masukan, dan jalur model keluaran. Anda dapat menggunakan variabel lingkungan yang telah ditentukan sebelumnya untuk mendapatkan informasi tersebut saat mengonfigurasi skrip pekerjaan pelatihan atau perintah startup (Estimator.command).
PAI_HPS_{HYPERPARAMETER_NAME}
Variabel lingkungan ini menentukan nilai satu hyperparameter. Variabel lingkungan hanya dapat berisi huruf, angka, dan garis bawah (_). Karakter lain dalam hyperparameter diganti dengan garis bawah (_).
Sebagai contoh, jika Anda menentukan
hyperparameters={"epochs": 10, "batch-size": 32, "train.learning_rate": 0.001}, variabel lingkungan berikut dibuat:PAI_HPS_EPOCHS=10 PAI_HPS_BATCH_SIZE=32 PAI_HPS_TRAIN_LEARNING_RATE=0.001Anda dapat menggunakan variabel lingkungan ini di perintah startup pekerjaan pelatihan. Contoh kode:
est = Estimator( command="python train.py --epochs $PAI_HPS_EPOCHS --batch-size $PAI_HPS_BATCH_SZIE", hyperparameters={ "epochs": 10, "batch-size": 32, }, # argumen lain untuk estimator.. )Di dalam skrip pekerjaan pelatihan (train.py), Anda dapat memperoleh hyperparameter menggunakan pustaka argparse untuk mengurai parameter perintah.
PAI_USER_ARGS
Variabel lingkungan ini menentukan nilai semua hyperparameter dalam format
--{hyperparameter_name} {hyperparameter_value}.Sebagai contoh, jika Anda menentukan
hyperparameters={"epochs": 10, "batch-size": 32, "learning-rate": 0.001}, variabel lingkungan berikut dibuat:PAI_USER_ARGS="--epochs 10 --batch-size 32 --learning-rate 0.001"Anda dapat menggunakan variabel lingkungan ini di perintah startup. Dalam contoh berikut, perintah aktual adalah
python train.py --epochs 10 --batch-size 32 --learning-rate 0.001.est = Estimator( command="python train.py $PAI_USER_ARGS", hyperparameters={ "epochs": 10, "learning-rate": 0.001 "batch-size": 32, }, # argumen lain untuk estimator.. )PAI_HPS
Variabel lingkungan ini menentukan nilai semua hyperparameter dalam format JSON.
Sebagai contoh, jika Anda menentukan
hyperparameters={"epochs": 10, "batch-size": 32}, variabel lingkungan berikut dibuat:PAI_HPS={"epochs": 10, "batch-size": 32}PAI_INPUT_{channel_name}
Variabel lingkungan ini menentukan saluran masukan pekerjaan. Setiap
channel_namesesuai dengan jalur pemasangan data masukan yang disimpan di OSS atau NAS.Sebagai contoh, jika Anda menentukan
est.fit(inputs={"train": "oss://<YourOssBucket>/path-to-data/", "test": "oss://<YourOssBucket>/path-to/data/test.csv"}), variabel lingkungan berikut dibuat:PAI_INPUT_TRAIN=/ml/input/data/train/ PAI_INPUT_TEST=/ml/input/data/test/test.csvAnda dapat membaca data masukan di jalur pemasangan dengan cara yang sama seperti membaca file lokal.
CatatanJika Anda menentukan jalur OSS yang diakhiri dengan garis miring (/), variabel lingkungan menunjuk ke direktori.Jika Anda menentukan jalur OSS yang diakhiri dengan nama file, variabel lingkungan menunjuk ke file.PAI_OUTPUT_{channel_name}
Variabel lingkungan ini menentukan saluran keluaran pekerjaan. Secara default, saluran keluaran berikut dibuat:
MODELdanCHECKPOINTS, di mana MODEL menentukan jalur model keluaran dan CHECKPOINTS menentukan jalur checkpoint. Setiap channel_name sesuai dengan jalur pemasangan dan URI OSS. Anda dapat memperoleh jalur file menggunakan variabel lingkunganPAI_OUTPUT_{channel_name}.PAI_OUTPUT_MODEL=/ml/output/model/ PAI_OUTPUT_CHECKPOINTS=/ml/output/checkpoints/Setelah menyimpan model keluaran atau checkpoint ke jalur yang diperlukan, PAI secara otomatis mengunggah model atau checkpoint ke jalur OSS yang sesuai.
Struktur direktori
Berikut adalah contoh struktur direktori untuk pekerjaan pelatihan yang berjalan di PAI:
/ml
|-- usercode # Direktori tempat file kode Anda dipasang. Anda dapat memperoleh direktori ini dengan menggunakan variabel lingkungan PAI_WORKING_DIR.
| |-- requirements.txt
| `-- train.py
|-- input # Data masukan dan konfigurasi pekerjaan.
| '-- config # Direktori yang berisi konfigurasi pekerjaan. Anda dapat memperoleh direktori ini dengan menggunakan variabel lingkungan PAI_CONFIG_DIR.
| |-- hyperparameters.json # Hyperparameter pekerjaan pelatihan.
| '-- data # Saluran masukan pekerjaan. Dalam contoh ini, pekerjaan memiliki dua saluran masukan: train_data dan test_data.
| |-- test_data
| | `-- test.csv
| `-- train_data
| `-- train.csv
'-- output # Saluran keluaran pekerjaan. Secara default, saluran MODEL dan CHECKPOINTS digunakan.
'-- model # Anda dapat memperoleh jalur model keluaran dengan menggunakan variabel lingkungan PAI_OUTPUT_{CHANNEL_NAME}.
`-- checkpoints