Práticas recomendadas para aprendizagem profunda no Databricks

Este artigo inclui dicas para aprendizagem profunda em Databricks e informações sobre ferramentas e bibliotecas integradas projetadas para otimizar cargas de trabalho de aprendizagem profunda, como as seguintes:

Databricks Machine Learning fornece infraestrutura de aprendizagem profunda pré-construída com Databricks Runtime para Machine Learning, que inclui as bibliotecas de aprendizagem profunda mais comuns, como TensorFlow, PyTorch e Keras. Ele também possui suporte de GPU integrado e pré-configurado, incluindo drivers e bibliotecas de suporte.

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

Gerenciamento de recursos e ambiente

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

Personalize o ambiente de desenvolvimento

Com o Databricks Runtime, você pode personalizar seu ambiente de desenvolvimento nos níveis Notebook, clusters e Job .

Usar política de clusters

Você pode criar uma política de cluster para guiar o cientista de dados para as escolhas certas, como usar um cluster de nó único para desenvolvimento e usar um cluster autoscale para Job grandes.

Considere as GPUs A100 para cargas de trabalho de aprendizagem profunda

As GPUs A100 são uma escolha 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.

  • Databricks oferece suporte a GPUs A100 em todas clouds. Para obter a lista completa de tipos de GPU compatíveis, consulte Tipos de instância compatíveis.

  • As GPUs A100 geralmente têm disponibilidade limitada. Entre em contato com seu provedor cloud para alocação de recursos ou considere reservar a capacidade com antecedência.

Práticas recomendadas para carregar dados

o armazenamento de dados cloud normalmente não é otimizado para E/S, o que pode ser um desafio para modelos de aprendizagem profunda que exigem um grande dataset. O Databricks Runtime ML inclui Delta Lake e Petastorm para otimizar dados Taxa de transferência para aplicativos de aprendizagem profunda.

Databricks recomenda usar tabelas Delta Lake para armazenamento de dados. O Delta Lake simplifica o ETL e permite que você acesse os dados com eficiência. Especialmente para imagens, o Delta Lake ajuda a otimizar a ingestão para treinamento e inferência. As soluções de referência para aplicativos de imagem fornecem um exemplo de otimização de ETL para imagens usando o Delta Lake.

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

Práticas recomendadas para modelos de treinamento aprendizagem profunda

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

começar com clustersde um único nó

Osclusters de GPU de nó único (somente driver) costumam ser os mais rápidos e econômicos para o desenvolvimento de modelos de aprendizagem profunda. É provável que um nó com 4 GPUs seja mais rápido para o treinamento de aprendizagem profunda do que 4 nós worker com 1 GPU cada. Isso ocorre porque o treinamento distribuído incorre em sobrecarga de comunicação na rede.

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

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

O TensorBoard está pré-instalado no Databricks Runtime ML. Você pode usá-lo em um Notebook ou em uma tab separada. Consulte TensorBoard para obter detalhes.

as métricas clusters 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 do 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.

Parada antecipada

A parada antecipada monitora o valor de uma métricas calculada no conjunto de validação e interrompe o treinamento quando as métricas param 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 exemplo de notebook, consulte Notebook de exemplo do TensorFlow Keras.

ajuste de tamanho de lotes

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

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

Transferência de 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. O aprendizado por transferência pode reduzir significativamente o tempo necessário para ensinar e ajustar um novo modelo. Consulte Funcionalidade para aprendizado de transferência para obter mais informações e um exemplo.

Mover para o treinamento distribuído

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

HorovodRunner

Horovod é um projeto de código aberto que escala o treinamento de aprendizagem profunda para multi-GPU ou computação distribuída. HorovodRunner, construído por Databricks e incluído no Databricks Runtime ML, é um wrapper Horovod que fornece compatibilidade com Spark. A API permite escalar o código de nó único com alterações mínimas. HorovodRunner funciona 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 clusters TensorFlow on Spark. Veja o exemplo Notebook.

Distribuidor de tochas

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

Hyperopt

O Hyperopt fornece ajuste de hiperparâmetro adaptável para machine learning. Com a classe SparkTrials, você pode ajustar iterativamente parâmetros para modelos de aprendizagem profunda em paralelo em clusters.

Práticas recomendadas para inferência

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

  • Para minimizar os custos, considere CPUs e GPUs otimizadas para inferência, como as instâncias G4 e G5 do Amazon EC2. 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 implementação e o modelo de serviço. O MLflow pode registrar qualquer modelo de aprendizagem profunda, incluindo lógica personalizada de pré-processamento e pós-processamento. Os modelos no Unity Catalog ou os modelos registrados no Workspace Model Registry podem ser implantados para lotes, transmissão ou inferência on-line.

Atendimento on-line

A melhor opção para atendimento de baixa latência é o atendimento on-line por meio de uma API REST. Databricks fornece modelo de navegação para inferência online. O modelo local fornece uma interface unificada para implantar, governar e consultar modelos de IA e oferece suporte ao seguinte:

  • Modelos personalizados. Estes são pacotes de modelos Python no formato MLflow. Os exemplos incluem os modelos de transformadores 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 modelos básicos 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 de pagamento por token . Para cargas de trabalho que exigem garantias de desempenho e variantes de modelo ajustadas, você pode implantá-las com provisionamento Taxa de transferência.

  • Modelos externos. Esses são modelos hospedados fora do Databricks. Por exemplo, modelos básicos como GPT-4 da OpenAI, Claude da Anthropic e outros. O endpoint que atende a esses modelos pode ser governado centralmente e os clientes podem estabelecer limites de taxa e controle de acesso para eles.

Alternativamente, o MLflow fornece APIs para implantação em vários serviços gerenciados para inferência online, bem como APIs para criação de contêineres Docker para soluções de atendimento customizadas.

Você também pode usar o SageMaker Serving. Veja o Notebook de exemplo e a documentação do MLflow.

lotes e inferência transmitida

A pontuação de lotes e transmissão suporta alta taxa de transferência, pontuação de 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 Job de pré-processamento para ETL dos dados em uma tabela Delta Lake antes de executar o Job de inferência. Dessa 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 que você selecione um hardware diferente para cada Job 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 escalar lotes e inferência de transmissão em clusters.