Benvenuti a Mixtral – una miscela all’avanguardia di esperti su Hugging Face

Bentornati a Mixtral - una miscela all'avanguardia di esperti su Hugging Face

Mixtral 8x7b è un emozionante modello di linguaggio di grandi dimensioni rilasciato oggi da Mistral, che stabilisce un nuovo stato dell’arte per i modelli di accesso aperto e supera GPT-3.5 su molti benchmark. Siamo entusiasti di supportare il lancio con una completa integrazione di Mixtral nell’ecosistema di Hugging Face 🔥!

Tra le caratteristiche e integrazioni rilasciate oggi, abbiamo:

Indice

Che cos’è Mixtral 8x7b?

Mixtral ha un’architettura simile a Mistral 7B, ma ha una particolarità: in realtà sono presenti 8 modelli “esperti” in uno, grazie a una tecnica chiamata Mixture of Experts (MoE). Per i modelli di trasformatori, questa tecnica sostituisce alcuni strati Feed-Forward con uno strato MoE sparso. Uno strato MoE contiene una rete di routing per selezionare quali esperti elaborano più efficientemente quali token. Nel caso di Mixtral, vengono selezionati due esperti per ogni timestep, il che consente al modello di decodificare alla velocità di un modello denso a 12B di parametri, nonostante contenga 4 volte il numero di parametri effettivi!

Per ulteriori dettagli su MoE, consulta il nostro post sul blog accompagnatorio: hf.co/blog/moe

Mixtral release TL;DR;

  • Rilascio delle versioni di base e Instruct
  • Supporta una lunghezza del contesto di 32k token.
  • Supera Llama 2 70B e pareggia o supera GPT3.5 su maggior parte dei benchmark
  • Parla inglese, francese, tedesco, spagnolo e italiano.
  • Bravo nella codifica, con un punteggio del 40,2% su HumanEval
  • Permissivo dal punto di vista commerciale con una licenza Apache 2.0

Quanto sono buoni i modelli Mixtral? Ecco una panoramica del modello di base e delle sue performance rispetto ad altri modelli aperti sulla LLM Leaderboard (punteggi più alti sono migliori):

Per i modelli di istruzioni e chat, valutare su benchmark come MT-Bench o AlpacaEval è migliore. Di seguito, mostriamo come si comporta Mixtral Instruct rispetto ai migliori modelli a accesso chiuso e aperto (punteggi più alti sono migliori):

In modo impressionante, Mixtral Instruct supera tutti gli altri modelli ad accesso aperto su MT-Bench ed è il primo a ottenere una performance comparabile con GPT-3.5!

Informazioni sul nome

Il Mixtral MoE si chiama Mixtral-8x7B, ma non ha 56 miliardi di parametri. Poco dopo il rilascio, abbiamo scoperto che alcune persone sono state indotte a pensare che il modello si comportasse in modo simile a un insieme di 8 modelli con 7 miliardi di parametri ciascuno, ma non è così che funzionano i modelli MoE. Solo alcuni livelli del modello (i blocchi di feed-forward) vengono replicati; il resto dei parametri è lo stesso di un modello da 7 miliardi. Il numero totale di parametri non è 56 miliardi, ma circa 45 miliardi. Un nome migliore avrebbe potuto essere Mixtral-45-8e per trasmettere meglio l’architettura. Per ulteriori dettagli su come funziona MoE, consulta il nostro articolo “Mixture of Experts Explained”.

Formato dei prompt

Il modello di base non ha un formato specifico per il prompt. Come altri modelli di base, può essere utilizzato per continuare una sequenza di input con un’ulteriore continuazione plausibile o per inferenze zero-shot/few-shot. È anche una solida base per il fine-tuning del proprio caso d’uso. Il modello di istruzioni ha una struttura di conversazione molto semplice.

<s> [INST] Istruzione utente 1 [/INST] Risposta del modello 1</s> [INST] Istruzione utente 2[/INST]

