HuggingFace Transformers è diventato lo standard per l'ecosistema open-source di AI, e la recente release Transformers v5 lo ha rafforzato con il supporto nativo per i modelli Mixture-of-Experts (MoE), che oggi rappresentano la struttura dominante per i modelli all'avanguardia. v5 introduce le basi per MoE con backends esperti, caricamento dinamico dei pesi e esecuzione distribuita, rendendo MoE estendibile e facile da implementare.

La libreria NVIDIA NeMo AutoModel, parte del framework NVIDIA NeMo, permette di costruire modelli personalizzati di AI generativa su larga scala. NeMo AutoModel si appoggia a Transformers v5 integrando Expert Parallelism, DeepEP all-to-all fusionato ed i kernel TransformerEngine, sfruttando al massimo le funzionalità dinamiche di caricamento v5. I risultati di questa combinazione sono incrementi della velocità di addestramento fino al 3.4-3.7x e una riduzione della memoria GPU del 29-32% rispetto a Transformers v5 native, mantenendo invariata l’API con la funzione frompretrained().

La complessità dell'addestramento MoE

I modelli MoE aprono nuove sfide nell'addestramento efficiente: il routing dei token tra centinaia di esperti, la fusione delle matrici esperte in singoli kernel, lo sharding dei pesi tra GPU e la sovrapposizione di comunicazioni e calcoli. Tutte queste richiedono infrastrutture avanzate di cui una libreria generica non dispone nativamente.

Con Transformers v5, la supporto nativo per MoE include il supporto per i backend degli esperti, il caricamento dinamico dei pesi e i piani tensor-parallel per l'esecuzione distribuita. Inoltre, v5 ha reso l’addestramento distribuito prioritario integrando PyTorch's DeviceMesh direttamente in frompretrained().

Insieme, v5 e NeMo AutoModel

NeMo AutoModel si basa su v5 sottoclassando AutoModelForCausalLM aggiungendo Expert Parallelism (EP), DeepEP dispatch all-to-all fusionato e kernel TransformerEngine. DeepEP è una delle caratteristiche mancanti in v5: permette di sovrapporre comunicazione e calcolo esperto. NeMo AutoModel sfrutta la conversione reversibile dei pesi di v5, concentrandosi su operazioni core riusabili invece di modificare i checkpoint. savepretrained() produce comunque checkpoint standard HuggingFace utilizzati da strumenti come vLLM e SGLang.

Nel paragrafo seguente spieghiamo insieme il funzionamento e le prestazioni misurate, dagli addestramenti completi di modelli come NVIDIA Nemotron 3 Ultra 550B A55B su 16 nodo fino a modelli singola-nodo come Qwen3-30B-A3B eNemotron 3 Nano 30B A3B.

Compatibilità API e Community

Uno degli obiettivi di NeMo AutoModel è la compatibilità con HuggingFace Transformers per supportare la community open-source. NeMoAutoModelForCausalLM sottoclassa AutoModelForCausalLM, quindi qualsiasi codice funziona con i modelli HF funziona anche con AutoModel.

Caricare i modelli

In HuggingFace Transformers v5:

    • from transformers import AutoModelForCausalLM
    • model = AutoModelForCausalLM.frompretrained("model-name")

In NVIDIA NeMo AutoModel:

    • from nemo.core.classes import AutoModelForCausalLM
    • model = AutoModelForCausalLM.frompretrained("model-name")

Sostituendo un unico import, si possono ottenere ottimizzazioni complesse. Per architetture MoE popolari come Qwen3, NVIDIA Nemotron, GPT-OSS, e DeepSeek V3, NeMo AutoModel fornisce implementazioni ottimizzate di attention TransformerEngine, linear layer fuse e kernel esperti personalizzati. Per tutti gli altri, si riferisce all'implementazione base HuggingFace pur applicando ottimizzazioni come il patching del kernel Liger.

Expert Parallelism e ottimizzazione mult-GPU

Dove NeMo AutoModel riesce meglio è nella scalabilità di MoE sui multi GPU. Per addestrare un modello Nemotron 3 Nano 30B A3B con Expert Parallelism su 8 GPU, basta configurare mesh di distribuzione:

    • devicemesh = DeviceMesh("cuda", torch.arange(8))
    • model = AutoModelForCausalLM.frompretrained("model-name", devicemesh=devicemesh)

Utilizzando un singolo frompretrained() otteniamo velocità, scalabilità e ottimizzazioni di memoria grazie a FSDP2, Expert Parallelism, TransformerEngine e DeepEP dispatch combinati.

Risultati e benchmark

NeMo AutoModel è stato valutato in due scenari principali: il fine-tuning completo di un modello di 550B parametri su 16 nodi e il training di due modelli MoE da 30B sul singolo nodo. Il primo ha mostrato come sia indispensabile l'Expert Parallelism su scale elevate; il secondo ha quantificato i miglioramenti per singola GPU rispetto a Transformers v5.

Il modello Nemotron 3 Ultra 550B A55B è un modello ibrido da 550 miliardi di parametri che include funzionalità come Mamba2, LatentMoE e Multi-Token Prediction (MTP). Nel benchmark del fine-tuning completo, ogni singolo peso viene aggiornato e lo stato Adam optimizer è materializzato su 16 nodi H100 (128 GPU).

Perché non comparare Transformers v5? A questa scala, Transformers v5 ha problemi di overload di memoria, quindi non presenta risultati. L'Expert Parallelism in NeMo AutoModel distribuisce i pesi esperti tra le GPU mantenendo la capacità all'interno del budget necessario per completare il fine-tuning. I risultati a 30B mostrano lo stesso vantaggio.

Configurazione dei token

NeMo AutoModel utilizza un routing gate bilanciato, che assegna token in modo uniforme a ogni esperto. Questo emula il punto ideale di funzionamento di MoE e rappresenta un punto di equilibrio in cui v4/v5 possono riflettere il loro comportamento nativo.

Deadlock e differenze tra v4 e v5

In Transformers v4, un modello MoE come Qwen3 archivia gli esperti come ModuleList di 128 MLP separati, ciascuno FSDP-wrapped. L'inoltrare solo gli esperti richiesti a ogni passata crea un ciclo diverso tra i ranghi, causando deadlocks collettivi. Transformers v5 risolve usando tensori 3D non FSDP-wrapped.

v4 risolve questi deadlocks con trustremotecode=True che garantisce codice FSDP-safe.

Benefici di NeMo su Transformers v5

I vantaggi del 3.4-3.7x in termini di velocità provengono da tre fonti:

    • Expert Parallelism riduce la pressione della memoria: EP=8 distribuisce i pesi esperti tra le GPU, abbassando di 8 volte la memoria per GPU. Nei test, Qwen3 riduce la memoria da 68.2 GiB a 48.1 GiB (-29%), Nemotron Nano da 62.1 a 42.5 GiB (-32%).
  • DeepEP fonde comunicazione e calcolo: DeepEP elimina operazioni AllGather/ReduceScatter tradizionali per esperti, fondendo i dati