Condividi tramite


Principi di progettazione per carichi di lavoro di intelligenza artificiale in Azure

Questo articolo descrive i principi fondamentali per i carichi di lavoro di intelligenza artificiale in Azure, con particolare attenzione agli aspetti di intelligenza artificiale di un'architettura. È essenziale considerare collettivamente tutti i pilastri di Azure Well-Architected Framework, inclusi i compromessi. Applicare ogni pilastro ai requisiti funzionali e non funzionali del carico di lavoro.

Affidabilità

Quando si eseguono carichi di lavoro di intelligenza artificiale in Azure, è necessario considerare molti degli stessi requisiti di affidabilità considerati per altri tipi di carichi di lavoro. Tuttavia, considerazioni specifiche per l'addestramento, l'hosting e l'inferenza del modello sono particolarmente importanti e sono il focus di questo articolo. È importante integrare queste procedure con le procedure consigliate di progettazione standard per le applicazioni cloud, che si applicano anche ai carichi di lavoro di intelligenza artificiale.

Esaminare i principi di progettazione dell'affidabilità per ottenere una conoscenza di base dei concetti descritti qui.

Principio di progettazione Considerazioni
Attenuare i singoli punti di errore. L'uso di una singola istanza per i componenti critici può causare problemi significativi. Per evitare questi problemi, integrare la ridondanza in tutti i componenti critici. Usare piattaforme con tolleranza di errore predefinita e funzionalità a disponibilità elevata e implementare la ridondanza distribuendo più istanze o nodi.
Eseguire l'analisi della modalità di errore.

Sfrutta i modelli di progettazione noti.
Analizzare regolarmente le potenziali modalità di errore nei componenti di sistema e creare resilienza contro questi errori. Usare modelli di progettazione noti per isolare parti del sistema e prevenire errori a catena. Ad esempio, il modello Bulkhead può aiutare a isolare i guasti, mentre i meccanismi di ripetizione dei tentativi e gli interruttori di circuito possono gestire errori transitori come le richieste di limitazione del traffico.
Bilanciare gli obiettivi di affidabilità tra i componenti dipendenti. Assicurarsi che l'endpoint di inferenza o il modello e l'archivio dati siano allineati in termini di affidabilità. I componenti dell'applicazione devono rimanere disponibili anche in condizioni impreviste, ad esempio un aumento degli utenti simultanei. Inoltre, il carico di lavoro deve essere in grado di effettuare il failover sui sistemi di backup in caso di guasti. Se un componente ha esito negativo, influisce sull'affidabilità dell'altro.

Analogamente, le API del livello di servizio, che sono risorse di produzione critiche, devono rispettare gli stessi standard di affidabilità degli altri flussi di carico di lavoro ad alta criticità. Se queste API richiedono disponibilità elevata, la piattaforma host deve supportare le zone di disponibilità o una progettazione multiregione per garantire un funzionamento e una resilienza continui.
Progettare per l'affidabilità operativa. Mantenere l'affidabilità delle risposte del modello assicurandosi che gli aggiornamenti siano frequenti e tempestivi. Decidere se usare dati recenti o dati leggermente meno recenti, bilanciando la necessità di up-to-date informazioni con la praticità della frequenza di aggiornamento. È consigliabile automatizzare la formazione online a causa dei requisiti di frequenza e affidabilità. Il training offline può essere giustificato tramite un'analisi dei costi-benefici. È possibile usare risorse più economiche per il training offline.
Progettare per un'esperienza utente affidabile. Usare i test di carico per valutare il modo in cui il carico di lavoro gestisce lo stress e progettare l'interfaccia utente per gestire le aspettative degli utenti per i tempi di risposta. Implementare elementi dell'interfaccia utente che informano gli utenti dei potenziali tempi di attesa e adottare principi di progettazione cloud asincroni per risolvere errori, latenza o intermittenze.

Sicurezza

