Compartilhar via


Princípios de design para cargas de trabalho de IA no Azure

Este artigo descreve os princípios básicos para cargas de trabalho de IA no Azure com foco nos aspectos de IA de uma arquitetura. É essencial considerar todos os pilares do Well-Architected Framework coletivamente, incluindo suas compensações. Aplique cada pilar aos requisitos funcionais e não funcionais da carga de trabalho.

Confiabilidade

As cargas de trabalho de IA em execução no Azure devem considerar muitos dos mesmos requisitos de confiabilidade que outras classes de cargas de trabalho. No entanto, considerações específicas para treinamento, hospedagem e inferência de modelos são particularmente importantes e são abordadas principalmente neste princípio. É importante observar que as práticas descritas aqui são adicionais às práticas recomendadas de design padrão para aplicativos em nuvem e devem ser integradas de acordo.

Revise os princípios de design de confiabilidade para obter uma compreensão básica dos conceitos descritos aqui.

Princípio de design Considerações
Mitigar pontos únicos de falha. Depender de uma única instância para componentes críticos pode levar a problemas significativos. Para evitar isso, crie redundância em todos os componentes críticos. Use plataformas com tolerância a falhas e recursos internos de alta disponibilidade e implemente redundância implantando várias instâncias ou nós.
Realize a análise do modo de falha.

Aproveite os padrões de design bem conhecidos.
Analise regularmente possíveis modos de falha nos componentes do sistema e crie resiliência contra essas falhas. Utilize padrões de design conhecidos para isolar partes do seu sistema e evitar falhas em cascata. Por exemplo, o padrão de anteparo pode ajudar a isolar falhas, enquanto os mecanismos de repetição e os disjuntores podem lidar com erros transitórios, como solicitações de limitação.
Equilibre os objetivos de confiabilidade entre os componentes dependentes. Certifique-se de que o ponto de extremidade de inferência, ou modelo, e o armazenamento de dados estejam alinhados em termos de confiabilidade. Os componentes do aplicativo devem permanecer disponíveis mesmo em condições inesperadas, como um aumento no número de usuários simultâneos. Além disso, a carga de trabalho deve ter a capacidade de fazer failover para sistemas de backup em caso de falhas. Se um componente falhar, isso afetará a confiabilidade do outro.

Da mesma forma, as APIs da camada de serviço, sendo recursos de produção críticos, devem aderir aos mesmos padrões de confiabilidade que outros fluxos de carga de trabalho de alta criticidade. Se essas APIs exigirem alta disponibilidade, a plataforma de hospedagem deverá oferecer suporte a zonas de disponibilidade ou a um design multirregional para garantir operação e resiliência contínuas.
Design para confiabilidade operacional. Mantenha a confiabilidade das respostas do modelo, garantindo que as atualizações sejam frequentes e oportunas. Decida se deseja usar dados recentes ou se dados um pouco mais antigos são suficientes, equilibrando a necessidade de informações atualizadas com a praticidade da frequência de atualização. O treinamento online deve ser automatizado devido aos seus requisitos de frequência e confiabilidade, enquanto o treinamento offline pode ser justificado por meio de uma análise de custo-benefício e realizado usando recursos mais baratos.
Design para uma experiência de usuário confiável. Use o teste de carga para avaliar como sua carga de trabalho lida com o estresse e projete sua interface do usuário para gerenciar as expectativas do usuário em relação aos tempos de resposta. Implemente elementos de interface do usuário que informem os usuários sobre possíveis tempos de espera e adote princípios de design de nuvem assíncronos para lidar com intermitência, latência ou falhas.

Segurança

Os modelos geralmente usam dados de produção confidenciais para produzir resultados relevantes. Portanto, medidas de segurança robustas devem ser usadas em todas as camadas da arquitetura. Isso inclui a implementação de um design de aplicativo seguro no início do ciclo de vida, criptografando dados em repouso e em trânsito e aderindo aos padrões de conformidade do setor. Avaliações regulares de segurança são cruciais para identificar e mitigar vulnerabilidades, enquanto mecanismos avançados de detecção de ameaças garantem respostas imediatas a possíveis ameaças.

