Melhores práticas de aprendizado profundo no Azure Databricks

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

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

O Databricks Runtime ML também inclui todos os recursos do workspace do Azure Databricks, como criação e gerenciamento de cluster, gerenciamento de bibliotecas e ambientes, gerenciamento de código com as pastas Git do Databricks, suporte à automação, incluindo trabalhos e APIs do Databricks e MLflow integrado para rastreamento de desenvolvimento de modelo e implantação de modelo e serviço.

Gerenciamento de recursos e do ambiente

O Azure Databricks ajuda você a personalizar seu ambiente de aprendizado profundo e a manter o ambiente consistente entre os usuários.

Personalizar o ambiente de desenvolvimento

Com o Databricks Runtime, você pode personalizar seu ambiente de desenvolvimento nos níveis do notebook, do cluster e do trabalho.

Usar políticas de cluster

Você pode criar políticas de cluster para orientar os cientistas de dados sobre as escolhas corretas, por exemplo, 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 opção eficiente para muitas tarefas de aprendizado profundo, como treinamento e ajuste de grandes modelos de linguagem, processamento de linguagem natural, detecção e classificação de objetos e mecanismos de recomendação.

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

Melhores práticas para o carregamento de dados

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

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

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

Melhores práticas de treinamento de modelos de aprendizado profundo

O Databricks recomenda o uso do Databricks Runtime para Machine Learning e acompanhamento do MLflow e registro em log automático para todo o treinamento de modelo.

Iniciar 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. Um nó com 4 GPUs provavelmente é mais rápido para treinamento de aprendizado profundo do que quatro 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 porte pequeno e médio. Se o conjunto de dados for grande o suficiente para tornar o treinamento lento em um único computador, considere migrar para várias GPU e até mesmo para a computação distribuída.

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

O TensorBoard vem pré-instalado no Databricks Runtime ML. Você pode usá-lo em um notebook ou em uma guia separada. Confira TensorBoard para obter detalhes.

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

Otimizar o desempenho para aprendizado profundo

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

Interrupção antecipada

A interrupção 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. Essa abordagem é melhor do que adivinhar a quantidade de épocas para a conclusão. Cada biblioteca de aprendizado profundo fornece uma API nativa para interrupção antecipada; por exemplo, confira as APIs de retorno de chamada de Interrupção Antecipada para TensorFlow/Keras e para PyTorch Lightning. Para ver um exemplo de notebook, confira Exemplo de notebook do TensorFlow Keras.

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 de GPU. Use as métricas de cluster para ver as métricas de GPU.

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

Aprendizado de transferência

Com a transferência de aprendizado, você começa com um modelo treinado anteriormente e o modifica conforme o necessário para seu aplicativo. A transferência de aprendizado pode reduzir significativamente o tempo necessário para treinar e ajustar um novo modelo. Confira Definição de recursos da transferência de aprendizado para saber mais e obter um exemplo.

Mudar para o treinamento distribuído

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

HorovodRunner

Horovod é um projeto de código aberto que escala o treinamento de aprendizado profundo para computação de várias GPU ou distribuída. HorovodRunner, criado pelo Databricks e incluído no Databricks Runtime ML, é um invólucro Horovod que fornece compatibilidade com o Spark. A API permite escalar o código de um único nó com alterações mínimas. HorovodRunner funciona com TensorFlow, Keras e PyTorch.

spark-tensorflow-distributor

O spark-tensorflow-distributor é um pacote nativo de software livre no TensorFlow para treinamento distribuído com o TensorFlow nos clusters Spark. Confira o exemplo de notebook.

TorchDistributor

O TorchDistributor é um módulo de software livre no PySpark que facilita o treinamento distribuído com o PyTorch em clusters Spark. Com ele, você pode iniciar trabalhos de treinamento do PyTorch como trabalhos do Spark. Confira Treinamento distribuído com TorchDistributor.

Hyperopt

O Hyperopt fornece ajuste de hiperparâmetro adaptável para aprendizado de máquina. Com a classe SparkTrials, você pode ajustar de forma iterativa os parâmetros para modelos de aprendizado profundo em paralelo em um cluster.

Melhores práticas de inferência

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

  • Para minimizar os custos, considere CPUs e GPUs otimizadas para inferência, como a NC T4_v3-series. Não há uma recomendação clara, pois a melhor opção 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 fornecimento de modelos. O MLflow pode registrar qualquer modelo de aprendizado profundo, incluindo a lógica personalizada de pré-processamento e de pós-processamento. Os modelos no Unity Catalog ou modelos registrados no Registro de Modelos do Workspace podem ser implantados para a inferência de lote, streaming ou online.

Serviço online

A melhor opção para oferecer a baixa latência é o serviço online por trás de uma API REST. O Databricks fornece o Serviço de Modelo para inferência online. O Serviço de Modelo fornece uma interface unificada para implantar, governar e consultar modelos de IA, além de oferecer suporte ao seguinte:

  • Modelos personalizados. Estes são modelos python empacotados no formato MLflow. Os exemplos incluem modelos de transformador scikit-learn, XGBoost, PyTorch e Hugging Face.
  • Modelos abertos de última geração disponibilizados pelas APIs de Modelos de Base. Esses modelos são arquiteturas de modelo de base com curadoria que dão suporte à inferência otimizada. Por exemplo, os modelos de base como Llama-2-70B-chat, BGE-Large e Mistral-7B estão disponíveis para uso imediato com preços de pagamento por token. Para cargas de trabalho que exigem garantias de desempenho e variantes de modelo ajustadas, você pode implantá-los com taxa de transferência provisionada.
  • Modelos externos. Estes são modelos que são hospedados fora do Databricks. Por exemplo, os modelos de base como GPT-4 da OpenAI, Claude da Anthropic e outros. Os pontos de extremidade que atendem esses modelos podem ser controlados centralmente e os clientes podem estabelecer limites de taxa e controle 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 personalizado.

Entre os outros serviços gerenciados comuns para a inferência online estão:

Inferência de lote e de streaming

A pontuação de lote e de streaming dá suporte a uma alta taxa de transferência, pontuação de baixo custo em latências baixas como minutos. Para obter mais informações, confira Usar o MLflow para a inferência de modelo.

  • Se você pretende acessar os dados para inferência mais de uma vez, considere a criação de um trabalho de pré-processamento para ETL dos dados em uma tabela do Delta Lake antes de executar o trabalho de inferência. Dessa forma, o custo de ingestão e preparação dos dados é distribuído entre várias leituras dos dados. A separação do pré-processamento da inferência também permite que você selecione um hardware diferente para cada trabalho a fim de 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 o lote e a inferência de streaming em um cluster.