I modelli usano spesso dati di produzione sensibili per produrre risultati pertinenti. È quindi necessario implementare misure di sicurezza affidabili in tutti i livelli dell'architettura. Queste misure includono l'implementazione della progettazione sicura delle applicazioni all'inizio del ciclo di vita, la crittografia dei dati inattivi e in transito e l'adesione agli standard di conformità del settore. Le valutazioni regolari della sicurezza sono fondamentali per identificare e mitigare le vulnerabilità. I meccanismi avanzati di rilevamento delle minacce consentono di garantire risposte alle potenziali minacce.

principi di sicurezza sono fondamentali per proteggere l'integrità dei dati, l'integrità della progettazione e la privacy degli utenti nelle soluzioni di intelligenza artificiale. In qualità di proprietario del carico di lavoro, si è responsabili della creazione di attendibilità e della protezione delle informazioni riservate per garantire un'esperienza utente sicura.

Principio di progettazione Considerazioni
Guadagna fiducia nell'utente. Integrare la sicurezza dei contenuti in ogni fase del ciclo di vita usando codice personalizzato, strumenti ed efficaci controlli di sicurezza.

Rimuovere le informazioni personali e riservate non necessarie in tutti i punti di archiviazione dati, inclusi gli archivi dati aggregati, gli indici di ricerca, le cache e le applicazioni. Mantenere questo livello di sicurezza in modo coerente in tutta l'architettura.

Assicurarsi di implementare una moderazione completa del contenuto che controlla i dati in entrambe le direzioni e filtra contenuti inappropriati e offensivi.
Proteggi i dati a riposo, in transito e in uso attivo in base ai requisiti di riservatezza del carico di lavoro. Usare almeno la crittografia a livello di piattaforma con chiavi gestite da Microsoft o gestite dal cliente in tutti gli archivi dati nell'architettura. Determinare dove sono necessari livelli di crittografia più elevati e usare la doppia crittografia, se necessario.

Assicurarsi che tutto il traffico usi HTTPS per la crittografia. Determinare i punti di terminazione TLS a ogni hop.

Il modello stesso deve essere protetto per impedire agli utenti malintenzionati di estrarre informazioni riservate usate durante il training. Il modello richiede il livello massimo di misure di sicurezza. Prendere in considerazione l'uso della crittografia omomorfica che consente l'inferenza sui dati crittografati.
Investire in una solida gestione degli accessi per le identità (utente e sistema) che accedono al sistema. Implementare il controllo degli accessi basato sui ruoli e/o il controllo degli accessi basato sugli attributi per i piani di controllo e piani dati.

Mantenere una segmentazione corretta dell'identità per proteggere la privacy. Consentire l'accesso ai contenuti solo alle identità autorizzate a visualizzarli.
Proteggere l'integrità della progettazione implementando la segmentazione. Fornire una rete privata per l'accesso ai repository centralizzati per immagini, dati e asset di codice dei contenitori.

Quando si condivide l'infrastruttura con altri carichi di lavoro, ad esempio quando si ospita il server di inferenza nel servizio Azure Kubernetes, isolare il pool di nodi da altre API e carichi di lavoro.
Eseguire test di sicurezza. Sviluppare un piano di test dettagliato che includa test per rilevare un comportamento non etico ogni volta che vengono introdotte modifiche al sistema.

Integrare i componenti di intelligenza artificiale nei test di sicurezza esistenti. Ad esempio, incorporare l'endpoint di inferenza nei test di routine insieme ad altri endpoint pubblici.

Valutare la possibilità di eseguire test sul sistema live, ad esempio test di penetrazione o esercizi di red team, per identificare e risolvere in modo efficace potenziali vulnerabilità.
Ridurre la superficie di attacco applicando la progettazione rigorosa dell'accesso utente e dell'API. Richiedere l'autenticazione per tutti gli endpoint di inferenza, incluse le chiamate da sistema a sistema. Evitare endpoint anonimi.