Os princípios de segurança são fundamentais para soluções de IA, protegendo a integridade dos dados, a integridade do design e a privacidade do usuário. Como proprietário da carga de trabalho, você é responsável por criar confiança e proteger informações confidenciais, garantindo uma experiência de usuário segura.

Princípio de design Considerações
Ganhe a confiança do usuário. Integre a segurança do conteúdo em todas as etapas do ciclo de vida usando código personalizado, ferramentas apropriadas e controles de segurança eficazes.

Remova informações pessoais e confidenciais desnecessárias em todos os pontos de armazenamento de dados, incluindo armazenamentos de dados agregados, índices de pesquisa, caches e aplicativos. Mantenha esse nível de segurança de forma consistente em toda a arquitetura.

Certifique-se de que haja moderação de conteúdo completa que inspecione os dados em ambas as direções e filtre conteúdo impróprio e ofensivo.
Proteja os dados em repouso, em trânsito e em uso de acordo com os requisitos de confidencialidade da carga de trabalho. No mínimo, use criptografia no nível da plataforma com chaves gerenciadas pela Microsoft ou gerenciadas pelo cliente em todos os armazenamentos de dados usados na arquitetura. Avalie onde você precisa de níveis mais altos de criptografia e use criptografia dupla, se necessário.

Certifique-se de que todo o tráfego use HTTPS para criptografia. Decida sobre os pontos de terminação TLS em cada salto.

O modelo em si precisa ser protegido para impedir que invasores extraiam informações confidenciais usadas durante o treinamento. Isso requer o mais alto nível de medidas de segurança. Considere o uso de criptografia homomórfica que permite a inferência de dados criptografados.
Invista em um gerenciamento de acesso robusto para preservar as identidades (usuário e sistema) que acessam o sistema. Implemente o RBAC (Controle de Acesso Baseado em Função) e/ou o ABAC (Controle de Acesso Baseado em Atributos) para planos de controle e de dados.

Mantenha a segmentação de identidade adequada para proteger a privacidade, permitindo apenas o acesso ao conteúdo que eles estão autorizados a visualizar.
Proteja a integridade do projeto por meio da segmentação. Forneça rede privada para acesso a repositórios centralizados para imagens de contêiner, dados e ativos de código.

Ao compartilhar a infraestrutura com outras cargas de trabalho cria segmentação, por exemplo, ao hospedar seu servidor de inferência no AKS, o pool de nós deve ser isolado de outras APIs ou de qualquer outra carga de trabalho.
Realize testes de segurança. Desenvolva um plano de teste detalhado que inclua testes para detectar comportamentos antiéticos sempre que mudanças forem introduzidas no sistema.

Integre componentes de IA em seus testes de segurança existentes. Por exemplo, incorpore o endpoint de inferência em seus testes de rotina junto com outros endpoints públicos.

Considere a realização de testes no sistema ativo, como testes de penetração ou exercícios de equipe vermelha, para identificar e resolver possíveis vulnerabilidades de forma eficaz.
Reduza a superfície de ataque impondo o acesso estrito do usuário e o design da API. Exigir autenticação para todos os pontos de extremidade de inferência, incluindo chamadas de sistema para sistema. Evite pontos de extremidade anônimos.

Prefira o design de API restrito ao custo da flexibilidade do lado do cliente.

Troca. Fornecer a mais alta segurança tem compensações em custo e precisão porque a capacidade de analisar, inspecionar ou registrar os dados criptografados é limitada. As verificações de segurança de conteúdo e a obtenção de explicabilidade também podem ser desafiadoras em ambientes altamente seguros.

Essas áreas de design fornecem detalhes sobre os princípios e considerações anteriores:

Otimização de custos

O pilar de Otimização de Custos visa maximizar o investimento, não necessariamente reduzir custos. Cada escolha arquitetônica acarreta impactos financeiros diretos e indiretos. Entenda os custos vinculados a várias opções, incluindo decisões de construção versus compra, seleções de tecnologia, modelos de cobrança, licenciamento, treinamento e despesas operacionais. É importante maximizar seu investimento no nível selecionado e reavaliar continuamente os modelos de cobrança. Avalie continuamente os custos associados a mudanças na arquitetura, necessidades de negócios, processos e estrutura da equipe.

