Partilhar 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 aspetos 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.

Fiabilidade

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 o treinamento do modelo, hospedagem e inferência são particularmente importantes e são abordadas principalmente neste princípio. É importante notar 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.

Analise os princípios de design de Confiabilidade para obter uma compreensão fundamental dos conceitos descritos aqui.

Princípio de design Considerações
Atenue 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 de alta disponibilidade integrados e implemente redundância implantando várias instâncias ou nós.
Realizar análise de modo de falha.

Tire partido dos 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 projeto bem conhecidos para isolar partes do seu sistema e evitar falhas em cascata. Por exemplo, o padrão de antepara pode ajudar a isolar falhas, enquanto mecanismos de repetição e 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 de usuários simultâneos. Além disso, a carga de trabalho deve ter a capacidade de failover para sistemas de backup em caso de falhas. Se um componente falhar, isso afeta a confiabilidade do outro.

Da mesma forma, as APIs de 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 de várias regiões para garantir a operação contínua e a resiliência.
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. A formação em linha deve ser automatizada devido aos seus requisitos de frequência e fiabilidade, enquanto a formação em linha pode ser justificada através de uma análise custo-benefício e realizada utilizando 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 projetar 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. Assim, medidas de segurança robustas devem ser usadas em todas as camadas da arquitetura. Isso inclui a implementação do design seguro de aplicativos no início do ciclo de vida, a criptografia de dados em repouso e em trânsito e a adesão aos padrões de conformidade do setor. Avaliações de segurança regulares são cruciais para identificar e mitigar vulnerabilidades, enquanto mecanismos avançados de deteção de ameaças garantem respostas rápidas a ameaças potenciais.

Os princípios de segurança são fundamentais para as soluções de IA, salvaguardando a integridade dos dados, a integridade do projeto e a privacidade do utilizador. 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 cada estágio 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 há uma moderação de conteúdo completa que inspeciona os dados em ambas as direções e filtra o conteúdo impróprio e ofensivo.
Proteja os dados em repouso, em trânsito e em uso de acordo com os requisitos de sensibilidade 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 usa HTTPS para criptografia. Decida sobre os pontos de terminação TLS em cada salto.

O modelo em si precisa ser protegido para evitar que invasores extraiam informações confidenciais usadas durante o treinamento. Para tal, é necessário o mais elevado nível de medidas de segurança. Considere o uso de criptografia homomórfica que permita inferência em dados criptografados.
Invista em uma gestão de acesso robusta na preservação das 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 uma 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 através 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 quaisquer outras cargas de trabalho.
Realizar testes de segurança. Desenvolver um plano de teste detalhado que inclua testes para detetar comportamentos antiéticos sempre que forem introduzidas alterações no sistema.

Integre componentes de IA em seus testes de segurança existentes. Por exemplo, incorpore o ponto de extremidade de inferência em seus testes de rotina junto com outros pontos de extremidade 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 abordar possíveis vulnerabilidades de forma eficaz.
Reduza a superfície de ataque impondo acesso estrito do usuário e design de 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 um design de API restrito ao custo da flexibilidade do lado do cliente.

Compensação. 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.

Estas á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 tem 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 faturamento, licenciamento, treinamento e despesas operacionais. É importante maximizar seu investimento no nível selecionado e reavaliar continuamente os modelos de faturamento. Avalie continuamente os custos associados às mudanças na arquitetura, nas necessidades de negócios, nos processos e na estrutura da equipe.

Analise 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 fatores 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.
- Débito. Avalie a taxa de transferência esperada, que afeta a camada de desempenho necessária. 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 tecnológica que satisfaça as 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.

Fator na 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 potencial escalonamento de custos.

Não pague por níveis mais altos sem utilizar sua capacidade total. 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 gravar uma vez, leia muitos para evitar gastos excessivos em 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 esforço de um ponto de extremidade de inferência do Azure OpenAI pode ser caro devido às cobranças por cada chamada. Para reduzir custos, use PTUs não utilizadas do OpenAI em um ambiente de teste ou simule o ponto de extremidade de inferência.

Atividades como análise exploratória de dados (EDA), treinamento de modelos e ajuste fino 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 pará-las enquanto executam trabalhos.

Defina responsabilidades de custos 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. A formação online pode ser dispendiosa devido à sua natureza frequente. A automatização desse processo ajuda a manter a consistência e minimiza os custos de erros humanos. Além disso, o uso de dados um pouco mais antigos para treinamento e atraso de 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 de recursos.

Tradeoff: 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 indexação excessiva podem reduzir custos, mas podem afetar o desempenho se não forem gerenciadas corretamente.

Tradeoff: Otimização de Custos e Excelência Operacional. Há 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 mais baixos, o que pode ser complexo e consome muitos recursos. Por outro lado, o treinamento do modelo em cada ambiente aumenta a estabilidade e a confiabilidade por meio de revisão e testes de código completos, 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 projeto de experimentação e produzem resultados para melhorar o desempenho do modelo. A excelência operacional também diz respeito à precisão sustentada dos modelos ao longo do tempo, à implementação de práticas de monitoramento e governança eficazes para minimizar os riscos e ao desenvolvimento de processos de gerenciamento de mudanças para se adaptar às derivas dos modelos.

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 aprendizagem e experimentação contínua ao longo dos ciclos de vida de desenvolvimento de aplicativos, tratamento 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 precoce entre as equipes de operações, desenvolvimento de aplicativos e dados é essencial para estabelecer uma compreensão mútua 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 de forma eficiente.
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 projeto, automatizar a orquestração do fluxo de trabalho e facilitar as operações do 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, as medições de qualidade são importantes para estabelecer no início do ciclo de vida. Trabalhe com cientistas de dados para definir métricas de qualidade, visualize 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 deteçã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 envia alertas quando as respostas começam a se desviar dos resultados esperados e comece a fazê-lo regularmente. Use ferramentas que podem descobrir e atualizar novos modelos automaticamente.

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, às expectativas do usuário e aos padrões de qualidade. Planeje sempre operações de emergência, independentemente da estratégia de implantação.
Avaliar continuamente a experiência do usuário na produção Permita que os usuários da carga de trabalho forneçam feedback sobre sua experiência e obtenham consentimento para compartilhar partes ou toda a conversa de um log associado para solução de problemas. Considere o quanto de 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.

Estas á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 precisão, precisão e equidade. Além disso, o desempenho da plataforma e dos componentes 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 uma barra de qualidade aceitável, que é fundamental para detetar degradação ou deterioração. 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. Conduza 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 aplica-se ao desempenho da 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 cumprir as metas de desempenho. Entenda as características de carga para escolher a plataforma certa e os recursos de 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 ideal e a SKU. A computação otimizada para GPU de alto desempenho é frequentemente necessária para treinamento e ajuste fino de modelos, enquanto 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 variáveis, afetando o desempenho do modelo em tempo de execução. Selecione um servidor que atenda às expectativas da linha de base.
Colete e analise métricas de desempenho e identifique gargalos.

Avalie a telemetria a partir do pipeline de dados para garantir que as metas de desempenho para operações de taxa de transferência e leitura/gravação sejam atingidas.
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 a partir 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 latência potencial 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 positivamente engajados ou frustrados. O aumento do tempo em uma página pode indicar qualquer uma delas. As capacidades multimodais, como as respostas de voz ou vídeo, podem apresentar uma latência significativa, levando a tempos de resposta mais longos.
Melhorar continuamente o desempenho de referência 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, os SKUs de GPU são caros, portanto, monitore continuamente a subutilização e os recursos do tamanho certo, 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.

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

Próximo passo