Optimum+ONNX Runtime – Allenamento più semplice e veloce per i tuoi modelli Hugging Face

Optimum+ONNX Runtime - Allenamento rapido e facile per modelli Hugging Face.

Introduzione

I modelli basati su Transformer nel linguaggio, nella visione e nella lingua stanno diventando sempre più grandi per supportare casi d’uso complessi multi-modalità per i clienti finali. L’aumento delle dimensioni del modello influisce direttamente sulle risorse necessarie per addestrare questi modelli e scalare le dimensioni. Hugging Face e il team di ONNX Runtime di Microsoft stanno lavorando insieme per sviluppare miglioramenti nel fine-tuning di modelli di grande dimensione per il linguaggio, la lingua e la visione. La libreria Optimum di Hugging Face, attraverso la sua integrazione con ONNX Runtime per l’addestramento, fornisce una soluzione aperta per migliorare i tempi di addestramento di oltre il 35% per molti modelli popolari di Hugging Face. Presentiamo i dettagli sia su Hugging Face Optimum che sull’ecosistema di addestramento di ONNX Runtime, con numeri di prestazioni che evidenziano i vantaggi dell’utilizzo della libreria Optimum.

Risultati delle prestazioni

Il grafico qui sotto mostra un’accelerazione impressionante dal 39% al 130% per i modelli di Hugging Face con Optimum quando si utilizza ONNX Runtime e DeepSpeed ZeRO Stage 1 per l’addestramento. Le misurazioni delle prestazioni sono state effettuate su modelli selezionati di Hugging Face con PyTorch come esecuzione di base, solo ONNX Runtime per l’addestramento come seconda esecuzione e ONNX Runtime + DeepSpeed ZeRO Stage 1 come esecuzione finale, mostrando guadagni massimi. L’ottimizzatore utilizzato per le esecuzioni di base di PyTorch è l’ottimizzatore AdamW e le esecuzioni di addestramento ORT utilizzano l’ottimizzatore Adam Fuso. Le esecuzioni sono state effettuate su un singolo nodo Nvidia A100 con 8 GPU.

Ulteriori dettagli sulle impostazioni di configurazione per attivare Optimum per l’accelerazione dell’addestramento possono essere trovati qui . Le informazioni sulla versione utilizzata per queste esecuzioni sono le seguenti:

PyTorch: 1.14.0.dev20221103+cu116; ORT: 1.14.0.dev20221103001+cu116; DeepSpeed: 0.6.6; HuggingFace: 4.24.0.dev0; Optimum: 1.4.1.dev0; Cuda: 11.6.2

Libreria Optimum

Hugging Face è una comunità e una piattaforma in rapida crescita che mira a democratizzare il machine learning di qualità. Abbiamo esteso le modalità dall’NLP all’audio e alla visione e ora copriamo casi d’uso in tutto il machine learning per soddisfare le esigenze della nostra comunità dopo il successo della libreria Transformers . Ora, su Hugging Face Hub, ci sono più di 120.000 checkpoint di modelli gratuiti e accessibili per vari compiti di machine learning, 18.000 set di dati e 20.000 app demo di ML. Tuttavia, scalare i modelli di Transformer in produzione è ancora una sfida per l’industria. Nonostante l’alta precisione, l’addestramento e l’inferenza dei modelli basati su Transformer possono richiedere tempo ed essere costosi.

Per affrontare queste esigenze, Hugging Face ha sviluppato due librerie open-source: Accelerate e Optimum . Mentre 🤗 Accelerate si concentra sull’addestramento distribuito pronto all’uso, 🤗 Optimum, come estensione di transformers, accelera l’addestramento e l’inferenza del modello sfruttando l’efficienza massima dell’hardware specifico degli utenti. Optimum integra acceleratori di machine learning come ONNX Runtime e hardware specializzato come Intel’s Habana Gaudi, in modo che gli utenti possano beneficiare di un notevole aumento delle prestazioni sia nell’addestramento che nell’inferenza. Inoltre, Optimum si integra in modo trasparente con altre tool di Hugging Face, ereditando la stessa facilità d’uso di Transformers. Gli sviluppatori possono facilmente adattare il loro lavoro per ottenere una latenza più bassa con meno potenza di calcolo.

ONNX Runtime Training

ONNX Runtime accelera l’addestramento di modelli di grandi dimensioni per aumentare il throughput fino al 40% in modalità stand-alone e fino al 130% quando combinato con DeepSpeed per i modelli basati su transformer di HuggingFace popolari. ONNX Runtime è già integrato come parte di Optimum e consente un addestramento più veloce attraverso il framework di addestramento di Optimum di Hugging Face.

ONNX Runtime Training raggiunge questi miglioramenti di throughput tramite diverse ottimizzazioni di memoria e calcolo. Le ottimizzazioni di memoria consentono a ONNX Runtime di massimizzare la dimensione del batch e utilizzare in modo efficiente la memoria disponibile, mentre le ottimizzazioni di calcolo velocizzano il tempo di addestramento. Queste ottimizzazioni includono, ma non si limitano a, una pianificazione efficiente della memoria, ottimizzazioni del kernel, applicazione multi-tensoriale per l’ottimizzatore Adam (che raggruppa gli aggiornamenti elemento per elemento applicati a tutti i parametri del modello in uno o pochi lanci del kernel), ottimizzatore FP16 (che elimina molte copie di memoria dal dispositivo all’host), addestramento con precisione mista e ottimizzazioni del grafo come fusioni di nodi ed eliminazioni di nodi. ONNX Runtime Training supporta sia le GPU NVIDIA che AMD e offre estensibilità con operatori personalizzati.

