libreyolo quantize

Sostituisce i moduli float di un modello con moduli quantizzati, li calibra su immagini senza etichette quando la ricetta ha bisogno di statistiche e salva il risultato come checkpoint PyTorch.

Comando
libreyolo quantize
Obbligatorio
model
Output
Il percorso di origine con -<recipe> prima del suffisso, es. LibreYOLO9s-int8.pt

Sinossi

bash
libreyolo quantize model=<name|path> [recipe=<recipe>] [key=value ...]

Gli argomenti sono coppie key=value, e funziona anche la forma POSIX, quindi recipe=int8 e --recipe int8 sono lo stesso argomento.

Argomenti

ArgomentoDefaultSignificato
modelPesi del modello .pt. Obbligatorio
recipeint8Ricetta di quantizzazione: fp16, bf16, fp8, int8, w4a16, w4a8, nvfp4, mxfp4, int2
calibcoco128.yamlImmagini di calibrazione: un YAML di dati o il nome di un dataset integrato. Senza etichette, solo forward. none salta la calibrazione
samples128Numero massimo di immagini di calibrazione
batch8Dimensione del batch di calibrazione
algorithmautoStima dell'intervallo delle attivazioni: auto, che seleziona minmax, oppure minmax, oppure percentile
outPercorso del checkpoint di output. Per default è il percorso di origine con -<recipe> prima del suffisso
deviceautoDispositivo
allow_download_scriptsfalseConsente il Python incorporato nei blocchi di download del YAML del dataset
jsonfalseOutput JSON su stdout
quietfalseSilenzia stderr
help_jsonfalseScrive lo schema del comando come JSON ed esce

Esempi

Base
# Calibra su coco128 e scrive LibreYOLO9s-int8.ptlibreyolo quantize model=LibreYOLO9s.pt recipe=int8
Solo cast, senza calibrazione
libreyolo quantize model=LibreYOLO9s.pt recipe=fp16 calib=none \  out=weights/LibreYOLO9s-fp16.pt
Calibrazione più ampia, poi recupero
libreyolo quantize model=LibreYOLO9s.pt recipe=int8 \  calib=coco128.yaml samples=256 batch=16 algorithm=minmax # L'addestramento quantization-aware sul checkpoint quantizzato recupera accuratezza.libreyolo train model=LibreYOLO9s-int8.pt data=coco8.yaml epochs=10 lr0=0.001

Note

Quali famiglie la accettano

La quantizzazione copre quattro famiglie: yolo9, rfdetr, birefnet e feynobg. Qualsiasi altra famiglia esce con quantize_failed, che porta con sé l'elenco.

Cosa tocca ogni ricetta

fp16 e bf16 sono cast. Cambiano solo il dtype, non hanno bisogno di calibrazione e calib=none è l'impostazione giusta per loro.

int8 e fp8 quantizzano i moduli Conv2d e Linear, ed è per questo che si adattano alle famiglie convoluzionali.

w4a16, w4a8, nvfp4, mxfp4 e int2 quantizzano solo nn.Linear, quindi puntano alle famiglie transformer. Chiedere una di queste su yolo9 viene rifiutato con una spiegazione invece di produrre in silenzio un modello non quantizzato, perché lì l'accelerazione sotto gli 8 bit riguarda solo le GEMM e le convoluzioni resterebbero a precisione più alta.

int8, fp8, w4a8 e int2 hanno bisogno di statistiche di calibrazione per le loro attivazioni. int2 richiede anche un addestramento successivo per recuperare, quindi viene rifiutato su birefnet e feynobg, che non hanno un trainer.

Ogni famiglia mantiene in float un insieme di moduli qualunque sia la ricetta: i primi layer, le teste di predizione e, su YOLOv9, la convoluzione DFL, che è un operatore di aspettazione integrale fisso e non va quantizzato.

I dati di calibrazione non sono dati di addestramento

calib punta a un piccolo insieme di immagini senza etichette, usato solo in avanti, per ricavare gli intervalli delle attivazioni. Non ci si valuta contro e le sue etichette non vengono mai lette. Il coco128.yaml predefinito si scarica al primo utilizzo da un URL, quindi non serve alcun permesso aggiuntivo; un YAML con uno script di download in Python incorporato richiede allow_download_scripts=true.

algorithm=percentile è disponibile e può ridurre l'accuratezza sulle famiglie transformer, ed è per questo che auto seleziona minmax.

Recuperare l'accuratezza

L'output è un normale checkpoint PyTorch, quindi libreyolo train lo accetta direttamente. Addestrare un checkpoint quantizzato è addestramento quantization-aware; aggiungere distill_model=<teacher> lo rende distillazione quantization-aware.

Output e codici di uscita

Il risultato stampa il percorso salvato, la ricetta, la modalità di esecuzione, se la calibrazione è stata eseguita e il conteggio dei moduli sostituiti per tipo. Il codice di uscita è 0 in caso di successo, 4 quando il modello non si può caricare, 5 quando la quantizzazione o il salvataggio falliscono, e 1 per altri errori a runtime.

Correlato: libreyolo export, che esce da PyTorch e scrive invece un artefatto di deployment.

Verificato con LibreYOLO v1.5.0.