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:
- Delta e Mosaic Streaming para carregar dados
- Optuna para paralelismo de treinamento
- UDFs da Pandas para inferência
O Databricks Mosaic AI 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.
- Use bibliotecas Python com escopo no notebook ou bibliotecas R no escopo do notebook para usar um conjunto ou uma versão específica de bibliotecas sem afetar outros usuários do cluster.
- Instale bibliotecas no nível do cluster para padronizar versões para uma equipe ou projeto.
- Configure um trabalho do Azure Databricks para garantir que uma tarefa repetida seja executada em um ambiente consistente e inalterável.
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.
Agendamento de GPU
Para maximizar as GPUs para treinamento e inferência de aprendizado profundo distribuído, otimize o agendamento de GPU. Confira Agendamento de GPU.
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 Mosaic Streaming para otimizar a produtividade 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 Databricks recomenda o Mosaic Streaming para o carregamento de dados no PyTorch ou no Mosaic Composer, especialmente quando envolve cargas de trabalho distribuídas. As APIs fornecidas StreamingDataset e StreamingDataLoader ajudam a simplificar o treinamento em grandes conjuntos de dados, maximizando garantias de correção, desempenho, flexibilidade e facilidade de uso em um ambiente distribuído. Consulte Carregar dados usando o Mosaic Streaming para obter mais 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 uma variedade de hiperparâmetros usando uma ferramenta automatizada como o Optuna.
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 TorchDistributor, DeepSpeed e Ray para facilitar a movimentação de um único nó para o treinamento distribuído.
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.
Optuna
Optuna fornece ajuste adaptativo de hiperparâmetros para aprendizado de máquina.
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, modelos de IA generativos como o GPT-4 da OpenAI, o 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:
- ACI (Instância de Contêiner do Azure)
- AKS (Serviço de Kubernetes do Azure)
- MLflow com Azure Machine Learning
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.
- Quando você registra em log um modelo do Azure Databricks, o MLflow fornece automaticamente o código de inferência para aplicar o modelo como um UDF de pandas.
- Também é possível otimizar seu pipeline de inferência, especialmente para grandes modelos de aprendizado profundo. Confira a solução de referência para o ETL de imagem para obter um exemplo.