Studio di caso Latenza millisecondo utilizzando Hugging Face Infinity e CPU moderne

Studio caso Latenza millisecondo con Hugging Face Infinity e CPU moderne.

Introduzione

Il transfer learning ha cambiato l’apprendimento automatico raggiungendo nuovi livelli di precisione dalle elaborazioni del linguaggio naturale (NLP) ai compiti di audio e visione artificiale. Da Hugging Face, lavoriamo duramente per rendere questi nuovi modelli complessi e grandi checkpoint accessibili e utilizzabili il più facilmente possibile. Ma mentre i ricercatori e gli scienziati dei dati si sono convertiti al nuovo mondo dei Transformers, poche aziende sono state in grado di implementare questi modelli complessi e di grandi dimensioni in produzione su larga scala.

Il principale ostacolo è la latenza delle previsioni che può rendere costosi l’esecuzione di grandi implementazioni e impraticabili i casi d’uso in tempo reale. Risolvere questo problema è una sfida ingegneristica difficile per qualsiasi team di ingegneria dell’apprendimento automatico e richiede l’uso di tecniche avanzate per ottimizzare i modelli fino all’hardware.

Con Hugging Face Infinity, offriamo una soluzione containerizzata che facilita la distribuzione di pipeline di inferenza a bassa latenza, ad alto throughput e con accelerazione hardware per i modelli Transformer più popolari. Le aziende possono ottenere sia la precisione dei Transformers che l’efficienza necessaria per implementazioni su larga scala, il tutto in un pacchetto semplice da usare. In questo post del blog, vogliamo condividere risultati dettagliati sulle prestazioni di Infinity in esecuzione sulla generazione più recente di processori Intel Xeon, per ottenere un costo, un’efficienza e una latenza ottimali per le tue implementazioni di Transformer.

Cos’è Hugging Face Infinity

Hugging Face Infinity è una soluzione containerizzata per i clienti che consente di distribuire pipeline di inferenza ottimizzate end-to-end per modelli Transformer all’avanguardia, su qualsiasi infrastruttura.

Hugging Face Infinity è composto da 2 servizi principali:

  • L’Infinity Container è una soluzione di inferenza ottimizzata per hardware fornita come container Docker.
  • Infinity Multiverse è un servizio di ottimizzazione del modello tramite il quale un modello Hugging Face Transformer viene ottimizzato per l’hardware di destinazione. Infinity Multiverse è compatibile con Infinity Container.

L’Infinity Container è stato progettato specificamente per funzionare su un’architettura hardware di destinazione ed espone un endpoint HTTP /predict per eseguire l’inferenza.

Figura 1. Panoramica di Infinity

Un Infinity Container è progettato per servire 1 modello e 1 attività. Un’attività corrisponde a compiti di apprendimento automatico come definito nella documentazione di Transformers Pipelines. Al momento della stesura di questo post del blog, i compiti supportati includono l’estrazione di caratteristiche/embedding di documenti, il ranking, la classificazione delle sequenze e la classificazione dei token.

Puoi trovare ulteriori informazioni su Hugging Face Infinity su hf.co/infinity e se sei interessato a testarlo tu stesso, puoi registrarti per una versione di prova gratuita su hf.co/infinity-trial.


Benchmark

I benchmark delle prestazioni di inferenza spesso misurano solo l’esecuzione del modello. In questo post del blog, e quando si discute delle prestazioni di Infinity, misuriamo sempre l’intera pipeline end-to-end, inclusa la pre-elaborazione, la previsione e la post-elaborazione. Tieni presente questo quando confronti questi risultati con altre misurazioni di latenza.

Figura 2. Pipeline end-to-end di Infinity

Ambiente

Come ambiente di benchmark, useremo le istanze Amazon EC2 C6i, che sono istanze ottimizzate per il calcolo e alimentate dai processori Intel Xeon Scalable di terza generazione. Queste nuove istanze basate su Intel utilizzano la tecnologia di processo Ice Lake e supportano Intel AVX-512, Intel Turbo Boost e Intel Deep Learning Boost.

Oltre alle prestazioni superiori per i carichi di lavoro di apprendimento automatico, le istanze Intel Ice Lake C6i offrono un’ottima rapporto tra costo e prestazioni e sono la nostra raccomandazione per distribuire Infinity su Amazon Web Services. Per saperne di più, visita la pagina delle istanze EC2 C6i.

Metodologie