In breve, offre agli sviluppatori di intelligenza artificiale la possibilità di sfruttare appieno l’ecosistema con cui sono familiari, come PyTorch e Hugging Face, e di utilizzare l’accelerazione da ONNX Runtime sul dispositivo di destinazione scelto per risparmiare tempo e risorse.

ONNX Runtime Training in Optimum

Optimum fornisce un’API ORTTrainer che estende il Trainer in Transformers per utilizzare ONNX Runtime come backend per l’accelerazione. ORTTrainer è un’API facile da usare che contiene un ciclo di addestramento completo e un ciclo di valutazione. Supporta funzionalità come la ricerca di iperparametri, l’addestramento a precisione mista e l’addestramento distribuito con più GPU. ORTTrainer consente agli sviluppatori di IA di combinare ONNX Runtime e altre tecniche di accelerazione di terze parti durante l’addestramento dei modelli Transformers, il che aiuta ad accelerare ulteriormente l’addestramento e ottenere il massimo delle prestazioni dall’hardware. Ad esempio, gli sviluppatori possono combinare l’addestramento di ONNX Runtime con la parallelizzazione dei dati distribuita e l’addestramento a precisione mista integrati nel Trainer di Transformers. Inoltre, ORTTrainer semplifica la combinazione dell’addestramento di ONNX Runtime con DeepSpeed ZeRO-1, che consente di risparmiare memoria partizionando gli stati dell’ottimizzatore. Dopo aver completato il pre-addestramento o il fine-tuning, gli sviluppatori possono salvare il modello PyTorch addestrato o convertirlo nel formato ONNX con le API implementate da Optimum per ONNX Runtime per facilitare il deployment per l’Inference. E proprio come il Trainer, anche ORTTrainer è completamente integrato con Hugging Face Hub: dopo l’addestramento, gli utenti possono caricare i checkpoint dei propri modelli sul proprio account Hugging Face Hub.

Quindi, concretamente, cosa devono fare gli utenti con Optimum per sfruttare l’accelerazione di ONNX Runtime per l’addestramento? Se stai già utilizzando il Trainer, è sufficiente adattare alcune righe di codice per beneficiare di tutti i miglioramenti sopra menzionati. Ci sono principalmente due sostituzioni che devono essere applicate. In primo luogo, sostituire il Trainer con ORTTrainer, quindi sostituire TrainingArguments con ORTTrainingArguments che contiene tutti gli iperparametri che il trainer utilizzerà per l’addestramento e la valutazione. ORTTrainingArguments estende TrainingArguments per applicare alcuni argomenti extra potenziati da ONNX Runtime. Ad esempio, gli utenti possono applicare l’ottimizzatore Fused Adam per ottenere prestazioni extra. Ecco un esempio:

-from transformers import Trainer, TrainingArguments
+from optimum.onnxruntime import ORTTrainer, ORTTrainingArguments

# Passo 1: Definire gli argomenti di addestramento
-training_args = TrainingArguments(
+training_args = ORTTrainingArguments(
    output_dir="percorso/per/salvare/la/cartella/",
-   optim = "adamw_hf",
+   optim = "adamw_ort_fused",
    ...
)

# Passo 2: Creare il proprio Trainer di ONNX Runtime
-trainer = Trainer(
+trainer = ORTTrainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
+   feature="sequence-classification",
    ...
)

# Passo 3: Utilizzare ONNX Runtime per l'addestramento!🤗
trainer.train()

Guardando al futuro

Il team di Hugging Face sta lavorando per rendere open source modelli più grandi e abbassare la barriera per gli utenti che vogliono beneficiare di strumenti di accelerazione sia per l’addestramento che per l’inference. Stiamo collaborando con il team di addestramento di ONNX Runtime per portare ulteriori ottimizzazioni di addestramento ad architetture di modelli più recenti e più grandi, tra cui Whisper e Stable Diffusion. Microsoft ha anche confezionato le sue tecnologie di accelerazione di addestramento all’avanguardia nel Azure Container for PyTorch. Si tratta di un ambiente curato leggero che include DeepSpeed e ONNX Runtime per migliorare la produttività degli sviluppatori di IA che utilizzano PyTorch per l’addestramento. Oltre all’addestramento di modelli di grandi dimensioni, il team di addestramento di ONNX Runtime sta anche sviluppando nuove soluzioni per l’apprendimento sul campo – addestramento su dispositivi con limitazioni di memoria e potenza.

Iniziare

Invitiamo a consultare i link di seguito per saperne di più su Optimum ONNX Runtime Training e per iniziare a utilizzarlo per i modelli di Hugging Face.

  • Optimum ONNX Runtime Training Documentation
  • Optimum ONNX Runtime Training Examples
  • Optimum Github repo
  • ONNX Runtime Training Examples
  • ONNX Runtime Training Github repo
  • ONNX Runtime
  • DeepSpeed and ZeRO Tutorial
  • Azure Container for PyTorch

🏎Grazie per aver letto! Se hai domande, non esitare a contattarci tramite Github o sul forum. Puoi anche connetterti con me su Twitter o LinkedIn.