76. IA locale legale finalmente si può fare!


Questa è una puntata ti parlo dei miei esperimenti per ottimizzare al massimo l’utilizzo del mio Mac con l’IA locale.

Note dell’episodio

Come sempre, se ti è piaciuto quel che hai letto, ascoltato o visto e non l’hai già fatto, ti suggerisco di iscriverti alla mia newsletter.
Ti avvertirò dei nuovi articoli che pubblico (oltre ai podcast e video su YouTube) e, mensilmente, ti segnalerò articoli che ho raccolto nel corso del mese ed ho trovato interessanti.

Sinossi e link

Ti ricordo che la sinossi è generata dalla IA in particolare usando la trascrizione del podcast con l’app Transcriber dell’amico Alex Raccuglia che trovi le sue tante applicazioni su Ulti.media e NotebookLM.

Podcast: Avvocati e Mac: Compendium | Network: Runtime Radio


📌 In questo episodio

Come sono riuscito a sbloccare finestre di contesto enormi (fino a 256K–384K token) sul mio Mac Studio M1 Max con 32 GB di RAM, rendendo finalmente praticabile l'uso dell'IA locale in ambito professionale/legale.


📣 Comunicazioni di servizio

  • La puntata è solo audio (niente versione YouTube questa volta)

  • Il Workshop IA del 27 febbraio è stato rinviato → si riparte il 13 marzo; le registrazioni saranno condivise nella newsletter

  • Sto sperimentando con gli agenti IA in locale:

    • OpenClaw (GitHub) — non sono riuscito a farlo girare in una configurazione sicura
    • Agent Zero (GitHub) — primi risultati positivi
    • Craft Agents (GitHub) — segnalato da Luca, interfaccia molto curata per utenti Apple; anche qui usare modelli locali è complesso
  • Ho sviluppato un'applicazione per anonimizzare documenti (PDF, DOCX, ODT…) usando Claude Code → già pubblicata su GitHub in versione alfa.


🧠 Il problema: modelli locali e contesto

Con modelli da 32–35 miliardi di parametri (i migliori che riesco a far girare), la RAM viene occupata così:

Voce RAM occupata
Modello (es. Qwen 3.5 35B) ~22–24 GB
Sistema operativo macOS ~5 GB
Rimasto per il contesto ~3 GB

3 GB corrispondono a circa 10.000–15.000 token di contesto → insufficienti per documenti legali complessi o RAG su più file.


🔧 I trucchi per massimizzare il contesto

1. Aumentare la RAM dedicata alla GPU

Di default macOS dedica circa il 70% della RAM alla GPU unificata. Si può aumentare questo limite via Terminale:

bash

# Esempio per 27 GB (27 × 1024 = 27648 MB) 
sudo sysctl iogpu.wired_limit_mb=27648 

# Esempio per 30 GB (30 × 1024 = 30720 MB) 
sudo sysctl iogpu.wired_limit_mb=30720

⚠️ Attenzione: più si aumenta il valore, più c'è rischio di instabilità del sistema. Testare gradualmente. Il valore 0 ripristina il comportamento predefinito.


2. Ottimizzare le impostazioni di Ollama (nel file ~/.zshrc)

bash

export OLLAMA_NUM_PARALLEL=1        
# Un solo job parallelo → più RAM al contesto export OLLAMA_FLASH_ATTENTION=1     
# Abilita Flash Attention (necessario per KV quantizzata) export OLLAMA_KV_CACHE_TYPE=q8_0    
# KV Cache a 8 bit (consigliato, buon bilanciamento) # oppure: 
# export OLLAMA_KV_CACHE_TYPE=q4_0  
# 4 bit → contesto massimo, meno precisione

Abbassare OLLAMA_NUM_PARALLEL a 1 (da 4) ha aumentato drasticamente la RAM disponibile per il contesto.
Documentazione ufficiale: docs.ollama.com/faq

Finestre di contesto ottenibili (Mac Studio M1 Max, 32 GB):

KV Cache Contesto approssimativo
f16 (default) ~10.000–15.000 token
q8_0 ~64.000–128.000 token
q4_0 ~256.000–384.000 token

3. Usare modelli MoE (Mixture of Experts)

