Menjalankan komponen Skrip Python

Artikel ini menjelaskan komponen Jalankan Skrip Python dalam perancang Azure Machine Learning.

Gunakan komponen ini untuk menjalankan kode Python. Untuk informasi selengkapnya tentang arsitektur dan prinsip desain Python, lihat cara menjalankan kode Python di desainer Azure Machine Learning.

Dengan Python, Anda dapat melakukan tugas-tugas yang komponennya tidak didukung, seperti:

  • Memvisualisasikan data menggunakan matplotlib.
  • Menggunakan pustaka Python untuk menghitung himpunan data dan model di ruang kerja Anda.
  • Membaca, memuat, dan memanipulasi data dari sumber yang tidak didukung oleh komponen Data Impor.
  • Jalankan kode pembelajaran mendalam Anda sendiri.

Paket Python yang didukung

Azure Machine Learning menggunakan distribusi Anaconda Python, yang mencakup banyak utilitas umum untuk pemrosesan data. Kita akan memperbarui versi Anaconda secara otomatis. Versi saat ini adalah:

  • Distribusi Anaconda 4.5+ untuk Python 3.6

Untuk daftar lengkapnya, lihat bagian Paket Python yang sudah dipasang sebelumnya.

Untuk memasang paket yang tidak ada dalam daftar yang sudah dipasang sebelumnya (misalnya, scikit-misc), tambahkan kode berikut ke skrip Anda:

import os
os.system(f"pip install scikit-misc")

Gunakan kode berikut untuk memasang paket untuk performa yang lebih baik, terutama untuk inferensi:

import importlib.util
package_name = 'scikit-misc'
spec = importlib.util.find_spec(package_name)
if spec is None:
    import os
    os.system(f"pip install scikit-misc")

Catatan

Jika alur Anda berisi beberapa komponen Jalankan Skrip Python yang memerlukan paket yang tidak ada dalam daftar yang sudah diinstal sebelumnya, instal paket di setiap komponen.

Peringatan

Komponen Jalankan Skrip Python tidak mendukung pemasangan paket yang bergantung pada pustaka asli tambahan dengan perintah seperti "apt-get", seperti Java, PyODBC dan lain-lain. Hal ini karena komponen ini dijalankan dalam lingkungan sederhana dengan Python pra-instal saja dan dengan izin non-admin.

Akses ke ruang kerja saat ini dan himpunan data terdaftar

Anda bisa merujuk ke kode sampel berikut untuk mengakses himpunan data terdaftar di ruang kerja Anda:

def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    print(f'Input pandas.DataFrame #1: {dataframe1}')
    from azureml.core import Run
    run = Run.get_context(allow_offline=True)
    #access to current workspace
    ws = run.experiment.workspace

    #access to registered dataset of current workspace
    from azureml.core import Dataset
    dataset = Dataset.get_by_name(ws, name='test-register-tabular-in-designer')
    dataframe1 = dataset.to_pandas_dataframe()
     
    # If a zip file is connected to the third input port,
    # it is unzipped under "./Script Bundle". This directory is added
    # to sys.path. Therefore, if your zip file contains a Python file
    # mymodule.py you can import it using:
    # import mymodule

    # Return value must be of a sequence of pandas.DataFrame
    # E.g.
    #   -  Single return value: return dataframe1,
    #   -  Two return values: return dataframe1, dataframe2
    return dataframe1,

Unggah file

Komponen Jalankan Skrip Python mendukung pengunggahan file dengan menggunakan SDK Python Azure Machine Learning.

Contoh berikut menunjukkan cara mengunggah file gambar di komponen Jalankan Skrip Python:


# The script MUST contain a function named azureml_main,
# which is the entry point for this component.

# Imports up here can be used to
import pandas as pd

