Partilhar 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 Mosaic AI 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.

Agendamento de GPU

Para maximizar suas GPUs para treinamento e inferência distribuídos de aprendizado profundo, otimize o agendamento de GPUs. Consulte Agendamento de GPU.

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 Mosaic Streaming 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.

A Databricks recomenda o Mosaic Streaming para carregamento de dados no PyTorch ou no Mosaic Composer, especialmente quando envolve cargas de trabalho distribuídas. As APIs StreamingDataset e StreamingDataLoader fornecidas ajudam a simplificar o treinamento em grandes conjuntos de dados, maximizando as garantias de correção, desempenho, flexibilidade e facilidade de uso em um ambiente distribuído. consulte Carregar dados usando o Mosaic Streaming para obter detalhes adicionais.

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 Optuna.

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 TorchDistributor, DeepSpeed e Ray para facilitar a mudança do treinamento de nó único para o distribuído.

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.

Optuna

O Optuna fornece ajuste adaptativo de hiperparâmetros para aprendizado de máquina.

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 generativos de IA 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.