Python Betiği bileşenini yürütme

Bu makalede, Azure Machine Learning tasarımcısında Python Betiği Yürütme bileşeni açıklanmaktadır.

Python kodunu çalıştırmak için bu bileşeni kullanın. Python'ın mimarisi ve tasarım ilkeleri hakkında daha fazla bilgi için bkz. Azure Machine Learning tasarımcısında Python kodunu çalıştırma.

Python ile mevcut bileşenlerin desteklemediği görevleri gerçekleştirebilirsiniz, örneğin:

  • kullanarak matplotlibverileri görselleştirme.
  • Çalışma alanınızdaki veri kümelerini ve modelleri listelemek için Python kitaplıklarını kullanma.
  • Verileri İçeri Aktar bileşeninin desteklemediği kaynaklardan verileri okuma, yükleme ve işleme.
  • Kendi derin öğrenme kodunuzu çalıştırın.

Desteklenen Python paketleri

Azure Machine Learning, veri işlemeye yönelik birçok yaygın yardımcı program içeren Python Anaconda dağıtımını kullanır. Anaconda sürümünü otomatik olarak güncelleştireceğiz. Geçerli sürüm:

  • Python 3.6 için Anaconda 4.5+ dağıtımı

Tam liste için Önceden yüklenmiş Python paketleri bölümüne bakın.

Önceden yüklenmiş listede olmayan paketleri (örneğin, scikit-misc) yüklemek için betiğinize aşağıdaki kodu ekleyin:

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

Özellikle çıkarım amacıyla daha iyi performans için paketleri yüklemek için aşağıdaki kodu kullanın:

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

Not

İşlem hattınız önceden yüklenmiş listede olmayan paketlere ihtiyaç duyan birden çok Python Betiği Yürütme bileşeni içeriyorsa, paketleri her bileşene yükleyin.

Uyarı

Excute Python Betiği bileşeni Java, PyODBC vb. gibi "apt-get" gibi komutlarla fazladan yerel kitaplıklara bağımlı paketlerin yüklenmesini desteklemez. Bunun nedeni, bu bileşenin yalnızca Python önceden yüklenmiş ve yönetici olmayan izinlere sahip basit bir ortamda yürütülmesidir.

Geçerli çalışma alanına ve kayıtlı veri kümelerine erişim

Çalışma alanınızdaki kayıtlı veri kümelerine erişmek için aşağıdaki örnek koda başvurabilirsiniz:

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,

Dosyaları karşıya yükleme

Python Betiği Yürüt bileşeni , Azure Machine Learning Python SDK'sını kullanarak dosyaların karşıya yüklenmesini destekler.

Aşağıdaki örnekte Python Betiği Yürüt bileşeninde bir görüntü dosyasının nasıl karşıya yüklendiği gösterilmektedir:


# 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,

İşlem hattı çalıştırması tamamlandıktan sonra, bileşenin sağ panelinde resmin önizlemesini görüntüleyebilirsiniz.

Karşıya yüklenen görüntünün önizlemesi

Aşağıdaki kodu kullanarak dosyayı herhangi bir veri deposuna da yükleyebilirsiniz. Dosyanın önizlemesini yalnızca depolama hesabınızda görebilirsiniz.

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,

Python Betiğini Yürütmeyi yapılandırma

