Maixtchup: crea la tua miscela di esperti con Mergekit

 | Intelligenza-Artificiale

L’ascesa dei MoE

Immagine dell’autore — Generata con DALL-E

Dal rilascio di Mixtral-8x7B da parte di Mistral AI, c’è stato un rinnovato interesse per il combinazione di modelli esperti (MoE).. Questa architettura sfrutta sottoreti esperte tra le quali solo alcune di esse vengono selezionate e attivate da una rete di router durante l’inferenza.

I MoE sono così semplici e flessibili che è facile creare un MoE personalizzato. Su Hugging Face Hub, ora possiamo trovare diversi LLM di tendenza che sono MoE personalizzati, come ad esempio mlabonne/phixtral-4x2_8.

Tuttavia, la maggior parte di essi non sono MoE tradizionali creati da zero, ma utilizzano semplicemente una combinazione di LLM già perfezionati come esperti. La loro creazione è stata resa semplice con mergekit (Licenza LGPL-3.0). Ad esempio, i LLM Phixtral sono stati realizzati con mergekit combinandone diversi Modelli Phi-2.

In questo articolo vedremo come è nato Phixtral. Applicheremo lo stesso processo per creare la nostra miscela di esperti, Maixtchup, utilizzando diversi modelli Mistral 7B.

Per comprendere rapidamente l’architettura di alto livello di un modello, mi piace stamparlo. Ad esempio, per mlabonne/phixtral-4x2_8 (licenza MIT):

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"mlabonne/phixtral-4x2_8",
torch_dtype="auto",
load_in_4bit=True,
trust_remote_code=True
)
print(model)

Stampa:

PhiForCausalLM(
(transformer): PhiModel(
(embd): Embedding(
(wte): Embedding(51200, 2560)
(drop): Dropout(p=0.0, inplace=False)
)
(h): ModuleList(
(0-31): 32 x ParallelBlock(
(ln): LayerNorm((2560,), eps=1e-05, elementwise_affine=True)
(resid_dropout): Dropout(p=0.1, inplace=False)
(mixer): MHA(
(rotary_emb): RotaryEmbedding()
(Wqkv): Linear4bit(in_features=2560, out_features=7680, bias=True)
(out_proj): Linear4bit(in_features=2560, out_features=2560, bias=True)
(inner_attn): SelfAttention(
(drop): Dropout(p=0.0, inplace=False)
)
(inner_cross_attn): CrossAttention(
(drop): Dropout(p=0.0, inplace=False)
)
)
(moe): MoE(
(mlp): ModuleList(…

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *