Glossario

Kubernetes

Scopri come Kubernetes ottimizza i carichi di lavoro AI/ML con la distribuzione scalabile dei modelli, la formazione distribuita e la gestione efficiente delle risorse.

Addestra i modelli YOLO semplicemente
con Ultralytics HUB

Per saperne di più

Kubernetes, spesso abbreviato in K8s, è una piattaforma open-source progettata per automatizzare la distribuzione, la scalabilità e il funzionamento dei container di applicazioni. Originariamente progettato da Google, Kubernetes è ora gestito dalla Cloud Native Computing Foundation. In sostanza, agisce come un orchestratore di applicazioni containerizzate, gestendole in un cluster di computer in modo che vengano eseguite in modo efficiente e affidabile. Per gli utenti che hanno familiarità con l'apprendimento automatico, pensa a Kubernetes come al direttore di un'orchestra, che assicura che tutti i diversi strumenti (i componenti delle tue applicazioni AI/ML) suonino insieme in modo armonioso e su scala.

Che cos'è Kubernetes?

Kubernetes è un sistema per la gestione di applicazioni containerizzate. I container raggruppano il codice software e le sue dipendenze in modo che le applicazioni possano essere eseguite in modo uniforme e coerente in diversi ambienti informatici. Docker è una popolare tecnologia di containerizzazione spesso utilizzata con Kubernetes. Kubernetes automatizza molti dei processi manuali coinvolti nella distribuzione, nella gestione e nella scalabilità di queste applicazioni containerizzate. Raggruppa i container che compongono un'applicazione in unità logiche per facilitarne la gestione e la scoperta. Queste unità, chiamate pod, vengono distribuite in un cluster di macchine. Kubernetes gestisce quindi attività quali:

  • Rilevamento dei servizi e bilanciamento del carico: Kubernetes può esporre un container utilizzando il nome DNS o il proprio indirizzo IP. Se il traffico verso un container è elevato, Kubernetes può bilanciare il carico e distribuire il traffico di rete in modo che la distribuzione sia stabile.
  • Orchestrazione dello storage: Kubernetes ti permette di montare automaticamente il sistema di archiviazione di tua scelta, come ad esempio l'archiviazione locale, i provider di cloud pubblici e altro ancora.
  • Rollout e rollback automatizzati: Con Kubernetes puoi descrivere lo stato desiderato per i tuoi container distribuiti e questo cambia lo stato attuale in quello desiderato a una velocità controllata. Ad esempio, Kubernetes può automatizzare la creazione di nuovi container per il tuo deployment, rimuovere i container esistenti e adottare tutte le loro risorse nel nuovo container.
  • Confezionamento automatico dei bin: Kubernetes ti permette di specificare la quantità di CPU e di RAM (memoria) di cui ha bisogno ogni container. Kubernetes è in grado di inserire i container nei tuoi nodi per utilizzare al meglio le tue risorse.
  • Auto-riparazione: Kubernetes riavvia i container che si guastano, sostituisce e riprogramma i container quando i nodi muoiono, elimina i container che non rispondono al controllo di salute definito dall'utente e non li pubblicizza ai clienti finché non sono pronti per essere serviti.
  • Gestione dei segreti e delle configurazioni: Kubernetes ti permette di archiviare e gestire informazioni sensibili, come password, token OAuth e chiavi SSH. Puoi distribuire e aggiornare i segreti e la configurazione delle applicazioni senza ricostruire le immagini dei container e senza esporre i segreti nella configurazione dello stack.

Perché Kubernetes è importante per l'AI e il ML?

Kubernetes è particolarmente importante nel campo dell'intelligenza artificiale e dell'apprendimento automatico a causa della natura scalabile e ad alta intensità di risorse dei carichi di lavoro ML. L'addestramento di modelli di grandi dimensioni, in particolare i modelli di Ultralytics YOLO per il rilevamento di oggetti, richiede spesso un'elaborazione distribuita su più GPU o TPU. Kubernetes fornisce l'infrastruttura per gestire in modo efficiente queste risorse distribuite.

Inoltre, la distribuzione di modelli AI/ML per l'inferenza su scala richiede un'infrastruttura robusta e scalabile. Kubernetes semplifica la distribuzione dei modelli consentendo agli utenti di containerizzare i loro modelli e di servirli attraverso API scalabili. Questo è fondamentale per le applicazioni del mondo reale che richiedono una bassa latenza di inferenza e un elevato throughput.

Applicazioni di Kubernetes in AI/ML

  1. Modello di servizio scalabile: Consideriamo un'applicazione di rilevamento di oggetti in tempo reale, come ad esempio un sistema di gestione del traffico di una città intelligente che utilizza un modello scalabile. Ultralytics YOLOv8. Man mano che la città cresce, aumenta la richiesta di elaborare i feed video di un maggior numero di telecamere. Kubernetes ti permette di scalare l'infrastruttura di model serving in modo dinamico. Distribuendo il tuo modello YOLOv8 come servizio containerizzato su Kubernetes, puoi facilmente aumentare o diminuire il numero di istanze del modello in base al traffico in arrivo, garantendo prestazioni costanti anche in condizioni di carico elevato. Questa scalabilità è essenziale per mantenere una bassa latenza e un'alta disponibilità nelle applicazioni AI in tempo reale.

  2. Formazione distribuita: L'addestramento di modelli di intelligenza artificiale all'avanguardia spesso richiede dataset enormi e una notevole potenza di calcolo. La formazione distribuita su un cluster di macchine diventa necessaria per ridurre i tempi di formazione. Kubernetes può orchestrare lavori di formazione distribuiti gestendo la distribuzione del carico di lavoro su più nodi, monitorando i progressi e gestendo i guasti. Ad esempio, puoi usare Kubernetes per gestire un lavoro di addestramento distribuito per un modello di classificazione di immagini di grandi dimensioni utilizzando un set di dati come ImageNet. Kubernetes garantisce che ogni nodo di addestramento sia configurato correttamente, che i dati siano distribuiti in modo efficiente e che l'intero processo di addestramento sia resistente ai guasti dei nodi.

In sintesi, Kubernetes è uno strumento potente per gestire le complessità dei carichi di lavoro di AI e ML, fornendo scalabilità, resilienza ed efficienza sia per le fasi di formazione che di distribuzione. La sua capacità di orchestrare applicazioni containerizzate lo rende una piattaforma ideale per costruire ed eseguire sistemi di IA moderni e scalabili.

Leggi tutto