Os principais provedores de serviços de nuvem, como Amazon Web Services (AWS), Google Cloud Platform (GCP) e MS Azure, fornecem uma ampla gama de serviços gerenciados altamente eficientes e escaláveis, abrangendo armazenamento, computação, bancos de dados e muito mais. Essas plataformas não exigem profunda experiência em gerenciamento de infraestrutura, mas, se usadas de forma imprudente, podem aumentar consideravelmente suas despesas.
Aqui estão algumas diretrizes valiosas para mitigar o risco de suas cargas de trabalho de aprendizado de máquina (ML) causarem pressão indevida em suas despesas com nuvem.
Preparação: Estabelecendo a base para a avaliação financeira
O velho ditado sabiamente afirma: “Você não pode otimizar o que não mede”. Assim, o passo principal na jornada de otimização de custos é compreender completamente seu cenário financeiro atual. Isso envolve um exame meticuloso de suas despesas e suas complexidades subjacentes.
A maioria das plataformas de nuvem fornece funcionalidades fundamentais de rastreamento de custos, permitindo que você divida as despesas por serviço ou região geográfica. Envolva-se em um discurso produtivo com seu administrador de nuvem designado para obter acesso e examinar minuciosamente esses relatórios financeiros.
Para entender melhor suas despesas, é aconselhável implementar um rastreamento abrangente em nível de banco de dados. Isso envolve examinar meticulosamente as implicações financeiras de vários modelos, equipes e conjuntos de dados de machine learning.
Utilizar consultas SQL
Comece esta jornada alavancando consultas SQL em seus bancos de dados de metadados. Esta abordagem permite que você descubra insights inestimáveis, como identificar quais trabalhos de treinamento colocam a demanda mais substancial em recursos, avaliar a duração de cada trabalho e determinar a frequência de falhas de trabalho.
Fortalecer os mecanismos de rastreamento
Estabelecendo mecanismos de rastreamento robustos dentro de sua plataforma de Machine Learning garante antecipadamente que você tenha a infraestrutura necessária para capturar e armazenar dados financeiros pertinentes.
Automação e eficiência
Para agilizar o processo de análise e relatórios de dados, considere automatizar essas consultas. Isso pode ser alcançado aproveitando os recursos de ferramentas de análise amplamente reconhecidas, como Tableau ou Looker, tornando o processo de avaliação financeira mais eficiente e gerenciável.
Em casos em que você depende de uma plataforma de Machine Learning supervisionada por uma equipe dedicada, é conveniente colaborar com eles para instituir o rastreamento em nível de aplicativo. Essa iniciativa facilita a geração automática de tabelas de classificação de custos em várias dimensões, abrangendo usuários, equipes, projetos, modelos e intervalos de tempo designados. Além disso, você pode impor cotas de recursos bem definidas para governar as despesas de forma mais granular, incutindo prudência fiscal em toda a sua estrutura organizacional.
Otimização gratuita de custos de nuvem e gerenciamento aprimorado de recursos de ML/IA para toda a vida
Pontos de verificação
Parada preventiva
Adiar o escrutínio dos frutos de um trabalho de treinamento até a décima primeira hora, apenas para descobrir um rendimento decepcionante, equivale a um profundo desperdício de recursos. Idealmente, você deve ser capaz de avaliar o desempenho do seu modelo conforme a jornada de treinamento se desenrola, capacitando-o a decidir se deve desistir mais cedo.
Essa abordagem criteriosa pode ser atualizada por meio de avaliações periódicas do desempenho do modelo usando seus pontos de verificação. Suponha que sua plataforma de Machine Learning permita que você monitore métricas vitais em andamento (como perda ou precisão de amostra de validação) ou extraia esses dados de pontos de verificação. Nesse caso, ela o equipa com a astúcia para restringir esforços intensivos em recursos antes que eles consumam seus ativos infrutiferamente.
Reinicia com um toque quente
Em esforços prolongados de treinamento, o espectro de um trabalho que não atinge seu objetivo final paira grande. Tais contratempos podem se manifestar por muitas razões: falhas de codificação, soluços transitórios (como falhas de rede), restrições de memória, etc. Quem entre nós não experimentou a dor de um trabalho de treinamento vacilando no precipício da conclusão após investir horas ou mesmo dias?
Para navegar neste terreno precário, a solução de “reinícios quentes” acena. O ponto crucial desta estratégia está em não reiniciar o treinamento do zero, mas sim continuar de onde o último trabalho parou. Esta abordagem depende de dois pilares fundamentais:
Pontos de verificação em espera: Salve seus checkpoints de modelo diligentemente em um meio de armazenamento resiliente, seja um repositório baseado em nuvem ou um local robusto semelhante, em intervalos regulares (talvez após cada época). Por exemplo, o PyTorch fornece convenientemente APIs para criar e armazenar checkpoints de modelo. É fundamental garantir que esses checkpoints sejam armazenados em um local não influenciado pela natureza efêmera do armazenamento, como o disco de curta duração de um pod do Kubernetes.
Pronto para reiniciar: Modifique seu código de treinamento para facilitar o carregamento de um checkpoint precedente na inicialização. Isso pode ser materializado por meio de um argumento de entrada opcional que direciona o código para um checkpoint existente.
A fusão de pontos de verificação e tentativas automáticas concede às suas cargas de trabalho o poder de se recuperar de adversidades e retomar as operações do ponto de interrupção.
Armazenamento em cache
Cache de computação
No desenvolvimento de modelos de Machine Learning, é esperado executar a mesma carga de trabalho repetidamente com várias entradas e configurações conforme você ajusta seu modelo. Você experimenta diferentes hiperparâmetros, arquiteturas de modelo e muito mais. No entanto, é essencial reconhecer que alguns segmentos do seu código de treinamento permanecem relativamente estáticos ou totalmente inalterados em execuções sucessivas.
Considere, por exemplo, um cenário em que seu pipeline de treinamento envolve tarefas de pré-processamento de dados que preparam os dados de entrada para treinamento. Suponha que você esteja focado atualmente em ajustar sua arquitetura de modelo. Em tais casos, é prudente implementar uma estratégia para armazenar em cache o conjunto de dados de treinamento, poupando-o da regeneração durante cada iteração. Isso não apenas conserva os custos de transferência de dados, mas também otimiza o tempo.
Para implementar o cache de forma eficaz, siga estas etapas:
Transformação modular: Garanta que os estágios sucessivos de transformação no seu código sejam modulares e bem definidos, encapsulados como unidades distintas, como funções, cada uma com contratos de dados claros.
Saída persistente: Salve o trabalho de cada estágio de transformação usando uma chave de armazenamento, que pode ser designada explicitamente pelo usuário (uma string especificada pelo usuário) ou gerada implicitamente a partir de argumentos de entrada.
Recuperação eficiente: Configure seu código para reconhecer quando a mesma chave for fornecida. Em vez de reexecutar a carga de trabalho de transformação, ele deve recuperar e utilizar o valor armazenado em cache, aumentando a eficiência.
Cache de dados para acesso rápido
Mesmo que você esteja alterando configurações de entrada com cada execução do seu código de treinamento e não consiga armazenar tarefas em cache, você acessará repetidamente os mesmos dados. Dependendo de onde suas cargas de trabalho estão hospedadas, armazenar esses dados em cache nos recursos de computação ou próximo a eles pode ser viável.
Por exemplo, se sua carga de trabalho opera dentro de um ambiente de Máquina Virtual (VM) em nuvem, como uma instância EC2 na AWS, você pode armazenar alguns dos seus dados de treinamento diretamente na VM para acesso significativamente mais rápido e econômico. Claro, é improvável que todo o conjunto de dados caiba no disco, necessitando da implementação de um sistema de coleta de lixo Least Recently Used (LRU). Soluções comerciais permitem montar um cache S3 local diretamente em suas VMs, oferecendo acessibilidade de dados eficiente.
Otimizando a utilização da GPU para eficiência de custos
Os recursos de GPU estão entre os mais caros no cenário de computação em nuvem. Quando sua máquina virtual de GPU está ociosamente envolvida em tarefas como download de dados, processamento de CPU ou carregamento de dados na memória, ela permanece subutilizada, traduzindo-se efetivamente em desperdício de gastos.
Bibliotecas e estruturas otimizadas para GPU
Aproveite bibliotecas e frameworks otimizados para GPU para Machine Learning, como CUDA, cuDNN e TensorRT. Essas ferramentas são projetadas para aproveitar todo o potencial das GPUs e oferecer implementações eficientes de operações conjuntas, aumentando, em última análise, a utilização da GPU.
Gerenciamento de memória eficiente
Maximizar a utilização da memória da GPU é essencial. Minimize transferências de dados desnecessárias entre a CPU e a GPU retendo dados na GPU sempre que possível. Se as restrições de memória representarem desafios, explore técnicas de otimização de memória, como compactação de dados ou empregando tipos de dados menores para reduzir a pegada de memória.
Criação de perfil e otimização
Crie um perfil da utilização da sua GPU usando ferramentas especializadas fornecidas pelo seu fornecedor de GPU ou frameworks relevantes. Esse perfil permite que você identifique potenciais gargalos ou áreas onde os recursos da GPU são subutilizados. Com esses insights, otimize seu código, pipeline de dados e arquitetura de modelo para aprimorar a utilização da GPU nessas áreas identificadas, garantindo alocação eficiente de recursos.
Carregamento de dados simplificado
Otimize seu processo de carregamento de dados para garantir um fluxo contínuo de dados para a GPU. Reduza a sobrecarga de transferência de dados pré-processando e pré-carregando dados na GPU com antecedência, facilitando computações ininterruptas da GPU. Essa prática é essencial para o uso econômico da GPU.
Operações assíncronas
Aproveite ao máximo as operações assíncronas sempre que aplicável para manter a GPU engajada. Transferências de dados assíncronas, inicializações de kernel e computações podem se sobrepor, permitindo que a GPU execute multitarefas, melhorando assim a utilização geral.
A utilização eficiente da GPU reduz custos e acelera a execução de tarefas de aprendizado de máquina, melhorando a produtividade dos seus recursos de GPU baseados na nuvem.
Estratégias de infraestrutura com boa relação custo-benefício
Instâncias spot e VMs preemptivas
Alguns provedores de nuvem oferecem instâncias spot ou VMs preemptivas a preços significativamente reduzidos em comparação com instâncias on-demand. O provedor pode recuperar essas instâncias a qualquer momento, mas se sua carga de trabalho for flexível e tolerante a falhas, utilizar essas opções de menor custo pode gerar economias de custo substanciais.
Otimizar tipos de instância
Os provedores de nuvem oferecem uma variedade de tipos de instâncias com diferentes características de desempenho e custos. Analise seus requisitos de carga de trabalho e escolha o tipo de instância que fornece poder computacional sem superprovisionamento. Considere opções como instâncias burstable ou GPU se elas se alinharem com sua carga de trabalho.
Opte pelo provedor de nuvem e modelo de preços corretos
Os provedores de nuvem oferecem estruturas de preços variadas para serviços de machine learning. Compare os modelos de preços, tipos de instância e opções disponíveis para selecionar a solução mais econômica. Alguns provedores também oferecem preços com desconto para compromissos de longo prazo ou instâncias spot, o que pode reduzir significativamente os custos.
Aproveite o dimensionamento automático
Aproveite os recursos de dimensionamento automático oferecidos pelos provedores de nuvem para ajustar o número de instâncias automaticamente com base na demanda. Aumente ou diminua seus recursos dinamicamente para corresponder à carga de trabalho, garantindo que você pague apenas pelo que precisa.
Otimizar dados e calcular posicionamento
As transferências de dados na nuvem têm um preço, e configurações incorretas podem ser financeiramente desgastantes. Por exemplo, mover dados entre regiões da AWS é consideravelmente mais caro do que mantê-los na mesma região, e exportar dados do S3 para fora do ecossistema da AWS incorre em um aumento substancial de custo.
Consequentemente, garantir que suas cargas de trabalho operem dentro da mesma Zona de Disponibilidade que seu armazenamento de dados é primordial. Deixar de colocalizar dados e computação também pode inflar suas despesas computacionais, pois suas máquinas virtuais ficam ociosas enquanto transferem dados em vez de aproveitar seus recursos de CPU/GPU de forma eficiente.
Melhorando a eficiência de custos do Machine Learning além da infraestrutura de nuvem
As transferências de dados na nuvem têm um preço, e configurações incorretas podem ser financeiramente desgastantes. Por exemplo, mover dados entre regiões da AWS é consideravelmente mais caro do que mantê-los na mesma região, e exportar dados do S3 para fora do ecossistema da AWS incorre em um aumento substancial de custo.
Consequentemente, garantir que suas cargas de trabalho operem dentro da mesma Zona de Disponibilidade que seu armazenamento de dados é primordial. Deixar de colocalizar dados e computação também pode inflar suas despesas computacionais, pois suas máquinas virtuais ficam ociosas enquanto transferem dados em vez de aproveitar seus recursos de CPU/GPU de forma eficiente.
Gerenciamento de custos de engenharia
Em Machine Learning (ML), os engenheiros de ML representam ativos preciosos, porém caros. Para maximizar seus recursos, você deve garantir que cada engenheiro de ML esteja equipado e treinado para contribuir consistentemente para um trabalho de alto impacto. Esse objetivo pode ser alcançado por meio de várias estratégias vitais. Revisar e refinar regularmente os roteiros do projeto é crucial para despriorizar iniciativas de baixo impacto, concentrando recursos nas tarefas mais valiosas. Também é importante selecionar cuidadosamente ferramentas que maximizem a produtividade e a eficiência. Considere delegar tarefas específicas a equipes especializadas, como alavancar equipes de plataforma e infraestrutura para trabalho relacionado ao sistema. Por fim, estabeleça processos robustos de compartilhamento de conhecimento para facilitar o crescimento de engenheiros menos experientes, promovendo uma cultura de colaboração e aprendizado contínuo.
Controlando os custos de etiquetagem
A rotulagem de dados é uma etapa fundamental no processo de ML, muitas vezes dependendo de esforços humanos e incorrendo em custos substanciais. Várias estratégias entram em jogo para otimizar e economizar esse aspecto do ML. Em primeiro lugar, garantir que apenas dados de alta alavancagem sejam submetidos à rotulagem manual é essencial. Isso significa focar em eventos raros que são sub-representados em seu conjunto de dados de treinamento, o que pode levar a falhas significativas de produção. Rotular dados redundantemente nos quais seu modelo já tem um bom desempenho é desnecessário e caro. Em segundo lugar, aproveitar técnicas de rotulagem automática pode mudar o jogo. Enquanto métodos automatizados podem não fornecer rótulos da mesma qualidade que os rotuladores humanos, eles são altamente eficazes para tipos de dados específicos. Empregar modelos mais simples, heurísticas algorítmicas ou técnicas de mineração de dados pode reduzir substancialmente o volume de dados que exigem rotulagem manual. Essas estratégias não apenas reduzem custos, mas também aumentam a eficiência do processo de rotulagem em ML.
Conclusão
Cargas de trabalho de ML são caras devido à dependência de conjuntos de dados extensos e recursos de computação robustos. Grandes empresas de ML alocam equipes inteiras para monitorar e otimizar custos meticulosamente.
No entanto, isso não implica que o controle de custos esteja fora de alcance para operações de menor escala. Por meio de planejamento meticuloso, deliberação ponderada e otimização diligente, uma redução significativa de custos pode ser alcançada enquanto avança o desenvolvimento e o desempenho do seu modelo.
✔️ Você quer que suas operações de nuvem e ML/AI estejam sob controle e que suas despesas atendam às suas expectativas? Avalie as capacidades e o potencial de uma plataforma de código aberto OptScale → https://hystax.com/introducing-optscale-public-release-an-open-source-powerhouse-for-finops-and-mlops/
A Hystax OptScale oferece uma plataforma MLOps e FinOps para entusiastas de nuvem e ML/IA que está totalmente disponível no Apache 2.0 no GitHub → https://github.com/hystax/optscale