Preferire la progettazione dell'API vincolata al costo della flessibilità lato client.

compromesso. L'implementazione dei livelli più elevati di sicurezza comporta compromessi in termini di costi e accuratezza perché la possibilità di analizzare, esaminare o registrare i dati crittografati è limitata. I controlli di sicurezza dei contenuti e il raggiungimento della spiegazione possono essere difficili anche in ambienti altamente protetti.

Le aree di progettazione seguenti forniscono informazioni dettagliate sui principi e sulle considerazioni precedenti:

Ottimizzazione dei costi

L'obiettivo del pilastro Ottimizzazione costi è ottimizzare gli investimenti, non necessariamente per ridurre i costi. Ogni scelta architetturale crea effetti finanziari diretti e indiretti. Comprendere i costi associati a varie opzioni, tra cui le decisioni di costruzione o acquisto, le selezioni tecnologiche, i modelli di fatturazione, le licenze, la formazione e le spese operative. È importante ottimizzare l'investimento nel livello selezionato e rivalutare continuamente i modelli di fatturazione. Valutare continuamente i costi associati alle modifiche apportate all'architettura, alle esigenze aziendali, ai processi e alla struttura del team.

Esaminare i principi di ottimizzazione dei costi ,, concentrandosi sull'ottimizzazione delle tariffe e dell'utilizzo.

Principio di progettazione Considerazioni
Determinare i driver dei costi eseguendo un esercizio di modellazione dei costi completo. Considerare i fattori chiave della piattaforma dati e dell'applicazione:
- Volume di dati. Stimare la quantità di dati che verranno indicizzati ed elaborati. I volumi più grandi possono aumentare i costi di archiviazione ed elaborazione.
- Numero di query. Stimare la frequenza e la complessità delle query. I volumi di query più elevati possono aumentare i costi, soprattutto se le query richiedono risorse di calcolo significative.
- Velocità effettiva. Valutare la velocità effettiva prevista per determinare il livello di prestazioni necessario. Le richieste di velocità effettiva più elevate possono comportare costi più elevati.
- Costi delle dipendenze. Comprendere che potrebbero esserci costi nascosti nelle dipendenze. Ad esempio, quando si calcola il costo dell'indicizzazione, includere il costo del set di competenze, che fa parte dell'elaborazione dei dati ma non rientra nell'ambito dell'indice.
Pagare per quello che si intende usare. Scegliere una soluzione tecnologica che soddisfi le proprie esigenze senza incorrere in spese non necessarie. Se non sono necessarie funzionalità avanzate, prendere in considerazione opzioni meno costose e strumenti open source.

Fattore nella frequenza di utilizzo. Preferisce le opzioni di calcolo elastico per gli strumenti di orchestrazione per ridurre al minimo i costi di utilizzo, perché sono always-on . Evitare il calcolo serverless per attività a tempo pieno perché può aumentare i costi.

Non pagare per i livelli più elevati senza sfruttarne appieno la capacità. Assicurarsi che il livello scelto sia allineato ai modelli di utilizzo di produzione per ottimizzare la spesa. Usare i prezzi standard per le attività regolari e prezzi spot per il training altamente interrompibile. Per ridurre i costi, usare il calcolo basato su GPU solo per le funzioni del carico di lavoro di intelligenza artificiale.

Testare e confrontare in modo approfondito l'addestramento e l'ottimizzazione per trovare lo SKU che bilancia al meglio le prestazioni e i costi.
Usare ciò che si paga. Ridurre al minimo gli sprechi. Monitorare attentamente le metriche di utilizzo. I carichi di lavoro di intelligenza artificiale possono essere costosi e i costi possono aumentare rapidamente se le risorse non vengono arrestate, ridimensionate o deallocate quando non vengono usate.

