All Products
Search
Document Center

Platform For AI:Skrip Python

Last Updated:Jul 16, 2026

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.

    Penting

    Bucket 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/input1 menentukan path untuk port input pertama. Baca file yang dipasang dari /ml/input/data/input1 sebagai 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/table menunjukkan tabel MaxCompute untuk port input pertama. Gunakan fungsi parse_odps_url dari 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/output1 dan /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 output1 dan output2 di 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.

      Penting

      Sebelum 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.

    Catatan

    Sistem 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.txt Python. 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. Format table_uri adalah odps://${your_projectname}/tables/${table_name}/${pt_1}/${pt_2}/, misalnya, odps://test/tables/iris/pa=1/pb=1, di mana pa=1/pb=1 adalah 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:

  1. Buat pipeline dari templat prediksi penyakit jantung dan buka. Prediksi penyakit jantung.

  2. Tarik komponen Python Script ke kanvas, ubah namanya menjadi SMOTE, dan konfigurasikan kode berikut.

    Penting

    Pustaka imblearn tidak termasuk dalam image default. Tambahkan imblearn di 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.

  3. Hubungkan komponen SMOTE di hilir komponen Split. SMOTE melakukan oversampling data pelatihan untuk menyeimbangkan distribusi kelas dengan membuat sampel sintetis untuk kelas minoritas.

  4. Hubungkan data baru dari komponen SMOTE ke komponen Logistic Regression for Binary Classification untuk pelatihan.

  5. 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 (Visualization) 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 sebesar 0,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.

Catatan

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 1DLC Job 2DLC Job 3, DLC Job 1DLC Job 4, DLC Job 2DLC 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.py dengan isi import 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

  1. 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 arg1 dengan nilai test1, dan nama variabel arg2 dengan nilai 1234. 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.

  2. 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)