Componente Executar Script do Python

Este artigo descreve o componente Executar Script do Python no designer do Azure Machine Learning.

Usar esse componente para executar o código Python. Para obter mais informações sobre os princípios de arquitetura e design do Python, confira 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 dão suporte, como:

  • Visualizar dados usando o matplotlib.
  • Usar bibliotecas do Python para enumerar os conjuntos de dados e modelos no seu workspace.
  • Ler, carregar e manipular dados de fontes que o componente Importar Dados não dá suporte.
  • Executar o seu código de aprendizado profundo.

Pacotes do Python com suporte

O Azure Machine Learning usa a distribuição Anaconda do Python, que inclui muitos utilitários comuns para processamento de dados. Atualizaremos a versão do Anaconda automaticamente. A versão atual é:

  • Distribuição do Anaconda 4.5+ para Python 3.6

Para ver uma lista completa, confira a seção Pacotes do 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 seguinte código para instalar pacotes para melhorar o 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")

Observação

Se o pipeline contiver vários componentes Executar Script do Python que precisam de pacotes que não estão na lista pré-instalada, instale os pacotes em cada componente.

Aviso

O componente Executar Script não dá suporte à instalação de pacotes que dependem de bibliotecas nativas extras com um comando como "apt-get", tais como Java, PyODBC e etc. Isso ocorre porque esse componente é executado em um ambiente simples com apenas o Python pré-instalado e sem a permissão de administrador.

Acesso ao workspace atual e conjuntos de dados registrados

Você pode conferir o seguinte código de exemplo para acessar os conjuntos de dados registrados no seu workspace:

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 arquivos

O componente Executar Script do 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 Executar Script do 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,

Depois que a execução de pipeline for concluída, você poderá pré-visualizar a imagem no painel direito do componente.

Visualização da imagem carregada

Você também pode carregar o arquivo em qualquer armazenamento de dados usando o código a seguir. Você só pode visualizar o arquivo em 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 módulo Executar Script Python

O componente Executar Script do Python contém código Python de exemplo que você pode usar como ponto de partida. Para configurar o componente Executar Script do Python, forneça um conjunto de entradas e o código Python a ser executado na caixa de texto Script do Python.

  1. Adicione o componente Executar Script do Python ao seu pipeline.

  2. Adicione e conecte no Dataset1 todos os conjuntos de dados do designer que você deseja usar para entrada. Referencie esse conjunto de dados no seu script Python como DataFrame1.

    O uso de um conjunto de dados é opcional. Use-o se você quiser gerar dados usando o Python ou usar o código Python para importar os dados diretamente para o componente.

    Esse componente dá suporte à adição de um segundo conjunto de dados no Dataset2. Referencie o segundo conjunto de dados no seu script Python como DataFrame2.

    Os conjuntos de dados armazenados no Azure Machine Learning são convertidos automaticamente em quadros de dados do Pandas quando carregados com esse componente.

    Executar mapa de entrada do Python

  3. Para incluir novos pacotes ou códigos do Python, conecte o arquivo compactado que contém esses recursos personalizados à porta do Pacote de script. Ou, se o seu script tiver mais de 16 KB, use a porta de Pacote de Script para evitar erros como CommandLine excede o limite de 16597 caracteres.

    1. Agrupe o script e outros recursos personalizados em um arquivo zip.
    2. Carregue o arquivo zip como um Conjunto de Dados de Arquivo para o estúdio.
    3. Arraste o componente do conjunto de dados da lista Conjuntos de dados no painel do componente à esquerda na página criação do designer.
    4. Conecte o componente do conjunto de dados na porta Pacote de Script do componente Executar Script do Python.

    Qualquer arquivo contido nos arquivos compactados carregados pode ser usado durante a execução do pipeline. Se os arquivos incluírem uma estrutura de diretório, a estrutura será preservada.

    Importante

    Use um nome exclusivo e significativo para arquivos no pacote de script, pois algumas palavras comuns, como test, app e etc., são reservadas para serviços internos.

    Veja o seguinte exemplo de pacote de script, que contém um arquivo de script Python e um arquivo txt:

    Exemplo de pacote de script

    Veja abaixo o conteúdo de my_script.py:

    def my_func(dataframe1):
        return dataframe1
    

    Veja abaixo um código de exemplo mostrando como consumir os arquivos no pacote de 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. Na caixa de texto Script Python, digite ou cole o script Python válido.

    Observação

    Tenha cuidado ao escrever o seu script. Verifique se não há erros de sintaxe, como o uso de variáveis não declaradas, componentes ou funções não importadas. Preste atenção extra na lista de componentes pré-instalados. Para importar componentes que não estão listados, instale os pacotes correspondentes no seu script, como:

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

    A caixa de texto Script Python é pré-populada com algumas instruções em comentários e o código de exemplo para saída e acesso a dados. Você precisa editar ou substituir esse código. Siga as convenções do Python para recuo e uso de maiúsculas/minúsculas:

    • O script precisa conter uma função chamada azureml_main como o ponto de entrada para esse componente.
    • A função de ponto de entrada precisa ter dois argumentos de entrada, Param<dataframe1> e Param<dataframe2>, mesmo quando esses argumentos não são usados no seu script.
    • Os arquivos compactados conectados à terceira porta de entrada são descompactados e armazenados no diretório .\Script Bundle, que também é adicionado no Python sys.path.

    Se o arquivo .zip contiver mymodule.py, importe-o usando import mymodule.

    Dois conjuntos de dados podem ser retornados para o designer, que precisa ser uma sequência do tipo pandas.DataFrame. Você pode criar outras saídas no seu código Python e gravá-las diretamente no armazenamento do Azure.

    Aviso

    Não é recomendável conectar-se a um banco de dados ou a outros armazenamentos externos no Componente Executar Script do Python. Você pode usar o Componente Importar Dados e o Componente Módulo Exportar Dados

  5. Envie o pipeline.

    Se o componente estiver concluído, verifique se a saída é a esperada.

    Se o componente falhar, você precisará realizar algumas soluções de problemas. Selecione o componente e abra Saídas + logs no painel direito. Abra 70_driver_log.txt e pesquise no azureml_main para descobrir qual linha causou o erro. Por exemplo, "File "/tmp/tmp01_ID/user_script.py", linha 17, no azureml_main" indica que o erro ocorreu na linha 17 do seu script Python.

Resultados

Os resultados de toda computação pelo código Python inserido precisam ser fornecidos como pandas.DataFrame, que é automaticamente convertido para o formato do conjunto de dados do Azure Machine Learning. Em seguida, você pode usar os resultados com outros componente no pipeline.

O componente retorna dois conjuntos de dados:

  • Resultados do conjunto de dados 1, definido pelo primeiro quadro de dados Pandas retornado em um script Python.

  • Resultados do conjunto de dados 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-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
  • imbalanced-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

Próximas etapas

Confira o conjunto de componentes disponíveis no Azure Machine Learning.