Ottimizzare il sistema per la scrittura una sola volta, leggere molti per evitare sovraccariche nell'archiviazione dei dati. I dati di training non richiedono la velocità di risposta immediata di un database di produzione.

Il test di stress di un endpoint di inferenza del servizio OpenAI di Azure può essere costoso perché ogni chiamata comporta addebiti. Per ridurre i costi, usare invece PTU inutilizzati del servizio OpenAI in un ambiente di test o simulare l'endpoint di inferenza.

Le attività come l'analisi esplorativa dei dati (EDA), il training del modello e l'ottimizzazione non vengono in genere eseguite a tempo pieno. Per queste attività, preferisci una piattaforma che possa essere arrestata quando non è in uso. Ad esempio, i processi EDA sono in genere interattivi, quindi gli utenti devono poter avviare le macchine virtuali e arrestarli durante l'esecuzione dei processi.

Assegnare le responsabilità dei costi ai team operativi. Questi team devono garantire che i costi rimangano entro i parametri previsti monitorando e gestendo attivamente l'utilizzo delle risorse.
Ottimizzare i costi operativi. La formazione online può essere costosa a causa dei requisiti di frequenza. L'automazione di questo processo consente di mantenere la coerenza e ridurre al minimo i costi derivanti dall'errore umano. Inoltre, l'uso di dati leggermente meno recenti per il training e il ritardo degli aggiornamenti, quando possibile, può ridurre ulteriormente le spese senza influire significativamente sull'accuratezza del modello.

Per il training offline, valutare se è possibile usare risorse più economiche, ad esempio l'hardware offline.

In generale, eliminare i dati dagli archivi delle funzionalità per ridurre i costi di archiviazione e disordine per le funzionalità.

Compromesso: Ottimizzazione dei costi ed efficienza delle performance. Il bilanciamento dei costi con le prestazioni nella gestione dei database comporta compromessi. Progettazione efficiente degli indici accelera le query, ma può aumentare i costi a causa della gestione dei metadati e delle dimensioni dell'indice. Analogamente, il partizionamento di tabelle di grandi dimensioni può migliorare le prestazioni delle query e ridurre il carico di archiviazione, ma comporta costi aggiuntivi. Al contrario, le tecniche che evitano un'indicizzazione eccessiva possono ridurre i costi, ma potrebbero influire sulle prestazioni se non vengono gestite correttamente.

Compromesso: Ottimizzazione dei costi ed Eccellenza operativa. Esistono compromessi da considerare quando si decide quale dei due approcci principali usare per l'addestramento del modello. Il training nell'ambiente di sviluppo con dati di produzione completi può ridurre i costi di calcolo perché il training del modello viene eseguito una sola volta e viene alzato di livello solo l'artefatto. Tuttavia, questo approccio richiede misure di sicurezza rigorose per la gestione dei dati di produzione in ambienti inferiori, che possono essere complessi e a elevato utilizzo di risorse. Al contrario, il training del modello in ogni ambiente migliora la stabilità e l'affidabilità a causa di una revisione e test approfonditi del codice, ma questo modello aumenta i costi di calcolo perché le esecuzioni di training si verificano più volte.

Eccellenza operativa

L'obiettivo principale dell'eccellenza operativa è offrire funzionalità in modo efficiente durante tutto il ciclo di vita dello sviluppo. Il raggiungimento di questo obiettivo prevede la creazione di processi ripetibili che supportano la metodologia di progettazione della sperimentazione e producono risultati per migliorare le prestazioni del modello. L'eccellenza operativa consiste anche nel mantenere l'accuratezza dei modelli nel tempo, implementare procedure di monitoraggio e governance efficaci per ridurre al minimo i rischi e sviluppare processi di gestione delle modifiche per adattarsi alla deriva del modello.

Anche se tutti i principi di Eccellenza Operativa si applicano ai carichi di lavoro di intelligenza artificiale, dare la priorità all'automazione e al monitoraggio come strategie operative fondamentali.

