All Products
Search
Document Center

Platform For AI:Skrip Python

Last Updated:Mar 25, 2026

Instal paket dependensi dan jalankan fungsi Python kustom menggunakan komponen Skrip Python di Machine Learning Designer.

Lokasi komponen

Skrip Python berada di folder UserDefinedScript dalam daftar komponen Machine Learning Designer.

Prasyarat

  • Berikan izin yang diperlukan untuk Deep Learning Containers (DLC). Untuk informasi selengkapnya, lihat Ketergantungan dan otorisasi layanan cloud: DLC.

  • Komponen Skrip Python dijalankan pada sumber daya komputasi DLC. Kaitkan sumber daya komputasi DLC dengan ruang kerja Anda. Untuk informasi selengkapnya, lihat Mengelola ruang kerja.

  • Komponen Skrip Python menyimpan kode di Object Storage Service (OSS). Buat bucket OSS. Untuk informasi selengkapnya, lihat Membuat bucket.

    Penting

    Bucket OSS harus berada di wilayah yang sama dengan Machine Learning Designer dan DLC.

  • Pengguna RAM yang akan menggunakan komponen ini harus memiliki peran Algorithm Development di ruang kerja Anda. Untuk informasi selengkapnya, lihat Mengelola anggota ruang kerja. Jika pengguna RAM juga perlu menggunakan MaxCompute sebagai sumber data, berikan peran MaxCompute Developer.

Konfigurasi komponen

  • Port input

    Komponen Skrip Python memiliki empat port input. Hubungkan ke data dari path OSS atau tabel MaxCompute.

    • Input path OSS

      Input dari path OSS komponen hulu dipasang ke node tempat skrip Python dijalankan. Sistem secara otomatis meneruskan path file yang dipasang sebagai argumen. Misalnya, --input1 /ml/input/data/input1 menentukan path untuk port input pertama. Di skrip Anda, baca file yang dipasang dari /ml/input/data/input1 seolah-olah itu file lokal.

    • Input tabel MaxCompute

      Input tabel MaxCompute tidak dipasang. Sebagai gantinya, sistem secara otomatis meneruskan informasi tabel ke skrip sebagai argumen URI. Misalnya, python main.py --input1 odps://some-project-name/tables/table menunjukkan tabel MaxCompute untuk port input pertama. Untuk input berbasis URI, gunakan fungsi parse_odps_url dari templat kode komponen untuk mengurai metadata seperti ProjectName, TableName, dan Partition. Untuk informasi selengkapnya, lihat Contoh penggunaan.

  • Port output

    Komponen Skrip Python memiliki empat port output. OSS Output Port 1 dan OSS Output Port 2 digunakan untuk output path OSS. Table Output Port 1 dan Table Output Port 2 digunakan untuk output tabel MaxCompute.

    • Output path OSS

      Path OSS yang dikonfigurasi untuk parameter Job output path pada tab Code Config secara otomatis dipasang ke /ml/output/. Port output OSS Output Port 1 dan OSS Output Port 2 komponen masing-masing berkorespondensi dengan subdirektori /ml/output/output1 dan /ml/output/output2. Di skrip Anda, tulis file yang perlu diteruskan ke komponen hilir ke direktori-direktori ini seolah-olah itu file lokal.

    • Output tabel MaxCompute

      Jika ruang kerja saat ini dikonfigurasi dengan proyek MaxCompute, sistem akan 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 tabel sementara tersebut, tulis data yang diproses oleh skrip Python ke tabel ini, lalu teruskan tabel tersebut ke komponen hilir melalui koneksi komponen. Untuk informasi selengkapnya, lihat contoh di bawah.

  • Parameter

    Code Config

    Parameter

    Deskripsi

    Job output path

    Path OSS untuk output pekerjaan.

    • Direktori OSS yang dikonfigurasi dipasang ke path /ml/output/ di kontainer pekerjaan. Data yang ditulis ke path /ml/output/ dipertahankan ke direktori OSS yang sesuai.

    • Port output komponen OSS Output-1 dan OSS Output-2 masing-masing berkorespondensi dengan subpath output1 dan output2 di path /ml/output/. Ketika port output OSS komponen 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 OSS ini. Nama file default untuk kode Python adalah main.py.

      Penting

      Sebelum Anda mengklik Save untuk pertama kalinya, pastikan bahwa path OSS yang ditentukan tidak berisi file dengan nama yang sama. Jika tidak, file yang ada akan ditimpa.

    • Editor kode Python: Editor kode menyediakan kode contoh secara default. Untuk informasi selengkapnya, lihat 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. Parameter ini memiliki prioritas lebih tinggi daripada cabang. Jika Anda menentukan parameter ini, pengaturan cabang akan diabaikan.

    • Git username: Diperlukan jika Anda perlu mengakses repositori pribadi.

    • Git access token: Diperlukan untuk mengakses repositori kode pribadi. Untuk informasi selengkapnya, lihat Lampiran: Mendapatkan token akun GitHub.

    Select code source

    • Select code source repositories: Pilih konfigurasi kode yang telah dibuat. Untuk informasi selengkapnya, lihat Konfigurasi kode.

    • Code branch: Cabang kode. Nilai default adalah master.

    • Code commit: ID commit. Parameter ini memiliki prioritas lebih tinggi daripada cabang. Jika Anda menentukan parameter ini, pengaturan cabang akan diabaikan.

    Select OSS path

    Di bidang OSS Code Path, pilih path tempat kode diunggah.

    Command

    Perintah untuk dieksekusi, seperti python main.py.

    Catatan

    Sistem secara otomatis menghasilkan perintah eksekusi berdasarkan nama skrip dan koneksi port komponen. Tidak diperlukan konfigurasi manual.

    Advanced option

    • Third-party dependencies: Tentukan library pihak ketiga yang akan diinstal menggunakan format 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 container monitoring: Setelah Anda memilih opsi ini, kotak teks konfigurasi akan muncul. Tentukan parameter untuk pemantauan toleransi kesalahan di kotak teks tersebut.

    Run Config

    Parameter

    Deskripsi

    Select Resource Group

    Pilih kelompok sumber daya DLC publik :

    • Jika Anda memilih kelompok sumber daya publik, konfigurasikan parameter InstanceType. Pilih instans CPU atau GPU. Nilai default adalah ecs.c6.large.

    Secara default, kelompok sumber daya default untuk sumber daya cloud-native DLC di ruang kerja saat ini digunakan.

    VPC Settings

    Pilih Virtual Private Cloud (VPC) yang sudah ada.

    Security Group

    Pilih grup keamanan 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 open-source versi 1.6.0. Jika Anda perlu menggunakan framework pembelajaran mendalam, ubah image tersebut.

    • Job type: Ubah parameter ini hanya jika kode yang Anda kirimkan diimplementasikan untuk eksekusi terdistribusi. Nilai yang didukung adalah:

      • XGBoost/LightGBM Job

      • TensorFlow Job

      • PyTorch Job

      • MPI Job

