Private Vision: i LoRA e la matematica della personalizzazione — Parte 4

  • Home
  • AI & ChatBot
  • Private Vision: i LoRA e la matematica della personalizzazione — Parte 4
Image

Private Vision: i LoRA e la matematica della personalizzazione — Parte 4

La cartella loras/ di Private Vision era piena di roba fatta da altri. Funzionava, per carità: Private Vision genera immagini in locale con SDXL, senza cloud, senza account, senza che un byte esca dal PC, e le LoRA scaricate si caricavano benissimo. Ma c’era un’incoerenza che dava fastidio. Avevamo costruito un generatore offline e poi, per personalizzarlo, dipendevamo dai file di qualcun altro, addestrati su dataset che non abbiamo visto, con parametri che nessuno documenta. Il pezzo mancante era ovvio: se generi in casa, devi anche poter addestrare in casa. Da lì nasce LoRA Studio, sullo stesso SDXL di Private Vision, così che quello che esce da uno entra nell’altro senza conversioni e senza sorprese.

Cos’è una LoRA, detta semplice

SDXL ha circa 2,6 miliardi di parametri. Riaddestrarlo per insegnargli il tuo personaggio è fuori discussione: servirebbero settimane e hardware che non abbiamo. La LoRA (Low-Rank Adaptation) risolve il problema aggirandolo. Invece di toccare i pesi del modello, ne congela tutti e affianca a quelli che contano due matrici molto più piccole, che imparano solo la differenza fra quello che il modello sa già e quello che vuoi insegnargli. Il risultato è un file da qualche decina di megabyte invece di sette gigabyte, e un addestramento che dura minuti invece di giorni.

Il parametro che decide quanto quelle matrici possono memorizzare si chiama network_dim (o rank). Più è alto, più informazione ci sta dentro, più il file è grosso e più è facile che la LoRA impari a memoria invece che imparare davvero. Accanto c’è network_alpha, che fa da freno: la regola pratica è tenerlo alla metà del dim. Il terzo parametro è il learning rate, cioè quanto la LoRA si corregge a ogni passo. È il più delicato dei tre. Troppo alto e brucia l’immagine, troppo basso e non impara niente in tempo utile.

Epoche, ripetizioni, step: la matematica che decide tutto

Qui c’è la confusione più comune, e si smonta con una formula sola. Uno step è una singola immagine mostrata al modello, con la sua correzione. Una ripetizione è quante volte la stessa immagine viene mostrata dentro un solo giro. Un’epoca è un giro completo su tutto il dataset. Quindi:

step per epoca = (immagini × ripetizioni) ÷ batch size, e step totali = step per epoca × epoche.

Con 25 immagini, 6 ripetizioni e batch 1 fanno 150 step per epoca. Per dieci epoche, 1500 step totali. Questo è tutto il conto, e spiega perché aumentare le immagini non allunga solo l’attesa ma cambia proprio il regime di apprendimento: raddoppiare il dataset a parità di ripetizioni raddoppia gli step, e una LoRA che doveva cuocere trenta minuti finisce stracotta. Per questo LoRA Studio, quando cambi il numero di immagini, riaggiusta le ripetizioni per restare nella finestra di step giusta, invece di lasciarti sommare a caso.

L’altra cosa che l’app fa di default è salvare un file a ogni epoca. Non è pignoleria: la LoRA migliore quasi mai è l’ultima, di solito sta fra la sesta e l’ottava, e senza checkpoint intermedi ti resta solo quella overfittata.

Cosa insegni e cosa lasci libero

Ogni immagine del dataset ha una didascalia fatta di tag danbooru, generati automaticamente dal tagger EVA02 (lo stesso vocabolario su cui è addestrato il modello, quindi i tag prodotti sono esattamente quelli che capirà in generazione). In testa a ogni didascalia c’è la trigger word, la parola inventata che richiamerà la LoRA. E qui vale il principio che regge tutto il resto: quello che togli dai tag viene assorbito dalla trigger word, quello che lasci resta controllabile al momento della generazione.

Se addestri un personaggio e togli “capelli biondi” e “occhi verdi”, quei tratti diventano parte della trigger word e arrivano gratis. Se li lasci, dovrai riscriverli ogni volta nel prompt. Se addestri uno stile e ti dimentichi di togliere il tag watercolor (medium), lo stile si attacca a quel tag invece che alla tua parola, e la LoRA sembrerà non funzionare.

