Condividi tramite


Eseguire il componente Script Python

Questo articolo descrive il componente Esegui script Python nella finestra di progettazione di Azure Machine Learning.

Usare questo componente per eseguire il codice Python. Per altre informazioni sull'architettura e sui principi di progettazione di Python, vedere come eseguire il codice Python nella finestra di progettazione di Azure Machine Learning.

Con Python è possibile eseguire attività che i componenti esistenti non supportano, ad esempio:

  • Visualizzazione dei dati tramite matplotlib.
  • Uso delle librerie Python per enumerare set di dati e modelli nell'area di lavoro.
  • Lettura, caricamento e modifica dei dati da origini non supportate dal componente Importa dati .
  • Eseguire il proprio codice di Deep Learning.

Pacchetti Python supportati

Azure Machine Learning usa la distribuzione Anaconda di Python, che include molte utilità comuni per l'elaborazione dei dati. La versione di Anaconda verrà aggiornata automaticamente. La versione corrente è:

  • Distribuzione di Anaconda 4.5+ per Python 3.6

Per un elenco completo, vedere la sezione Pacchetti Python preinstallati.

Per installare pacchetti non inclusi nell'elenco preinstallato (ad esempio scikit-misc), aggiungere il codice seguente allo script:

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

Usare il codice seguente per installare i pacchetti per prestazioni migliori, in particolare per l'inferenza:

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

Nota

Se la pipeline contiene più componenti Execute Python Script che richiedono pacchetti che non sono inclusi nell'elenco preinstallato, installare i pacchetti in ogni componente.

Avviso

Il componente Script Python di excute non supporta l'installazione di pacchetti che dipendono da librerie native aggiuntive con comandi come "apt-get", ad esempio Java, PyODBC e così via. Questo perché questo componente viene eseguito in un ambiente semplice con Python preinstallato e con autorizzazione non amministratore.

Accesso all'area di lavoro corrente e ai set di dati registrati

È possibile fare riferimento al codice di esempio seguente per accedere ai set di dati registrati nell'area di lavoro:

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,

Caricare file

Il componente Execute Python Script supporta il caricamento di file usando Azure Machine Learning Python SDK.

L'esempio seguente illustra come caricare un file di immagine nel componente Esegui script 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,

Al termine dell'esecuzione della pipeline, è possibile visualizzare in anteprima l'immagine nel pannello destro del componente.

Anteprima dell'immagine caricata

È anche possibile caricare il file in qualsiasi archivio dati usando il codice seguente. È possibile visualizzare in anteprima solo il file nell'account di archiviazione.

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,

Come configurare Execute Python Script

