240 lines
8.2 KiB
Markdown
240 lines
8.2 KiB
Markdown
---
|
||
license: openrail
|
||
base_model: egomnia/emma-5
|
||
base_model_relation: quantized
|
||
library_name: gguf
|
||
pipeline_tag: text-generation
|
||
language:
|
||
- it
|
||
authors:
|
||
- Egomnia S.p.A.
|
||
tags:
|
||
- gguf
|
||
- llama.cpp
|
||
- italian
|
||
- gpt
|
||
- text-generation
|
||
- enterprise
|
||
- swiGLU
|
||
- gqa
|
||
datasets:
|
||
- custom-mixture
|
||
---
|
||
|
||
# 🇮🇹 Emma-5 (GGUF)
|
||
|
||
## Premessa
|
||
|
||
Questo repository contiene una conversione **non ufficiale** in formato GGUF di [`egomnia/emma-5`](https://huggingface.co/egomnia/emma-5), realizzata con llama.cpp.
|
||
|
||
Il modello originale **Emma-5** è stato sviluppato da **Egomnia S.p.A.**. Questo repository non è affiliato a Egomnia S.p.A. e non modifica l'autorialità del modello originale.
|
||
|
||
### Provenienza dei pesi
|
||
|
||
La prima conversione GGUF è stata creata mentre il repository originale `egomnia/emma-5` non era disponibile pubblicamente. In quel momento i pesi sono stati recuperati da [`eldavoo/emma-5`](https://huggingface.co/eldavoo/emma-5), un reupload/archivio pubblico del modello.
|
||
|
||
Dopo la ripubblicazione di [`egomnia/emma-5`](https://huggingface.co/egomnia/emma-5), i file del modello e del tokenizer sono stati confrontati con quelli di `eldavoo/emma-5` e verificati come byte-identici. Per questo motivo i metadata di questo repository puntano ora a `egomnia/emma-5` come modello base originale.
|
||
|
||
Grazie a `eldavoo` per aver mantenuto disponibile l'archivio pubblico usato come sorgente al momento della conversione iniziale. L'autorialità e i diritti sul modello restano attribuiti a Egomnia S.p.A. secondo la licenza e il model card originali.
|
||
|
||
## File disponibili
|
||
|
||
Il file `emma-5-F32.gguf` è la conversione GGUF in F32 del modello originale. Le altre varianti sono state ricavate da questo file con `llama-quantize`, usando i tipi di quantizzazione supportati da llama.cpp.
|
||
|
||
Sono disponibili:
|
||
|
||
- `emma-5-F32.gguf`
|
||
- `emma-5-F16.gguf`
|
||
- `emma-5-BF16.gguf`
|
||
- `emma-5-Q8_0.gguf`
|
||
- `emma-5-Q6_K.gguf`
|
||
- `emma-5-Q5_K_M.gguf`
|
||
- `emma-5-Q5_K_S.gguf`
|
||
- `emma-5-Q5_1.gguf`
|
||
- `emma-5-Q5_0.gguf`
|
||
- `emma-5-Q4_K_M.gguf`
|
||
- `emma-5-Q4_K_S.gguf`
|
||
- `emma-5-Q4_1.gguf`
|
||
- `emma-5-Q4_0.gguf`
|
||
- `emma-5-IQ4_NL.gguf`
|
||
- `emma-5-IQ4_XS.gguf`
|
||
- `emma-5-Q3_K_L.gguf`
|
||
- `emma-5-Q3_K_M.gguf`
|
||
- `emma-5-Q3_K_S.gguf`
|
||
- `emma-5-IQ3_M.gguf`
|
||
- `emma-5-IQ3_S.gguf`
|
||
- `emma-5-Q2_K.gguf`
|
||
- `emma-5-TQ2_0.gguf`
|
||
- `emma-5-TQ1_0.gguf`
|
||
- `emma-5-Q1_0.gguf`
|
||
- `emma-5-MXFP4_MOE.gguf`
|
||
|
||
Le quantizzazioni sono state verificate localmente come riproducibili a partire da `emma-5-F32.gguf` con llama.cpp: gli output generati coincidono byte-per-byte con i file pubblicati.
|
||
|
||
## Esecuzione con llama.cpp
|
||
|
||
### Chat interattiva
|
||
|
||
```bash
|
||
llama-cli -m emma-5-F32.gguf --jinja -ngl 99 -c 2048 -cnv
|
||
```
|
||
|
||
### Prompt diretto
|
||
|
||
```bash
|
||
llama-cli -m emma-5-F32.gguf --jinja -ngl 99 -c 2048 -st -p "Qual è la capitale d'Italia?"
|
||
```
|
||
|
||
`--jinja` applica il chat template incorporato nel GGUF. `-ngl 99` carica i layer in GPU, se disponibile; omettilo per usare solo la CPU. `-c 2048` imposta la context length massima del modello.
|
||
|
||
## Adattamenti rispetto al checkpoint ONNX
|
||
|
||
Per l'architettura `llama` di llama.cpp sono stati applicati due adattamenti:
|
||
|
||
- RoPE: le proiezioni Q e K sono permutate dal layout half-split (GPT-NeoX) al layout interleaved (GPT-J), come per i modelli LLaMA.
|
||
- Chat template: il formato di istruzione Alpaca italiano usato nell'SFT è incorporato nel file (`tokenizer.chat_template`).
|
||
|
||
## Formato del prompt
|
||
|
||
```text
|
||
### Istruzione: <richiesta> ### Risposta:
|
||
```
|
||
|
||
Con `--jinja` il formato viene applicato automaticamente. Per il completamento grezzo, usa lo stesso formato su una sola riga.
|
||
|
||
## Parametri di campionamento
|
||
|
||
Né i repository ufficiali né il checkpoint ONNX definiscono parametri di campionamento: un modello ONNX espone soltanto i logit, mentre `temperature`, `top-p` e `top-k` vengono applicati a valle dal codice di inferenza, non dal modello stesso. I valori seguenti non provengono quindi da Egomnia: sono valori di riferimento generici, scelti per questa conversione come compromesso ragionevole tra coerenza e varietà dell'output, e possono essere adattati liberamente al caso d'uso:
|
||
|
||
- `temperature`: 0.7
|
||
- `top-p`: 0.9
|
||
- `top-k`: 40
|
||
|
||
I default di llama.cpp sono diversi, quindi per usare questi valori conviene impostarli manualmente, incluso `--min-p 0`.
|
||
|
||
Il `--repeat-penalty` non va invece impostato: llama.cpp lo lascia già a `1.0`, cioè nessuna penalità di ripetizione, coerentemente con un percorso di inferenza ONNX che non applica alcuna penalità.
|
||
|
||
```bash
|
||
llama-cli -m emma-5-F32.gguf --jinja -c 2048 -ngl 99 -cnv \
|
||
--temp 0.7 --top-k 40 --top-p 0.9 --min-p 0
|
||
```
|
||
|
||
Server OpenAI-compatibile:
|
||
|
||
```bash
|
||
llama-server -m emma-5-F32.gguf --jinja -c 2048 -ngl 99 \
|
||
--temp 0.7 --top-k 40 --top-p 0.9 --min-p 0
|
||
```
|
||
|
||
Per un output deterministico e riproducibile, e fedele al checkpoint ONNX, usa `--temp 0` (greedy).
|
||
|
||
## Nota sul tokenizer
|
||
|
||
Il tokenizer SentencePiece originale normalizza i ritorni a capo (`nmt_nfkc`, `remove_extra_whitespaces`), mentre il tokenizer di llama.cpp non lo fa nello stesso modo. Per evitare differenze nella tokenizzazione usa `--jinja`, oppure, nei prompt grezzi, spazi singoli al posto dei caratteri di a capo.
|
||
|
||
## Nota sul multi-turno
|
||
|
||
Emma-5 è stato addestrato (SFT) principalmente su singoli turni istruzione/risposta. È quindi più affidabile a turno singolo. In conversazioni a più turni la qualità può calare e l'output dipende da come viene ricostruita la cronologia del contesto.
|
||
|
||
Per risultati più fedeli conviene inviare una istruzione completa per ogni richiesta.
|
||
|
||
---
|
||
|
||
## Informazioni sul modello originale
|
||
|
||
Le informazioni seguenti derivano dal model card di [`egomnia/emma-5`](https://huggingface.co/egomnia/emma-5).
|
||
|
||
## Overview
|
||
|
||
**Emma-5** è un "mini" Large Language Model decoder-only sperimentale sviluppato da **Egomnia S.p.A.**, progettato per lingua italiana.
|
||
|
||
Sito ufficiale: https://emma.egomnia.com
|
||
|
||
Il modello è pensato per:
|
||
|
||
- comprensione contestuale moderata
|
||
- generazione di contenuti di media-piccola complessità
|
||
|
||
Non è progettato per applicazioni safety-critical o reasoning avanzato multi-step.
|
||
|
||
## Architettura
|
||
|
||
- Tipo: GPT decoder-only
|
||
- Transformer blocks: 28
|
||
- Hidden size: 1.280
|
||
- Attention heads: 16 query + 4 KV (GQA 4:1)
|
||
- Head dimension: 80
|
||
- Feed-forward dimension: 3.456 (SwiGLU, ff_mult 8/3)
|
||
- Activation function: SwiGLU
|
||
- Normalization: RMSNorm
|
||
- Positional encoding: RoPE (theta 10.000)
|
||
- Dropout: 0.0
|
||
- Embeddings: tied (token embedding = lm_head)
|
||
|
||
## Contesto e vocabolario
|
||
|
||
- Context length: 2.048 token
|
||
- Vocabulary size: 50.000 token
|
||
- Tokenizer: SentencePiece BPE con byte fallback
|
||
|
||
## Dataset di training
|
||
|
||
- Codice: 40,48%
|
||
- Generalista: 39,46%
|
||
- Enciclopedico: 15,68%
|
||
- Libri: 3,07%
|
||
- Colloquiale: 0,73%
|
||
- Politico: 0,55%
|
||
|
||
## Training pipeline
|
||
|
||
- Pretraining: 200.000 step
|
||
- Fine-tuning: SFT (3 epoche)
|
||
- DPO: disabilitato
|
||
- Corpus pretraining: 54,36 GB raw (~10,8 miliardi token)
|
||
|
||
## Export e ottimizzazione originali
|
||
|
||
- Framework originale: PyTorch
|
||
- Export originale: ONNX
|
||
- Opset: 18
|
||
- Quantizzazione ONNX: INT8
|
||
- Peso modello ONNX: 2,46 GB (FP32)
|
||
- Peso quantizzato INT8: ~560 MB
|
||
|
||
## Uso non previsto
|
||
|
||
- applicazioni mediche, legali o finanziarie critiche
|
||
- sistemi ad alta affidabilità o mission critical
|
||
- reasoning complesso multi-step
|
||
- ricerca scientifica avanzata senza supervisione
|
||
|
||
## Focus prestazionale
|
||
|
||
Il modello è ottimizzato per:
|
||
|
||
- equilibrio tra qualità e latenza
|
||
- inference su CPU/GPU entry-level
|
||
- contesti leggeri
|
||
|
||
## Limitazioni
|
||
|
||
- capacità di reasoning ancora limitata rispetto a modelli di grandi dimensioni
|
||
- possibile generazione di contenuti imprecisi o incompleti
|
||
- sensibilità a prompt ambigui o molto lunghi
|
||
- contesto limitato a 2.048 token
|
||
|
||
## Licenza
|
||
|
||
Distribuito sotto licenza **OpenRAIL-M**, con eventuali vincoli derivati dalle licenze dei dataset utilizzati.
|
||
Questa licenza consente l’uso, la modifica e la distribuzione del modello anche in ambito commerciale, imponendo tuttavia restrizioni sull’utilizzo in scenari potenzialmente dannosi, illegali o non etici, secondo i principi di Responsible AI e nel rispetto delle eventuali restrizioni derivanti dalle licenze dei dataset utilizzati.
|
||
Si richiede esprezzamente di citare **Egomnia S.p.A.** come autore del modello in caso di utilizzo di quest'ultimo per prodotti, servizi, pubblicazioni o documentazione tecnica.
|
||
|
||
## Autore
|
||
|
||
Egomnia S.p.A.
|
||
|
||
## Sito ufficiale
|
||
|
||
https://emma.egomnia.com
|