Python Betiği Yürüt bileşeni, başlangıç noktası olarak kullanabileceğiniz örnek Python kodu içerir. Python Betiği Yürüt bileşenini yapılandırmak için Python betiği metin kutusunda çalıştırılacak bir dizi giriş ve Python kodu sağlayın.

  1. python betiği yürüt bileşenini işlem hattınıza ekleyin.

  2. Giriş için kullanmak istediğiniz tasarımcı veri kümelerini Dataset1'e ekleyin ve bağlayın. Python betiğinizde bu veri kümesine DataFrame1 olarak başvurun.

    Veri kümesinin kullanımı isteğe bağlıdır. Python kullanarak veri oluşturmak istiyorsanız bunu kullanın veya python kodunu kullanarak verileri doğrudan bileşene aktarın.

    Bu bileşen , Dataset2'ye ikinci bir veri kümesinin eklenmesini destekler. Python betiğinizdeki ikinci veri kümesine DataFrame2 olarak başvurun.

    Azure Machine Learning'de depolanan veri kümeleri, bu bileşenle birlikte yüklendiğinde otomatik olarak pandas veri çerçevelerine dönüştürülür.

    Python giriş eşlemesi yürütme

  3. Yeni Python paketleri veya kodu eklemek için bu özel kaynakları içeren sıkıştırılmış dosyayı Betik paketi bağlantı noktasına bağlayın. Betiğiniz 16 KB'tan büyükse, CommandLine'ın 16597 karakter sınırını aşması gibi hataları önlemek için Betik Paketi bağlantı noktasını kullanın.

    1. Betiği ve diğer özel kaynakları zip dosyası olarak paketleyin.
    2. Zip dosyasını Dosya Veri Kümesi olarak stüdyoya yükleyin.
    3. Veri kümesi bileşenini tasarımcı yazma sayfasının sol bileşen bölmesindeki Veri Kümeleri listesinden sürükleyin.
    4. Veri kümesi bileşenini Python Betiği Yürütme bileşeninin Betik Paketi bağlantı noktasına bağlayın.

    Karşıya yüklenen sıkıştırılmış arşivde bulunan tüm dosyalar işlem hattı yürütmesi sırasında kullanılabilir. Arşiv bir dizin yapısı içeriyorsa, yapı korunur.

    Önemli

    Bazı yaygın sözcükler (, testapp vb.) yerleşik hizmetler için ayrıldığından lütfen betik paketindeki dosyalar için benzersiz ve anlamlı ad kullanın.

    Python betik dosyası ve txt dosyası içeren bir betik paketi örneği aşağıda verilmiştir:

    Betik paketi örneği

    içeriği aşağıdadır my_script.py:

    def my_func(dataframe1):
        return dataframe1
    

    Aşağıda betik paketindeki dosyaların nasıl tüketilir gösteren örnek kod verilmiştir:

    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. Python betiği metin kutusuna geçerli Python betiğini yazın veya yapıştırın.

    Not

    Betiğinizi yazarken dikkatli olun. Bildirilmeyen değişkenleri veya içeri aktarılmamış bileşenleri veya işlevleri kullanma gibi söz dizimi hataları olmadığından emin olun. Önceden yüklenmiş bileşen listesine fazla dikkat edin. Listelenmeyen bileşenleri içeri aktarmak için betiğinize karşılık gelen paketleri yükleyin, örneğin:

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

    Python betiği metin kutusu, açıklamalarda bazı yönergeler ve veri erişimi ve çıkışı için örnek kod ile önceden doldurulur. Bu kodu düzenlemeniz veya değiştirmeniz gerekir. Girintileme ve büyük/küçük harf takibi için Python kurallarını izleyin:

    • Betik, bu bileşenin giriş noktası olarak adlandırılan azureml_main bir işlev içermelidir.
    • Giriş noktası işlevinin, betiğinizde bu bağımsız değişkenler Param<dataframe1>Param<dataframe2>kullanılmasa bile ve olmak üzere iki giriş bağımsız değişkeni olmalıdır.
    • Üçüncü giriş bağlantı noktasına bağlı sıkıştırılmış dosyalar, python'a sys.pathda eklenen dizininde .\Script Bundlesıkıştırılmış ve depolanır.

    .zip dosyanız içeriyorsa mymodule.py, kullanarak import mymoduleiçeri aktar.

    Tasarımcıya iki veri kümesi döndürülebilir ve bu da türünde pandas.DataFramebir dizi olmalıdır. Python kodunuzda başka çıkışlar oluşturabilir ve bunları doğrudan Azure depolama alanına yazabilirsiniz.

    Uyarı

    Python Betiği Yürüt bileşenindeki bir Veritabanına veya diğer dış depolama birimlerine bağlanmak önerilmez. Veri İçeri Aktarma bileşenini ve Verileri Dışarı Aktar bileşenini kullanabilirsiniz

  5. İşlem hattını gönderin.

    Bileşen tamamlandıysa, çıktıyı beklendiği gibi denetleyin.

    Bileşen başarısız olursa bazı sorun giderme adımları uygulamanız gerekir. Bileşeni seçin ve sağ bölmede Outputs+logs tuşlarını açın. 70_driver_log.txt açın ve azureml_main'da arama yapın, ardından hataya hangi satırın neden olduğunu bulabilirsiniz. Örneğin, "Dosya "/tmp/tmp01_ID/user_script.py", satır 17, azureml_main", hatanın Python betiğinizin 17 satırında oluştuğuna işaret eder.

Sonuçlar

Katıştırılmış Python kodu tarafından gerçekleştirilen tüm hesaplamaların sonuçları olarak sağlanmalıdır pandas.DataFrameve bu da otomatik olarak Azure Machine Learning veri kümesi biçimine dönüştürülür. Ardından sonuçları işlem hattındaki diğer bileşenlerle kullanabilirsiniz.

Bileşen iki veri kümesi döndürür:

  • Sonuçlar Python betiğinde ilk döndürülen pandas veri çerçevesi tarafından tanımlanan Veri Kümesi 1.

  • Python betiğinde ikinci döndürülen pandas veri çerçevesi tarafından tanımlanan Sonuç Veri Kümesi 2.

Önceden yüklenmiş Python paketleri

Önceden yüklenmiş paketler şunlardır:

  • 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
  • şifreleme==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
  • dengesiz-öğrenme==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
  • altı==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

Sonraki adımlar

Azure Machine Learning'in kullanabileceği bileşenler kümesine bakın.