Les caractéristiques d’un modèle GGUF
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.