I modelli MoE sparsa attivano solo 2–3 "esperti" per ogni token generato, invece di usare tutti i parametri contemporaneamente → meno RAM in elaborazione, più spazio per il contesto.

Modelli consigliati:

Qwen 3.5 – 35B-A3B

bash

ollama run qwen3.5:35b-a3b

  • 35B parametri totali, ma solo ~3B attivi per token
  • Richiede ~21–22 GB di RAM su Apple Silicon
  • Ottimizzazione esclusiva: il 65–75% dei layer usa Gated Delta Networks invece della full attention → riduce ulteriormente la KV Cache
  • Disponibile anche nelle varianti: 4B, 9B, 27B, 122B-A10B, 397B-A17B

⚠️ Nota: il team originale di Alibaba/Qwen si è in gran parte disperso → probabilmente non ci saranno ulteriori sviluppi futuri di questa architettura

Nemotron 3 Nano

bash

ollama run nemotron-3-nano

  • 30B parametri totali, ~3.5B attivi per token
  • Architettura Hybrid Latent MoE: 23 layer Mamba-2 + MoE + 6 layer Attention
  • Riduce la KV Cache in modo ancora più aggressivo grazie a Gated Delta Networks
  • Supporta contesti fino a 1M token (con configurazione adeguata)

💡 Il "colpo di genio": chiedere all'IA di fare i conti

Il prompt usato su Perplexity per calcolare il contesto ottimizzabile:

text

Ragiona passo passo e segui un filo logico. 
Il contesto è un Mac Studio M1 Max con 30 GB di RAM dedicati alla GPU. 
Queste sono le impostazioni di Ollama nel file .zshrc: 

OLLAMA_NUM_PARALLEL=1
OLLAMA_FLASH_ATTENTION=1
OLLAMA_KV_CACHE_TYPE=q8_0

Quanto contesto posso avere? 

Fammi i conti e spiegali in modo preciso. 

Sto usando il modello: 
[incollare qui il link dalla libreria Ollama, es. https://ollama.com/library/qwen3.5:35b-a3b]

📖 Cos'è la KV Cache

La KV Cache (Key-Value Cache) è la memoria di lavoro del modello durante la generazione del testo.

Ogni volta che il modello legge i token precedenti (conversazione o documento), calcola dei vettori matematici chiamati chiavi (K) e valori (V) per ciascun token, per ogni layer dell'attenzione. Invece di ricalcolarli ogni volta, li salva in questa cache per velocizzare la generazione dell'output.

Più grande è il contesto → più grande è la KV Cache → più RAM viene occupata → il Mac rallenta.


⚠️ Avvertenze

  • Quantizzare = baratto: si sacrifica precisione in cambio di capacità di contesto. Non è un miracolo, è un compromesso consapevole.

  • I tempi di risposta aumentano drasticamente con contesti grandi. Esempi reali con 86.000 token di contesto:

    • Qwen 3.5 35B a 4bit → 32 minuti

    • Nemotron 3 Nano18 minuti

  • Apple Silicon è lento nel caricamento del prompt (KV Cache da costruire), ma ha una buona velocità sull'inferenza (generazione dell'output).


🔮 Prossimamente: MLX

Non ho avuto tempo di approfondire, ma c'è ancora molto da esplorare con MLX, il framework di Apple per Apple Silicon:

  • Consuma ~30% meno memoria rispetto a Ollama per i modelli ottimizzati
  • Supporta la cache dei prompt (prefix caching): se il prompt è simile a una conversazione precedente, la GPU ricalcola solo i token nuovi
  • Potenzialmente ancora più efficiente per contesti lunghi

🛠️ Strumenti citati

Strumento Link
Strumento Link
Ollama ollama.com
LM Studio lmstudio.ai
Agent Zero agent-zero.ai / GitHub
OpenClaw openclaw.ai / GitHub
Craft Agents craft.do blog / GitHub
Qwen 3.5 35B (Ollama) ollama.com/library/qwen3.5:35b-a3b
Nemotron 3 Nano (Ollama) ollama.com/library/nemotron-3-nano
MLX (Apple Silicon) github.com/ml-explore/mlx
Docs Ollama KV Cache docs.ollama.com/faq

Compendium fa parte del network Runtime Radio — la radio geek.