Wykonywanie składnika skryptu języka Python

W tym artykule opisano składnik Execute Python Script w projektancie usługi Azure Machine Learning.

Użyj tego składnika, aby uruchomić kod języka Python. Aby uzyskać więcej informacji na temat architektury i zasad projektowania języka Python, zobacz , jak uruchamiać kod języka Python w projektancie usługi Azure Machine Learning.

Za pomocą języka Python można wykonywać zadania, które nie są obsługiwane przez istniejące składniki, takie jak:

  • Wizualizowanie danych przy użyciu polecenia matplotlib.
  • Wyliczanie zestawów danych i modeli w obszarze roboczym przy użyciu bibliotek języka Python.
  • Odczytywanie, ładowanie i manipulowanie danymi ze źródeł, których składnik Import Data nie obsługuje.
  • Uruchamianie własnego kodu uczenia głębokiego.

Obsługiwane pakiety języka Python

Usługa Azure Machine Learning korzysta z dystrybucji Anaconda języka Python, która obejmuje wiele typowych narzędzi do przetwarzania danych. Automatycznie zaktualizujemy wersję środowiska Anaconda. Bieżąca wersja to:

  • Dystrybucja anaconda 4.5+ dla języka Python 3.6

Aby uzyskać pełną listę, zobacz sekcję Preinstalled Python packages (Preinstalowane pakiety języka Python).

Aby zainstalować pakiety, które nie znajdują się na liście preinstalowanej (na przykład scikit-misc), dodaj następujący kod do skryptu:

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

Użyj następującego kodu, aby zainstalować pakiety w celu uzyskania lepszej wydajności, szczególnie w przypadku wnioskowania:

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

Uwaga

Jeśli potok zawiera wiele składników Execute Python Script, które wymagają pakietów, które nie znajdują się na liście preinstalowanej, zainstaluj pakiety w każdym składniku.

Ostrzeżenie

Składnik Excute Python Script nie obsługuje instalowania pakietów, które są zależne od dodatkowych bibliotek natywnych z poleceniem takim jak "apt-get", takim jak Java, PyODBC itp. Jest to spowodowane tym, że ten składnik jest wykonywany w prostym środowisku ze wstępnie zainstalowanym językiem Python i z uprawnieniami innych niż administrator.

Dostęp do bieżącego obszaru roboczego i zarejestrowanych zestawów danych

Aby uzyskać dostęp do zarejestrowanych zestawów danych w obszarze roboczym, możesz odwołać się do następującego przykładowego kodu:

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,

Przekazywanie plików

Składnik Execute Python Script (Wykonywanie skryptu języka Python) obsługuje przekazywanie plików przy użyciu zestawu SDK języka Python usługi Azure Machine Learning.