Revise os princípios de Otimização de Custos com foco na otimização de taxa e uso.

Princípio de design Considerações
Determine os direcionadores de custo fazendo um exercício abrangente de modelagem de custos. Considere os principais fatores da plataforma de dados e aplicativos:
- Volume de dados. Estime a quantidade de dados que você indexará e processará. Volumes maiores podem aumentar os custos de armazenamento e processamento.
- Número de consultas. Preveja a frequência e a complexidade das consultas. Volumes de consulta mais altos podem aumentar os custos, especialmente se exigirem recursos computacionais significativos.
- Taxa de transferência. Avalie a taxa de transferência esperada, o que afeta o nível de desempenho necessário. Demandas de rendimento mais altas podem levar a custos mais altos.
- Custos de dependência. Pode haver custos ocultos nas dependências. Por exemplo, ao calcular o custo do índice, inclua o custo do conjunto de habilidades, que faz parte do processamento de dados, mas está fora do escopo do índice.
Pague pelo que pretende usar. Escolha uma solução de tecnologia que atenda às suas necessidades sem incorrer em despesas desnecessárias. Se recursos avançados não forem necessários, considere opções mais econômicas e ferramentas de código aberto.

Considere a frequência de uso. Prefira opções de computação elástica para ferramentas de orquestração para minimizar os custos de utilização, pois elas estão sempre ativas. Evite a computação sem servidor para operações em tempo integral devido ao possível aumento de custos.

Não pague por níveis mais altos sem utilizar toda a sua capacidade. Certifique-se de que o nível escolhido esteja alinhado com seus padrões de uso de produção para otimizar os gastos. Use preços padrão para tarefas regulares e preços spot para treinamento altamente interruptível. Use a computação baseada em GPU apenas para funções de carga de trabalho de IA para reduzir custos.

Teste e compare extensivamente seu treinamento e ajuste fino para encontrar o SKU ideal que equilibre desempenho e custo.
Use o que você paga. Minimize o desperdício. Monitore as métricas de utilização de perto. As cargas de trabalho de IA podem ser caras e os custos podem aumentar rapidamente se os recursos não forem desligados, reduzidos ou desalocados quando não estiverem em uso.

Otimize o sistema para escrever uma vez, leia muitos para evitar gastos excessivos com armazenamento de dados. Os dados de treinamento não precisam da capacidade de resposta instantânea de um banco de dados de produção.

O teste de estresse de um ponto de extremidade de inferência do OpenAI do Azure pode ser caro devido aos encargos de cada chamada. Para reduzir custos, use PTUs não utilizadas da OpenAI em um ambiente de teste ou simule o endpoint de inferência.

Atividades como análise exploratória de dados (EDA), treinamento e ajuste fino de modelos normalmente não são executadas em tempo integral, prefira uma plataforma que possa ser interrompida quando não estiver em uso. Por exemplo, os trabalhos EDA geralmente são interativos, portanto, os usuários precisam ser capazes de iniciar VMs e interrompê-las enquanto executam trabalhos.

Defina responsabilidades de custo nas equipes de operações, que devem garantir que os custos permaneçam dentro dos parâmetros esperados, monitorando e gerenciando ativamente a utilização de recursos.
Otimize os custos operacionais. O treinamento online pode ser caro devido à sua natureza frequente. Automatizar esse processo ajuda a manter a consistência e minimiza os custos de erros humanos. Além disso, usar dados um pouco mais antigos para treinamento e atrasar atualizações, quando possível, pode reduzir ainda mais as despesas sem afetar significativamente a precisão do modelo.

Para treinamento offline, avalie se recursos mais baratos podem ser usados, como hardware offline.

Em geral, exclua dados de repositórios de recursos para reduzir a desordem e os custos de armazenamento dos recursos.

