ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

ByteDance consente di risparmiare fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia

Questo è un post sul blog degli ospiti scritto insieme a Minghui Yu e Jianzhe Xiao di Bytedance.

ByteDance è un'azienda tecnologica che gestisce una gamma di piattaforme di contenuti per informare, educare, intrattenere e ispirare persone di lingue, culture e aree geografiche diverse. Gli utenti si fidano e apprezzano le nostre piattaforme di contenuti grazie alle esperienze ricche, intuitive e sicure che offrono. Queste esperienze sono rese possibili dal nostro motore back-end di machine learning (ML), con modelli ML creati per la moderazione dei contenuti, la ricerca, la raccomandazione, la pubblicità e nuovi effetti visivi.

Il team ByteDance AML (Applied Machine Learning) fornisce sistemi ML altamente performanti, affidabili e scalabili e servizi ML end-to-end per il business dell'azienda. Stavamo cercando modi per ottimizzare i nostri sistemi di inferenza ML per ridurre i costi, senza aumentare i tempi di risposta. Quando AWS è stato lanciato AWS Inferenza, un chip di inferenza ML ad alte prestazioni creato appositamente da AWS, abbiamo collaborato con il nostro team dell'account AWS per verificare se AWS Inferentia può raggiungere i nostri obiettivi di ottimizzazione. Abbiamo eseguito diverse prove di concetto, con un costo di inferenza inferiore fino al 60% rispetto alle istanze G4dn EC2 basate su GPU T4 e una latenza di inferenza inferiore fino al 25%. Per realizzare questi risparmi sui costi e miglioramenti delle prestazioni, abbiamo deciso di distribuire modelli basati su AWS Inferentia Cloud di calcolo elastico di Amazon (Amazon EC2) Istanze Inf1 in produzione.

Il grafico seguente mostra il miglioramento della latenza per uno dei nostri modelli di rilevamento del volto precedentemente implementato su GPU con Tensor RT. La latenza media è diminuita del 20% (da 50 millisecondi a 40 millisecondi) e la latenza p99 è diminuita del 25% (da 200 millisecondi a 150 millisecondi).

In questo post, condividiamo come abbiamo risparmiato sui costi di inferenza riducendo le latenze e aumentando il throughput utilizzando AWS Inferentia.

Alla ricerca di un'elaborazione economica e ad alte prestazioni

Il team AML di ByteDance si concentra sulla ricerca e l'implementazione di sistemi ML all'avanguardia e sulle risorse informatiche eterogenee di cui hanno bisogno. Creiamo sistemi di formazione e inferenza su larga scala per un'ampia varietà di modelli di raccomandazione, elaborazione del linguaggio naturale (NLP) e visione artificiale (CV). Questi modelli sono molto complessi ed elaborano un'enorme quantità di dati dalle numerose piattaforme di contenuti gestite da ByteDance. La distribuzione di questi modelli richiede risorse GPU significative, sia nel cloud che in locale. Pertanto, i costi di calcolo per questi sistemi di inferenza sono piuttosto elevati.

Stavamo cercando di ridurre questi costi senza influire sulla velocità effettiva o sulla latenza. Volevamo la flessibilità del cloud e un ciclo di consegna più rapido, che è molto più breve di quello necessario per una configurazione locale. E sebbene fossimo aperti all'esplorazione di nuove opzioni per il machine learning accelerato, volevamo anche un'esperienza di sviluppo senza soluzione di continuità.

Abbiamo appreso dal nostro team AWS che le istanze EC2 Inf1 basate su AWS Inferentia offrono inferenza ML ad alte prestazioni al costo per inferenza più basso nel cloud. Eravamo curiosi di esplorarli e li abbiamo trovati adatti al nostro caso d'uso, perché eseguiamo un sostanziale apprendimento automatico su grandi quantità di dati di immagini, oggetti, parlato e testo. Erano decisamente adatti ai nostri obiettivi, perché potevamo realizzare enormi risparmi sui costi data la complessità dei nostri modelli e il volume delle previsioni giornaliere. Inoltre, AWS Inferentia offre una grande quantità di memoria on-chip, che puoi utilizzare per memorizzare nella cache modelli di grandi dimensioni invece di archiviarli off-chip. Abbiamo riconosciuto che questo può avere un impatto significativo nella riduzione della latenza dell'inferenza perché i core di elaborazione di AWS Inferentia, chiamati NeuronCores, hanno accesso ad alta velocità ai modelli archiviati nella memoria on-chip e non sono limitati dalla memoria off-chip larghezza di banda.

Alla fine, dopo aver valutato diverse opzioni, abbiamo scelto le istanze EC2 Inf1 per il loro miglior rapporto prestazioni/prezzo rispetto alle istanze G4dn e NVIDIA T4 on-premise. Ci siamo impegnati in un ciclo di iterazione continua con il team AWS per sbloccare i vantaggi in termini di prezzo e prestazioni di Inf1.

Distribuzione di carichi di lavoro di inferenza su AWS Inferentia

