Partilhar via


Ingestão de dados com o Azure Data Factory

Neste artigo, você aprenderá sobre as opções disponíveis para criar um pipeline de ingestão de dados com o Azure Data Factory. Este pipeline do Azure Data Factory é usado para ingerir dados para uso com o Azure Machine Learning. O Data Factory permite extrair, transformar e carregar facilmente dados (ETL). Depois que os dados são transformados e carregados no armazenamento, eles podem ser usados para treinar seus modelos de aprendizado de máquina no Azure Machine Learning.

A transformação de dados simples pode ser tratada com atividades e instrumentos nativos do Data Factory, como fluxo de dados. Quando se trata de cenários mais complicados, os dados podem ser processados com algum código personalizado. Por exemplo, código Python ou R.

Comparar pipelines de ingestão de dados do Azure Data Factory

Existem várias técnicas comuns de utilização do Data Factory para transformar dados durante a ingestão. Cada técnica tem vantagens e desvantagens que ajudam a determinar se é adequada para um caso de uso específico:

Técnica Vantagens Desvantagens
Data Factory + Azure Functions
  • Computação de baixa latência e sem servidor
  • Funções com estado
  • Funções reutilizáveis
  • Apenas bom para processamento de curta duração
    Data Factory + componente personalizado
  • Computação paralela em larga escala
  • Adequado para algoritmos pesados
  • Requer encapsulamento de código em um executável
  • Complexidade de lidar com dependências e E/S
  • Data Factory + notebook Azure Databricks
  • Apache Spark
  • Ambiente Python nativo
  • Pode ser caro
  • A criação de clusters inicialmente leva tempo e adiciona latência
  • Azure Data Factory com funções do Azure

    O Azure Functions permite que você execute pequenas partes de código (funções) sem se preocupar com a infraestrutura do aplicativo. Nesta opção, os dados são processados com código Python personalizado encapsulado em uma Função do Azure.

    A função é invocada com a atividade Azure Data Factory Azure Function. Essa abordagem é uma boa opção para transformações de dados leves.

    O diagrama mostra um pipeline do Azure Data Factory, com o Azure Function and Run ML Pipeline, e um pipeline do Azure Machine Learning, com Train Model, e como eles interagem com dados brutos e dados preparados.

    • Vantagens:
      • Os dados são processados em uma computação sem servidor com uma latência relativamente baixa
      • O pipeline do Data Factory pode invocar uma Função Durável do Azure que pode implementar um fluxo sofisticado de transformação de dados
      • Os detalhes da transformação de dados são abstraídos pela Função do Azure que pode ser reutilizada e invocada de outros locais
    • Desvantagens:
      • O Azure Functions deve ser criado antes do uso com o ADF
      • O Azure Functions é bom apenas para processamento de dados de curta duração

    Azure Data Factory com atividade de componente personalizado

    Nesta opção, os dados são processados com código Python personalizado encapsulado em um executável. Ele é invocado com uma atividade do Componente Personalizado do Azure Data Factory. Essa abordagem é mais adequada para dados grandes do que a técnica anterior.

    O diagrama mostra um pipeline do Azure Data Factory, com um componente personalizado e o Run M L Pipeline, e um pipeline do Azure Machine Learning, com Train Model, e como eles interagem com dados brutos e dados preparados.

    • Vantagens:
      • Os dados são processados no pool de lotes do Azure, que fornece computação paralela e de alto desempenho em grande escala
      • Pode ser usado para executar algoritmos pesados e processar quantidades significativas de dados
    • Desvantagens:
      • O pool de lotes do Azure deve ser criado antes do uso com o Data Factory
      • Sobre engenharia relacionada ao encapsulamento de código Python em um executável. Complexidade do tratamento de dependências e parâmetros de entrada/saída

    Azure Data Factory com bloco de notas Python do Azure Databricks

    O Azure Databricks é uma plataforma de análise baseada no Apache Spark na nuvem da Microsoft.

    Nessa técnica, a transformação de dados é executada por um bloco de anotações Python, executado em um cluster do Azure Databricks. Esta é, provavelmente, a abordagem mais comum que usa todo o poder de um serviço Azure Databricks. Ele foi projetado para processamento de dados distribuídos em escala.

    O diagrama mostra um pipeline do Azure Data Factory, com o Azure Databricks Python e o Run M L Pipeline, e um pipeline do Azure Machine Learning, com Train Model, e como eles interagem com dados brutos e dados preparados.

    • Vantagens:
      • Os dados são transformados no serviço de processamento de dados mais poderoso do Azure, cujo backup é feito pelo ambiente Apache Spark
      • Suporte nativo de Python juntamente com estruturas e bibliotecas de ciência de dados, incluindo TensorFlow, PyTorch e scikit-learn
      • Não há necessidade de envolver o código Python em funções ou módulos executáveis. O código funciona como está.
    • Desvantagens:
      • A infraestrutura do Azure Databricks deve ser criada antes do uso com o Data Factory
      • Pode ser caro dependendo da configuração do Azure Databricks
      • Girar clusters de computação a partir do modo "frio" leva algum tempo que traz alta latência para a solução

    Consumir dados no Azure Machine Learning

    O pipeline do Data Factory salva os dados preparados em seu armazenamento em nuvem (como o Blob do Azure ou o Azure Data Lake).
    Consuma seus dados preparados no Azure Machine Learning ao,

    • Invocando um pipeline do Azure Machine Learning a partir do seu pipeline do Data Factory.
      OU
    • Criando um armazenamento de dados do Azure Machine Learning.

    Invoque o pipeline do Azure Machine Learning a partir do Data Factory

    Esse método é recomendado para fluxos de trabalho de Operações de Aprendizado de Máquina (MLOps). Se você não quiser configurar um pipeline do Azure Machine Learning, consulte Ler dados diretamente do armazenamento.

    Cada vez que o pipeline do Data Factory é executado,

    1. Os dados são salvos em um local diferente no armazenamento.
    2. Para passar o local para o Azure Machine Learning, o pipeline do Data Factory chama um pipeline do Azure Machine Learning. Quando o pipeline do Data Factory chama o pipeline do Azure Machine Learning, o local dos dados e a ID do trabalho são enviados como parâmetros.
    3. O pipeline de ML pode criar um armazenamento de dados e um conjunto de dados do Azure Machine Learning com o local dos dados. Saiba mais em Executar pipelines do Azure Machine Learning no Data Factory.

    O diagrama mostra um pipeline do Azure Data Factory e um pipeline do Azure Machine Learning e como eles interagem com dados brutos e dados preparados. O pipeline do Data Factory alimenta dados para o banco de dados Dados Preparados, que alimenta um armazenamento de dados, que alimenta conjuntos de dados no espaço de trabalho Aprendizado de Máquina.

    Gorjeta

    Os conjuntos de dados oferecem suporte ao controle de versão, para que o pipeline de ML possa registrar uma nova versão do conjunto de dados que aponte para os dados mais recentes do pipeline do ADF.

    Quando os dados estiverem acessíveis por meio de um armazenamento de dados ou conjunto de dados, você poderá usá-los para treinar um modelo de ML. O processo de treinamento pode fazer parte do mesmo pipeline de ML chamado do ADF. Ou pode ser um processo separado, como a experimentação em um caderno Jupyter.

    Como os conjuntos de dados suportam controle de versão e cada trabalho do pipeline cria uma nova versão, é fácil entender qual versão dos dados foi usada para treinar um modelo.

    Ler dados diretamente do armazenamento

    Se não quiser criar um pipeline de ML, você pode acessar os dados diretamente da conta de armazenamento onde os dados preparados são salvos com um armazenamento de dados e um conjunto de dados do Azure Machine Learning.

    O código Python a seguir demonstra como criar um armazenamento de dados que se conecta ao armazenamento do Azure DataLake Geração 2. Saiba mais sobre armazenamentos de dados e onde encontrar permissões de entidade de serviço.

    APLICA-SE A: Python SDK azureml v1

    ws = Workspace.from_config()
    adlsgen2_datastore_name = '<ADLS gen2 storage account alias>'  #set ADLS Gen2 storage account alias in Azure Machine Learning
    
    subscription_id=os.getenv("ADL_SUBSCRIPTION", "<ADLS account subscription ID>") # subscription id of ADLS account
    resource_group=os.getenv("ADL_RESOURCE_GROUP", "<ADLS account resource group>") # resource group of ADLS account
    
    account_name=os.getenv("ADLSGEN2_ACCOUNTNAME", "<ADLS account name>") # ADLS Gen2 account name
    tenant_id=os.getenv("ADLSGEN2_TENANT", "<tenant id of service principal>") # tenant id of service principal
    client_id=os.getenv("ADLSGEN2_CLIENTID", "<client id of service principal>") # client id of service principal
    client_secret=os.getenv("ADLSGEN2_CLIENT_SECRET", "<secret of service principal>") # the secret of service principal
    
    adlsgen2_datastore = Datastore.register_azure_data_lake_gen2(
        workspace=ws,
        datastore_name=adlsgen2_datastore_name,
        account_name=account_name, # ADLS Gen2 account name
        filesystem='<filesystem name>', # ADLS Gen2 filesystem
        tenant_id=tenant_id, # tenant id of service principal
        client_id=client_id, # client id of service principal
    

    Em seguida, crie um conjunto de dados para fazer referência aos arquivos que você deseja usar em sua tarefa de aprendizado de máquina.

    O código a seguir cria um TabularDataset a partir de um arquivo csv, prepared-data.csv. Saiba mais sobre tipos de conjunto de dados e formatos de arquivo aceitos.

    APLICA-SE A: Python SDK azureml v1

    from azureml.core import Workspace, Datastore, Dataset
    from azureml.core.experiment import Experiment
    from azureml.train.automl import AutoMLConfig
    
    # retrieve data via Azure Machine Learning datastore
    datastore = Datastore.get(ws, adlsgen2_datastore)
    datastore_path = [(datastore, '/data/prepared-data.csv')]
            
    prepared_dataset = Dataset.Tabular.from_delimited_files(path=datastore_path)
    

    A partir daqui, use prepared_dataset para referenciar seus dados preparados, como em seus scripts de treinamento. Saiba como treinar modelos com conjuntos de dados no Azure Machine Learning.

    Próximos passos