Share via


Melhores práticas para aprendizagem profunda no Azure Databricks

Este artigo inclui dicas para aprendizado profundo no Azure Databricks e informações sobre ferramentas e bibliotecas internas projetadas para otimizar cargas de trabalho de aprendizado profundo, como as seguintes:

O Databricks Machine Learning fornece infraestrutura de aprendizado profundo pré-construída com o Databricks Runtime for Machine Learning, que inclui as bibliotecas de aprendizado profundo mais comuns, como TensorFlow, PyTorch e Keras. Ele também tem suporte de GPU embutido e pré-configurado, incluindo drivers e bibliotecas de suporte.

O Databricks Runtime ML também inclui todos os recursos do espaço de trabalho do Azure Databricks, como criação e gerenciamento de cluster, gerenciamento de biblioteca e ambiente, gerenciamento de código com pastas Databricks Git, suporte à automação, incluindo Databricks Jobs e APIs, e MLflow integrado para rastreamento de desenvolvimento de modelo e implantação e serviço de modelos.

Gestão de recursos e ambiente

O Azure Databricks ajuda-o a personalizar o seu ambiente de aprendizagem profunda e a manter o ambiente consistente entre os utilizadores.

Personalizar o ambiente de desenvolvimento

Com o Databricks Runtime, você pode personalizar seu ambiente de desenvolvimento nos níveis de bloco de anotações, cluster e trabalho.

Usar políticas de cluster

Você pode criar políticas de cluster para orientar os cientistas de dados para as escolhas certas, como usar um cluster de nó único para desenvolvimento e usar um cluster de dimensionamento automático para trabalhos grandes.

Considere GPUs A100 para cargas de trabalho de aprendizado profundo

As GPUs A100 são uma escolha eficiente para muitas tarefas de aprendizagem profunda, como treinamento e ajuste de modelos de linguagem grandes, processamento de linguagem natural, deteção e classificação de objetos e mecanismos de recomendação.

  • O Databricks suporta GPUs A100 em todas as nuvens. Para obter a lista completa dos tipos de GPU suportados, consulte Tipos de instância suportados.
  • As GPUs A100 geralmente têm disponibilidade limitada. Entre em contato com seu provedor de nuvem para alocação de recursos ou considere reservar capacidade com antecedência.

Melhores práticas para o carregamento de dados

O armazenamento de dados na nuvem normalmente não é otimizado para E/S, o que pode ser um desafio para modelos de aprendizagem profunda que exigem grandes conjuntos de dados. O Databricks Runtime ML inclui Delta Lake e Petastorm para otimizar a taxa de transferência de dados para aplicativos de aprendizado profundo.

O Databricks recomenda o uso de tabelas Delta Lake para armazenamento de dados. O Delta Lake simplifica o ETL e permite que você acesse dados de forma eficiente. Especialmente para imagens, o Delta Lake ajuda a otimizar a ingestão para treinamento e inferência. A solução de referência para aplicativos de imagem fornece um exemplo de otimização de ETL para imagens usando Delta Lake.

O Petastorm fornece APIs que permitem preparar dados em formato parquet para uso pelo TensorFlow, Keras ou PyTorch. A API do SparkConverter fornece integração com o Spark DataFrame. Petastorm também fornece fragmentação de dados para processamento distribuído. Consulte Carregar dados usando Petastorm para obter detalhes.

Melhores práticas para treinar modelos de aprendizagem profunda

A Databricks recomenda o uso do Databricks Runtime para Machine Learning e o rastreamento e registro automático do MLflow para todo o treinamento do modelo.

Comece com um cluster de nó único

Um cluster de GPU de nó único (somente driver) normalmente é mais rápido e econômico para o desenvolvimento de modelos de aprendizado profundo. É provável que um nó com 4 GPUs seja mais rápido para treinamento de aprendizado profundo do que 4 nós de trabalho com 1 GPU cada. Isso ocorre porque o treinamento distribuído incorre em sobrecarga de comunicação de rede.

Um cluster de nó único é uma boa opção durante o desenvolvimento rápido e iterativo e para modelos de treinamento em dados de pequeno a médio porte. Se o conjunto de dados for grande o suficiente para tornar o treinamento lento em uma única máquina, considere mudar para multi-GPU e até mesmo computação distribuída.

Use o TensorBoard e as métricas de cluster para monitorar o processo de treinamento

O TensorBoard está pré-instalado no Databricks Runtime ML. Você pode usá-lo dentro de um bloco de anotações ou em uma guia separada. Consulte TensorBoard para obter detalhes.

As métricas de cluster estão disponíveis em todos os tempos de execução do Databricks. Você pode examinar o uso da rede, do processador e da memória para inspecionar gargalos. Consulte as métricas de cluster para obter detalhes.

Otimize o desempenho para aprendizagem profunda

Você pode, e deve, usar técnicas de otimização de desempenho de aprendizagem profunda no Databricks.

Paragem antecipada

A parada antecipada monitora o valor de uma métrica calculada no conjunto de validação e interrompe o treinamento quando a métrica para de melhorar. Esta é uma abordagem melhor do que adivinhar um bom número de épocas para completar. Cada biblioteca de aprendizagem profunda fornece uma API nativa para interrupção antecipada; por exemplo, consulte as APIs de retorno de chamada EarlyStopping para TensorFlow/Keras e para PyTorch Lightning. Para obter um bloco de anotações de exemplo, consulte Bloco de anotações de exemplo Keras do TensorFlow.

Ajuste do tamanho do lote

O ajuste do tamanho do lote ajuda a otimizar a utilização da GPU. Se o tamanho do lote for muito pequeno, os cálculos não poderão usar totalmente os recursos da GPU. Você pode usar métricas de cluster para exibir métricas de GPU.