# The entry point function must have two input arguments:
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    print(f'Input pandas.DataFrame #1: {dataframe1}')

    from matplotlib import pyplot as plt
    plt.plot([1, 2, 3, 4])
    plt.ylabel('some numbers')
    img_file = "line.png"
    plt.savefig(img_file)

    from azureml.core import Run
    run = Run.get_context(allow_offline=True)
    run.upload_file(f"graphics/{img_file}", img_file)

    # Return value must be of a sequence of pandas.DataFrame
    # For example:
    #   -  Single return value: return dataframe1,
    #   -  Two return values: return dataframe1, dataframe2
    return dataframe1,

Setelah eksekusi alur selesai, Anda dapat melihat pratinjau gambar di panel kanan komponen.

Pratinjau gambar yang diunggah

Anda juga dapat mengunggah file ke penyimpanan data apa pun menggunakan kode berikut. Anda hanya dapat melihat pratinjau file di akun penyimpanan Anda.

import pandas as pd

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be None.
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    print(f'Input pandas.DataFrame #1: {dataframe1}')

    from matplotlib import pyplot as plt
    import os

    plt.plot([1, 2, 3, 4])
    plt.ylabel('some numbers')
    img_file = "line.png"

    # Set path
    path = "./img_folder"
    os.mkdir(path)
    plt.savefig(os.path.join(path,img_file))

    # Get current workspace
    from azureml.core import Run
    run = Run.get_context(allow_offline=True)
    ws = run.experiment.workspace
    
    # Get a named datastore from the current workspace and upload to specified path
    from azureml.core import Datastore 
    datastore = Datastore.get(ws, datastore_name='workspacefilestore')
    datastore.upload(path)

    return dataframe1,

Cara mengonfigurasi Jalankan Skrip Python