Quando si tratta di mettere a confronto modelli simili a BERT, vengono adottate principalmente due metriche:

  • Latency: il tempo necessario per una singola previsione del modello (pre-elaborazione, previsione, post-elaborazione)
  • Throughput: il numero di esecuzioni effettuate in un determinato periodo di tempo per una configurazione di benchmark, rispettando i core della CPU fisica, la lunghezza della sequenza e la dimensione del batch

Queste due metriche verranno utilizzate per il benchmark di Hugging Face Infinity su diverse configurazioni al fine di comprendere i vantaggi e i compromessi in questo post del blog.


Risultati

Per eseguire il benchmark, abbiamo creato un container Infinity per l’istanza EC2 C6i (Ice-lake) e ottimizzato un modello DistilBERT per la classificazione delle sequenze utilizzando Infinity Multiverse.

Questo Infinity Container ottimizzato per ice-lake può ottenere una latenza e un throughput fino al 34% migliori rispetto alle istanze basate su cascade-lake esistenti e fino al 800% di miglioramento della latenza e del throughput rispetto ai modelli vanilla dei Transformers in esecuzione su ice-lake.

Il benchmark che abbiamo creato consiste in 192 diversi esperimenti e configurazioni. Abbiamo eseguito gli esperimenti per:

  • Core fisici della CPU: 1, 2, 4, 8
  • Lunghezza della sequenza: 8, 16, 32, 64, 128, 256, 384, 512
  • Dimensione del batch: 1, 2, 4, 8, 16, 32

In ogni esperimento, raccogliamo i dati relativi a:

  • Throughput (richieste al secondo)
  • Latency (min, max, media, p90, p95, p99)

Puoi trovare tutti i dati del benchmark in questo foglio di calcolo di Google: 🤗 Infinity: CPU Ice-Lake Benchmark.

In questo post sul blog, evidenzieremo alcuni dei risultati del benchmark, inclusa la migliore configurazione in termini di latenza e throughput.

Inoltre, abbiamo distribuito il modello DistilBERT che abbiamo utilizzato per il benchmark come un endpoint API su 2 core fisici. Puoi testarlo e farti un’idea delle prestazioni di Infinity. Di seguito troverai un comando curl su come inviare una richiesta all’endpoint ospitato. L’API restituisce un’intestazione HTTP x-compute-time, che contiene la durata dell’intero processo.

curl --request POST `-i` \
  --url https://infinity.huggingface.co/cpu/distilbert-base-uncased-emotion \
  --header 'Content-Type: application/json' \
  --data '{"inputs":"Mi piaci. Ti amo."}'

Throughput

Di seguito puoi trovare il confronto di throughput per l’esecuzione di Infinity su 2 core fisici con dimensione del batch pari a 1, rispetto ai transformers standard.

Figura 3. Throughput: Infinity vs Transformers

Latency

Di seguito, puoi trovare i risultati relativi alla latenza per un esperimento in cui viene eseguito Hugging Face Infinity su 2 core fisici con dimensione del batch pari a 1. È notevole vedere quanto sia robusto e costante Infinity, con una deviazione minima per p95, p99 o p100 (latenza massima). Questo risultato è confermato anche per altri esperimenti nel benchmark.

Figura 4. Latency (Batch=1, Core Fisici=2)


Conclusioni

In questo post, abbiamo mostrato le prestazioni di Hugging Face Infinity sul nuovo processore Intel Ice Lake Xeon CPU. Abbiamo creato un benchmark dettagliato con oltre 190 diverse configurazioni, condividendo i risultati che puoi aspettarti quando utilizzi Hugging Face Infinity su CPU, quale sarebbe la migliore configurazione per ottimizzare il tuo Infinity Container in termini di latenza e quale sarebbe la migliore configurazione per massimizzare il throughput.

Hugging Face Infinity può offrire un throughput fino al 800% superiore rispetto ai transformers standard e una latenza di 1-4 ms per lunghezze di sequenza fino a 64 token.

La flessibilità di ottimizzare i modelli transformer per throughput, latenza o entrambi consente alle aziende di ridurre i costi di infrastruttura per la stessa quantità di lavoro o di abilitare casi d’uso in tempo reale che prima non erano possibili.

Se sei interessato a provare Hugging Face Infinity, iscriviti per la tua prova su hf.co/infinity-trial

Risorse

  • Hugging Face Infinity
  • Hugging Face Infinity Trial
  • Istanze Amazon EC2 C6i
  • DistilBERT
  • Articolo su DistilBERT
  • Modello DistilBERT
  • 🤗 Infinity: CPU Ice-Lake Benchmark