Designer memungkinkan Anda membuat skrip Python kustom. Gunakan komponen Python Script untuk menginstal paket dependensi dan menjalankan fungsi Python kustom. Topik ini menjelaskan cara mengonfigurasi komponen tersebut serta menyediakan contoh penggunaannya.
Informasi latar belakang
Komponen Python Script berada di folder Custom Templates pada Designer.
Prasyarat
Anda harus memberikan izin yang diperlukan untuk Deep Learning Containers (DLC). Untuk informasi selengkapnya, lihat Ketergantungan produk dan otorisasi: DLC.
Komponen Python Script menggunakan DLC sebagai sumber daya komputasi dasarnya. Anda harus mengaitkan sumber daya komputasi DLC dengan Workspace Anda. Untuk informasi selengkapnya, lihat Manajemen Workspace.
Komponen Python Script menggunakan Object Storage Service (OSS) untuk menyimpan kode. Anda harus membuat Bucket OSS. Untuk informasi selengkapnya, lihat Buat bucket.
PentingBucket OSS harus berada di wilayah yang sama dengan Designer dan DLC.
Berikan peran Algorithm Developer kepada Pengguna RAM yang akan menggunakan komponen ini. Untuk informasi selengkapnya, lihat Kelola Anggota Workspace. Jika Pengguna RAM tersebut juga perlu menggunakan MaxCompute sebagai sumber data, berikan pula peran MaxCompute Developer.
Konfigurasikan komponen di UI
Input stub
Komponen Python Script memiliki empat port input. Setiap port dapat terhubung ke data dari path OSS atau tabel MaxCompute.
Input path OSS
Sistem memasang input dari path OSS komponen hulu ke node tempat skrip Python dijalankan, lalu meneruskan path file yang dipasang ke skrip Python sebagai argumen secara otomatis. Format argumennya adalah
python main.py --input1 /ml/input/data/input1, di mana--input1merepresentasikan path OSS yang terhubung ke port input pertama. Di dalam skrip Python Anda, akses file yang dipasang tersebut melalui path lokal/ml/input/data/input1.Input tabel MaxCompute
Input tabel MaxCompute tidak dipasang. Sebagai gantinya, sistem meneruskan informasi tabel sebagai URI ke skrip Python sebagai argumen secara otomatis. Format argumennya adalah
python main.py --input1 odps://some-project-name/tables/table, di mana--input1merepresentasikan tabel MaxCompute yang terhubung ke port input pertama. Untuk input dalam format URI MaxCompute, gunakan fungsiparse_odps_urlyang disediakan dalam templat kode komponen untuk mengurai metadata seperti nama proyek, nama tabel, dan partisi. Untuk informasi selengkapnya, lihat Contoh penggunaan.
Port Keluaran
Komponen Python Script memiliki empat port output: dua untuk path OSS (Output Port 1 dan Output Port 2) dan dua untuk tabel MaxCompute (Table Output Port 1 dan Table Output Port 2).
OSS Path Output
Sistem secara otomatis memasang path OSS yang dikonfigurasi untuk parameter Job Output Path pada tab Code config ke
/ml/output/. Port output OSS Output Port 1 dan OSS Output Port 2 masing-masing berkorespondensi dengan subdirektori/ml/output/output1dan/ml/output/output2. Di dalam skrip Anda, tulis file ke direktori tersebut seolah-olah itu adalah path lokal, lalu teruskan data tersebut ke komponen hilir.Output tabel MaxCompute
Jika Workspace saat ini dikonfigurasi dengan proyek MaxCompute, sistem secara otomatis meneruskan URI tabel sementara ke skrip Python, misalnya:
python main.py --output3 odps://<some-project-name>/tables/<output-table-name>. Gunakan PyODPS untuk membuat tabel yang ditentukan dalam URI tersebut, menulis data yang telah diproses ke dalamnya, lalu meneruskan tabel tersebut ke komponen hilir. Untuk informasi selengkapnya, lihat contoh berikut.
Parameter Komponen
Pengaturan Skrip
Parameter
Deskripsi
Task Output Path
Pilih path OSS untuk output tugas.
Sistem memasang direktori OSS yang dikonfigurasi ke path
/ml/output/pada kontainer pekerjaan. Sistem menyimpan data yang ditulis ke path/ml/output/ke direktori OSS yang sesuai.Port output komponen OSS Output Port 1 dan OSS Output Port 2 masing-masing berkorespondensi dengan subdirektori
output1danoutput2di bawah path/ml/output/. Saat Anda menghubungkan port output OSS ke komponen hilir, komponen tersebut menerima data dari subdirektori yang sesuai.
Set Code Source
(Pilih salah satu)
Submit in Editor
Python Code: Pilih path OSS tempat kode disimpan. Kode yang ditulis di editor disimpan ke path ini. File kode Python secara default bernama
main.py.PentingSebelum mengklik Save untuk pertama kalinya, pastikan tidak ada file dengan nama yang sama di path yang ditentukan agar file tidak tertimpa.
Python Code Editor: Editor menyediakan kode contoh secara default. Untuk informasi selengkapnya, lihat Contoh penggunaan. Anda dapat menulis kode langsung di editor.
Specify Git Configuration
Git repository: URL repositori Git.
Code Branch: Cabang kode. Nilai default adalah master.
Code Commit: ID commit memiliki prioritas lebih tinggi daripada cabang. Jika Anda menentukan parameter ini, pengaturan cabang tidak berlaku.
Git Username: Diperlukan untuk mengakses repositori pribadi.
Git Access Token: Diperlukan untuk mengakses repositori pribadi. Untuk informasi selengkapnya, lihat Lampiran: Dapatkan token untuk akun GitHub.
Select Code Configuration
Select Code Configuration: Pilih Code Build yang telah dibuat. Untuk informasi selengkapnya, lihat Konfigurasi Kode.
Code Branch: Cabang kode. Nilai default adalah master.
Code Commit: ID commit memiliki prioritas lebih tinggi daripada cabang. Jika Anda menentukan parameter ini, pengaturan cabang tidak berlaku.
Select a file or folder from OSS
Di OSS Path, pilih path tempat kode diunggah.
Execution Command
Masukkan perintah yang ingin Anda jalankan, seperti
python main.py.CatatanSistem secara otomatis menghasilkan perintah berdasarkan nama skrip dan koneksi port input serta output komponen. Anda tidak perlu mengonfigurasi parameter ini secara manual.
Advanced Options
Third-party Dependency Libraries: Di kotak teks, Anda dapat menginstal library pihak ketiga. Formatnya sama seperti file
requirements.txtPython. Sistem secara otomatis menginstal library ini sebelum node dijalankan.cycler==0.10.0 # via matplotlib kiwisolver==1.2.0 # via matplotlib matplotlib==3.2.1 numpy==1.18.5 pandas==1.0.4 pyparsing==2.4.7 # via matplotlib python-dateutil==2.8.1 # via matplotlib, pandas pytz==2020.1 # via pandas scipy==1.4.1 # via seabornEnable Fault Tolerance Monitoring: Jika Anda memilih parameter ini, kotak teks untuk Error Monitoring akan muncul. Di kotak teks tersebut, Anda dapat menambahkan parameter untuk menentukan konten pemantauan error.
Pengaturan Eksekusi
Parameter
Deskripsi
Select Resource Group
Anda dapat memilih Resource Group DLC publik::
Jika Anda memilih resource group publik, atur parameter Select Machine Instance Type. Anda dapat memilih instans mesin CPU atau GPU. Nilai default adalah ecs.c6.large.
Nilai default adalah resource group native DLC di Workspace saat ini.
VPC Configuration
Pilih Virtual Private Cloud (VPC) untuk dipasang.
Security Group
Pilih grup keamanan untuk dipasang.
Advanced Options
Jika Anda memilih parameter ini, Anda dapat mengonfigurasi parameter berikut:
Instance Count: Tentukan jumlah instans sesuai kebutuhan bisnis Anda. Nilai default: 1.
Job Image URI: Nilai default adalah XGBoost open source 1.6.0. Untuk menggunakan framework pembelajaran mendalam, Anda harus mengubah citra tersebut.
Job Type: Ubah parameter ini hanya jika kode Anda dirancang untuk eksekusi terdistribusi. Nilai yang valid:
XGBoost/LightGBM Job
TensorFlow Job
PyTorch Job
MPI Job
Contoh penggunaan
Templat kode default
Komponen skrip Python menyediakan templat kode default berikut.
import os
import argparse
import json
""" Contoh kode untuk komponen Python V2. """
# Lingkungan eksekusi MaxCompute default di Workspace saat ini, termasuk nama proyek MaxCompute dan titik akhir.
# Disuntikkan ke lingkungan eksekusi pekerjaan hanya jika proyek MaxCompute ada di Workspace saat ini.
# Contoh: {"endpoint": "http://service.cn.maxcompute.aliyun-inc.com/api", "odpsProject": "lq_test_mc_project"}.
ENV_JOB_MAX_COMPUTE_EXECUTION = "JOB_MAX_COMPUTE_EXECUTION"
def init_odps():
from odps import ODPS
# Informasi tentang proyek MaxCompute default di Workspace saat ini.
mc_execution = json.loads(os.environ[ENV_JOB_MAX_COMPUTE_EXECUTION])
o = ODPS(
access_id="<YourAccessKeyId>",
secret_access_key="<YourAccessKeySecret>",
# Pilih titik akhir berdasarkan Wilayah tempat proyek Anda berada, misalnya: http://service.cn-shanghai.maxcompute.aliyun-inc.com/api.
endpoint=mc_execution["endpoint"],
project=mc_execution["odpsProject"],
)
return o
def parse_odps_url(table_uri):
from urllib import parse
parsed = parse.urlparse(table_uri)
project_name = parsed.hostname
r = parsed.path.split("/", 2)
table_name = r[2]
if len(r) > 3:
partition = r[3]
else:
partition = None
return project_name, table_name, partition
def parse_args():
parser = argparse.ArgumentParser(description="Contoh skrip komponen PythonV2.")
parser.add_argument("--input1", type=str, default=None, help="Port input komponen 1.")
parser.add_argument("--input2", type=str, default=None, help="Port input komponen 2.")
parser.add_argument("--input3", type=str, default=None, help="Port input komponen 3.")
parser.add_argument("--input4", type=str, default=None, help="Port input komponen 4.")
parser.add_argument("--output1", type=str, default=None, help="Port output OSS 1.")
parser.add_argument("--output2", type=str, default=None, help="Port output OSS 2.")
parser.add_argument("--output3", type=str, default=None, help="Tabel MaxCompute Output 1.")
parser.add_argument("--output4", type=str, default=None, help="Tabel MaxCompute Output 2.")
args, _ = parser.parse_known_args()
return args
def write_table_example(args):
# Contoh: Salin data dari tabel PAI publik dengan menjalankan pernyataan SQL dan gunakan sebagai tabel sementara yang ditentukan untuk Table Output Port 1.
output_table_uri = args.output3
o = init_odps()
project_name, table_name, partition = parse_odps_url(output_table_uri)
o.run_sql(f"create table {project_name}.{table_name} as select * from pai_online_project.heart_disease_prediction;")
def write_output1(args):
# Contoh: Tulis data hasil ke path OSS yang dipasang (subdirektori dari OSS Output Port 1). Hasil tersebut kemudian dapat diteruskan ke komponen hilir.
output_path = args.output1
os.makedirs(output_path, exist_ok=True)
p = os.path.join(output_path, "result.text")
with open(p, "w") as f:
f.write("TestAccuracy=0.88")
if __name__ == "__main__":
args = parse_args()
print("Input1={}".format(args.input1))
print("Output1={}".format(args.output1))
# write_table_example(args)
# write_output1(args)Deskripsi fungsi:
init_odps(): Menginisialisasi instans ODPS untuk membaca data tabel MaxCompute. Anda harus menyediakan AccessKeyId dan AccessKeySecret. Untuk informasi selengkapnya tentang cara mendapatkan AccessKey, lihat Dapatkan AccessKey.parse_odps_url(table_uri): Mengurai URI tabel MaxCompute input dan mengembalikan nama proyek, nama tabel, dan partisi. Formattable_uriadalahodps://${your_projectname}/tables/${table_name}/${pt_1}/${pt_2}/. Misalnya, dalamodps://test/tables/iris/pa=1/pb=1,pa=1/pb=1adalah partisi multi-level.parse_args(): Mengurai argumen yang diteruskan ke skrip. Data input dan output diteruskan ke skrip sebagai argumen baris perintah.
Contoh 1: Gunakan komponen Python Script secara seri dengan komponen lain
Contoh ini memodifikasi templat prediksi penyakit jantung untuk menunjukkan cara menghubungkan komponen skrip Python dengan komponen Machine Learning Designer lainnya.
Konfigurasi pipeline:
Buat pipeline prediksi penyakit jantung dan buka desainer pipeline. Untuk informasi selengkapnya, lihat Prediksi penyakit jantung.
Tarik komponen Python Script ke kanvas, ubah namanya menjadi SMOTE, dan konfigurasikan kode berikut.
PentingLibrary
imblearntidak termasuk dalam citra default. Anda harus mengonfigurasiimblearndi bidang Third-party Dependencies pada tab Code config komponen. Library ini akan diinstal secara otomatis sebelum node dijalankan.import argparse import json import os from odps.df import DataFrame from imblearn.over_sampling import SMOTE from urllib import parse from odps import ODPS ENV_JOB_MAX_COMPUTE_EXECUTION = "JOB_MAX_COMPUTE_EXECUTION" def init_odps(): # Informasi tentang proyek MaxCompute default di Workspace saat ini. mc_execution = json.loads(os.environ[ENV_JOB_MAX_COMPUTE_EXECUTION]) o = ODPS( access_id="<YourAccessKeyId>", secret_access_key="<YourAccessKeySecret>", # Pilih titik akhir berdasarkan Wilayah tempat proyek Anda berada, misalnya: http://service.cn-shanghai.maxcompute.aliyun-inc.com/api. endpoint=mc_execution["endpoint"], project=mc_execution["odpsProject"], ) return o def get_max_compute_table(table_uri, odps): parsed = parse.urlparse(table_uri) project_name = parsed.hostname table_name = parsed.path.split('/')[2] table = odps.get_table(project_name + "." + table_name) return table def run(): parser = argparse.ArgumentParser(description='Contoh skrip komponen PythonV2.') parser.add_argument( '--input1', type=str, default=None, help='Port input komponen 1.' ) parser.add_argument( '--output3', type=str, default=None, help='Port input komponen 1.' ) args, _ = parser.parse_known_args() print('Input1={}'.format(args.input1)) print('output3={}'.format(args.output3)) o = init_odps() imbalanced_table = get_max_compute_table(args.input1, o) df = DataFrame(imbalanced_table).to_pandas() sm = SMOTE(random_state=2) X_train_res, y_train_res = sm.fit_resample(df, df['ifhealth'].ravel()) new_table = o.create_table(get_max_compute_table(args.output3, o).name, imbalanced_table.schema, if_not_exists=True) with new_table.open_writer() as writer: writer.write(X_train_res.values.tolist()) if __name__ == '__main__': run()Ganti
<YourAccessKeyId>dan<YourAccessKeySecret>dengan ID AccessKey dan Rahasia AccessKey Anda sendiri. Untuk informasi selengkapnya tentang cara mendapatkan AccessKey, lihat Dapatkan AccessKey.Hubungkan komponen SMOTE di hilir komponen Split. Langkah ini menerapkan algoritma SMOTE klasik untuk oversampling data pelatihan dari komponen Split, mensintesis sampel baru untuk kelas minoritas dalam set pelatihan guna mengurangi ketidakseimbangan kelas.
Hubungkan data baru dari komponen SMOTE ke komponen Logistic Regression for Binary Classification untuk pelatihan.
Hubungkan model yang telah dilatih ke komponen data prediksi dan evaluasi yang sama seperti model di cabang kiri untuk perbandingan berdampingan. Setelah komponen berhasil dijalankan, klik ikon
untuk membuka halaman visualisasi dan melihat hasil evaluasi akhir.
Contoh 2: Orkestrasi Pekerjaan DLC dengan Machine Learning Designer
Anda dapat menghubungkan beberapa komponen skrip Python kustom di Machine Learning Designer untuk mengorkestrasikan pipeline pekerjaan DLC dan mengaktifkan penjadwalan periodik. Gambar berikut menunjukkan contoh yang menjalankan empat Pekerjaan DLC secara berurutan sesuai grafik asiklik terarah (DAG).
Jika kode eksekusi pekerjaan DLC tidak perlu membaca data dari node hulu atau meneruskan data ke node hilir, koneksi antar node hanya merepresentasikan dependensi dan urutan eksekusi.
Seluruh pipeline yang dikembangkan di Machine Learning Designer dapat diterapkan ke DataWorks dengan sekali klik untuk penjadwalan periodik. Untuk informasi selengkapnya, lihat Gunakan DataWorks untuk penjadwalan offline alur kerja Designer.
Contoh 3: Teruskan Variabel Global ke komponen Skrip Python
Konfigurasikan variabel global.
Di halaman pipeline Machine Learning Designer, klik area kanvas kosong dan konfigurasikan tab Global Variables di sebelah kanan.

