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:
Delta e transmissão do Mosaic para carregar dados
Optuna para paralelizar o treinamento
Pandas UDFs para inferência
Databricks Mosaic AI A aprendizagem profunda fornece uma infraestrutura pré-construída com Databricks Runtime para Machine Learning, que inclui a biblioteca de aprendizagem profunda mais comum, como TensorFlow, PyTorch e Keras. Ele também tem suporte integrado e pré-configurado para GPU, incluindo drivers e biblioteca 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 .
Use bibliotecas Python com escopo deNotebook ou bibliotecas R com escopo deNotebook para usar um conjunto específico ou versão de bibliotecas sem afetar outros usuários clusters .
Instale bibliotecas no nível clusters para padronizar versões para uma equipe ou projeto.
Configure um Databricks Job para garantir a execução de uma tarefa repetida em um ambiente consistente e imutável.
Usar política de clusters
O senhor pode criar uma política de cluster para orientar data scientists as escolhas certas, como usar um Single Node cluster para desenvolvimento e usar um autoscale cluster para trabalhos 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.
Programador de GPU
Para maximizar suas GPUs para aprendizagem profunda treinamento e inferência distribuída, otimize a programação da GPU. Consulte Programar GPU.
Práticas recomendadas para carregar dados
O armazenamento de dados em 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. Databricks Runtime ML inclui Delta Lake e transmissão Mosaic para otimizar a Taxa de transferência de dados 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.
Databricks recomenda a transmissão do Mosaic para o carregamento de dados em PyTorch ou no Mosaic Composer, especialmente quando envolve cargas de trabalho distribuídas. O StreamingDataset e o StreamingDataLoader fornecidos APIs ajudam a simplificar o treinamento em grandes conjuntos de dados, maximizando as garantias de correção, o desempenho, a flexibilidade e a facilidade de uso em um ambiente distribuído. Consulte Carregar uso de dados Mosaic transmissão para obter mais 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 interrupção antecipada monitora o valor de uma métrica calculada no conjunto de validação e interrompe o treinamento quando a métrica deixa de melhorar. Essa é uma abordagem melhor do que adivinhar um bom número de épocas a serem concluídas. Cada biblioteca de aprendizagem profunda fornece uma API nativa para parada antecipada; por exemplo, consulte as APIs de retorno de chamada EarlyStopping para TensorFlow/Keras e para PyTorch Lightning. Para obter um exemplo Notebook, consulte TensorFlow Keras exemplo Notebook.
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 prática é que, quando o senhor aumenta o tamanho do lote em n, aumenta a taxa de aprendizado em sqrt(n). Ao fazer o ajuste manual, tente alterar o tamanho dos lotes em um fator de 2 ou 0,5. Em seguida, continue o ajuste para otimizar o desempenho, seja manualmente ou testando uma variedade de hiperparâmetros usando uma ferramenta automatizada como o Optuna.
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
O Databricks Runtime ML inclui o TorchDistributor, o DeepSpeed e o Ray para facilitar a mudança do treinamento de nó único para o treinamento distribuído.
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.
Optuna
O Optuna oferece ajuste adaptativo de hiperparâmetros para machine learning.
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 oferecem suporte à inferência otimizada. Por exemplo, modelos básicos como Meta-Llama-3.1-70B-Instruct, GTE-Large e Mistral-7B estão disponíveis para uso imediato com preços pay-per-tokens. Para cargas de trabalho que exigem garantias de desempenho e variantes de modelo ajustadas, o senhor pode implantá-las com o provisionamento Taxa de transferência.
Modelos externos. Esses são modelos hospedados fora da Databricks. Por exemplo, modelos de IA generativa como o GPT-4 da OpenAI, o Claude da Anthropic e outros. que atendem a esses modelos podem ser controlados de forma centralizada 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.
lotes e inferência transmitida
A pontuação de lotes e transmissão oferece suporte à pontuação de alto custo e baixa taxa de transferência em latências tão baixas quanto minutos. Para obter mais informações, consulte modelos implantados para inferência e previsão de lotes.
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.
Quando você logs um modelo do Databricks, o MLflow fornece automaticamente o código de inferência para aplicar o modelo como um pandas UDF.
Você também pode otimizar ainda mais seu pipeline de inferência, especialmente para grandes modelos de aprendizagem profunda. Veja as soluções de referência para imagem ETL para um exemplo.