Gunakan komponen Machine Learning Designer untuk menginstal paket dependensi dan menjalankan fungsi Python kustom.
Temukan Komponen
Komponen Python Script berada di folder UserDefinedScript dalam daftar komponen Machine Learning Designer.
Prasyarat
-
Izin DLC telah diberikan. Ketergantungan dan otorisasi layanan cloud: DLC.
-
Komponen Python Script berjalan pada sumber daya komputasi DLC. Asosiasikan sumber daya komputasi DLC dengan ruang kerja Anda. Mengelola ruang kerja.
-
Komponen Python Script menyimpan kode di OSS. Buat bucket OSS. Buat bucket.
PentingBucket OSS harus berada di wilayah yang sama dengan Machine Learning Designer dan DLC.
-
Pengguna RAM harus memiliki peran Algorithm Development di ruang kerja. Mengelola anggota ruang kerja. Untuk menggunakan MaxCompute sebagai sumber data, berikan juga peran MaxCompute Developer.
Konfigurasi komponen
-
Port input
Komponen Python Script memiliki empat port input. Hubungkan ke data dari path OSS atau tabel MaxCompute.
-
Input path OSS
Input dari path OSS komponen hulu dipasang (mounted) ke node tempat skrip dijalankan. Sistem meneruskan path file yang dipasang sebagai argumen. Misalnya,
--input1 /ml/input/data/input1menentukan path untuk port input pertama. Baca file yang dipasang dari/ml/input/data/input1sebagai file lokal dalam skrip Anda. -
Input tabel MaxCompute
Input tabel MaxCompute tidak dipasang. Sistem meneruskan informasi tabel sebagai argumen URI. Misalnya,
python main.py --input1 odps://some-project-name/tables/tablemenunjukkan tabel MaxCompute untuk port input pertama. Gunakan fungsiparse_odps_urldari templat kode untuk mengurai metadata seperti ProjectName, TableName, dan Partition. Contoh penggunaan.
-
-
Port output
Komponen Python Script memiliki empat port output. OSS Output Port 1 dan OSS Output Port 2 menghasilkan output ke path OSS. Table Output Port 1 dan Table Output Port 2 menghasilkan output ke tabel MaxCompute.
-
Output path OSS
Path OSS yang dikonfigurasi untuk Job output path pada tab Code Config dipasang ke
/ml/output/. OSS Output Port 1 dan OSS Output Port 2 masing-masing sesuai dengan/ml/output/output1dan/ml/output/output2. Tulis file ke direktori ini dalam skrip Anda untuk meneruskannya ke komponen hilir. -
Output tabel MaxCompute
Jika ruang kerja memiliki proyek MaxCompute, sistem meneruskan URI tabel sementara ke skrip, misalnya:
python main.py --output3 odps://<some-project-name>/tables/<output-table-name>. Gunakan PyODPS untuk membuat dan menulis data ke tabel ini, lalu teruskan ke komponen hilir melalui koneksi.
-
-
Parameter
Code Config
Parameter
Deskripsi
Job output path
Path OSS untuk output pekerjaan.
-
Direktori OSS yang dikonfigurasi dipasang ke
/ml/output/dalam kontainer pekerjaan. Data yang ditulis ke/ml/output/dipertahankan ke direktori OSS yang sesuai. -
Port output OSS Output-1 dan OSS Output-2 sesuai dengan subpath
output1danoutput2di bawah/ml/output/. Saat port output OSS dihubungkan ke komponen hilir, komponen hilir menerima data dari subpath yang sesuai.
Code source
(Pilih salah satu)
Literal code
-
Python code: Path OSS tempat kode disimpan. Kode yang ditulis di editor disimpan ke path ini. Nama file default adalah
main.py.PentingSebelum Anda mengklik Save untuk pertama kalinya, pastikan path OSS yang ditentukan tidak berisi file dengan nama yang sama. Jika tidak, file yang ada akan ditimpa.
-
Editor kode Python: Editor menyediakan kode contoh secara default. Contoh penggunaan. Tulis kode Anda langsung di editor.
Specify Git configuration
-
Git repository address: Alamat repositori Git.
-
Code branch: Cabang kode. Nilai default adalah master.
-
Code commit: ID commit. Memiliki prioritas lebih tinggi daripada cabang. Jika ditentukan, pengaturan cabang diabaikan.
-
Git username: Diperlukan jika Anda perlu mengakses repositori pribadi.
-
Git access token: Diperlukan untuk mengakses repositori kode pribadi. Lampiran: Mendapatkan token akun GitHub.
Select code source
-
Select code source repositories: Pilih konfigurasi kode yang telah dibuat. Konfigurasi kode.
-
Code branch: Cabang kode. Nilai default adalah master.
-
Code commit: ID commit. Memiliki prioritas lebih tinggi daripada cabang. Jika ditentukan, pengaturan cabang diabaikan.
Select OSS path
Pada bidang OSS Code Path, pilih path tempat kode diunggah.
Command
Perintah untuk dieksekusi, seperti
python main.py.CatatanSistem menghasilkan perintah eksekusi berdasarkan nama skrip dan koneksi port. Tidak diperlukan konfigurasi manual.
Advanced option
-
Third-party dependencies: Tentukan pustaka pihak ketiga dalam format
requirements.txtPython. Sistem menginstal pustaka 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 seaborn -
Enable container monitoring: Menampilkan kotak teks konfigurasi untuk parameter pemantauan toleransi kesalahan.
Run Config
Parameter
Deskripsi
Select Resource Group
Pilih kelompok sumber daya DLC publik :
-
Untuk kelompok sumber daya publik, konfigurasikan InstanceType. Pilih instans CPU atau GPU. Default:
ecs.c6.large.
Secara default, kelompok sumber daya cloud-native DLC default di ruang kerja saat ini digunakan.
VPC Settings
Pilih Virtual Private Cloud (VPC) yang sudah ada.
Security Group
Pilih security group yang sudah ada.
Advanced option
Jika Anda memilih opsi ini, konfigurasikan parameter berikut:
-
Instance count: Jumlah instans. Nilai default adalah 1.
-
Job image URI: URI image pekerjaan. Image default menggunakan XGBoost 1.6.0. Ubah image jika Anda memerlukan framework pembelajaran mendalam.
-
Job type: Ubah hanya jika kode Anda diimplementasikan untuk eksekusi terdistribusi. Nilai yang didukung:
-
XGBoost/LightGBM Job
-
TensorFlow Job
-
PyTorch Job
-
MPI Job
-
-
Contoh penggunaan
Kode contoh default
Komponen Python Script menyediakan kode contoh berikut secara default.
import os
import argparse
import json
"""
Kode contoh untuk komponen Python Script
"""
# Lingkungan eksekusi MaxCompute default di ruang kerja saat ini, yang mencakup nama proyek MaxCompute dan titik akhir.
# Lingkungan ini disuntikkan hanya jika proyek MaxCompute ada di ruang kerja 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 ruang kerja 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 output MaxCompute 1.")
parser.add_argument("--output4", type=str, default=None, help="Tabel output MaxCompute 2.")
args, _ = parser.parse_known_args()
return args
def write_table_example(args):
# Contoh: Eksekusi pernyataan SQL untuk menyalin data dari tabel publik yang disediakan oleh PAI ke tabel sementara yang ditentukan untuk Table Output Port 1 (--output3).
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: Menulis hasil data ke path OSS yang dipasang (subdirektori untuk OSS Output Port 1), dan hasil dapat diteruskan ke komponen hilir melalui koneksi.
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 umum:
-
init_odps(): Menginisialisasi instans ODPS untuk membaca data tabel MaxCompute. Berikan AccessKeyId dan AccessKeySecret Anda. Mendapatkan Pasangan Kunci Akses. -
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,odps://test/tables/iris/pa=1/pb=1, di manapa=1/pb=1adalah partisi multi-level. -
parse_args(): Mengurai argumen yang diteruskan ke skrip. Data input dan output diteruskan ke skrip yang dieksekusi sebagai argumen.
Contoh 1: Perangkaian dengan komponen lain
Contoh ini memodifikasi templat prediksi penyakit jantung untuk menunjukkan cara menggunakan komponen Python Script dengan komponen Machine Learning Designer lainnya. Konfigurasi pipeline:
-
Buat pipeline dari templat prediksi penyakit jantung dan buka. Prediksi penyakit jantung.
-
Tarik komponen Python Script ke kanvas, ubah namanya menjadi
SMOTE, dan konfigurasikan kode berikut.PentingPustaka
imblearntidak termasuk dalam image default. Tambahkanimblearndi bidang Third-party dependencies pada tab Code Config. Pustaka ini 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 ruang kerja saat ini. mc_execution = json.loads(os.environ[ENV_JOB_MAX_COMPUTE_EXECUTION]) o = ODPS( access_id="<Your_AccessKeyId>", secret_access_key="<Your_AccessKeySecret>", # 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 <Your_AccessKeyId> dan <Your_AccessKeySecret> dengan nilai Anda sendiri. Mendapatkan Pasangan Kunci Akses.
-
Hubungkan komponen SMOTE di hilir komponen Split. SMOTE melakukan oversampling data pelatihan untuk menyeimbangkan distribusi kelas dengan membuat sampel sintetis untuk kelas minoritas.
-
Hubungkan data baru dari komponen SMOTE ke komponen Logistic Regression for Binary Classification untuk pelatihan.
-
Hubungkan model yang telah dilatih ke data prediksi dan komponen evaluasi yang sama seperti cabang kiri untuk perbandingan berdampingan. Setelah komponen dijalankan, klik ikon visualisasi (
) untuk melihat hasil evaluasi.Hasil evaluasi model menunjukkan bahwa Binary Classification Evaluation tanpa oversampling memiliki ROC AUC sebesar
0,924, dengan matriks kebingungan true-0/predicted-0: 43, true-0/predicted-1: 6, true-1/predicted-0: 9, true-1/predicted-1: 33. Binary Classification Evaluation-2 dengan oversampling SMOTE memiliki ROC AUC sebesar0,917, dengan matriks kebingungan true-0/predicted-0: 41, true-0/predicted-1: 8, true-1/predicted-0: 9, true-1/predicted-1: 33.Oversampling tambahan tidak secara signifikan meningkatkan kinerja model, menunjukkan bahwa distribusi sampel asli dan model sudah efektif.
Contoh 2: Mengoordinasikan pekerjaan DLC
Hubungkan beberapa komponen Python Script di Machine Learning Designer untuk mengoordinasikan pipeline pekerjaan DLC. Contoh berikut memulai empat pekerjaan DLC yang disusun dalam DAG untuk mengontrol urutan eksekusi.
Jika kode pekerjaan DLC tidak membaca data dari node hulu atau meneruskan data ke node hilir, koneksi hanya merepresentasikan dependensi penjadwalan dan urutan eksekusi.
Topologi DAG alur kerja adalah: DLC Job 1→DLC Job 2→DLC Job 3, DLC Job 1→DLC Job 4, DLC Job 2→DLC Job 4. Pada tab Code Config setiap node pekerjaan DLC, konfigurasikan:
-
OSS Authorization: Otorisasi akses ke OSS.
-
Job output path: Tentukan lokasi output.
-
Code path: Misalnya,
oss://xxx/python/. -
Code: Edit file kode Python. Misalnya, DLC Job 4 sesuai dengan
main4.pydengan isiimport time; print("DLC task4"); time.sleep(5).
Deploy pipeline ke DataWorks untuk eksekusi terjadwal. Gunakan DataWorks untuk menjadwalkan pipeline Machine Learning Designer guna eksekusi offline.
Contoh 3: Meneruskan variabel global
-
Konfigurasi variabel global.
Pada halaman pipeline Machine Learning Designer, klik area kosong kanvas dan konfigurasikan variabel pada tab Global Variables di panel kanan.
Misalnya, tambahkan nama variabel
arg1dengan nilaitest1, dan nama variabelarg2dengan nilai1234. Referensikan variabel menggunakan${variable_name}. Nama variabel harus terdiri dari 1–20 karakter dan dimulai dengan huruf. Jika menggunakan variabel global untuk penjadwalan offline, konfigurasikan nama variabel yang sama dalam konfigurasi penjadwalan offline. -
Meneruskan variabel global ke komponen Python Script dengan salah satu dari dua cara berikut.
-
Klik node komponen Python Script. Pada tab Code Config, pilih Advanced option dan konfigurasikan variabel global sebagai parameter masuk di bidang Command. Misalnya, masukkan
python main.py --arg1 ${arg1} --arg2 ${arg2}untuk meneruskan variabel global ke skrip melalui argumen baris perintah. -
Modifikasi kode Python untuk mengurai argumen menggunakan
argparse.Kode berikut menggunakan variabel global yang dikonfigurasi pada langkah 1 sebagai contoh. Perbarui kode berdasarkan variabel global aktual Anda. Ganti kode di area pengeditan kode pada tab Code Config.
import os import argparse import json """ Kode contoh untuk komponen Python Script """ 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 output MaxCompute 1.") parser.add_argument("--output4", type=str, default=None, help="Tabel output MaxCompute 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)
-