W poniższym przykładzie pokazano, jak przekazać plik obrazu w składniku Execute Python Script (Wykonywanie skryptu języka 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,

Po zakończeniu przebiegu potoku możesz wyświetlić podgląd obrazu w prawym panelu składnika.

Podgląd przekazanego obrazu

Możesz również przekazać plik do dowolnego magazynu danych przy użyciu następującego kodu. Podgląd pliku można wyświetlić tylko na koncie magazynu.

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,

Jak skonfigurować wykonywanie skryptu języka Python

Składnik Execute Python Script (Wykonywanie skryptu języka Python) zawiera przykładowy kod języka Python, którego można użyć jako punktu początkowego. Aby skonfigurować składnik Execute Python Script (Wykonywanie skryptu języka Python), podaj zestaw danych wejściowych i kod języka Python do uruchomienia w polu tekstowym skryptu języka Python .

  1. Dodaj składnik Execute Python Script (Wykonywanie skryptu języka Python ) do potoku.

  2. Dodaj zestaw danych Dataset1 i nawiąż połączenie z nimi wszystkie zestawy danych z projektanta, których chcesz użyć do wprowadzania danych. Odwoływanie się do tego zestawu danych w skryscie języka Python jako elementu DataFrame1.

    Użycie zestawu danych jest opcjonalne. Użyj go, jeśli chcesz wygenerować dane przy użyciu języka Python lub użyć kodu języka Python do zaimportowania danych bezpośrednio do składnika.

    Ten składnik obsługuje dodanie drugiego zestawu danych w zestawie danych Dataset2. Odwoływanie się do drugiego zestawu danych w skryscie języka Python jako elementu DataFrame2.

    Zestawy danych przechowywane w usłudze Azure Machine Learning są automatycznie konwertowane na ramki danych biblioteki pandas podczas ładowania z tym składnikiem.

    Wykonywanie mapy danych wejściowych języka Python

  3. Aby dołączyć nowe pakiety języka Python lub kod, połącz spakowany plik zawierający te zasoby niestandardowe z portem pakietu skryptu . Jeśli skrypt jest większy niż 16 KB, użyj portu pakietu skryptów , aby uniknąć błędów, takich jak wiersz polecenia przekracza limit 16597 znaków.

    1. Spakuj skrypt i inne zasoby niestandardowe do pliku zip.
    2. Przekaż plik zip jako zestaw danych plików do studia.
    3. Przeciągnij składnik zestawu danych z listy Zestawy danych w okienku składników po lewej stronie na stronie tworzenia projektanta.
    4. Połącz składnik zestawu danych z portem pakietu skryptów składnika Wykonaj skrypt języka Python .

    Podczas wykonywania potoku można użyć dowolnego pliku zawartego w przekazanym archiwum zip. Jeśli archiwum zawiera strukturę katalogów, struktura zostanie zachowana.

    Ważne

    Użyj unikatowej i znaczącej nazwy plików w pakiecie skryptów, ponieważ niektóre typowe słowa (takie jak test, app itp.) są zarezerwowane dla wbudowanych usług.

    Poniżej znajduje się przykład pakietu skryptów, który zawiera plik skryptu języka Python i plik txt:

    Przykład pakietu skryptów

    Poniżej znajduje się zawartość elementu my_script.py:

    def my_func(dataframe1):
        return dataframe1
    

    Poniżej przedstawiono przykładowy kod pokazujący sposób korzystania z plików w pakiecie skryptów:

    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. W polu tekstowym Skrypt języka Python wpisz lub wklej prawidłowy skrypt języka Python.

    Uwaga

    Podczas pisania skryptu należy zachować ostrożność. Upewnij się, że nie ma żadnych błędów składniowych, takich jak używanie niezdecydowanych zmiennych lub nieimportowanych składników lub funkcji. Zwróć szczególną uwagę na listę wstępnie zainstalowanych składników. Aby zaimportować składniki, których nie ma na liście, zainstaluj odpowiednie pakiety w skry skrycie, takie jak:

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

    Pole tekstowe skryptu języka Python jest wstępnie wypełniane instrukcjami w komentarzach i przykładowym kodem na potrzeby dostępu do danych i danych wyjściowych. Musisz edytować lub zastąpić ten kod. Postępuj zgodnie z konwencjami języka Python dotyczącymi wcięcia i wielkości liter:

    • Skrypt musi zawierać funkcję o nazwie azureml_main jako punkt wejścia dla tego składnika.
    • Funkcja punktu wejścia musi mieć dwa argumenty wejściowe, a Param<dataframe2>nawet wtedy, Param<dataframe1> gdy te argumenty nie są używane w skrycie.
    • Spakowane pliki połączone z trzecim portem wejściowym są rozpakowane i przechowywane w katalogu .\Script Bundle, który jest również dodawany do języka Python sys.path.

    Jeśli plik .zip zawiera mymodule.pyplik , zaimportuj go przy użyciu polecenia import mymodule.

    Do projektanta można zwrócić dwa zestawy danych, które muszą być sekwencją typu pandas.DataFrame. Możesz tworzyć inne dane wyjściowe w kodzie języka Python i zapisywać je bezpośrednio w usłudze Azure Storage.

    Ostrzeżenie

    Nie zaleca się nawiązywania połączenia z bazą danych lub innymi magazynami zewnętrznymi w składniku Wykonywanie skryptu języka Python. Możesz użyć składnika Importuj dane i składnika Eksportuj dane

  5. Prześlij potok.

    Jeśli składnik zostanie ukończony, sprawdź dane wyjściowe, jeśli są zgodnie z oczekiwaniami.

    Jeśli składnik nie powiedzie się, należy wykonać pewne kroki rozwiązywania problemów. Wybierz składnik i otwórz pozycję Dane wyjściowe i dzienniki w okienku po prawej stronie. Otwórz 70_driver_log.txt i wyszukaj w azureml_main, a następnie możesz znaleźć, który wiersz spowodował błąd. Na przykład "Plik "/tmp/tmp01_ID/user_script.py", wiersz 17 w azureml_main" wskazuje, że błąd wystąpił w wierszu 17 skryptu języka Python.

Wyniki

Wyniki wszystkich obliczeń za pomocą osadzonego kodu w języku Python muszą być podane jako pandas.DataFrame, który jest automatycznie konwertowany na format zestawu danych usługi Azure Machine Learning. Następnie możesz użyć wyników z innymi składnikami w potoku.

Składnik zwraca dwa zestawy danych:

  • Zestaw danych wyników 1 zdefiniowany przez pierwszą zwróconą ramkę danych biblioteki pandas w skryscie języka Python.

  • Result Dataset 2 ( Zestaw danych 2) zdefiniowany przez drugą zwróconą ramkę danych biblioteki pandas w skryscie języka Python.

Wstępnie zainstalowane pakiety języka Python

Wstępnie zainstalowane pakiety to:

  • 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
  • Kryptografia==2.8
  • cycler==0.10.0
  • koper==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
  • niezrównoważony-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

Następne kroki

Zobacz zestaw składników dostępnych dla usługi Azure Machine Learning.