Questo formato deve essere riprodotto esattamente per un uso efficace. Mostreremo in seguito quanto sia facile riprodurre il prompt di istruzioni con il template di chat disponibile in transformers.

Cosa non sappiamo

Come per il precedente rilascio di Mistral 7B, ci sono diverse domande aperte su questa nuova serie di modelli. In particolare, non abbiamo informazioni sulla dimensione del dataset utilizzato per il pretraining, sulla sua composizione o su come è stato preprocessato.

Allo stesso modo, per il modello di istruzioni Mixtral, non sono state condivise informazioni dettagliate sui dataset di fine-tuning o sugli iperparametri associati a SFT e DPO.

Demo

Puoi chattare con il modello Mixtral Instruct su Hugging Face Chat! Dai un’occhiata qui: https://huggingface.co/chat/?model=mistralai/Mixtral-8x7B-Instruct-v0.1.

Inferenza

Forniamo due principali modi per eseguire l’inferenza con i modelli Mixtral:

  • Attraverso la funzione pipeline() di 🤗 Transformers.
  • Con l’Inferenza di Generazione di Testo, che supporta funzionalità avanzate come il batching continuo, il parallelismo tensoriale e altro ancora, per ottenere risultati rapidi.

Per ciascun metodo, è possibile eseguire il modello in precisione dimezzata (float16) o con pesi quantizzati. Poiché il modello Mixtral è approssimativamente equivalente per dimensione a un modello denso di parametri da 45 miliardi, possiamo stimare la quantità minima di VRAM necessaria come segue:

Usando 🤗 Transformers

Con i transformers rilascio 4.36, puoi utilizzare Mixtral e sfruttare tutti gli strumenti nell’ecosistema Hugging Face, come:

  • script e esempi di addestramento e inferenza
  • formato di file sicuro (safetensors)
  • integrazioni con strumenti come bitsandbytes (quantizzazione a 4 bit), PEFT (fine-tuning efficiente dei parametri) e Flash Attention 2
  • utilità e aiuti per eseguire la generazione con il modello
  • meccanismi per esportare i modelli da distribuire

Assicurati di utilizzare l’ultima release di transformers:

pip install -U "transformers==4.36.0" --upgrade

Nel seguente frammento di codice mostriamo come eseguire l’inferenza con 🤗 Transformers e la quantizzazione a 4 bit. A causa delle dimensioni del modello, sarà necessaria una scheda con almeno 30 GB di RAM per eseguirlo. Questo include schede come A100 (versioni da 80 o 40 GB) o A6000 (48 GB).

from transformers import AutoTokenizerimport transformersimport torchmodel = "mistralai/Mixtral-8x7B-Instruct-v0.1"tokenizer = AutoTokenizer.from_pretrained(model)pipeline = transformers.pipeline(    "text-generation",    model=model,    model_kwargs={"torch_dtype": torch.float16, "load_in_4bit": True},)messages = [{"role": "user", "content": "Spiega cos'è un Mixture of Experts in meno di 100 parole."}]prompt = pipeline.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)outputs = pipeline(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)print(outputs[0]["generated_text"])

<s>[INST] Spiega cos’è un Mixture of Experts in meno di 100 parole. [/INST] Un Mixture of Experts è un metodo di apprendimento di insieme che combina più modelli, o “esperti”, per fare previsioni più accurate. Ogni esperto si specializza in un sottoinsieme diverso dei dati e una rete di gating determina l’esperto appropriato da utilizzare per un determinato input. Questo approccio consente al modello di adattarsi a relazioni complesse e non lineari nei dati e migliorare le prestazioni complessive.

Utilizzando l’Inferenza Generazione Testo

Inferenza Generazione Testo è un contenitore di inferenza pronto per la produzione sviluppato da Hugging Face per consentire la distribuzione facile di modelli di linguaggio di grandi dimensioni. Ha funzionalità come il batching continuo, lo streaming di token, il parallelismo del tensore per un’elaborazione rapida su più GPU e il logging e il tracing pronti per la produzione.

