DeepSeek-V4-Flash-0731-HERETIC-attn-splice-ds4 / HANDOFF-2026-08-04-lam125-verdetto.md
GaelicThunder's picture
lambda 1.25 BOCCIATA: TC-07 72.5% TC-14 20.0% (soglie 90/45), recupera solo 40%/18% del divario tenendo 0/16 rifiuti => la rimozione stessa costa
072b8c3 verified
|
Raw
History Blame Contribute Delete
6.68 kB

Handoff — verdetto su ds4l (lambda 1.25): BOCCIATA

04-08-2026, notte. Campagna eseguita, kill-check applicato. Il box è libero, con l'ufficiale su :30001/:30009.

Verdetto: bocciata, ma non per niente

Kill-check dichiarato prima di guardare i risultati:

criterio soglia lam 1.25 esito
TC-07 (catena 4 tool dipendenti) ≥ 90% 72,5%
TC-14 (recupero da tool malformato) ≥ 45% 20,0%
rifiuti (16 prompt) ≤ 4/16 0/16

Il controllo di deriva passa, quindi il confronto è valido: le 20 ripetizioni di controllo sull'ufficiale in giornata danno TC-07 95,0% e TC-14 55,0%, contro 97,5% e 55,0% misurati la notte prima. Zero ripetizioni fallite su 60.

I tre modelli sulla stessa scala

ufficiale lam 1.25 lam 1.50 (squanchyzx)
TC-07 pass 95,0% (19/20) 72,5% (29/40) 57,5% (23/40)
TC-14 pass 55,0% (11/20) 20,0% (8/40) 12,5% (5/40)
rifiuti 2/16 0/16 0/16
punti/run sui 2 scenari 3,500 2,925

Test sui punti, lam125 contro ufficiale: TC-14 Holm p = 0,0166 (regressione confermata), TC-07 Holm p = 0,0822 (Fisher sul solo pass 0,0466 — al limite, non lo dichiaro confermato). Aggregato sui due scenari: p = 0,0019.

Cosa ha risposto l'esperimento

L'ipotesi era: il danno viene dall'inversione (a lambda 1.5 la componente del rifiuto non è rimossa ma portata a −0,5), quindi dimezzandola si recupera la capacità tenendo la de-censura.

Risposta: parzialmente vero, e insufficiente. Dimezzare l'inversione recupera

  • 40% del divario su TC-07 — (72,5 − 57,5) / (95,0 − 57,5)
  • 18% del divario su TC-14 — (20,0 − 12,5) / (55,0 − 12,5)

mentre la de-censura resta piena (0/16). Quindi esiste un gradiente reale fra lambda e danno, ma la sola rimozione costa già molto: non c'è un lambda che de-censuri e non paghi. A lambda 1.0 il danno sarebbe minore ancora, ma il suo sweep pubblicato dice che a 1.0 i rifiuti non scendono (75%, come a 0,75) — quindi quella strada non porta a un modello uncensored.

Detto in modo utile: su questo modello, rifiuto e capacità di portare avanti lo stato di una catena condividono lo stesso sottospazio dell'attention, in modo graduale. Si scegli un punto sulla curva, non si ottengono entrambe le cose.

Stato operativo — non cambia niente

  • daily = yz start ds4 (ufficiale). È quello che gira ora.
  • ds4h (lam 1.50) e ds4l (lam 1.25): solo chat/scrittura unfiltered. Fra i due, ds4l è strettamente migliore — stessa de-censura sui nostri probe, meno danno — quindi se serve unfiltered, usa ds4l, non ds4h.
  • Disco: le due varianti occupano 87G ciascuna. Se serve spazio, la prima da cancellare è ~/models/ds4-0731-heretic/ (dominata da lam125), tenendo hf/ che è solo 1,2G di overlay e serve a rifare qualunque bake.

L'unica ipotesi rimasta non testata