Komponen Jalankan Skrip Python berisi contoh kode Python yang dapat Anda gunakan sebagai titik awal. Untuk mengonfigurasi komponen Jalankan Skrip Python, sediakan satu set input dan kode Python untuk dijalankan di kotak teks skrip Python.

  1. Tambahkan komponen Jalankan Skrip Python ke alur Anda.

  2. Tambahkan dan sambungkan pada Dataset1 setiap himpunan data dari desainer yang ingin Anda gunakan untuk input. Referensikan himpunan data ini dalam skrip Python Anda sebagai DataFrame1.

    Penggunaan himpunan data bersifat opsional. Gunakan jika Anda ingin membuat data menggunakan Python, atau menggunakan kode Python untuk mengimpor data langsung ke komponen.

    Komponen ini mendukung penambahan himpunan data kedua pada Dataset2. Referensi himpunan data kedua dalam skrip Python Anda sebagai DataFrame2.

    Himpunan data yang disimpan dalam Azure Machine Learning secara otomatis dikonversi ke bingkai data pandas ketika dimuat dengan komponen ini.

    Jalankan peta input Python

  3. Untuk menyertakan paket atau kode Python baru, sambungkan file zip yang berisi sumber daya khusus ini ke port Bundel skrip. Atau jika skrip Anda lebih besar dari 16 KB, gunakan port Bundel Skrip untuk menghindari kesalahan seperti CommandLine melebihi batas 16597 karakter.

    1. Gabungkan skrip dan sumber daya kustom lainnya ke file zip.
    2. Unggah file zip sebagai Himpunan Data File ke studio.
    3. Seret komponen himpunan data dari daftar Himpunan data di panel kiri komponen di halaman penulisan perancang.
    4. Hubungkan komponen himpunan data ke port Paket Skrip dari komponen Jalankan Skrip Python.

    File apa pun yang terdapat dalam arsip zip yang diunggah dapat digunakan selama eksekusi alur. Jika arsip menyertakan struktur direktori, struktur tersebut dipertahankan.

    Penting

    Harap gunakan nama yang unik dan bermakna untuk file dalam bundel skrip karena beberapa kata umum (seperti test, app, dan lain-lain) dicadangkan untuk layanan bawaan.

    Berikut ini adalah contoh bundel skrip, yang berisi file skrip python dan file txt:

    Contoh bundel skrip

    Berikut ini adalah isi dari my_script.py:

    def my_func(dataframe1):
        return dataframe1
    

    Berikut ini adalah contoh kode yang menunjukkan cara menggunakan file dalam bundel skrip:

    import pandas as pd
    from my_script import my_func
    
    def azureml_main(dataframe1 = None, dataframe2 = None):
    
        # Execution logic goes here
        print(f'Input pandas.DataFrame #1: {dataframe1}')
    
        # Test the custom defined Python function
        dataframe1 = my_func(dataframe1)
    
        # Test to read custom uploaded files by relative path
        with open('./Script Bundle/my_sample.txt', 'r') as text_file:
            sample = text_file.read()
    
        return dataframe1, pd.DataFrame(columns=["Sample"], data=[[sample]])
    
  4. Di kotak teks Skrip Python, ketik atau tempelkan skrip Python yang valid.

    Catatan

    Hati-hati saat menulis skrip Anda. Pastikan tidak ada kesalahan sintaks, seperti menggunakan variabel yang tidak dideklarasikan atau komponen atau fungsi yang tidak dilaporkan. Berikan perhatian ekstra pada daftar komponen yang sudah diinstal sebelumnya. Untuk mengimpor komponen yang tidak terdaftar, instal paket yang sesuai dalam skrip Anda, seperti:

    import os
    os.system(f"pip install scikit-misc")
    

    Kotak teks Skrip Python diisi sebelumnya dengan beberapa instruksi dalam komentar, dan contoh kode untuk akses dan output data. Anda harus mengedit atau mengganti kode ini. Ikuti konvensi Python untuk indentasi dan kapitalisasi:

    • Skrip harus berisi fungsi bernama azureml_main sebagai titik masuk untuk komponen ini.
    • Fungsi titik masuk harus memiliki dua argumen input, Param<dataframe1> dan Param<dataframe2>, meskipun argumen ini tidak digunakan dalam skrip Anda.
    • File zip yang terhubung ke port input ketiga akan diekstrak dan disimpan di direktori .\Script Bundle, yang juga ditambahkan ke Python sys.path.

    Jika file .zip Anda berisi mymodule.py, impor dengan menggunakan import mymodule.

    Dua himpunan data dapat dikembalikan ke perancang, yang harus berupa urutan jenis pandas.DataFrame. Anda dapat membuat output lain dalam kode Python Anda dan menulisnya langsung ke penyimpanan Azure.

    Peringatan

    Tidak disarankan untuk terhubung ke Database atau penyimpanan eksternal lainnya di komponen Jalankan Skrip Python. Anda dapat menggunakan komponen Data Impor dan komponen Data Ekspor

  5. Kirimkan alur.

    Jika komponen sudah selesai, periksa apakah outputnya sudah sesuai harapan.

    Jika komponen gagal, Anda perlu melakukan beberapa pemecahan masalah. Pilih komponen, dan buka Output+log di panel kanan. Buka 70_driver_log.txt dan telusuri di azureml_main, lalu Anda dapat menemukan baris mana yang menyebabkan kesalahan. Misalnya, "File "/tmp/tmp01_ID/user_script.py", baris 17, di azureml_main" menunjukkan bahwa kesalahan terjadi di baris 17 skrip Python Anda.

Hasil

Hasil perhitungan apa pun oleh kode Python yang disematkan harus diberikan sebagai pandas.DataFrame, yang secara otomatis dikonversi ke format himpunan data Azure Machine Learning. Anda kemudian dapat menggunakan hasilnya dengan komponen lain dalam alur.

Komponen menampilkan dua himpunan data:

  • Hasil Himpunan Data 1, ditentukan oleh bingkai data pandas pertama yang dikembalikan dalam skrip Python.

  • Hasil Himpunan Data 2, ditentukan oleh bingkai data pandas kedua yang dikembalikan dalam skrip Python.

Paket Python yang sudah dipasang sebelumnya