Puoi distribuire Mixtral su Punti di Fine Inferenza di Hugging Face, che utilizza l’Inferenza Generazione Testo come backend. Per distribuire un modello Mixtral, vai alla pagina del modello e fai clic sul widget Deploy -> Punti di Fine Inferenza.

Nota: Potrebbe essere necessario richiedere un aumento di quota tramite email a  per accedere alle A100.

Puoi saperne di più su come Distribuire modelli di Language Model con i Punti di Fine Inferenza di Hugging Face sul nostro blog. Il blog include informazioni sugli iperparametri supportati e su come fare lo streaming della risposta tramite Python e Javascript.

Puoi eseguire anche Inferenza di Generazione del Testo localmente su 2x A100s (80GB) con Docker come segue:

docker run --gpus all --shm-size 1g -p 3000:80 -v /data:/data ghcr.io/huggingface/text-generation-inference:1.3.0 \    --model-id mistralai/Mixtral-8x7B-Instruct-v0.1 \    --num-shard 2 \    --max-batch-total-tokens 1024000 \    --max-total-tokens 32000

Fine-tuning con 🤗 TRL

L’addestramento di LLM può essere tecnicamente e computazionalmente impegnativo. In questa sezione, vediamo gli strumenti disponibili nell’ecosistema Hugging Face per addestrare efficientemente Mixtral su una singola GPU A100.

Puoi trovare un esempio di comando per il fine-tuning di Mixtral sul dataset di chat di OpenAssistant di seguito. Per conservare la memoria, utilizziamo la quantizzazione a 4 bit e QLoRA per indirizzare tutti i livelli lineari nei blocchi di attenzione. Nota che, a differenza dei transformer densi, non si dovrebbero indirizzare i livelli MLP in quanto sono sparsi e non interagiscono bene con PEFT.

Prima, installa la versione notturna di 🤗 TRL e clona la repo per accedere allo script di addestramento:

pip install -U transformerspip install git+https://github.com/huggingface/trlgit clone https://github.com/huggingface/trlcd trl

Poi puoi eseguire lo script:

accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml --num_processes=1 \    examples/scripts/sft.py \    --model_name mistralai/Mixtral-8x7B-v0.1 \    --dataset_name OpenAssistant/oasst_top1_2023-08-25 \    --batch_size 2 \    --gradient_accumulation_steps 1 \    --learning_rate 2e-4 \    --save_steps 20_000 \    --use_peft \    --peft_lora_r 16 --peft_lora_alpha 32 \    --target_modules q_proj k_proj v_proj o_proj \    --load_in_4bit

Ci vogliono circa 9 ore per addestrare su una singola A100, ma può essere facilmente parallelizzato regolando --num_processes al numero di GPU disponibili.

Avvertenze e lavoro in corso

  • Quantizzazione: La quantizzazione dei MoEs è un’area di ricerca attiva. Sebbene TheBloke abbia effettuato esperimenti iniziali per ottenere una quantizzazione a 4 e 8 bit, la qualità del modello si degrada significativamente. Sarà interessante vedere lo sviluppo nei prossimi giorni e settimane in questo campo. Inoltre, lavori recenti come QMoE, che ottiene una quantizzazione inferiore a 1 bit per MoEs, potrebbero essere applicati qui.
  • Utilizzo elevato di VRAM: I MoEs eseguono l’inferenza molto rapidamente ma hanno comunque bisogno di una grande quantità di VRAM (e quindi di una GPU costosa). Questo rende difficile usarlo in configurazioni locali. I MoEs sono ottimi per configurazioni con molti dispositivi e grande VRAM. Mixtral richiede 90GB di VRAM in mezza precisione 🤯

Risorse aggiuntive

Conclusione

Siamo molto entusiasti del lancio di Mixtral! Nei prossimi giorni, preparati a scoprire ulteriori modi per perfezionare e implementare Mixtral.