Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Osservabilità
Suggerimento
Esplora le
Monitoraggio e osservabilità
Spiegazione delle metriche della GPU
La metrica sull'utilizzo della GPU mostra se la GPU ha funzionato correttamente durante la finestra di esempio. Questa metrica rileva la percentuale di tempo in cui la GPU ha eseguito almeno un'istruzione, ma non rivela l'efficienza con cui la GPU ha utilizzato il proprio hardware. Una GPU contiene più Streaming Multiprocessor (SMs), che sono le unità di elaborazione parallele che eseguono le istruzioni. Una lettura dell'utilizzo al 100% può significare che la GPU ha eseguito pesanti carichi di lavoro paralleli su tutte le sue unità SMs, oppure può significare che una singola piccola istruzione ha attivato la GPU durante il periodo di campionamento. Per comprendere l'utilizzo effettivo, è necessario esaminare le metriche della GPU a più livelli dell'architettura hardware. Ogni Streaming Multiprocessor è costruito con diversi tipi di core e ogni livello presenta caratteristiche prestazionali diverse. Le metriche di primo livello (utilizzo della GPU, utilizzo della memoria, potenza della GPU e temperatura della GPU, visibili tramite nvidia-smi) mostrano se il dispositivo è attivo. Metriche più approfondite (utilizzo di SM, SM Activity e utilizzo del tensor core) rivelano l'efficienza con cui la GPU utilizza le sue risorse.
Obiettivi a un elevato consumo energetico della GPU
Il sottoutilizzo GPUs spreca la capacità di elaborazione e aumenta i costi perché i carichi di lavoro non riescono a coinvolgere tutti i componenti della GPU contemporaneamente. Per i AI/ML carichi di lavoro su Amazon EKS, monitora il consumo energetico della GPU come proxy per identificare l'attività effettiva della GPU. GPU Utilization riporta la percentuale di tempo in cui la GPU esegue qualsiasi kernel, ma non rivela se i multiprocessori di streaming, i controller di memoria e i tensor core siano tutti attivi contemporaneamente. Il consumo energetico colma questa lacuna, perché l'hardware completamente impegnato consuma molta più energia rispetto all'hardware che esegue kernel leggeri o rimane inattivo tra un'attività e l'altra. Confrontate l'energia assorbita con la potenza di progettazione termica (TDP) della GPU per individuare il sottoutilizzo, quindi verificate se il carico di lavoro è ostacolato dalla preelaborazione della CPU, dall'I/O di rete o dalle dimensioni inefficienti dei batch.
CloudWatch Configura Container Insights su Amazon EKS per identificare pod, nodi o carichi di lavoro con un basso consumo energetico della GPU. Questo strumento si integra direttamente con Amazon EKS e consente di monitorare il consumo energetico della GPU e di regolare la pianificazione dei pod o i tipi di istanze quando il consumo energetico scende al di sotto dei livelli target. Se hai bisogno di una visualizzazione avanzata o di dashboard personalizzate, usa DCGM-Exporter di NVIDIA con Prometheus e Grafana per il monitoraggio nativo di Kubernetes. Entrambi gli approcci evidenziano metriche chiave di NVIDIA come (consumo energetico della GPU) e (temperatura della GPU). nvidia_smi_power_draw nvidia_smi_temperature_gpu Per un elenco di metriche, consulta -Agent-NVIDIA-GPU.htm. https://docs.aws.amazon.com/AmazonCloudWatch/ latest/monitoring/CloudWatch Cerca modelli come un consumo energetico costantemente basso in orari specifici o per lavori particolari. Queste tendenze ti aiutano a identificare dove consolidare i carichi di lavoro o modificare l'allocazione delle risorse.
I limiti statici delle risorse in Kubernetes (come il numero di CPU, memoria e GPU) spesso portano a un approvvigionamento eccessivo o al sottoutilizzo, specialmente per carichi di lavoro dinamici come l'inferenza in cui la domanda oscilla. AI/ML Analizza le tendenze di utilizzo e consolida i carichi di lavoro riducendoli al minimo. GPUs Assicurati che ogni GPU raggiunga il pieno utilizzo prima di allocarne altre. Questo approccio riduce gli sprechi e abbassa i costi. Per una guida dettagliata sull'ottimizzazione della pianificazione e delle strategie di condivisione, consulta le best practice EKS Compute and Autoscaling
Osservabilità e metriche
Utilizzo di strumenti di monitoraggio e osservabilità per i carichi di lavoro AI/ML
AI/ML I servizi moderni richiedono il coordinamento tra infrastruttura, modellazione e logica applicativa. Gli ingegneri della piattaforma gestiscono l'infrastruttura e lo stack di osservabilità. Raccolgono, archiviano e visualizzano le metriche. AI/ML gli ingegneri definiscono metriche specifiche del modello e monitorano le prestazioni in condizioni di carico e distribuzione dei dati variabili. Gli sviluppatori di applicazioni utilizzano APIs, indirizzano le richieste e tengono traccia delle metriche a livello di servizio e delle interazioni con gli utenti. Senza pratiche di osservabilità unificate, questi team lavorano in silos e perdono segnali critici sullo stato e le prestazioni del sistema. La creazione di una visibilità condivisa tra gli ambienti garantisce che tutte le parti interessate possano rilevare tempestivamente i problemi e mantenere un servizio affidabile.
L'ottimizzazione dei cluster Amazon EKS per i AI/ML carichi di lavoro presenta sfide di monitoraggio uniche, in particolare per quanto riguarda la gestione della memoria GPU. Senza un monitoraggio adeguato, le organizzazioni devono affrontare errori out-of-memory (OOM), inefficienze delle risorse e costi inutili. Un monitoraggio efficace garantisce migliori prestazioni, resilienza e costi inferiori per i clienti EKS. Utilizza un approccio olistico che combini tre livelli di monitoraggio. Innanzitutto, monitora le metriche granulari della GPU utilizzando NVIDIA DCGM Exporter
Strumenti e framework
Diversi strumenti e framework forniscono out-of-the-box metriche native per il monitoraggio dei carichi di lavoro. AI/ML Queste metriche integrate eliminano la necessità di strumentazione personalizzata e riducono i tempi di configurazione. Le metriche si concentrano su aspetti prestazionali come latenza, velocità effettiva e generazione di token, che sono fondamentali per il servizio di inferenza e il benchmarking. L'utilizzo di metriche native consente di iniziare il monitoraggio immediatamente senza creare pipeline di raccolta personalizzate.
-
VLLm: un motore di servizio ad alta velocità per modelli linguistici di grandi dimensioni (LLMs) che fornisce metriche native come la latenza delle richieste e l'utilizzo della memoria.
-
Ray: un framework di elaborazione distribuito che emette metriche per carichi di lavoro AI scalabili, inclusi i tempi di esecuzione delle attività e l'utilizzo delle risorse.
-
Hugging Face Text Generation Inference (TGI): un toolkit per l'implementazione e la distribuzione, con metriche integrate per le prestazioni di inferenza. LLMs
-
NVIDIA genai-perf: uno strumento a riga di comando per il benchmarking di modelli di intelligenza artificiale generativa, la misurazione del throughput, della latenza e delle metriche specifiche del LLM, come le richieste completate in intervalli di tempo specifici.
Metodi di osservabilità
Si consiglia di implementare eventuali meccanismi di osservabilità aggiuntivi in uno dei seguenti modi.
CloudWatch Container Insights Se la tua organizzazione preferisce strumenti nativi di AWS con una configurazione minima, ti consigliamo CloudWatch Container Insights. Si integra con NVIDIA DCGM Exporter
Dopo aver installato Container Insights, rileva automaticamente NVIDIA nel tuo ambiente e raccoglie metriche critiche su salute e CloudWatch prestazioni. GPUs Queste metriche vengono visualizzate su dashboard curate. out-of-the-box Puoi anche integrare Ray
Per un elenco completo delle metriche disponibili, consulta le metriche di Amazon EKS e Kubernetes Container Insights. Per step-by-step indicazioni sull'implementazione del monitoraggio della GPU, consulta Ottieni informazioni operative per i carichi di lavoro delle GPU NVIDIA utilizzando Amazon CloudWatch Container Insights
Prometheus e Grafana gestiti Se la tua organizzazione ha bisogno di dashboard personalizzati e funzionalità di visualizzazione avanzate, implementa Prometheus con NVIDIA DCGM-Exporter e Grafana per il monitoraggio nativo di Kubernetes.
Puoi estendere questo stack di monitoraggio integrando framework open source come Ray e VLLm Ray e vLLm per esportare le loro metriche native su Prometheus
Per step-by-step indicazioni sulla distribuzione di questo stack di monitoraggio, consulta Monitoraggio dei carichi di lavoro GPU su Amazon EKS utilizzando i servizi open source gestiti da AWS
Prendi in considerazione il monitoraggio della formazione di base e le metriche di ottimizzazione
Monitora i parametri di formazione di base per monitorare lo stato e le prestazioni del tuo cluster Amazon EKS e dei carichi di lavoro di machine learning in esecuzione su di esso. I carichi di lavoro di formazione hanno requisiti di monitoraggio diversi rispetto ai carichi di lavoro di inferenza perché vengono eseguiti per periodi prolungati, consumano risorse in modo diverso e richiedono visibilità sulla convergenza dei modelli e sull'efficienza della pipeline di dati. Le metriche riportate di seguito consentono di identificare i punti critici, ottimizzare l'allocazione delle risorse e garantire il corretto completamento dei lavori di formazione. Per step-by-step indicazioni sull'implementazione di questo approccio di monitoraggio, consulta Introduzione all'osservazione dei carichi di lavoro di machine learning su Amazon EKS
Metriche sull'utilizzo delle risorse
Monitora le metriche sull'utilizzo delle risorse per verificare che le risorse vengano consumate correttamente. Queste metriche consentono di identificare i punti deboli e le cause principali dei problemi di prestazioni.
-
CPU, memoria, rete, potenza della GPU e temperatura della GPU: monitora queste metriche per garantire che le risorse allocate soddisfino le richieste del carico di lavoro e identifichino le opportunità di ottimizzazione. Tieni traccia di metriche come gpu_memory_usage_bytes per identificare i modelli di consumo della memoria e rilevare i picchi di utilizzo. Calcola percentili come il 95° percentile (P95) per comprendere le maggiori esigenze di memoria durante l'allenamento. Questa analisi consente di ottimizzare i modelli e l'infrastruttura per evitare errori OOM e ridurre i costi.
-
SM Occupancy, SM FPxx Activity, Activity: monitora queste metriche per capire come viene utilizzata la risorsa sottostante sulla GPU. Obiettivo 0.8 per SM Activity come regola generale
. -
Utilizzo delle risorse di nodi e pod: monitora l'utilizzo delle risorse a livello di nodo e pod per identificare il conflitto di risorse e i potenziali colli di bottiglia. Monitora se i nodi si avvicinano ai limiti di capacità, il che può ritardare la pianificazione dei pod e rallentare i lavori di formazione.
-
Utilizzo delle risorse rispetto a richieste e limiti: confronta l'utilizzo effettivo delle risorse con le richieste e i limiti configurati per determinare se il cluster è in grado di gestire i carichi di lavoro attuali e di gestire quelli futuri. Questo confronto rivela se è necessario modificare le allocazioni delle risorse per evitare errori di OOM o sprechi di risorse.
-
Metriche interne di framework ML: acquisisci le metriche interne di formazione e convergenza da framework ML come e. TensorFlow PyTorch Queste metriche includono le curve di perdita, il tasso di apprendimento, il tempo di elaborazione in batch e la durata delle fasi di formazione. Visualizza queste metriche utilizzando TensorBoard strumenti simili per tracciare la convergenza dei modelli e identificare le inefficienze di formazione.
Metriche delle prestazioni del modello
Monitora le metriche delle prestazioni dei modelli per verificare che il processo di formazione produca modelli che soddisfano i requisiti di precisione e aziendali. Queste metriche consentono di determinare quando interrompere l'allenamento, confrontare le versioni dei modelli e identificare il degrado delle prestazioni.
-
Precisione, precisione, richiamo e punteggio F1: tieni traccia di queste metriche per comprendere le prestazioni del tuo modello sui dati di convalida. Calcola il punteggio F1 su un set di convalida dopo ogni periodo di addestramento per valutare se il modello sta migliorando e quando raggiunge livelli di prestazioni accettabili.
-
Metriche specifiche per l'azienda e KPIs: definisci e monitora le metriche che misurano direttamente il valore aziendale delle tue iniziative. AI/ML Per un sistema di raccomandazioni, tieni traccia di metriche come la percentuale di clic o il tasso di conversione per assicurarti che il modello produca i risultati aziendali previsti.
-
Prestazioni nel tempo: confronta le metriche delle prestazioni tra le versioni del modello e i cicli di formazione per identificare le tendenze e rilevare il degrado. Verifica se le versioni più recenti dei modelli mantengono o migliorano le prestazioni rispetto ai modelli di base. Questo confronto cronologico ti aiuta a decidere se implementare nuovi modelli o esaminare i problemi di formazione.
Metriche sulla qualità dei dati e sulla deriva
Monitora la qualità dei dati e le metriche sulla deriva per garantire che i dati di allenamento rimangano coerenti e rappresentativi. La deriva dei dati può causare un peggioramento delle prestazioni del modello nel tempo, mentre i problemi di qualità dei dati possono impedire la convergenza dei modelli o produrre risultati inaffidabili.
-
Proprietà statistiche dei dati di input: monitora le proprietà statistiche come la media, la deviazione standard e la distribuzione delle funzionalità di input nel tempo per rilevare deviazioni o anomalie dei dati. Monitora se le distribuzioni delle funzionalità si discostano in modo significativo dai dati di formazione di base. Ad esempio, se la media di una funzionalità critica cambia di più di due deviazioni standard, verifica se la pipeline di dati è cambiata o se la fonte di dati sottostante è cambiata.
-
Rilevamento e avvisi della deriva dei dati: implementa meccanismi automatizzati per rilevare e avvisare i problemi di qualità dei dati prima che influiscano sulla formazione. Utilizzate test statistici come il test Kolmogorov-Smirnov o il test chi-squared per confrontare le attuali distribuzioni dei dati con i dati di allenamento originali. Imposta avvisi quando i test rilevano deviazioni significative in modo da poter riqualificare i modelli con dati aggiornati o esaminare i problemi della pipeline di dati.
Metriche di latenza e velocità effettiva
Monitora le metriche di latenza e velocità effettiva per identificare i punti deboli nella pipeline di formazione e ottimizzare l'utilizzo delle risorse. Queste metriche aiutano a capire dove viene impiegato il tempo durante la formazione e dove concentrare gli sforzi di ottimizzazione.
-
End-to-End Latenza delle pipeline di formazione ML: misura il tempo totale di flusso dei dati attraverso l'intera pipeline di formazione, dall'inserimento dei dati all'aggiornamento del modello. Tieni traccia di questa metrica in tutte le sessioni di formazione per identificare se le modifiche alla pipeline migliorano o peggiorano le prestazioni. L'elevata latenza spesso indica problemi nel caricamento dei dati, nella preelaborazione o nella comunicazione di rete tra i nodi.
-
Produttività e velocità di elaborazione della formazione: monitora il volume di dati elaborati dalla pipeline di formazione per unità di tempo per garantire un utilizzo efficiente delle risorse. Monitora metriche come i campioni elaborati al secondo o i batch completati al minuto. Un throughput ridotto rispetto alla capacità hardware suggerisce inefficienze nel caricamento dei dati, nella preelaborazione o nel calcolo dei modelli che sprecano i cicli della GPU.
-
Checkpoint Save and Restore Latency: monitora il tempo necessario per salvare i checkpoint del modello nello storage (S3 FSx, EFS) e ripristinarli nella memoria della GPU o della CPU quando si riprendono i lavori o si ripristinano da errori. Le operazioni di checkpoint lente prolungano i tempi di ripristino dei processi e aumentano i costi. Tieni traccia delle dimensioni dei checkpoint, risparmia la durata, la durata del ripristino e il numero di errori per identificare opportunità di ottimizzazione come la compressione o livelli di storage più veloci.
-
Tempo di caricamento e preelaborazione dei dati: misura il tempo impiegato per caricare i dati dallo storage e applicare le trasformazioni di preelaborazione. Confrontate questo tempo con il tempo di calcolo del modello per determinare se la formazione è legata ai dati o al calcolo. Se il caricamento dei dati richiede più del 20% del tempo di formazione totale, prendi in considerazione l'ottimizzazione della pipeline di dati con caching, prefetching o storage più veloce.
Tassi di errore e fallimenti
Monitora i tassi di errore e gli errori in tutta la pipeline di formazione per mantenere l'affidabilità e prevenire lo spreco di risorse di elaborazione. Gli errori non rilevati possono causare l'interruzione automatica dei processi di formazione, la produzione di modelli non validi o la perdita di ore di tempo della GPU prima che si notino problemi.
-
Monitoraggio degli errori nella pipeline: monitora gli errori in tutte le fasi della pipeline ML, tra cui la preelaborazione dei dati, l'addestramento dei modelli e le operazioni di checkpoint. Registra i tipi di errore, le frequenze e i componenti interessati per identificare rapidamente i problemi. Gli errori più comuni includono mancate corrispondenze nel formato dei dati, out-of-memory errori durante la preelaborazione e errori di salvataggio dei checkpoint dovuti ai limiti di archiviazione. Imposta avvisi quando i tassi di errore superano le soglie di base in modo da poter indagare prima che gli errori si verifichino a cascata.
-
Analisi degli errori ricorrenti: identifica e analizza i modelli negli errori ricorrenti per prevenire guasti futuri e migliorare l'affidabilità della pipeline. Analizza i log per scoprire se campioni di dati specifici, dimensioni dei batch o configurazioni di formazione causano costantemente errori. Ad esempio, se determinati tipi di dati di input generano errori di preelaborazione, aggiungi i controlli di convalida nelle fasi iniziali della pipeline o aggiorna la logica di pulizia dei dati. Tieni traccia del tempo medio tra i guasti (MTBF) per misurare se l'affidabilità della pipeline migliora nel tempo. »
Metriche specifiche per Kubernetes ed EKS
Monitora le metriche di Kubernetes ed EKS per garantire che l'infrastruttura del cluster rimanga integra e possa supportare i carichi di lavoro di formazione. Queste metriche ti aiutano a rilevare i problemi dell'infrastruttura prima che causino errori di formazione o un peggioramento delle prestazioni.
-
Metriche dello stato del cluster Kubernetes: monitora lo stato e lo stato degli oggetti Kubernetes, inclusi pod, nodi, implementazioni e servizi. Tieni traccia dello stato dei pod per identificare i pod bloccati in stato di sospeso, guasto o crash loop. Monitora le condizioni dei nodi per rilevare problemi come la pressione del disco, la pressione della memoria o l'indisponibilità della rete. Usa kubectl o gli strumenti di monitoraggio per controllare continuamente queste metriche e impostare avvisi quando i pod non si avviano o i nodi diventano non programmabili.
-
Metriche di esecuzione della pipeline di formazione: monitora le esecuzioni della pipeline riuscite e non riuscite, la durata dei lavori, i tempi di completamento delle fasi e gli errori di orchestrazione. Monitora se i lavori di formazione vengono completati entro le finestre temporali previste e se i tassi di fallimento aumentano nel tempo. Tieni traccia di metriche come la percentuale di successo professionale, la durata media del lavoro e il tempo necessario per fallire. Queste metriche consentono di identificare se problemi di infrastruttura, problemi di configurazione o problemi di qualità dei dati causano errori di formazione.
-
AWS Service Metrics: monitora i parametri per i servizi AWS che supportano l'infrastruttura EKS e i carichi di lavoro di formazione. Monitora i parametri di S3 come la latenza delle richieste, i tassi di errore e il throughput per garantire che le prestazioni di caricamento dei dati rimangano costanti. Tieni traccia delle metriche del volume EBS, tra cui IOPS, velocità effettiva e lunghezza della coda, per rilevare i colli di bottiglia dello storage. Monitora i log di flusso VPC e le metriche di rete per identificare problemi di connettività tra i nodi o verso servizi esterni.
-
Kubernetes Control Plane Metrics: monitora il server API, lo scheduler, il controller manager e il database etcd per rilevare problemi o guasti di prestazioni che influiscono sulle operazioni del cluster. Tieni traccia della latenza, della frequenza delle richieste e del tasso di errore del server API per garantire che il piano di controllo risponda rapidamente alle richieste di pianificazione. Monitora le dimensioni del database etcd, la durata del commit e le modifiche apportate alle modifiche per rilevare problemi di stabilità. L'elevata latenza del server API o le frequenti modifiche al leader etcd possono ritardare la pianificazione dei pod e prolungare i tempi di avvio dei processi di formazione.
Registri di applicazioni e istanze
Raccogli e analizza i log delle applicazioni e delle istanze per diagnosticare problemi che le sole metriche non sono in grado di spiegare. I log forniscono un contesto dettagliato su errori, cambiamenti di stato ed eventi di sistema che aiutano a capire perché i processi di formazione falliscono o funzionano male. La correlazione dei log con le metriche consente di individuare più rapidamente le cause alla radice.
-
Registri delle applicazioni: raccogli i registri delle applicazioni dai processi di formazione, dalle pipeline di dati e dai framework ML per identificare i colli di bottiglia e diagnosticare gli errori. Questi registri raccolgono informazioni dettagliate sull'esecuzione del lavoro, inclusi errori di caricamento dei dati, errori di inizializzazione del modello, errori di salvataggio dei checkpoint e avvisi specifici del framework. Correla i timestamp dei log con i picchi metrici per capire cosa ha causato il peggioramento o gli errori delle prestazioni. Ad esempio, se l'utilizzo della GPU diminuisce improvvisamente, controllate i log delle applicazioni per individuare eventuali errori che indichino lo stallo della pipeline di dati o gli errori di preelaborazione. Utilizzate strumenti di registrazione centralizzati come CloudWatch Logs o Fluent Bit per aggregare i log di tutti i pod e renderli ricercabili.
-
Registri delle istanze: raccogli i log a livello di istanza, come i log del journal di sistema e l'output di dmesg, per rilevare problemi hardware e problemi a livello di kernel. Questi registri rivelano problemi come errori dei driver della GPU, errori di allocazione della memoria, errori del disco e problemi dell'interfaccia di rete che potrebbero non apparire nei registri delle applicazioni. I/O Correla i log delle istanze con i log e le metriche delle applicazioni per determinare se gli errori di formazione derivano da problemi hardware o problemi delle applicazioni. Ad esempio, se un processo di formazione fallisce con un out-of-memory errore, controllate nei log di dmesg i messaggi killer del kernel OOM che indicano se il sistema ha esaurito la memoria o se l'applicazione ha superato i limiti del contenitore. Imposta avvisi per errori hardware critici come errori XID della GPU o guasti del disco in modo da poter sostituire le istanze difettose prima che causino interruzioni diffuse della formazione.
Le seguenti sezioni mostrano come raccogliere le metriche sopra descritte utilizzando due approcci consigliati da AWS: CloudWatch Container Insights e Amazon Managed Prometheus Amazon Managed Prometheus con Amazon Managed Grafana. Scegli CloudWatch Container Insights se preferisci gli strumenti nativi di AWS con configurazione minima e dashboard predefiniti. Scegli Amazon Managed Prometheus con Amazon Managed Grafana se hai bisogno di dashboard personalizzati, funzionalità di visualizzazione avanzate o desideri integrarti con l'infrastruttura di monitoraggio esistente basata su Prometheus. Per un elenco completo delle metriche di Container Insights disponibili, consulta le metriche di Amazon EKS e Kubernetes Container Insights.
Prendi in considerazione il monitoraggio delle metriche di inferenza online in tempo reale
Nei sistemi in tempo reale, la bassa latenza è fondamentale per fornire risposte tempestive agli utenti o ad altri sistemi dipendenti. L'elevata latenza può compromettere l'esperienza utente o violare i requisiti prestazionali. I componenti che influenzano la latenza di inferenza includono il tempo di caricamento del modello, il tempo di preelaborazione, il tempo di previsione effettivo, il tempo di post-elaborazione, il tempo di trasmissione di rete. Consigliamo di monitorare la latenza di inferenza per garantire risposte a bassa latenza che soddisfino gli accordi sui livelli di servizio () e di sviluppare metriche personalizzate per quanto segue. SLAs Esegui il test in base al carico previsto, includi la latenza di rete, tieni conto delle richieste simultanee ed esegui il test con batch di dimensioni variabili.
-
Time to First Token (TTFT): periodo di tempo che intercorre tra il momento in cui un utente invia una richiesta e la ricezione dell'inizio di una risposta (la prima parola, token o blocco). Ad esempio, nei chatbot, dovresti controllare quanto tempo impiega a generare il primo output (token) dopo che l'utente ha posto una domanda.
-
End-to-End Latenza: è il tempo totale tra la ricezione di una richiesta e l'invio della risposta. Ad esempio, misura il tempo che intercorre tra la richiesta e la risposta.
-
Token di output per secondo (TPS): indica la velocità con cui il modello genera nuovi token dopo aver iniziato a rispondere. Ad esempio, nei chatbot, monitoreresti la velocità di generazione dei modelli linguistici per un testo di base.
-
Frequenza di errore: tiene traccia delle richieste non riuscite, il che può indicare problemi di prestazioni. Ad esempio, monitora le richieste non riuscite per documenti di grandi dimensioni o determinati caratteri.
-
Throughput: misura il numero di richieste o operazioni che il sistema è in grado di gestire per unità di tempo. Ad esempio, tieni traccia delle richieste al secondo per gestire i carichi di picco.
K/V (Key/Value) cache can be a powerful optimization technique for inference latency, particularly relevant for transformer-based models. K/V cache stores the key and value tensors from previous transformer layer computations, reducing redundant computations during autoregressive inference, particularly in large language models (LLMs). Cache Efficiency Metrics (specifically for K/Vo una sessione (uso della cache):
-
hit/miss Rapporto di cache: per le configurazioni di inferenza che sfruttano la memorizzazione nella cache (K/V o cache incorporate), misura la frequenza con cui la cache è utile. Le basse percentuali di successo possono indicare che la configurazione della cache o le modifiche del carico di lavoro non sono ottimali, entrambi fattori che possono aumentare la latenza.
Negli argomenti successivi, dimostreremo la raccolta di dati per alcune delle metriche sopra menzionate. Forniremo esempi dei due approcci consigliati da AWS: AWS-Native CloudWatch Container Insights e Amazon Managed Prometheus open source con Amazon Managed Grafana. Sceglieresti una di queste soluzioni in base alle tue esigenze complessive di osservabilità. Consulta i parametri di Amazon EKS e Kubernetes Container Insights per l'elenco completo dei parametri di Container Insights.
Monitoraggio dell'utilizzo della memoria della GPU
Come discusso nell'Prendi in considerazione il monitoraggio della formazione di base e le metriche di ottimizzazioneargomento, l'utilizzo della memoria GPU è essenziale per prevenire errori out-of-memory (OOM) e garantire un utilizzo efficiente delle risorse. Gli esempi seguenti mostrano come utilizzare l'applicazione di formazione per esporre un istogramma metrico personalizzato e calcolare l'utilizzo della memoria P95 per identificare i picchi di consumo. gpu_memory_usage_bytes Assicuratevi di eseguire il test con un esempio di lavoro di formazione (ad esempio, la messa a punto di un modello di trasformatore) in un ambiente di staging.
Esempio di AWS-Native CloudWatch Container Insights
Questo esempio dimostra come strumentare l'applicazione di formazione per esporla gpu_memory_usage_bytes come istogramma utilizzando l'approccio nativo di AWS. Tieni presente che il AI/ML contenitore deve essere configurato per emettere log strutturati in formato CloudWatch Embedded Metrics Format (EMF). CloudWatch logs analizza EMF e pubblica le metriche. Usa aws_embedded_metrics
from aws_embedded_metrics import metric_scope import torch import numpy as np memory_usage = [] @metric_scope def log_gpu_memory(metrics): # Record current GPU memory usage mem = torch.cuda.memory_allocated() memory_usage.append(mem) # Log as histogram metric metrics.set_namespace("MLTraining/GPUMemory") metrics.put_metric("gpu_memory_usage_bytes", mem, "Bytes", "Histogram") # Calculate and log P95 if we have enough data points if len(memory_usage) >= 10: p95 = np.percentile(memory_usage, 95) metrics.put_metric("gpu_memory_p95_bytes", p95, "Bytes") print(f"Current memory: {mem} bytes, P95: {p95} bytes") # Example usage in training loop for epoch in range(20): # Your model training code would go here log_gpu_memory()
Esempio di Prometheus e Grafana
Questo esempio dimostra come strumentare l'applicazione di formazione per esporla gpu_memory_usage_bytes` come istogramma utilizzando la libreria client Prometheus in Python.
from prometheus_client import Histogram from prometheus_client import start_http_server import pynvml start_http_server(8080) memory_usage = Histogram( 'gpu_memory_usage_bytes', 'GPU memory usage during training', ['gpu_index'], buckets=[1e9, 2e9, 4e9, 8e9, 16e9, 32e9] ) # Function to get GPU memory usage def get_gpu_memory_usage(): if torch.cuda.is_available(): # Get the current GPU device device = torch.cuda.current_device() # Get memory usage in bytes memory_allocated = torch.cuda.memory_allocated(device) memory_reserved = torch.cuda.memory_reserved(device) # Total memory usage (allocated + reserved) total_memory = memory_allocated + memory_reserved return device, total_memory else: return None, 0 # Get GPU memory usage gpu_index, memory_used = get_gpu_memory_usage()
Tieni traccia della durata della richiesta di inferenza per l'inferenza online in tempo reale
Come discusso nell'Prendi in considerazione il monitoraggio della formazione di base e le metriche di ottimizzazioneargomento, la bassa latenza è fondamentale per fornire risposte tempestive agli utenti o ad altri sistemi dipendenti. Gli esempi seguenti mostrano come tenere traccia di una metrica istogramma personalizzatainference_request_duration_seconds, esposta dall'applicazione di inferenza. Calcola la latenza del 95° percentile (P95) per concentrarti sugli scenari peggiori, esegui test con richieste di inferenza sintetica (ad esempio, tramite Locust) in un ambiente di staging e imposta soglie di avviso (ad esempio, >500 ms) per rilevare le violazioni degli SLA.
Esempio di AWS-Native CloudWatch Container Insights
Questo esempio dimostra come creare una metrica di istogramma personalizzata nella tua applicazione di inferenza per inference_request_duration_seconds utilizzando AWS Embedded Metric Format. CloudWatch
import boto3 import time from aws_embedded_metrics import metric_scope, MetricsLogger cloudwatch = boto3.client('cloudwatch') @metric_scope def log_inference_duration(metrics: MetricsLogger, duration: float): metrics.set_namespace("ML/Inference") metrics.put_metric("inference_request_duration_seconds", duration, "Seconds", "Histogram") metrics.set_property("Buckets", [0.1, 0.5, 1, 2, 5]) @metric_scope def process_inference_request(metrics: MetricsLogger): start_time = time.time() # Your inference processing code here # For example: # result = model.predict(input_data) duration = time.time() - start_time log_inference_duration(metrics, duration) print(f"Inference request processed in {duration} seconds") # Example usage process_inference_request()
Esempio di Prometheus e Grafana
Questo esempio dimostra come creare una metrica istogramma personalizzata nell'applicazione di inferenza per inference_request_duration_seconds utilizzando la libreria client Prometheus in Python:
from prometheus_client import Histogram from prometheus_client import start_http_server import time start_http_server(8080) request_duration = Histogram( 'inference_request_duration_seconds', 'Inference request latency', buckets=[0.1, 0.5, 1, 2, 5] ) start_time = time.time() # Process inference request request_duration.observe(time.time() - start_time)
In Grafana, usa la query histogram_quantile(0.95, sum(rate(inference_request_duration_seconds_bucket[5m])) by (le, pod)) per visualizzare le tendenze di latenza P95. Per ulteriori informazioni, vedere Prometheus Histogram Documentation e Prometheus Client Documentation
Tieni traccia del throughput dei token per un'inferenza online in tempo reale
Come discusso nell'Prendi in considerazione il monitoraggio della formazione di base e le metriche di ottimizzazioneargomento, consigliamo di monitorare il tempo di elaborazione dei token per valutare le prestazioni del modello e ottimizzare le decisioni di scalabilità. Gli esempi seguenti mostrano come tenere traccia di una metrica istogramma personalizzatatoken_processing_duration_seconds, esposta dall'applicazione di inferenza. Calcola la durata del 95° percentile (P95) per analizzare l'efficienza di elaborazione, eseguire test con carichi di richieste simulati (ad esempio, da 100 a 1000 richieste/secondo) in un cluster non di produzione e regolare i trigger KEDA per ottimizzare la scalabilità.
Esempio di AWS-Native CloudWatch Container Insights
Questo esempio dimostra come creare una metrica di istogramma personalizzata nella tua applicazione di inferenza per token_processing_duration_seconds utilizzando AWS Embedded Metric Format. CloudWatch Utilizza le dimensioni (funzione ) with a custom `get_duration_bucket `set_dimension) per classificare le durate in intervalli (ad esempio, «0.01", «>1").
import boto3 import time from aws_embedded_metrics import metric_scope, MetricsLogger cloudwatch = boto3.client('cloudwatch') @metric_scope def log_token_processing(metrics: MetricsLogger, duration: float, token_count: int): metrics.set_namespace("ML/TokenProcessing") metrics.put_metric("token_processing_duration_seconds", duration, "Seconds") metrics.set_dimension("ProcessingBucket", get_duration_bucket(duration)) metrics.set_property("TokenCount", token_count) def get_duration_bucket(duration): buckets = [0.01, 0.05, 0.1, 0.5, 1] for bucket in buckets: if duration <= bucket: return f"<={bucket}" return f">{buckets[-1]}" @metric_scope def process_tokens(input_text: str, model, tokenizer, metrics: MetricsLogger): tokens = tokenizer.encode(input_text) token_count = len(tokens) start_time = time.time() # Process tokens (replace with your actual processing logic) output = model(tokens) duration = time.time() - start_time log_token_processing(metrics, duration, token_count) print(f"Processed {token_count} tokens in {duration} seconds") return output
Esempio di Prometheus e Grafana
Questo esempio dimostra come creare una metrica istogramma personalizzata nell'applicazione di inferenza per token_processing_duration_seconds utilizzando la libreria client Prometheus in Python.
from prometheus_client import Histogram from prometheus_client import start_http_server import time start_http_server(8080) token_duration = Histogram( 'token_processing_duration_seconds', 'Token processing time per request', buckets=[0.01, 0.05, 0.1, 0.5, 1] ) start_time = time.time() # Process tokens token_duration.observe(time.time() - start_time)
In Grafana, usa la query histogram_quantile(0.95, sum(rate(token_processing_duration_seconds_bucket[5m])) by (le, pod))` per visualizzare le tendenze dei tempi di elaborazione P95. Per ulteriori informazioni, vedere Prometheus Histogram Documentation e Prometheus Client Documentation
Misura la latenza di Checkpoint Restore
Come discusso nell'Prendi in considerazione il monitoraggio della formazione di base e le metriche di ottimizzazioneargomento, la latenza dei checkpoint è una metrica fondamentale durante più fasi del ciclo di vita del modello. Gli esempi seguenti mostrano come tenere traccia di una metrica istogramma personalizzata, esposta dall'applicazione. checkpoint_restore_duration_seconds` Calcola la durata del 95° percentile (P95) per monitorare le prestazioni di ripristino, eseguire test con interruzioni Spot in un cluster non di produzione e impostare soglie di avviso (ad esempio, <30 secondi) per rilevare i ritardi.
Esempio di AWS-Native CloudWatch Container Insights
Questo esempio dimostra come utilizzare l'applicazione batch per esporre checkpoint_restore_duration_seconds come istogramma utilizzando Insights: CloudWatch
import boto3 import time import torch from aws_embedded_metrics import metric_scope, MetricsLogger @metric_scope def log_checkpoint_restore(metrics: MetricsLogger, duration: float): metrics.set_namespace("ML/ModelOperations") metrics.put_metric("checkpoint_restore_duration_seconds", duration, "Seconds", "Histogram") metrics.set_property("Buckets", [1, 5, 10, 30, 60]) metrics.set_property("CheckpointSource", "s3://my-bucket/checkpoint.pt") @metric_scope def load_checkpoint(model, checkpoint_path: str, metrics: MetricsLogger): start_time = time.time() # Load model checkpoint model.load_state_dict(torch.load(checkpoint_path)) duration = time.time() - start_time log_checkpoint_restore(metrics, duration) print(f"Checkpoint restored in {duration} seconds")
Esempio di Prometheus e Grafana
Questo esempio dimostra come strumentare l'applicazione batch per esporla checkpoint_restore_duration_seconds come istogramma utilizzando la libreria client Prometheus in Python:
from prometheus_client import Histogram from prometheus_client import start_http_server import torch start_http_server(8080) restore_duration = Histogram( 'checkpoint_restore_duration_seconds', 'Time to restore checkpoint', buckets=[1, 5, 10, 30, 60] ) with restore_duration.time(): model.load_state_dict(torch.load("s3://my-bucket/checkpoint.pt"))
In Grafana, usa la query histogram_quantile(0.95, sum(rate(checkpoint_restore_duration_seconds_bucket[5m]) by (le)) per visualizzare le tendenze della latenza di ripristino P95. Per ulteriori informazioni, vedere Prometheus Histogram Documentation e Prometheus Client Documentation