Principio di progettazione Considerazioni
Promuovere una mentalità continua di apprendimento e sperimentazione per tutto il ciclo di vita dello sviluppo delle applicazioni, della gestione dei dati e del modello di intelligenza artificiale. Le operazioni del carico di lavoro devono basarsi su metodologie comprovate del settore, ad esempio DevOps, DataOps, MLOps e GenAIOps.

La collaborazione anticipata tra operazioni, sviluppo di applicazioni e team di dati è essenziale per stabilire una comprensione reciproca delle prestazioni accettabili del modello. Le squadre operative forniscono segnali di qualità e avvisi attuabili. I team di applicazioni e dati consentono di diagnosticare e risolvere i problemi in modo efficiente.
Scegliere tecnologie che riducono al minimo il carico operativo. Quando scegli soluzioni di piattaforma, preferisci la piattaforma come servizio (PaaS) rispetto alle opzioni self-hosted per semplificare la progettazione, automatizzare l'orchestrazione dei flussi di lavoro e facilitare le operazioni del secondo giorno.
Creare un sistema di monitoraggio automatizzato che supporti la funzionalità di avviso, inclusa la registrazione e il controllo. Data la natura non deterministica dell'IA, è importante stabilire misurazioni di qualità all'inizio del ciclo di vita. Collaborare con i data scientist per definire le metriche di qualità. Visualizzare le informazioni dettagliate in corso nei dashboard completi.

Tenere traccia degli esperimenti usando strumenti in grado di acquisire dettagli come versioni del codice, ambienti, parametri, esecuzioni e risultati.

Implementare avvisi interattivi che forniscono informazioni sufficienti per consentire agli operatori di rispondere rapidamente.
Automatizzare il rilevamento e la mitigazione del decadimento del modello. Usare test automatizzati per valutare la deriva nel tempo. Assicurarsi che il sistema di monitoraggio invii avvisi quando le risposte iniziano a deviare dai risultati previsti e iniziare a farlo regolarmente. Usare strumenti che consentono di individuare e aggiornare automaticamente nuovi modelli.

In base alle esigenze, adattarsi ai nuovi casi d'uso modificando l'elaborazione dei dati e la logica di training del modello.
Implementare distribuzioni sicure. Scegliere tra distribuzioni side-by-side o aggiornamenti sul posto per ridurre al minimo i tempi di inattività. Implementare test accurati prima della distribuzione per assicurarsi che il modello sia configurato correttamente e soddisfi obiettivi, aspettative degli utenti e standard di qualità. Pianificare sempre le operazioni di emergenza, indipendentemente dalla strategia di distribuzione.
Valutare continuamente l'esperienza utente nell'ambiente di produzione. Consentire agli utenti del carico di lavoro di fornire commenti e suggerimenti sulla propria esperienza. Ottenere il consenso per condividere parte o tutte le conversazioni in un log associato per la risoluzione dei problemi. Considera come parte dell'interazione utente sia valida, conforme, sicura e utile da acquisire e usa i dati con diligenza per valutare le prestazioni del tuo carico di lavoro con interazioni reali con gli utenti.

Le aree di progettazione seguenti forniscono informazioni dettagliate sui principi e sulle considerazioni precedenti:

Efficienza delle prestazioni

L'obiettivo della valutazione delle prestazioni del modello di intelligenza artificiale è determinare in che modo efficace un modello esegue le attività previste. Il raggiungimento di questo obiettivo comporta la valutazione di varie metriche, ad esempio accuratezza, precisione e equità. Inoltre, le prestazioni dei componenti della piattaforma e dell'applicazione che supportano il modello sono fondamentali.