Compensação: Otimização de custos e eficiência de desempenho. Equilibrar o custo com o desempenho no gerenciamento de banco de dados envolve considerar compensações. O design eficiente do índice acelera as consultas, mas pode aumentar os custos devido ao gerenciamento de metadados e ao tamanho do índice. Da mesma forma, o particionamento de tabelas grandes pode melhorar o desempenho da consulta e reduzir a carga de armazenamento, mas incorre em custos adicionais. Por outro lado, técnicas que evitam a indexação excessiva podem reduzir custos, mas podem afetar o desempenho se não forem gerenciadas adequadamente.

Compensação: Otimização de custos e excelência operacional. Existem compensações nas duas abordagens principais para o treinamento de modelos. O treinamento no ambiente de desenvolvimento com dados de produção completos pode reduzir os custos computacionais treinando o modelo uma vez e promovendo apenas o artefato, mas requer medidas de segurança rigorosas para lidar com dados de produção em ambientes inferiores, que podem ser complexos e consumir muitos recursos. Por outro lado, treinar o modelo em cada ambiente aumenta a estabilidade e a confiabilidade por meio de revisão e teste completos de código, mas aumenta os custos computacionais devido a várias execuções de treinamento.

Excelência operacional

O objetivo principal é fornecer recursos de forma eficiente durante todo o ciclo de vida do desenvolvimento. Isso envolve o estabelecimento de processos repetíveis que suportam a metodologia de design de experimentação e produzem resultados para melhorar o desempenho do modelo. A excelência operacional também tem a ver com a precisão sustentada dos modelos ao longo do tempo, implementando práticas eficazes de monitoramento e governança para minimizar os riscos e desenvolvendo processos de gerenciamento de mudanças para se adaptar aos desvios do modelo.

Embora todos os princípios de Excelência Operacional se apliquem a cargas de trabalho de IA, priorize a automação e o monitoramento como suas estratégias operacionais fundamentais.

Princípio de design Considerações
Promova uma mentalidade de aprendizado e experimentação contínuos ao longo dos ciclos de vida de desenvolvimento de aplicativos, manipulação de dados e gerenciamento de modelos de IA. As operações de carga de trabalho devem se basear em metodologias comprovadas pelo setor, como DevOps, DataOps, MLOps e GenAIOps.

A colaboração antecipada entre as equipes de operações, desenvolvimento de aplicativos e dados é essencial para estabelecer um entendimento mútuo do desempenho aceitável do modelo. As equipes de operações fornecem sinais de qualidade e alertas acionáveis, enquanto as equipes de aplicativos e dados ajudam a diagnosticar e resolver problemas com eficiência.
Escolha tecnologias que minimizem a carga operacional. Ao escolher soluções de plataforma, prefira PaaS em vez de opções auto-hospedadas para simplificar o design, automatizar a orquestração do fluxo de trabalho e facilitar as operações de dia 2.
Crie um sistema de monitoramento automatizado que ofereça suporte à funcionalidade de alerta, incluindo registro em log e auditabilidade. Dada a natureza não determinística da IA, é importante estabelecer medições de qualidade no início do ciclo de vida. Trabalhe com cientistas de dados para definir métricas de qualidade, visualizar insights contínuos em painéis abrangentes.

Acompanhe experimentos por meio de ferramentas que podem capturar detalhes como versões de código, ambientes, parâmetros, execuções e resultados.

Implemente alertas acionáveis com informações suficientes para que os operadores respondam rapidamente.
Automatize a detecção e a mitigação do decaimento do modelo. Use testes automatizados para avaliar o desvio ao longo do tempo. Certifique-se de que seu sistema de monitoramento envie alertas quando as respostas começarem a se desviar dos resultados esperados e comece a fazê-lo regularmente. Use ferramentas que podem descobrir e atualizar automaticamente novos modelos.

Adapte-se a novos casos de uso ajustando o processamento de dados e a lógica de treinamento do modelo, conforme necessário.
Pratique implantações seguras. Escolha entre implantações lado a lado ou atualizações in-loco para minimizar o tempo de inatividade. Implemente testes completos antes da implantação para garantir que o modelo esteja configurado corretamente e atenda às metas, expectativas do usuário e padrões de qualidade. Sempre planeje operações de emergência, independentemente da estratégia de implantação.
Avalie continuamente a experiência do usuário na produção Permita que os usuários da carga de trabalho forneçam comentários sobre sua experiência e obtenham consentimento para compartilhar partes ou toda a conversa com um log associado para solução de problemas. Considere o quanto de uma interação do usuário é viável, compatível, segura e útil para capturar e usar os dados diligentemente para avaliar o desempenho de sua carga de trabalho com interações reais do usuário.