Iniziare con AWS Inferentia utilizzando l'SDK AWS Neuron prevedeva due fasi: compilazione del codice del modello e distribuzione sulle istanze Inf1. Come è comune quando si spostano i modelli ML su qualsiasi nuova infrastruttura, ci sono state alcune sfide che abbiamo dovuto affrontare. Siamo stati in grado di superare queste sfide con la diligenza e il supporto del nostro team AWS. Nelle sezioni seguenti, condividiamo diversi suggerimenti e osservazioni utili basati sulla nostra esperienza nella distribuzione di carichi di lavoro di inferenza su AWS Inferentia.

Modello conforme per OCR

Il nostro modello conforme di riconoscimento ottico dei caratteri (OCR) rileva e legge il testo all'interno delle immagini. Abbiamo lavorato su diverse ottimizzazioni per ottenere prestazioni elevate (QPS) per una varietà di dimensioni di batch, mantenendo bassa la latenza. Di seguito sono riportate alcune ottimizzazioni chiave:

  • Ottimizzazioni del compilatore – Per impostazione predefinita, Inferentia offre le migliori prestazioni su input con una lunghezza di sequenza fissa, che presentava una sfida in quanto la lunghezza dei dati testuali non è fissa. Per ovviare a questo, abbiamo diviso il nostro modello in due parti: un codificatore e un decodificatore. Abbiamo compilato questi due sottomodelli separatamente e poi li abbiamo uniti in un unico modello tramite TorchScript. Eseguendo il flusso di controllo del ciclo for sulle CPU, questo approccio ha abilitato il supporto per lunghezze di sequenza variabili su Inferentia.
  • Prestazioni di convoluzione in profondità – Abbiamo riscontrato un collo di bottiglia DMA nell'operazione di convoluzione in profondità, che è ampiamente utilizzata dal nostro modello conforme. Abbiamo lavorato a stretto contatto con il team AWS Neuron per identificare e risolvere il collo di bottiglia delle prestazioni di accesso DMA, che ha migliorato le prestazioni di questa operazione e migliorato le prestazioni complessive del nostro modello OCR.

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Abbiamo creato due nuove varianti di modello per ottimizzare la nostra implementazione su Inferentia:

  • Codificatore/decodificatore combinato e srotolato – Invece di utilizzare un codificatore e un decodificatore compilati in modo indipendente, abbiamo combinato il codificatore e un decodificatore completamente srotolato in un unico modello e abbiamo compilato questo modello come un singolo NEFF. Lo srotolamento del decoder consente di eseguire tutto il flusso di controllo del decoder su Inferentia senza utilizzare alcuna operazione della CPU. Con questo approccio, ogni iterazione del decodificatore usa esattamente la quantità di calcolo necessaria per quel token. Questo approccio migliora le prestazioni perché riduciamo in modo significativo il calcolo in eccesso introdotto in precedenza dal riempimento degli input. Inoltre, non è necessario alcun trasferimento di dati da Inferentia alla CPU tra le iterazioni del decoder, il che riduce drasticamente il tempo di I/O. Questa versione del modello non supporta l'arresto anticipato.
  • Decoder srotolato partizionato – Simile al modello combinato completamente srotolato, questa variante del modello srotola più iterazioni del decodificatore e le compila come una singola esecuzione (ma non include il codificatore). Ad esempio, per una lunghezza massima della sequenza di 75, possiamo srotolare il decoder in 3 partizioni che calcolano i token 1-25, 26-50 e 51-75. In termini di I/O, questo è anche significativamente più veloce perché non è necessario trasferire l'output dell'encoder una volta per ogni iterazione. Invece, le uscite vengono trasferite solo una volta per ciascuna partizione del decodificatore. Questa versione del modello supporta l'arresto anticipato, ma solo ai limiti della partizione. I limiti della partizione possono essere ottimizzati per ogni applicazione specifica per garantire che la maggior parte delle richieste esegua solo una partizione.

Per migliorare ulteriormente le prestazioni, abbiamo apportato le seguenti ottimizzazioni per ridurre l'utilizzo della memoria o migliorare l'efficienza dell'accesso:

  • Deduplicazione tensoriale e copie ridotte – Si tratta di un'ottimizzazione del compilatore che riduce significativamente le dimensioni dei modelli srotolati e il numero di istruzioni/accesso alla memoria riutilizzando i tensori per migliorare l'efficienza dello spazio.
  • Istruzioni ridotte – Si tratta di un'ottimizzazione del compilatore utilizzata con la versione non imbottita del decoder per ridurre significativamente il numero totale di istruzioni.
  • Deduplica multi-core – Questa è un'ottimizzazione del runtime che è un'alternativa alla deduplicazione del tensore. Con questa opzione, tutti i modelli multicore saranno significativamente più efficienti in termini di spazio.

Modello ResNet50 per la classificazione delle immagini