Gunakan salah satu metode berikut untuk meneruskan Variabel Global yang dikonfigurasi ke komponen Skrip Python.
Klik komponen Skrip Python. Di tab Code config, pilih Advanced Option dan konfigurasikan Variabel Global sebagai parameter input di bidang Command.

Modifikasi kode Python untuk mengurai argumen menggunakan
argparser.Kode berikut adalah contoh yang diperbarui berdasarkan Variabel Global yang dikonfigurasi di Langkah 1. Perbarui kode sesuai konfigurasi Variabel Global Anda yang sebenarnya, lalu ganti kode di editor kode pada tab Code config komponen Skrip Python.
import os import argparse import json """ Kode contoh komponen Python V2 """ ENV_JOB_MAX_COMPUTE_EXECUTION = "JOB_MAX_COMPUTE_EXECUTION" def init_odps(): from odps import ODPS mc_execution = json.loads(os.environ[ENV_JOB_MAX_COMPUTE_EXECUTION]) o = ODPS( access_id="<YourAccessKeyId>", secret_access_key="<YourAccessKeySecret>", endpoint=mc_execution["endpoint"], project=mc_execution["odpsProject"], ) return o def parse_odps_url(table_uri): from urllib import parse parsed = parse.urlparse(table_uri) project_name = parsed.hostname r = parsed.path.split("/", 2) table_name = r[2] if len(r) > 3: partition = r[3] else: partition = None return project_name, table_name, partition def parse_args(): parser = argparse.ArgumentParser(description="Contoh skrip komponen PythonV2.") parser.add_argument("--input1", type=str, default=None, help="Port input komponen 1.") parser.add_argument("--input2", type=str, default=None, help="Port input komponen 2.") parser.add_argument("--input3", type=str, default=None, help="Port input komponen 3.") parser.add_argument("--input4", type=str, default=None, help="Port input komponen 4.") parser.add_argument("--output1", type=str, default=None, help="Port output OSS 1.") parser.add_argument("--output2", type=str, default=None, help="Port output OSS 2.") parser.add_argument("--output3", type=str, default=None, help="Tabel MaxCompute Output 1.") parser.add_argument("--output4", type=str, default=None, help="Tabel MaxCompute Output 2.") # Tambahkan kode berdasarkan variabel global yang dikonfigurasi. parser.add_argument("--arg1", type=str, default=None, help="Argumen 1.") parser.add_argument("--arg2", type=int, default=None, help="Argumen 2.") args, _ = parser.parse_known_args() return args def write_table_example(args): output_table_uri = args.output3 o = init_odps() project_name, table_name, partition = parse_odps_url(output_table_uri) o.run_sql(f"create table {project_name}.{table_name} as select * from pai_online_project.heart_disease_prediction;") def write_output1(args): output_path = args.output1 os.makedirs(output_path, exist_ok=True) p = os.path.join(output_path, "result.text") with open(p, "w") as f: f.write("TestAccuracy=0.88") if __name__ == "__main__": args = parse_args() print("Input1={}".format(args.input1)) print("Output1={}".format(args.output1)) # Tambahkan kode berdasarkan variabel global yang dikonfigurasi. print("Argument1={}".format(args.arg1)) print("Argument2={}".format(args.arg2)) # write_table_example(args) # write_output1(args)