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
0ripristina 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_PARALLELa1(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:
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
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 35Ba 4bit → 32 minutiNemotron 3 Nano→ 18 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.