Ajuste o tamanho do lote em conjunto com a taxa de aprendizagem. Uma boa regra geral é, quando você aumenta o tamanho do lote em n, aumenta a taxa de aprendizado em sqrt(n). Ao ajustar manualmente, tente alterar o tamanho do lote por um fator de 2 ou 0,5. Em seguida, continue o ajuste para otimizar o desempenho, manualmente ou testando uma variedade de hiperparâmetros usando uma ferramenta automatizada como o Hyperopt.

Transferir aprendizagem

Com o aprendizado por transferência, você começa com um modelo previamente treinado e o modifica conforme necessário para sua aplicação. A aprendizagem por transferência pode reduzir significativamente o tempo necessário para treinar e ajustar um novo modelo. Consulte Featurization for transfer learning para obter mais informações e um exemplo.

Mude para o treinamento distribuído

O Databricks Runtime ML inclui HorovodRunner, spark-tensorflow-distributor, TorchDistributor e Hyperopt para facilitar a mudança do treinamento de nó único para o distribuído.

HorovodRunner

Horovod é um projeto de código aberto que dimensiona o treinamento de aprendizado profundo para multi-GPU ou computação distribuída. HorovodRunner, construído pela Databricks e incluído no Databricks Runtime ML, é um wrapper Horovod que fornece compatibilidade com o Spark. A API permite dimensionar o código de nó único com alterações mínimas. HorovodRunner trabalha com TensorFlow, Keras e PyTorch.

spark-tensorflow-distributor

spark-tensorflow-distributor é um pacote nativo de código aberto no TensorFlow para treinamento distribuído com o TensorFlow em clusters do Spark. Consulte o bloco de notas de exemplo.

TorchDistribuidor

TorchDistributor é um módulo de código aberto no PySpark que facilita o treinamento distribuído com o PyTorch em clusters Spark, que permite que você lance trabalhos de treinamento PyTorch como trabalhos Spark. Consulte Treinamento distribuído com TorchDistributor.

Hyperopt

O Hyperopt fornece ajuste adaptativo de hiperparâmetros para aprendizado de máquina. Com a classe SparkTrials, você pode ajustar iterativamente parâmetros para modelos de aprendizado profundo em paralelo em um cluster.

Melhores práticas para inferência

Esta seção contém dicas gerais sobre como usar modelos para inferência com o Azure Databricks.

  • Para minimizar os custos, considere CPUs e GPUs otimizadas para inferência, como a série NC T4_v3. Não há uma recomendação clara, pois a melhor escolha depende do tamanho do modelo, das dimensões dos dados e de outras variáveis.

  • Use o MLflow para simplificar a implantação e o serviço de modelos. O MLflow pode registrar qualquer modelo de aprendizado profundo, incluindo lógica de pré-processamento e pós-processamento personalizada. Os modelos no Catálogo Unity ou os modelos registrados no Registro de Modelo de Espaço de Trabalho podem ser implantados para inferência em lote, streaming ou online.

Servir online

A melhor opção para o serviço de baixa latência é o serviço on-line atrás de uma API REST. O Databricks fornece o Model Serving para inferência online. O Model Serving fornece uma interface unificada para implantar, governar e consultar modelos de IA e oferece suporte ao seguinte:

  • Modelos personalizados. Estes são modelos Python empacotados no formato MLflow. Exemplos incluem os modelos de transformador scikit-learn, XGBoost, PyTorch e Hugging Face.
  • Modelos abertos de última geração disponibilizados pelas APIs do Foundation Model. Esses modelos são arquiteturas de modelo de base selecionadas que suportam inferência otimizada. Por exemplo, modelos básicos como Llama-2-70B-chat, BGE-Large e Mistral-7B estão disponíveis para uso imediato com preços pagos por token . Para cargas de trabalho que exigem garantias de desempenho e variantes de modelo ajustadas, você pode implantá-las com taxa de transferência provisionada.
  • Modelos externos. Estes são modelos que são hospedados fora do Databricks. Por exemplo, modelos de fundação como, GPT-4 da OpenAI, Claude da Anthropic, e outros. Os endpoints que atendem a esses modelos podem ser controlados centralmente e os clientes podem estabelecer limites de taxa e controles de acesso para eles.

Como alternativa, o MLflow fornece APIs para implantação em vários serviços gerenciados para inferência online, bem como APIs para criar contêineres do Docker para soluções de serviço personalizadas.

Outros serviços gerenciados comuns para inferência on-line incluem:

Inferência em lote e streaming

A pontuação em lote e streaming suporta pontuação de alto rendimento e baixo custo em latências tão baixas quanto minutos. Para obter mais informações, consulte Usar MLflow para inferência de modelo.

  • Se você espera acessar dados para inferência mais de uma vez, considere criar um trabalho de pré-processamento para ETL os dados em uma tabela Delta Lake antes de executar o trabalho de inferência. Desta forma, o custo de ingestão e preparação dos dados é distribuído por várias leituras dos dados. Separar o pré-processamento da inferência também permite selecionar hardware diferente para cada trabalho para otimizar o custo e o desempenho. Por exemplo, você pode usar CPUs para ETL e GPUs para inferência.
  • Use UDFs do Spark Pandas para dimensionar a inferência em lote e streaming em um cluster.
    • Quando você registra um modelo do Azure Databricks, o MLflow fornece automaticamente o código de inferência para aplicar o modelo como um UDF pandas.
    • Você também pode otimizar ainda mais seu pipeline de inferência, especialmente para grandes modelos de aprendizado profundo. Consulte a solução de referência para ETL de imagem para obter um exemplo.