Setup a confronto

TipoImmagini idealidim / alphaLearning rateRipetizioni × epocheStep totaliCosa togliere dai tag
Personaggio20-3016 / 81e-46 × 10~1500capelli, occhi, corporatura, tratti fissi
Personaggio multi-outfit35-50 (8-10 per outfit)24 / 121e-44 × 10~1600-2000i tratti fissi sì, i tag degli outfit no
Concept / outfit / oggetto / posa25-4016 / 81e-45 × 12~1800solo i tag che descrivono il concept
Stile artistico80-15032 / 167,5e-52 × 12~2400tecnica, tag di qualità, firme e watermark

Lo stile è l’unico che vuole più capacità e meno velocità, e non è un capriccio: uno stile è informazione diffusa su tutta l’immagine (tratto, palette, luce, resa), quindi serve più spazio dove metterla, ma si brucia con una facilità imbarazzante e va cotto piano. Vale anche la regola d’oro opposta: se tutte le immagini di uno stile hanno lo stesso soggetto, hai addestrato il soggetto. Per il resto la base è comune a tutti: risoluzione 1024 (il nativo di SDXL), fp16, AdamW8bit, scheduler cosine con warmup al 5%, batch 1.

Quanto tempo ci vuole davvero

GPUVRAMs/step (dim 16)PersonaggioConceptStile (dim 32)
RTX 20708 GB1,68~42 min~50 min~1h 25m
RTX 30708 GB~1,00~25 min~30 min~50 min
RTX 407012 GB~0,65~16 min~20 min~32 min
RTX 507012 GB~0,50~13 min~15 min~25 min

Solo la riga della 2070 è misurata sulla nostra macchina (1,676 s/step a dim 16 e 2,16 a dim 32, con picchi di 7,25 e 7,66 GB di VRAM). Le altre sono proiezioni scalate su throughput fp16 e banda di memoria, quindi vanno lette con un margine del 20% abbondante. Il salto che conta non è nemmeno la velocità: è la VRAM. A 8 GB si sta al limite e si allena solo la U-Net, mentre a 12 GB puoi passare a batch 2 e togliere circa un quarto del tempo, o permetterti opzioni che sulla 2070 mandano tutto in out of memory. Proprio per questo LoRA Studio non usa i tempi da tabella: misura i secondi per step sulla tua scheda al primo addestramento, scarta i primi cinque step di rodaggio (che falserebbero la media) e da lì in poi le stime che vedi sono le tue, non quelle del manuale.

Alla fine il pezzo più difficile non è nessuno di questi numeri. I parametri li abbiamo impacchettati proprio perché smettessero di essere il problema. Quello che nessun preset può decidere al posto tuo è se le trenta immagini che hai raccolto raccontano davvero la cosa che vuoi insegnare, o solo il contesto in cui l’hai trovata.

#LoRA #SDXL #PrivateVision #epoche #step #networkdim #learningrate #dataset #triggerword #VRAM

Se l’articolo ti è piaciuto restiamo in contatto su linkedin a https://www.linkedin.com/in/andreatonin/

Releated Posts

Dalla Skill all’Agente AI: automatizzare le note spese con ChatGPT e Google Workspace

Prima abbiamo distinto Progetti, GPT e Skill. Un Progetto è uno spazio di lavoro, un GPT è un…

DiByAndrea Tonin Ago 23, 2026

Anatomia di una Skill di ChatGPT: quando il prompt diventa una procedura

Negli ultimi mesi abbiamo imparato a scrivere prompt sempre più strutturati. Non più il classico “fammi un testo…

DiByAndrea Tonin Ago 23, 2026

Progetti, GPT e Skill: la differenza spiegata bene

Negli ultimi anni ChatGPT è passato dall’essere “una chat intelligente” a diventare un piccolo ecosistema di strumenti: Progetti,…

DiByAndrea Tonin Ago 23, 2026

Oltre il Limite del Contesto: La Necessità della Memoria

Fino a poco tempo fa, le applicazioni basate sui Large Language Models (LLM) si affidavano quasi interamente alla…

DiByAndrea Tonin Ago 22, 2026