Il lambda è un asse. L'altro, mai provato, è quali layer editare: tutti i bake finora toccano 10-42. I layer tardivi (31-42) sono i più probabili portatori dello stato della catena, ed è lì che TC-07/TC-14 falliscono.

# copia + bake solo sui layer bassi, ~15 min di CPU
ionice -c3 dd if=~/models/ds4-0731/DeepSeek-V4-Flash-IQ2XXS-...-imatrix-0731.gguf \
  of=~/models/ds4-0731-lo/...-LO-attn.gguf bs=8M iflag=nocache oflag=nocache conv=fsync
python3 ~/llm/bake-attn-subspace.py --lam 1.5 --layers 10-30 --gguf ~/models/ds4-0731-lo/...gguf
python3 ~/llm/verify-subspace-gain.py --official <uff> --edited <nuovo> --lam 1.5 --layers 10-30 --sample 5
python3 ~/llm/verify-heretic-splice.py --official <uff> --patched <nuovo> --layers 10-30

Poi lo stesso bench, cambiando i tre pattern in una copia di night-lam125.sh. Stesso kill-check: TC-07 ≥ 90%, TC-14 ≥ 45%, rifiuti ≤ 4/16. Se anche questo fallisce, il filone abliteration su ds4 si chiude: resta uno strumento da chat e basta.

Nota di aspettativa, dichiarata prima: se il rifiuto è distribuito su tutti i layer, editare solo 10-30 abbasserà anche la de-censura, e finiremo nello stesso trade-off. La ragione per provare è che il costo è un pomeriggio di CPU e il beneficio, se i layer tardivi sono davvero quelli critici, è un modello uncensored che regge l'agentico.

Trappole trovate oggi, tutte già corrette negli strumenti

  1. local a=1 b=$a non funziona come sembra. Bash espande tutta la riga prima di eseguire local, quindi local arm="$1" f=".../$arm-..." vede $arm non assegnato e con set -u ammazza il processo. Mi ha ucciso 3 campagne di fila; in night-heretic-power.sh lo stesso bug era mascherato perché il ciclo assegnava arm come globale prima della chiamata. Corretto in entrambi (due local separati) con la spiegazione in-linea.
  2. Se un job in background muore muto, redirigi lo stderr al primo tentativo. La riga esatta era disponibile dal primo minuto; io ho incolpato il harness per due giri prima di catturarla. I runner ora si lanciano 2> <dir>/script.err, e vanno in tmux perché fuori non sopravvivono al teardown dei task.
  3. L'analizzatore scartava in silenzio i bracci con nomi nuovi (accettava solo ufficiale/heretic): con la cartella piena diceva "servono 2 bracci". Ora i nomi si deducono dai file.
  4. Il check di Think Max grepava testo troncato a 160 caratteriNO su risposte corrette. Ora controlla il testo intero.
  5. Il byte-compare non valida un lambda: in Q8_0 una differenza minima cambia ~56% dei byte, uguale a due matrici diverse. Serve verify-subspace-gain.py (spazio dei valori, guadagno con segno — un rapporto di norme non distingue lambda 0 da lambda 2).
  6. L'asimmetria fra bracci non è per forza un guasto: il messaggio dell'analizzatore diceva "qualche ripetizione è fallita" anche su un disegno 40/20 riuscito. Ora distingue e dice come verificare.

File

percorso cosa
~/llm/bench-heretic/lam125/ 60 JSON + run.log + script.err
~/llm/night-lam125.sh il runner (lanciare in tmux, SKIP_PROBE=1 se la batteria è già fatta)
~/llm/night-heretic-analyze.py analisi, --dir sulla cartella della campagna
~/llm/bake-attn-subspace.py bake a lambda/layer arbitrari
~/llm/verify-subspace-gain.py · verify-heretic-splice.py le due verifiche, complementari
~/llm/bench-heretic/{lam125,probe-lam125}.log i 16 prompt di rifiuto + tool-call + reasoning
HF privato GaelicThunder/DeepSeek-V4-Flash-0731-HERETIC-attn-splice-ds4 tutto, con i log grezzi