Paket yang sudah diinstal sebelumnya adalah:

  • adal==1.2.2
  • applicationinsights==0.11.9
  • attrs==19.3.0
  • azure-common==1.1.25
  • azure-core==1.3.0
  • azure-graphrbac==0.61.1
  • azure-identity==1.3.0
  • azure-mgmt-authorization==0.60.0
  • azure-mgmt-containerregistry==2.8.0
  • azure-mgmt-keyvault==2.2.0
  • azure-mgmt-resource==8.0.1
  • azure-mgmt-storage==8.0.0
  • azure-storage-blob==1.5.0
  • azure-storage-common==1.4.2
  • azureml-core==1.1.5.5
  • azureml-dataprep-native==14.1.0
  • azureml-dataprep==1.3.5
  • azureml-defaults==1.1.5.1
  • azureml-designer-classic-modules==0.0.118
  • azureml-designer-core==0.0.31
  • azureml-designer-internal==0.0.18
  • azureml-model-management-sdk==1.0.1b6.post1
  • azureml-pipeline-core==1.1.5
  • azureml-telemetry==1.1.5.3
  • backports.tempfile==1.0
  • backports.weakref==1.0.post1
  • boto3==1.12.29
  • botocore==1.15.29
  • cachetools==4.0.0
  • certifi==2019.11.28
  • cffi==1.12.3
  • chardet==3.0.4
  • click==7.1.1
  • cloudpickle==1.3.0
  • configparser==3.7.4
  • contextlib2==0.6.0.post1
  • cryptography==2.8
  • cycler==0.10.0
  • dill==0.3.1.1
  • distro==1.4.0
  • docker==4.2.0
  • docutils==0.15.2
  • dotnetcore2==2.1.13
  • flask==1.0.3
  • fusepy==3.0.1
  • gensim==3.8.1
  • google-api-core==1.16.0
  • google-auth==1.12.0
  • google-cloud-core==1.3.0
  • google-cloud-storage==1.26.0
  • google-resumable-media==0.5.0
  • googleapis-common-protos==1.51.0
  • gunicorn==19.9.0
  • idna==2.9
  • imbalanced-learn==0.4.3
  • isodate==0.6.0
  • itsdangerous==1.1.0
  • jeepney==0.4.3
  • jinja2==2.11.1
  • jmespath==0.9.5
  • joblib==0.14.0
  • json-logging-py==0.2
  • jsonpickle==1.3
  • jsonschema==3.0.1
  • kiwisolver==1.1.0
  • liac-arff==2.4.0
  • lightgbm==2.2.3
  • markupsafe==1.1.1
  • matplotlib==3.1.3
  • more-itertools==6.0.0
  • msal-extensions==0.1.3
  • msal==1.1.0
  • msrest==0.6.11
  • msrestazure==0.6.3
  • ndg-httpsclient==0.5.1
  • nimbusml==1.6.1
  • numpy==1.18.2
  • oauthlib==3.1.0
  • pandas==0.25.3
  • pathspec==0.7.0
  • pip==20.0.2
  • portalocker==1.6.0
  • protobuf==3.11.3
  • pyarrow==0.16.0
  • pyasn1-modules==0.2.8
  • pyasn1==0.4.8
  • pycparser==2.20
  • pycryptodomex==3.7.3
  • pyjwt==1.7.1
  • pyopenssl==19.1.0
  • pyparsing==2.4.6
  • pyrsistent==0.16.0
  • python-dateutil==2.8.1
  • pytz==2019.3
  • requests-oauthlib==1.3.0
  • requests==2.23.0
  • rsa==4.0
  • ruamel.yaml==0.15.89
  • s3transfer==0.3.3
  • scikit-learn==0.22.2
  • scipy==1.4.1
  • secretstorage==3.1.2
  • setuptools==46.1.1.post20200323
  • six==1.14.0
  • smart-open==1.10.0
  • urllib3==1.25.8
  • websocket-client==0.57.0
  • werkzeug==0.16.1
  • wheel==0.34.2

Langkah berikutnya

Lihat set komponen yang tersedia untuk Azure Machine Learning.