Melhores práticas para otimização de custos
Este artigo aborda as melhores práticas que suportam os princípios de otimização de custos, organizados por princípios.
1. Escolha os recursos ideais
Usar formatos de dados com desempenho otimizado
Para aproveitar ao máximo a plataforma de inteligência de dados Databricks, você deve usar o Delta Lake como sua estrutura de armazenamento. Ele ajuda a criar pipelines ETL mais simples e confiáveis e vem com muitos aprimoramentos de desempenho que podem acelerar significativamente as cargas de trabalho em comparação com o uso de Parquet, ORC e JSON. Consulte Recomendações de otimização no Azure Databricks. Se a carga de trabalho também estiver sendo executada em uma computação de trabalho, isso se traduzirá diretamente em menor tempo de atividade dos recursos de computação, levando a custos mais baixos.
Usar computação de trabalho
Um trabalho é uma maneira de executar código não interativo em uma instância de computação do Databricks. Por exemplo, pode executar uma carga de trabalho de extração, transformação e carregamento (ETL) de forma interativa ou com base num agendamento. Claro, você também pode executar trabalhos interativamente na interface do usuário do bloco de anotações. No entanto, na computação de trabalho, as cargas de trabalho não interativas custarão significativamente menos do que na computação multiuso. Consulte a visão geral de preços para comparar Jobs Compute e All-Purpose Compute.
Um benefício adicional para alguns trabalhos é que cada trabalho ou fluxo de trabalho pode ser executado em uma nova instância de computação, isolando as cargas de trabalho umas das outras. No entanto, os fluxos de trabalho multitarefa também podem reutilizar recursos de computação para todas as tarefas, de modo que o tempo de inicialização da computação ocorre apenas uma vez por fluxo de trabalho. Consulte Configurar computação para trabalhos.
Usar o SQL warehouse para cargas de trabalho SQL
Para cargas de trabalho SQL interativas, um armazém SQL Databricks é o mecanismo mais econômico. Consulte a visão geral dos preços. Todos os armazéns SQL vêm com Photon por padrão, o que acelera suas chamadas de API SQL e DataFrame existentes e reduz o custo geral por carga de trabalho.
Além disso, os armazéns SQL sem servidor oferecem suporte ao gerenciamento inteligente de carga de trabalho (IWM), um conjunto de recursos que aprimora a capacidade sem servidor do Databricks SQL de processar um grande número de consultas de forma rápida e econômica.
Use tempos de execução atualizados para suas cargas de trabalho
A plataforma Azure Databricks fornece diferentes tempos de execução que são otimizados para tarefas de engenharia de dados (Databricks Runtime) ou tarefas de aprendizado de máquina (Databricks Runtime for Machine Learning). Os tempos de execução são criados para fornecer a melhor seleção de bibliotecas para as tarefas e para garantir que todas as bibliotecas fornecidas estejam atualizadas e trabalhem juntas de forma otimizada. Os Databricks Runtimes são lançados em uma cadência regular, fornecendo melhorias de desempenho entre as principais versões. Essas melhorias de desempenho geralmente resultam em economia de custos devido ao uso mais eficiente dos recursos de computação.
Use GPUs apenas para as cargas de trabalho certas
As máquinas virtuais com GPUs podem acelerar drasticamente os cálculos para aprendizagem profunda, mas são significativamente mais caras do que as máquinas apenas com CPU. Use instâncias de GPU apenas para cargas de trabalho com bibliotecas aceleradas por GPU.
A maioria das cargas de trabalho não usa bibliotecas aceleradas por GPU, portanto, elas não se beneficiam de instâncias habilitadas para GPU. Os administradores de espaço de trabalho podem restringir máquinas GPU e recursos de computação para evitar o uso desnecessário. Veja a postagem do blog "As GPUs são realmente caras? Benchmarking de GPUs para inferência em clusters Databricks".
Use serviços sem servidor para suas cargas de trabalho
Casos de uso de BI
As cargas de trabalho de BI normalmente consomem dados em intermitências e geram várias consultas simultâneas. Por exemplo, alguém usando uma ferramenta de BI pode atualizar um painel ou escrever uma consulta e, em seguida, simplesmente analisar os resultados sem mais interação com a plataforma. Neste cenário, a plataforma de dados:
- Encerra recursos de computação ociosos para economizar custos.
- Fornece rapidamente os recursos de computação quando o usuário solicita dados novos ou atualizados com a ferramenta de BI.
Os armazéns SQL do Azure Databricks não sem servidor têm um tempo de inicialização de minutos, portanto, muitos usuários tendem a aceitar o custo mais alto e não os encerram durante períodos ociosos. Por outro lado, os armazéns SQL sem servidor são iniciados e dimensionados em segundos, de modo que tanto a disponibilidade instantânea quanto o encerramento ocioso podem ser alcançados. Isso resulta em uma ótima experiência do usuário e economia de custos gerais.
Além disso, os armazéns SQL sem servidor diminuem mais cedo do que os armazéns sem servidor, mais uma vez, resultando em custos mais baixos.
Atendimento ao modelo de ML e IA
A maioria dos modelos são servidos como uma API REST para integração em seu aplicativo web ou cliente; O serviço de atendimento de modelo recebe cargas variáveis de solicitações ao longo do tempo, e uma plataforma de atendimento de modelo deve sempre fornecer recursos suficientes, mas apenas quantos forem realmente necessários (upscaling e downscaling).
O Mosaic AI Model Serving usa computação sem servidor e fornece um serviço altamente disponível e de baixa latência para a implantação de modelos. O serviço aumenta ou diminui automaticamente a escala para atender às mudanças na demanda, reduzindo os custos de infraestrutura e otimizando o desempenho da latência.
Use o tipo de instância correto
O uso da última geração de tipos de instância de nuvem quase sempre oferece benefícios de desempenho, pois oferecem o melhor desempenho e os recursos mais recentes.
Com base em suas cargas de trabalho, também é importante escolher a família de instâncias certa para obter a melhor relação desempenho/preço. Algumas regras simples são:
- Memória otimizada para cargas de trabalho de ML, shuffle pesado e derramamento
- Computação otimizada para cargas de trabalho de streaming estruturado e trabalhos de manutenção (como otimização e vácuo)
- Armazenamento otimizado para cargas de trabalho que se beneficiam do cache, como análise de dados ad-hoc e interativa
- GPU otimizada para cargas de trabalho específicas de ML e DL
- Objetivo geral na ausência de requisitos específicos
Escolha o tamanho de computação mais eficiente
O Azure Databricks é executado num executor por nó de trabalho. Portanto, os termos executor e trabalho são utilizados como sinónimos no contexto da arquitetura Azure Databricks. Muitas vezes as pessoas pensam no tamanho do cluster em termos de funções de trabalho, mas existem outros fatores importantes a considerar:
- Total de núcleos executores (computação): O número total de núcleos em todos os executores. Isso determina o paralelismo máximo de uma instância de computação.
- Memória total do executor: A quantidade total de RAM em todos os executores. Isso determina a quantidade de dados que podem ser armazenados na memória antes de vazá-los para o disco.
- Armazenamento local do executor: o tipo e a quantidade de armazenamento em disco local. O disco local é usado principalmente no caso de derramamentos durante embaralhamentos e cache.
Considerações adicionais incluem o tipo e o tamanho da instância do trabalhador, que também influenciam os fatores anteriores. Ao dimensionar sua computação, considere o seguinte:
- Quantos dados sua carga de trabalho consumirá?
- Qual é a complexidade computacional da sua carga de trabalho?
- De onde você está lendo os dados?
- Como os dados são particionados no armazenamento externo?
- De quanto paralelismo você precisa?
Detalhes e exemplos podem ser encontrados em Considerações sobre dimensionamento computacional.
Avaliar mecanismos de consulta com desempenho otimizado
Photon é um mecanismo de consulta vetorizada nativo de Databricks de alto desempenho que acelera suas cargas de trabalho SQL e chamadas de API DataFrame (para ingestão de dados, ETL, streaming, ciência de dados e consultas interativas). O Photon é compatível com APIs do Apache Spark, portanto, começar é tão fácil quanto ativá-lo – sem alterações de código e sem bloqueio.
A aceleração observada pode levar a economias de custos significativas, e os trabalhos que funcionam regularmente devem ser avaliados para ver se não são apenas mais rápidos, mas também mais baratos com o Photon.
2. Alocar recursos dinamicamente
Usar computação de dimensionamento automático
Com o dimensionamento automático, o Databricks realoca dinamicamente os trabalhadores para levar em conta as características do seu trabalho. Certas partes do seu pipeline podem ser mais intensivas computacionalmente do que outras, e o Databricks adiciona automaticamente trabalhadores adicionais durante essas fases do seu trabalho (e os remove quando não são mais necessários). O dimensionamento automático pode reduzir os custos gerais em comparação com uma instância de computação de tamanho estático.
O dimensionamento automático de computação tem limitações ao reduzir o tamanho do cluster para cargas de trabalho de streaming estruturadas. O Databricks recomenda o uso do Delta Live Tables com dimensionamento automático aprimorado para cargas de trabalho de streaming.
Usar terminação automática
O Azure Databricks fornece vários recursos para ajudar a controlar custos, reduzindo recursos ociosos e controlando quando os recursos de computação podem ser implantados.
- Configure a terminação automática para todos os recursos de computação interativos. Após um tempo ocioso especificado, o recurso de computação é desligado. Consulte Rescisão automática.
- Para casos de uso em que a computação é necessária apenas durante o horário comercial, os recursos de computação podem ser configurados com terminação automática e um processo agendado pode reiniciar a computação (e possivelmente pré-aquecer dados, se necessário) pela manhã antes que os usuários voltem aos seus desktops. ver CACHE SELECT.
- Se os tempos de inicialização da computação forem muito longos, considere o uso de pools de clusters, consulte Práticas recomendadas de pool. Os pools do Azure Databricks são um conjunto de instâncias ociosas e prontas para uso. Quando os nós de cluster são criados usando as instâncias ociosas, os tempos de início e dimensionamento automático do cluster são reduzidos. Se os pools não tiverem instâncias ociosas, os pools serão expandidos alocando uma nova instância do provedor de instâncias para acomodar a solicitação do cluster.
O Azure Databricks não cobra Unidades Databricks (DBUs) enquanto as instâncias estão ociosas no pool, resultando em economia de custos. A cobrança do provedor de instância se aplica.
Usar políticas de computação para controlar custos
As políticas de computação podem impor muitas restrições específicas de custo para recursos de computação. Consulte Excelência operacional - Usar políticas de computação. Por exemplo:
- Habilite o dimensionamento automático de cluster com um número mínimo definido de nós de trabalho.
- Habilite a terminação automática do cluster com um valor razoável (por exemplo, 1 hora) para evitar pagar por tempos ociosos.
- Certifique-se de que apenas instâncias de VM econômicas possam ser selecionadas. Siga as práticas recomendadas para configuração de cluster. Consulte Recomendações de configuração de computação.
- Aplique uma estratégia de instância spot.
3. Monitorizar e controlar os custos
Monitorizar os custos
Use o Azure Cost Manager para analisar os custos do Azure Databricks. As tags de Computação e Espaço de Trabalho também são entregues ao Gerenciador de Custos do Azure. Consulte Agrupamentos de tags para atribuição de custos.
Agrupamentos de tags para atribuição de custos
Para monitorar os custos em geral e atribuir com precisão o uso do Azure Databricks às unidades de negócios e equipes da sua organização para fins de estorno, você pode marcar clusters, armazéns SQL e pools. Essas tags se propagam para unidades detalhadas de Databricks (DBU) e uso de armazenamento de blob e VM do provedor de nuvem para análise de custos.
Certifique-se de que o controle de custos e a atribuição sejam considerados ao configurar espaços de trabalho e clusters para equipes e casos de uso. Isso simplifica a marcação e melhora a precisão da atribuição de custos.
Os custos totais incluem a máquina virtual DBU, o disco e quaisquer custos de rede associados. Para armazéns SQL sem servidor, o custo da DBU já inclui os custos da máquina virtual e do disco.
As tags dos recursos do Azure Databricks podem ser usadas nas ferramentas de análise de custos no Portal do Azure
Implemente a observabilidade para rastrear e estorno de custos
Ao trabalhar com ecossistemas técnicos complexos, compreender proativamente as incógnitas é fundamental para manter a estabilidade da plataforma e controlar os custos. A observabilidade fornece uma maneira de analisar e otimizar sistemas com base nos dados que eles geram. Isso é diferente do monitoramento, que se concentra na identificação de novos padrões em vez de rastrear problemas conhecidos.
O Databricks fornece grandes recursos de observabilidade usando tabelas do Sistema que são armazenamentos analíticos hospedados pelo Databricks dos dados operacionais de uma conta de cliente encontrados no catálogo do sistema. Eles fornecem observabilidade histórica em toda a conta e incluem informações tabulares fáceis de usar na telemetria da plataforma.
Veja o Blog: Equilibre de forma inteligente a otimização de custos e a confiabilidade no Databricks
Partilhe relatórios de custos regularmente
Gere relatórios de custos mensais para acompanhar o crescimento do consumo e anomalias. Compartilhe esses relatórios por caso de uso ou equipe com as equipes proprietárias das cargas de trabalho usando a marcação de cluster. Isso elimina surpresas e permite que as equipes ajustem proativamente suas cargas de trabalho se os custos se tornarem muito altos.
Monitore e gerencie os custos de saída do Delta Sharing
Ao contrário de outras plataformas de partilha de dados, o Delta Sharing não requer replicação de dados. Este modelo tem muitas vantagens, mas significa que o fornecedor da cloud pode cobrar taxas de saída de dados quando partilha dados entre clouds ou regiões. Consulte Monitorar e gerenciar os custos de saída do Delta Sharing (para provedores) para monitorar e gerenciar as cobranças de saída.
4. Projete cargas de trabalho econômicas
Equilibre o streaming sempre ativo e acionado
Tradicionalmente, quando as pessoas pensam em streaming, termos como "tempo real", "24/7" ou "sempre ligado" vêm à mente. Se a ingestão de dados ocorrer em tempo real, os recursos de computação subjacentes devem ser executados 24 horas por dia, 7 dias por semana, incorrendo em custos a cada hora do dia.
No entanto, nem todos os casos de uso que dependem de um fluxo contínuo de eventos exigem que esses eventos sejam adicionados imediatamente ao conjunto de dados de análise. Se o requisito de negócios para o caso de uso exigir apenas dados atualizados a cada poucas horas ou todos os dias, esse requisito pode ser atendido com apenas algumas execuções por dia, resultando em uma redução significativa no custo da carga de trabalho. O Databricks recomenda o uso do Streaming Estruturado com o gatilho AvailableNow
para cargas de trabalho incrementais que não têm requisitos de baixa latência. Consulte Configurando o processamento incremental em lote.
Equilíbrio entre instâncias sob demanda e excesso de capacidade
As instâncias spot aproveitam o excesso de recursos de máquina virtual na nuvem que estão disponíveis a um preço mais baixo. Para economizar custos, o Azure Databricks dá suporte à criação de clusters usando instâncias spot. O Databricks recomenda que a primeira instância (o driver Spark) seja sempre uma máquina virtual sob demanda. As instâncias spot são uma boa opção para cargas de trabalho em que é aceitável levar mais tempo porque uma ou mais instâncias spot foram removidas pelo provedor de nuvem.