Executar componente Python Script
Este artigo descreve o componente Executar Script Python no designer do Azure Machine Learning.
Use este componente para executar o código Python. Para obter mais informações sobre a arquitetura e os princípios de design do Python, consulte como executar o código Python no designer do Azure Machine Learning.
Com o Python, você pode executar tarefas que os componentes existentes não suportam, como:
- Visualizando dados usando
matplotlib
o . - Usando bibliotecas Python para enumerar conjuntos de dados e modelos em seu espaço de trabalho.
- Leitura, carregamento e manipulação de dados de fontes que o componente Importar Dados não suporta.
- Execute seu próprio código de aprendizado profundo.
Pacotes Python suportados
O Azure Machine Learning usa a distribuição Anaconda do Python, que inclui muitos utilitários comuns para processamento de dados. Vamos atualizar a versão Anaconda automaticamente. A versão atual é:
- Distribuição Anaconda 4.5+ para Python 3.6
Para obter uma lista completa, consulte a seção Pacotes Python pré-instalados.
Para instalar pacotes que não estão na lista pré-instalada (por exemplo, scikit-misc), adicione o seguinte código ao script:
import os
os.system(f"pip install scikit-misc")
Use o código a seguir para instalar pacotes para obter melhor desempenho, especialmente para inferência:
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 o pipeline contiver vários componentes Execute Python Script que precisam de pacotes que não estão na lista pré-instalada, instale os pacotes em cada componente.
Aviso
O componente Excute Python Script não suporta a instalação de pacotes que dependem de bibliotecas nativas extras com comandos como "apt-get", como Java, PyODBC e etc. Isso ocorre porque esse componente é executado em um ambiente simples com Python pré-instalado apenas e com permissão de não-administrador.
Acesso ao espaço de trabalho atual e aos conjuntos de dados registrados
Você pode consultar o seguinte código de exemplo para acessar os conjuntos de dados registrados em seu espaço de trabalho:
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,
Carregar ficheiros
O componente Executar Script Python dá suporte ao carregamento de arquivos usando o SDK Python do Azure Machine Learning.
O exemplo a seguir mostra como carregar um arquivo de imagem no componente Execute Python Script:
# 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,
Depois que a execução do pipeline for concluída, você poderá visualizar a imagem no painel direito do componente.
Você também pode carregar o arquivo para qualquer armazenamento de dados usando o código a seguir. Só pode pré-visualizar o ficheiro na sua conta de armazenamento.
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,
Como configurar o Execute Python Script
O componente Execute Python Script contém código Python de exemplo que você pode usar como ponto de partida. Para configurar o componente Executar Script Python, forneça um conjunto de entradas e código Python para executar na caixa de texto Script Python.
Adicione o componente Execute Python Script ao seu pipeline.
Adicione e conecte em Dataset1 quaisquer conjuntos de dados do designer que você deseja usar para entrada. Faça referência a esse conjunto de dados em seu script Python como DataFrame1.
O uso de um conjunto de dados é opcional. Use-o se quiser gerar dados usando Python ou use código Python para importar os dados diretamente para o componente.
Este componente suporta a adição de um segundo conjunto de dados em Dataset2. Faça referência ao segundo conjunto de dados em seu script Python como DataFrame2.
Os conjuntos de dados armazenados no Azure Machine Learning são convertidos automaticamente em quadros de dados pandas quando carregados com este componente.
Para incluir novos pacotes ou código Python, conecte o arquivo compactado que contém esses recursos personalizados à porta do pacote Script. Ou se o script for maior que 16 KB, use a porta do pacote de scripts para evitar erros como CommandLine excede o limite de 16597 caracteres.
- Agrupe o script e outros recursos personalizados em um arquivo zip.
- Carregue o arquivo zip como um conjunto de dados de arquivo para o estúdio.
- Arraste o componente de conjunto de dados da lista Conjuntos de dados no painel de componentes esquerdo na página de criação do designer.
- Conecte o componente de conjunto de dados à porta Script Bundle do componente Execute Python Script .
Qualquer arquivo contido no arquivo compactado carregado pode ser usado durante a execução do pipeline. Se o arquivo incluir uma estrutura de diretórios, a estrutura será preservada.
Importante
Por favor, use um nome exclusivo e significativo para arquivos no pacote de scripts, já que algumas palavras comuns (como
test
,app
e etc) são reservadas para serviços internos.A seguir está um exemplo de pacote de script, que contém um arquivo de script Python e um arquivo txt:
Segue-se o conteúdo de
my_script.py
:def my_func(dataframe1): return dataframe1
A seguir está o código de exemplo mostrando como consumir os arquivos no pacote de scripts:
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]])
Na caixa de texto Script Python, digite ou cole script Python válido.
Nota
Tenha cuidado ao escrever seu roteiro. Verifique se não há erros de sintaxe, como o uso de variáveis não declaradas ou componentes ou funções não importados. Preste atenção extra à lista de componentes pré-instalados. Para importar componentes que não estão listados, instale os pacotes correspondentes em seu script, como:
import os os.system(f"pip install scikit-misc")
A caixa de texto do script Python é pré-preenchida com algumas instruções nos comentários e código de exemplo para acesso e saída de dados. Você deve editar ou substituir esse código. Siga as convenções Python para recuo e invólucro:
- O script deve conter uma função nomeada
azureml_main
como o ponto de entrada para este componente. - A função de ponto de entrada deve ter dois argumentos
Param<dataframe1>
de entrada eParam<dataframe2>
, mesmo quando esses argumentos não são usados em seu script. - Os arquivos compactados conectados à terceira porta de entrada são descompactados e armazenados no diretório
.\Script Bundle
, que também é adicionado ao Pythonsys.path
.
Se o arquivo .zip contiver
mymodule.py
, importe-o usandoimport mymodule
.Dois conjuntos de dados podem ser retornados ao designer, que deve ser uma sequência do tipo
pandas.DataFrame
. Você pode criar outras saídas em seu código Python e gravá-las diretamente no armazenamento do Azure.Aviso
Não é recomendado conectar-se a um banco de dados ou outros armazenamentos externos no componente Executar script Python. Você pode usar o componente Importar dados e o componente Exportar dados
- O script deve conter uma função nomeada
Envie o pipeline.
Se o componente estiver concluído, verifique a saída se for o esperado.
Se o componente falhar, você precisará fazer alguma solução de problemas. Selecione o componente e abra Saídas+logs no painel direito. Abra 70_driver_log.txt e pesquise no azureml_main, então você pode encontrar qual linha causou o erro. Por exemplo, "File "/tmp/tmp01_ID/user_script.py", linha 17, em azureml_main" indica que o erro ocorreu na linha 17 do seu script Python.
Resultados
Os resultados de quaisquer cálculos pelo código Python incorporado devem ser fornecidos como pandas.DataFrame
, que é convertido automaticamente para o formato de conjunto de dados do Azure Machine Learning. Em seguida, você pode usar os resultados com outros componentes no pipeline.
O componente retorna dois conjuntos de dados:
Resultados Dataset 1, definido pelo primeiro quadro de dados pandas retornado em um script Python.
Result Dataset 2, definido pelo segundo quadro de dados pandas retornado em um script Python.
Pacotes Python pré-instalados
Os pacotes pré-instalados são:
- 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-nativo==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
- telemetria azureml==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
- certificados==2019.11.28
- CFFI==1.12.3
- Chardet==3.0.4
- clique==7.1.1
- Cloudpickle==1.3.0
- ConfigParser==3.7.4
- contextlib2==0.6.0.post1
- Criptografia==2.8
- ciclor==0.10.0
- endro==0.3.1.1
- Distro==1.4.0
- Docker==4.2.0
- Docutils==0.15.2
- dotnetcore2==2.1.13
- frasco==1.0.3
- Fusível==3.0.1
- género==3.8.1
- google-api-core==1.16.0
- Google-Auth==1.12.0
- google-nuvem-core==1.3.0
- google-nuvem-armazenamento==1.26.0
- google-retomable-media==0.5.0
- googleapis-common-protos==1.51.0
- Gunicorn==19.9.0
- IDNA==2,9
- aprendizagem desequilibrada==0.4.3
- Isodato==0.6.0
- É perigoso==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
- marcação==1.1.1
- Matplotlib==3.1.3
- mais-itertools==6.0.0
- msAL-extensão==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
- Piarrow==0.16.0
- pyasn1-módulos==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
- pedidos-oauthlib==1.3.0
- pedidos==2.23.0
- RSA==4.0
- ruamel.yaml==0.15.89
- s3transfer==0.3.3
- scikit-aprender==0.22.2
- Scipy==1.4.1
- secretstorage==3.1.2
- setuptools==46.1.1.post20200323
- Seis==1.14.0
- smart-open==1.10.0
- urllib3==1.25.8
- Websocket-cliente==0.57.0
- Werkzeug==0.16.1
- roda==0.34.2
Próximos passos
Consulte o conjunto de componentes disponíveis para o Azure Machine Learning.