Il componente Execute Python Script (Esegui script Python) contiene codice Python di esempio che è possibile usare come punto di partenza. Per configurare il componente Esegui script Python, specificare un set di input e codice Python da eseguire nella casella di testo Script Python.

  1. Aggiungere il componente Execute Python Script (Esegui script Python) alla pipeline.

  2. Aggiungere e connettersi a Dataset1 qualsiasi set di dati dalla finestra di progettazione che si vuole usare per l'input. Fare riferimento a questo set di dati nello script Python come DataFrame1.

    L'uso di un set di dati è facoltativo. Usarlo se si vuole generare dati usando Python o usare il codice Python per importare i dati direttamente nel componente.

    Questo componente supporta l'aggiunta di un secondo set di dati in Dataset2. Fare riferimento al secondo set di dati nello script Python come DataFrame2.

    I set di dati archiviati in Azure Machine Learning vengono convertiti automaticamente in frame di dati pandas quando vengono caricati con questo componente.

    Mappa di input di Execute Python

  3. Per includere nuovi pacchetti o codice Python, connettere il file compresso che contiene queste risorse personalizzate alla porta del bundle script. In alternativa, se lo script è maggiore di 16 KB, usare la porta bundle di script per evitare errori come CommandLine supera il limite di 16597 caratteri.

    1. Aggregare lo script e altre risorse personalizzate a un file ZIP.
    2. Caricare il file ZIP come set di dati di file nello studio.
    3. Trascinare il componente del set di dati dall'elenco Set di dati nel riquadro del componente sinistro nella pagina di creazione della finestra di progettazione.
    4. Connettere il componente del set di dati alla porta bundle script del componente Execute Python Script (Esegui script Python).

    Qualsiasi file contenuto nell'archivio compresso caricato può essere usato durante l'esecuzione della pipeline. Se l'archivio include una struttura di directory, la struttura viene mantenuta.

    Importante

    Usare un nome univoco e significativo per i file nel bundle di script, perché alcune parole comuni (ad esempio teste app così via) sono riservate ai servizi predefiniti.

    Di seguito è riportato un esempio di bundle di script, che contiene un file script Python e un file txt:

    Esempio di bundle di script

    Di seguito è riportato il contenuto di my_script.py:

    def my_func(dataframe1):
        return dataframe1
    

    Di seguito è riportato il codice di esempio che illustra come usare i file nel bundle di script:

    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. Nella casella di testo Script Python digitare o incollare uno script Python valido.

    Nota

    Prestare attenzione quando si scrive lo script. Assicurarsi che non siano presenti errori di sintassi, ad esempio l'uso di variabili non dichiarate o componenti o funzioni non importanti. Prestare particolare attenzione all'elenco dei componenti preinstallati. Per importare componenti non elencati, installare i pacchetti corrispondenti nello script, ad esempio:

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

    La casella di testo script Python è prepopolata con alcune istruzioni nei commenti e codice di esempio per l'accesso ai dati e l'output. È necessario modificare o sostituire questo codice. Seguire le convenzioni python per il rientro e la combinazione di maiuscole e minuscole:

    • Lo script deve contenere una funzione denominata azureml_main come punto di ingresso per questo componente.
    • La funzione del punto di ingresso deve avere due argomenti Param<dataframe1> di input e Param<dataframe2>, anche quando questi argomenti non vengono usati nello script.
    • I file compressi connessi alla terza porta di input vengono decompressi e archiviati nella directory .\Script Bundle, che viene aggiunto anche a Python sys.path.

    Se il file .zip contiene mymodule.py, importarlo usando import mymodule.

    È possibile restituire due set di dati alla finestra di progettazione, che deve essere una sequenza di tipo pandas.DataFrame. È possibile creare altri output nel codice Python e scriverli direttamente nell'archiviazione di Azure.

    Avviso

    Non è consigliabile connettersi a un database o ad altre risorse di archiviazione esterne nel componente Esegui script Python. È possibile usare il componente Import Data (Importa dati) ed Export Data (Esporta dati)

  5. Inviare la pipeline.

    Se il componente è stato completato, controllare l'output se previsto.

    Se il componente non è riuscito, è necessario eseguire alcune operazioni di risoluzione dei problemi. Selezionare il componente e aprire Output+log nel riquadro destro. Aprire 70_driver_log.txt e cercare in azureml_main, quindi è possibile trovare la riga che ha causato l'errore. Ad esempio, "File "/tmp/tmp01_ID/user_script.py", riga 17, in azureml_main" indica che l'errore si è verificato nella riga 17 dello script Python.

Risultati

I risultati di tutti i calcoli dal codice Python incorporato devono essere forniti come pandas.DataFrame, che viene convertito automaticamente nel formato del set di dati di Azure Machine Learning. È quindi possibile usare i risultati con altri componenti nella pipeline.

Il componente restituisce due set di dati:

  • Results Dataset 1, definito dal primo frame di dati pandas restituito in uno script Python.

  • Result Dataset 2, definito dal secondo frame di dati pandas restituito in uno script Python.

Pacchetti Python preinstallati

I pacchetti preinstallati sono:

  • 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
  • sbilanciato-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
  • pirsistent==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

Passaggi successivi

Vedere il set di componenti disponibili per Azure Machine Learning.