Le prestazioni del modello sono influenzate anche dall'efficienza delle operazioni, ad esempio il rilevamento dell'esperimento e l'elaborazione dei dati. L'applicazione di principi di efficienza delle prestazioni consente di misurare le prestazioni rispetto a una barra di qualità accettabile. Questo confronto è fondamentale per rilevare la riduzione o il decadimento. Per gestire il carico di lavoro, inclusi i componenti di intelligenza artificiale, sono necessari processi automatizzati per il monitoraggio e la valutazione continui.

Principio di progettazione Considerazioni
Stabilire i benchmark delle prestazioni. Eseguire test rigorosi delle prestazioni in diverse aree architetturali e impostare obiettivi accettabili. Questa valutazione in corso deve far parte dei processi operativi, non di un test monouso.

Il benchmarking si applica alle prestazioni di stima. Iniziare con una baseline per comprendere le prestazioni iniziali del modello e rivalutare continuamente le prestazioni per garantire che soddisfi le aspettative.
Valutare le esigenze delle risorse per soddisfare gli obiettivi di prestazioni. Comprendere le caratteristiche del carico per scegliere la piattaforma e le risorse adeguate. Tenere conto di questi dati per la pianificazione della capacità di operare su larga scala.

Ad esempio, usare i test di carico per determinare la piattaforma di calcolo e lo SKU ottimali. Il calcolo ad alte prestazioni ottimizzato per GPU è spesso necessario per l'addestramento del modello e il suo affinamento, ma gli SKU per uso generico sono adatti per gli strumenti di orchestrazione.

Analogamente, scegliere una piattaforma dati che gestisca in modo efficiente l'inserimento dei dati, gestisce le scritture simultanee e gestisce le singole prestazioni di scrittura senza riduzione delle prestazioni.

I server di inferenza diversi hanno caratteristiche di prestazioni variabili. Queste caratteristiche influiscono sulle prestazioni del modello in fase di esecuzione. Selezionare un server che soddisfi le aspettative di base.
Raccogliere e analizzare le metriche delle prestazioni e identificare i colli di bottiglia.

Valutare la telemetria del flusso di dati per garantire che gli obiettivi di prestazioni per throughput e operazioni di lettura/scrittura siano soddisfatti.

Per l'indice di ricerca, considerare metriche come latenza delle query, throughput e precisione dei risultati. Con l'aumentare del volume di dati, le percentuali di errore non dovrebbero aumentare.

Analizzare i dati di telemetria dai componenti di codice, ad esempio l'agente di orchestrazione, che raccoglie i dati dalle chiamate al servizio. L'analisi dei dati consente di comprendere il tempo impiegato per l'elaborazione locale rispetto alle chiamate di rete e identificare la potenziale latenza in altri componenti.

Valutare l'esperienza dell'interfaccia utente usando le metriche di engagement per determinare se gli utenti sono coinvolti o frustrati positivamente. Un tempo maggiormente trascorso su una pagina può indicare entrambi. Le funzionalità multimodali, come le risposte vocali o video, possono causare una latenza significativa, portando a tempi di risposta più lunghi.
Migliorare continuamente le prestazioni del benchmark usando misurazioni di qualità dall'ambiente di produzione. Implementare la raccolta e l'analisi automatizzate delle metriche di prestazioni, degli avvisi e del riaddestramento del modello per garantire l'efficacia del modello.

il compromesso. Quando si considerano le funzionalità della piattaforma, è necessario bilanciare i costi e le prestazioni. Ad esempio, gli SKU delle GPU sono costosi, quindi monitora continuamente l'eventuale sottoutilizzo e adatta le risorse in base alle necessità. Dopo le modifiche, testare l'utilizzo delle risorse per garantire un equilibrio tra il costo delle risorse della piattaforma e le relative operazioni e le prestazioni previste, come indicato dalla baseline. Per le strategie di ottimizzazione dei costi, vedere Raccomandazioni per l'ottimizzazione dei costi dei componenti.

Le aree di progettazione seguenti forniscono informazioni dettagliate sui principi e sulle considerazioni precedenti:

Passaggio successivo