Contents
Les poids d’un modèle
C’est le cerveau appris du LLM.
Pendant l’entraînement, le modèle apprend des milliards de paramètres numériques (des matrices de nombres flottants).
vecteur stockant les nombre [0.2381, -1.442, 0.882]
Un modèle 7B contient 7 milliards de ces paramètres, un modèle 70B contient 70 milliards de ces paramètres ….
Ces poids servent dans les couches du transformer :
embedding attention feed forward layers output layers
Lorsqu’on écrit dans le prompt un texte comme « Bonjour comment vas tu? » ce que fait llama.cpp :
- transforme le texte en tokens
- fait passer ces tokens dans les couches du réseau de neurones
- applique les poids à chaque étape
- prédit le token suivant
Les poids sont stockés sous forme de tensors dans GGUF
blk.0.attn_q.weight blk.0.attn_k.weight blk.0.ffn_up.weight ./llama-cli -m model.gguf la commande ci-dessus li les tensors en mémoire RAM/VRAM
Tokenizer
Le LLM ne comprend pas le texte brut, mais les token, docn il faut tokenizer les textes.
"Bonjour tout le monde" peut devenir [5321, 884, 921]
Le tokenizer définit
- le vocabulaire
- le mapping texte-> id
- le mapping id -> texte
./llama-cli -m model.gguf -p "hello" llama.cpp tokenize "hello" envoit les ids au modèle reçoit des ids du model reconvertit en texte
Metadatas
Une metadata est une données sur la données, dans notre cas, c’est la carte d’identité du modèle
architecture nombre de couches taille contexte type de modèle version tokenizer quantization utilisée Exemple: architecture = llama context_length = 8192 embedding_length = 4096 block_count = 32 La commande ./llama-cli -m model.gguf sort ces données à l'écran
Paramètres d’inférence
Ce ne sont PAS les poids entraînés. Ce sont les réglages au moment où tu fais générer du texte.
./llama-cli \ -m model.gguf \ --temp 0.7 \ --top-k 40 \ --top-p 0.9
Température
Controle l’aléatoire, plus c’est élevé (proche de 1) plus c’est créatif
top-k
Le modèle garde uniquement les K tokens les plus probables.
top-k = 40 choisit parmi les 40 meilleurs candidats
top-p
Il garde les tokens jusqu’à atteindre X% de probabilité cumulée.
contexte size
C’est la fenêtre de contexte, la mémoire du LLM.
En résumé :
- poids = connaissances du modèle
- tokenizer = traduction texte ↔ tokens
- metadata = mode d’emploi du modèle
- paramètres d’inférence = réglages runtime dans llama.cpp
Comment sont les modèle avant quantization?
Le standard d’origine est sur 16 bits FP16. La majorité des modèles open source sont entrainés et distribués en
- FP16 16-bit floatingpoint
- parfois en BF16 (bfloat 16) surtout en entrainement
Ainsi en ordre de grandeur, un modèle LLM 7B en FP16 nécessite 14 Go (7B x 16 bits ou 2 bytes), un modèle 70B nécessite en FP16 nécessite 140 Go, 70 Go en 8 bits, et 35 Go en 4bits, cette dernière quantization est intéressante, car elle met à notre portée des modèle 70B pour du matériel comme la RTX 3090 (24 GB de VRAM), il faut 2 carte graphique et ça fera 48 GB de VRAM.
Modèle dense VS modèle sparse (mixture of Experts)
Dans le contexte des LLM locaux avec llama.cpp, la différence est surtout : combien de paramètres sont réellement utilisés à chaque token généré.
Les modèles denses
Ce sont les modèles classiques, Mistral, Llama, Qwen, à chaque prompt chaque token passe par toutes les couches et tous les paramètres concernés. Sur un modèle à 7B de paramètres, presque les 7 milliards de paramètre sont sollicités théoriquement (hors optimisation).
Les mixture of experts (MoE)
Le modèle contient plusieurs experts, tous ne sont pas activés en même temps, cela dépend du prompt un routeur choisit quels experts utiliser selon le token. Exemple le modèle Mistral AI Mixtral 8x7B. Théoriquement ce modèle a 56B paramètres, seul12 à 14B sont actifs par token.
Le MoE est intéressant en local car le coput d’inférence est plus bas qu’un modèle dense équivalent. Ainsi le coput d’un 56B est en fait celui d’un 12 ou 14B/
Mais attention vous devez charger tous els poids en VRAM. Qu’est ce qu’on y gagne alors? On y gagne en vitesse de calcul relative, intelligence et capacité, mais la taille on n’y gagne pas.
