全部产品
Search
文档中心

Platform For AI:Skrip Python

更新时间:Jan 14, 2026

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.

    Penting

    Bucket 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 --input1 merepresentasikan 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 --input1 merepresentasikan tabel MaxCompute yang terhubung ke port input pertama. Untuk input dalam format URI MaxCompute, gunakan fungsi parse_odps_url yang 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/output1 dan /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 output1 dan output2 di 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.

      Penting

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

    Catatan

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

  1. Buat pipeline prediksi penyakit jantung dan buka desainer pipeline. Untuk informasi selengkapnya, lihat Prediksi penyakit jantung.

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

    Penting

    Library imblearn tidak termasuk dalam citra default. Anda harus mengonfigurasi imblearn di 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.

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

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

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

Catatan

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.

DAG图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

  1. Konfigurasikan variabel global.

    Di halaman pipeline Machine Learning Designer, klik area kanvas kosong dan konfigurasikan tab Global Variables di sebelah kanan.image.png

  2. 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.image.png

    • 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)