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.
È 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.
Aggiungere il componente Execute Python Script (Esegui script Python) alla pipeline.
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.
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.
- Aggregare lo script e altre risorse personalizzate a un file ZIP.
- Caricare il file ZIP come set di dati di file nello studio.
- 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.
- 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
test
eapp
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:
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]])
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 eParam<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 Pythonsys.path
.
Se il file .zip contiene
mymodule.py
, importarlo usandoimport 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)
- Lo script deve contenere una funzione denominata
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.