ResNet-50 è un modello di deep learning preaddestrato per la classificazione delle immagini. È una rete neurale convoluzionale (CNN o ConvNet) che viene più comunemente applicata all'analisi delle immagini visive. Abbiamo utilizzato le seguenti tecniche per migliorare le prestazioni di questo modello su Inferentia:

  • Trasformazione del modello – Molti dei modelli di ByteDance vengono esportati in formato ONNX, che attualmente Inferentia non supporta nativamente. Per gestire questi modelli ONNX, il team di AWS Neuron ha fornito degli script per trasformare i nostri modelli dal formato ONNX ai modelli PyTorch, che possono essere compilati direttamente per Inferentia utilizzando torch-neuron.
  • Ottimizzazione delle prestazioni – Abbiamo lavorato a stretto contatto con il Neurone AWS team per mettere a punto l'euristica di programmazione nel compilatore per ottimizzare le prestazioni dei nostri modelli ResNet-50.

Modello multimodale per la moderazione dei contenuti

Il nostro modello di deep learning multimodale è una combinazione di più modelli separati. La dimensione di questo modello è relativamente grande, il che ha causato errori di caricamento del modello su Inferentia. Il team di AWS Neuron ha risolto con successo questo problema utilizzando la condivisione del peso per ridurre l'utilizzo della memoria del dispositivo. Il team di Neuron ha rilasciato questa funzionalità di deduplicazione del peso nella libreria Neuron libnrt e ha anche migliorato Neuron Tools per metriche più precise. La funzionalità di deduplicazione del peso di runtime può essere abilitata impostando la seguente variabile di ambiente prima di eseguire l'inferenza:

NEURON_RT_MULTI_INSTANCE_SHARED_WEIGHTS=1

L'SDK di Neuron aggiornato ha ridotto il consumo complessivo di memoria dei nostri modelli duplicati, il che ci ha consentito di implementare il nostro modello multimodale per l'inferenza multi-core.

Migrazione di più modelli in AWS Inferentia

In ByteDance, continuiamo a implementare modelli innovativi di deep learning per offrire esperienze utente deliziose a quasi 2 miliardi di utenti attivi mensili. Data l'enorme scala in cui operiamo, siamo costantemente alla ricerca di modi per risparmiare sui costi e ottimizzare le prestazioni. Continueremo a migrare i modelli su AWS Inferentia per beneficiare delle sue elevate prestazioni e dell'efficienza in termini di costi. Vogliamo anche che AWS lanci più tipi di istanza basati su AWS Inferentia, come quelli con più vCPU per le attività di pre-elaborazione. Andando avanti, ByteDance spera di vedere più innovazione del silicio da AWS per offrire le migliori prestazioni di prezzo per le applicazioni ML.

Se sei interessato a saperne di più su come AWS Inferentia può aiutarti a risparmiare sui costi ottimizzando le prestazioni delle tue applicazioni di inferenza, visita il Istanze di Amazon EC2 Inf1 pagina prodotto.


Informazioni sugli autori

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Minghui Yu è Senior Machine Learning Team Lead per l'inferenza presso ByteDance. La sua area di interesse è AI Computing Acceleration e Machine Learning System. È molto interessato al calcolo eterogeneo e all'architettura dei computer nell'era post Moore. Nel tempo libero ama il basket e il tiro con l'arco.

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Jianzhe Xiao è Senior Software Engineer Team Lead nel team AML di ByteDance. Il suo lavoro attuale si concentra sull'aiutare il team aziendale ad accelerare il processo di distribuzione del modello e migliorare le prestazioni di inferenza del modello. Al di fuori del lavoro, ama suonare il pianoforte.

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Tian Shi è Senior Solutions Architect presso AWS. La sua area di interesse è l'analisi dei dati, l'apprendimento automatico e il serverless. È appassionato di aiutare i clienti a progettare e creare soluzioni affidabili e scalabili sul cloud. Nel tempo libero ama nuotare e leggere.

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Jia Dong è Customer Solutions Manager presso AWS. Le piace conoscere i servizi AI/ML di AWS e aiutare i clienti a raggiungere i loro risultati aziendali creando soluzioni per loro. Al di fuori del lavoro, a Jia piacciono i viaggi, lo yoga e i film.

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Jonathan Lunt è un ingegnere del software di Amazon con un focus sullo sviluppo di framework ML. Nel corso della sua carriera ha ricoperto l'intera gamma di ruoli di data science, tra cui lo sviluppo di modelli, l'implementazione dell'infrastruttura e l'ottimizzazione specifica dell'hardware.

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Giosuè Hannan è un ingegnere di machine learning presso Amazon. Si occupa dell'ottimizzazione dei modelli di deep learning per applicazioni di computer vision e di elaborazione del linguaggio naturale su larga scala.

ByteDance risparmia fino al 60% sui costi di inferenza riducendo la latenza e aumentando il throughput utilizzando AWS Inferentia PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Shruti Koparkar è Senior Product Marketing Manager presso AWS. Aiuta i clienti a esplorare, valutare e adottare l'infrastruttura di elaborazione accelerata EC2 per le loro esigenze di machine learning.

Timestamp:

Di più da Apprendimento automatico di AWS