Essas áreas de design fornecem detalhes sobre os princípios e considerações anteriores:

Eficiência de desempenho

O objetivo da avaliação de desempenho do modelo de IA é determinar a eficácia com que um modelo realiza as tarefas pretendidas. Isso envolve a avaliação de várias métricas, como exatidão, precisão e justiça. Além disso, o desempenho dos componentes da plataforma e do aplicativo que suportam o modelo é crucial.

O desempenho do modelo também é influenciado pela eficiência de operações como rastreamento de experimentos e processamento de dados. A aplicação dos princípios de eficiência de desempenho ajuda a medir o desempenho em relação a um nível de qualidade aceitável, que é fundamental para detectar degradação ou decadência. Para manter a carga de trabalho, incluindo componentes de IA, são necessários processos automatizados para monitoramento e avaliação contínuos.

Princípio de design Considerações
Estabeleça benchmarks de desempenho. Realize testes de desempenho rigorosos em diferentes áreas arquitetônicas e defina metas aceitáveis. Essa avaliação contínua deve fazer parte de seus processos operacionais, não apenas um teste único.

O benchmarking se aplica ao desempenho de previsão. Comece com uma linha de base para entender o desempenho inicial do modelo e reavalie continuamente para garantir que ele atenda às expectativas.
Avalie as necessidades de recursos para atender às metas de desempenho. Entenda as características de carga para escolher a plataforma certa e os recursos do tamanho certo. Considere esses dados para que o planejamento de capacidade opere em escala.

Por exemplo, use o teste de carga para determinar a plataforma de computação e o SKU ideais. A computação otimizada para GPU de alto desempenho geralmente é necessária para treinamento e ajuste fino de modelos, enquanto os SKUs de uso geral são adequados para ferramentas de orquestração.

Da mesma forma, escolha uma plataforma de dados que lide com eficiência com a ingestão de dados, gerencie gravações simultâneas e mantenha o desempenho de gravação individual sem degradação.

Diferentes servidores de inferência têm características de desempenho variadas, afetando o desempenho do modelo em tempo de execução. Selecione um servidor que atenda às expectativas básicas.
Colete e analise métricas de desempenho e identifique gargalos.

Avalie a telemetria do pipeline de dados para garantir que as metas de desempenho para operações de taxa de transferência e leitura/gravação sejam atendidas.
Para o índice de pesquisa, considere métricas como a latência da consulta, a taxa de transferência e a precisão dos resultados. À medida que o volume de dados aumenta, as taxas de erro não devem aumentar.

Analise a telemetria dos componentes de código, como o orquestrador, que coleta dados de chamadas de serviço. A análise desses dados pode ajudá-lo a entender o tempo gasto no processamento local versus chamadas de rede e identificar possíveis latências em outros componentes.

Avalie a experiência da interface do usuário usando métricas de engajamento para determinar se os usuários estão engajados ou frustrados positivamente. O aumento do tempo em uma página pode indicar qualquer um. Recursos multimodais, como respostas de voz ou vídeo, podem ter latência significativa, levando a tempos de resposta mais longos.
Melhore continuamente o desempenho do benchmark usando medições de qualidade da produção. A coleta e a análise automatizadas de métricas de desempenho, alertas e retreinamento de modelos são necessárias para manter a eficácia do modelo.

Compensação. Ao considerar os recursos da plataforma, é importante equilibrar custo e desempenho. Por exemplo, SKUs de GPU são caros, portanto, monitore continuamente a subutilização e dimensione os recursos conforme necessário. Após os ajustes, teste a utilização de recursos para garantir um equilíbrio entre o custo dos recursos da plataforma e suas operações e o desempenho esperado de acordo com a linha de base. Para estratégias de Otimização de Custos, consulte Recomendações para otimizar os custos de componentes.

Essas áreas de design fornecem detalhes sobre os princípios e considerações anteriores:

Próxima etapa