Contoh penggunaan

Kode contoh default

Komponen Skrip Python menyediakan kode contoh berikut secara default.

import os
import argparse
import json
"""
Kode contoh untuk komponen Skrip Python
"""
# 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 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: 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: Tulis 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. Untuk informasi selengkapnya tentang cara memperoleh Pasangan Kunci Akses, lihat Memperoleh 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: Rangkai dengan komponen lain

Contoh ini memodifikasi templat prediksi penyakit jantung untuk menunjukkan cara menggunakan komponen Skrip Python bersama dengan komponen Machine Learning Designer lainnya.组合使用Konfigurasi pipeline:

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

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

    Penting

    Library imblearn tidak termasuk dalam image. Tambahkan imblearn di bidang Third-party dependencies pada tab Code Config. Library tersebut 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 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> dalam kode dengan AccessKeyId dan AccessKeySecret Anda sendiri. Untuk informasi selengkapnya tentang cara memperoleh Pasangan Kunci Akses, lihat Memperoleh Pasangan Kunci Akses.

  3. Hubungkan komponen SMOTE di hilir komponen Split. Komponen ini menggunakan algoritma SMOTE untuk oversampling data pelatihan, 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 model di cabang kiri untuk perbandingan berdampingan. Setelah komponen berhasil dijalankan, klik ikon visualisasi (可视化) untuk melihat hasil evaluasi akhir.评估结果

    Oversampling tambahan tidak secara signifikan meningkatkan kinerja model, yang menunjukkan bahwa distribusi sampel asli dan model tersebut sudah efektif.

Contoh 2: Mengatur pekerjaan DLC

Hubungkan beberapa komponen Skrip Python di Machine Learning Designer untuk mengatur dan menjadwalkan pipeline pekerjaan DLC. Gambar berikut menunjukkan contoh memulai empat pekerjaan DLC yang diatur dalam Directed Acyclic Graph (DAG) untuk mengontrol urutan eksekusinya.

Catatan

Jika kode eksekusi untuk pekerjaan DLC tidak perlu membaca data dari node hulu atau meneruskan data ke node hilir, koneksi antar node hanya merepresentasikan dependensi penjadwalan dan urutan eksekusi.

DAG图Terapkan seluruh pipeline yang dikembangkan di Machine Learning Designer ke DataWorks untuk eksekusi terjadwal. Untuk informasi selengkapnya, lihat Gunakan DataWorks untuk menjadwalkan pipeline Machine Learning Designer guna eksekusi offline.

Contoh 3: Meneruskan variabel global

  1. Konfigurasikan variabel global.

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

  2. Teruskan variabel global yang dikonfigurasi ke komponen Skrip Python dengan salah satu dari dua cara berikut.

    • Klik node komponen Skrip Python. Di panel kanan, pada tab Code Config, pilih Advanced option dan konfigurasikan variabel global sebagai parameter masuk di bidang Command.image.png

    • Modifikasi kode Python untuk mengurai argumen menggunakan argparse.

      Kode Python yang diperbarui adalah sebagai berikut. Kode ini menggunakan variabel global yang dikonfigurasi pada langkah 1 sebagai contoh. Perbarui kode sesuai dengan variabel global Anda yang sebenarnya. Ganti kode di area pengeditan kode pada tab Code Config node komponen Skrip Python.

      import os
      
      import argparse
      import json
      
      """
      Kode contoh untuk komponen Skrip Python
      """
      
      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)