Utilizzo dell'AI su MacOS

MacOS AI Il titolo e' sbagliato! O meglio non e' preciso...

Ho scritto questa paginetta per riportare i miei appunti sull'utilizzo di tool di AI (Artifical Intelligence: intelligenza artificiale) su MacOS in locale. Quindi non troverete come utilizzare l'AI con Siri o con altri tool di Apple ma piuttosto vedrete come installare strumenti Open Source per caricare ed eseguire un LLM (Large Language Models) in locale su MacOS.
Quindi se volete giocare con alcuni strumenti di AI su un Mac continuate a leggere!

Dopo una noiosa introduzione in cui si parla dei processori Silicon e l'architettura UMA tipici di Apple [NdA che potete anche saltare], vedremo cosa fare per installare un LLM sul vostro Mac e chattare con un AI in locale. Gli strumenti a disposizione per eseguire le rete neurali su MacOS sono diversi ed oltre ad Ollama, che e' sicuramente il piu' noto e diffuso, proveremo anche gli strumenti di MLX che sono specifici di Apple.
Vedremo come lavorare con la grafica generativa programmando in Python su MacOS.
Non manca una raccomandazione finale sugli altri possibili utilizzi locali dell'AI su MacOS con gli strumenti piu' utilizzati.

La trattazione e' semplice con comandi ed esempi pratici ma un poco di familiarita' con il Python e l'interfaccia a linea di comando e' necessaria. Tutti gli esempi riportati sono completi e funzionanti su un MacBook con processore M3 e 16GB di RAM [NdA che e' quello di cui dispongo].

Introduzione

L'architettura dei chip di Apple e' differente da quella tipicamente presente sui sistemi Windows o Linux e consente una maggiore flessibilita' nell'uso dei piu' recenti tool di AI che sfruttano gli LLM (Large Language Model).
In questa introduzione cercheremo di spiegare cosa descriveremo in questa paginetta e perche'. Ma iniziamo con cosa non descriveremo: Apple Intelligence!

Apple Intelligence

MacOS Apple Intellingence logo beta Questa paginetta non riporta nulla sulle funzionalita', anche se sicuramente utili ed importanti, di Apple Intelligence.

Apple Intelligence e' integrata in iPhone [NdA 16 e successivi], Mac [NdA con processori M1 e successivi] ed arricchisce le funzionalita' delle applicazioni native garantendo la sicurezza e la privacy degli utilizzatori. Alcune funzioni vengono svolte in locale, sfruttando le GPU presenti sui processori, altre richiedono un accesso al cloud.

Apple Intelligence e' stato annunciato il 2024-06 ed e' disponibile su macOS Sequoia 15.1 e successivi. E' ancora definito come versione Beta e le funzionalita' principali riguardano: Siri, Writing Tools, email Priority, Image editing, Live Translation. Maggiori dettagli sono riportati sulla documentazione ufficiale.

Ma in questa paginetta non ci interessano le applicazioni utente che sfruttano l'intelligenza artificiale... vogliamo ospitare direttamente i motori AI sul nostro Mac!

AI locale

Eseguire localmente i modelli AI presenta diversi vantaggi.
Non e' necessario utilizzare chiavi di accesso a servizi che richiedono un pagamento o che hanno limiti di utilizzo. Eseguendo i modelli localmente, si mantiene la piena proprieta' dei dati e si evitano i potenziali rischi per la sicurezza. Un motore locale riduce la dipendenza da server esterni, rendendoli piu' affidabili e funzionanti anche in assenza di connessione ad internet. Se si disponde localmente della potenza necessaria, i servizi locali sono piu' veloci perche' non hanno la latenza nell'accesso alla rete intenet. Si hanno a disposizione tutti i parametri di configurazione dei motori di inferenza e si possono imparare i dettagli sul reale funzionamento delle reti neurali di grandi dimensioni. Eseguendo localmente le elaborazioni non sono presenti blocchi, filtri, censure, ... se non quelli inseriti nel training del modello.

Il vantaggio fondamentale risiede nella privacy assoluta e nel controllo totale dei dati, poiche' nessuna informazione lascia il proprio computer e nessuna censura e' inserita alle sue risposte. Questo, unito alla possibilita' di personalizzazione e all'assenza di costi per l'utilizzo, rende gli LLM locali strumenti potenti per le aziende ed i professionisti.

Ma per eseguire un LLM i normali processori non bastano...

CPU e GPU

La CPU (Central Processing Unit) esegue i compiti in modo sequenziale e generale, gestendo il sistema operativo e le applicazioni; e' il processore presente in tutti i computer che accede alla RAM (Random Access Memory) per elaborare i dati.
Alla CPU, inizialmente per compiti specifici come la gestione della grafica del videogiochi, si e' affiancato un processore di tipo diverso: la GPU (Graphics Processing Unit). La differenza fondamentale rispetto alla CPU e' che la GPU e' adatta a svolgere compiti relativamente facili ma con un elevato grado di parallelismo. Le CPU hanno generalmente un certo numero di core che possono operare in parallelo (eg. 8) ma le GPU hanno un livello di parallelismo molto piu' spinto (eg. 1024). Le GPU tipicamente accedono ad una memoria dedicata come la VRAM (Video RAM).
Disponibili da anni le GPU hanno trovato una seconda giovinezza [NdA o forse una terza giovinezza se consideriamo il mining delle criptovalute] per le elaborazioni necessarie agli LLM.

Il piu' noto produttore di GPU e' NVIDIA che da sempre produce schede grafiche con memoria e GPU dedicate. Ma NVIDIA non produce solo hardware: ha sviluppato una piattaforma che consente di sfruttare le GPU delle schede grafiche per compiti differenti dalla sola elaborazione delle immagini. Per sfruttare le GPU NVIDIA e' fondamentale l'utilizzo della piattaforma CUDA (Compute Unified Device Architecture). CUDA permette agli sviluppatori di usare le GPU per calcoli generici, e non solo grafici, accelerando enormemente applicazioni di calcolo parallelo e di AI usando estensioni dei linguaggi piu' diffusi come il C/C++ ed il Python.
Le migliori GPU NVIDIA consumer hanno ottime prestazioni per banda e velocita' di elaborazione ma la memoria a bordo e' spesso limitata rispetto ai modelli AI piu' coumunemente utilizzati. Una 5070 ha 12GB, una 5080 si ferma a 24GB e la piu' costosa 5090 ha solo 32GB. Per lavorare con modelli da 30, 70 o 100 miliardi di parametri la memoria non basta, servono GPU professionali con 48, 80 o addirittura 140GB di VRAM con costi nettamente piu' elevati.
Usando più GPU NVIDIA assieme, inoltre, la memoria non si somma, quindi diventa necessario fare parallelismo complesso, configurare cluster, usare NVLink o Infiniband: si tratta pero' di configurazioni non adatte ad un utente consumer e rivolte al mercato professionale, su cui effettivamente NVIDIA e' il leader indiscusso.

Apple Silicon

Apple ha scelto un approccio diverso progettando i chip Silicon [NdA Apple Silicon M1 e successivi] che contengono al loro interno sia CPU che GPU ed accedono alla stessa memoria UMA (Unified Memory Architecture). Il primo vantaggio e' che non e' necessario di copiare i dati dalla RAM di sistema (usata dalla CPU) alla VRAM dedicata (usata dalla GPU). Tutti i processori accedono agli stessi dati nello stesso posto. Il secondo importante vantaggio e' che la memoria totale del sistema e' disponibile per ogni utilizzo: questo rende i sistemi Mac molto adatti a provare LLM di grandi dimensioni senza richiedere l'acquisto di costose schede dedicate.

Per un'architettura di produzione l'utilizzo di un hardware dedicato creando un cluster di schede e' sicuramente la soluzione migliore. I principali produttori come Dell, HP, Lenovo integrano nelle loro workstation e server di fascia alta una o piu' potenti GPU NVIDIA.
Ma per provare ad eseguire localmente un modello LLM di discrete dimensioni un Mac di Apple puo' essere un'alternativa molto flessibile e, curiosamente, economica.

Ecco perche' in questa paginetta possiamo descrivere come installare ed operare con motori di AI installati localmente su un normale portatile con MacOS e processori Silicon [NdA sono consigliati processori M3 o sucessivi perche' utilizzano il dynamic caching e consentono un parallelismo piu' spinto].

Chatbot

Anche se l'AI e le reti neurali sono studiati da decenni la recente notorieta' si deve a ChatGPT che a novembre 2022 ha reso disponibile al pubblico un Chatbot basato sull'LLM GPT-3.5. Quindi inizieremo configurando un Chatbot in locale.

Come possiamo installare ed eseguire un LLM e parlare con un Chatbot senza utilizzare servizi in Cloud ma solo il nostro Mac?

Ollama

Ollama logo Ollama e' uno strumento Open Source che esegue modelli linguistici di grandi dimensioni (LLM) in locale ovvero direttamente sulla macchina ospite senza accedere a servizi in Cloud. Ollama si distingue la facilita' di utilizzo ed e' diventato in breve lo strumento piu' usato da sviluppatori di AI, ricercatori e aziende interessate al controllo dei dati e alla privacy.
Infatti disporre di un Large Language Model (LLM) in locale tramite Ollama con potenti modelli come Llama, Mistral, Deepseek, Gemma, ... apre un ventaglio di applicazioni professionali che vanno ben oltre la semplice conversazione con un bot.

Per ottenere risultati validi e buone prestazioni e' naturalmente importante fare le scelte giuste sui modelli e sui parametri. Ma usare direttamente un LLM in un programma non e' poi cosi' difficile come potrebbe sembrare a prima vista. Questo e' un programma di 3 righe in Python che usa DeepSeek su Ollama per chiedergli... di scrivere un programma [NdA un esempio di vibe coding]:

import ollama

response = ollama.chat(model='deepseek-coder:6.7b', messages=[{ "role": "user","content": "Scrivi un programma che dice tre volte: Ti amo!" }])
print(response['message']['content'])

Ma procediamo con ordine e partiamo dall'installazione.
I componenti che vogliamo installare sono:

Per l'installazione utilizziamo Homebrew 🍺 che e' un gestore di pacchetti Open Source per Mac. In alternativa e' possibile scaricare i programmi dai siti ufficiali ma... cosi' e' molto piu' comodo.
Iniziamo ad installare Ollama ed a caricare Llama3.

# Installazione di Ollama brew install ollama ==> Downloading ... 🍺 /opt/homebrew/Cellar/ollama/0.5.7: 8 files, 24.2MB # Avvio di Ollama come servizio brew services start ollama # Esecuzione del modello LLM in Ollama (il download iniziale richiede alcuni minuti) ollama pull llama3:8b pulling manifest ... success # Controllo su quanto caricato: ollama list NAME ID SIZE MODIFIED llama3:8b 365c0bd3c000 4.7 GB 13 minutes ago

Ollama e' un ambiente di semplice utilizzo per gestire ed utilizzare gli LLM. Tra i comandi piu' utili: ollama ps, ollama list, ollama show model, ollama run model, ollama create model, ... Con il comando pull abbiamo scaricato uno dei molti modelli disponibili ma la scelta e' molto ampia e possiamo caricarne altri. Su MacOS i modelli vengono salvati nella directory /.ollama/models e possono essere cancellati con il comando rm.
Ora installiamo l'applicazione Chatbox per interfacciarci al modello AI:

# Installazione di Chatbox brew install catbox

Chatbox icon Dobbiamo configurare Chatbox per farlo accedere al modello locale; lanciata l'applicazione, l'impostazione si esegue nei Settings: Chatbox settings

Utilizziamo la porta 11434, che e' la porta di default di Ollama per l'interfaccia API REST, e quindi scegliamo il modello che abbiamo appena caricato.
Lanciando l'applicazione Chatbox possiamo chattare con l'AI!

Modelli

La libreria dei modelli disponibili su Ollama e' molto ricca e sempre aggiornata. La scelta del modello e' fondamentale ma dipende dalle esigenze perche' alcuni sono piu' adatti come chatbot, altri per il coding, altri per le funzionalita' agentic, altri per il ragionamento, altri per l'analisi di immagini, altri per la dimensione massima del contesto, ... alcuni operano solo in inglese ma molti comprendono e rispondono in piu' lingue.
Se si hanno limiti di memoria [NdA si hanno sempre limiti di memoria se non avete la macchina di Turing], ma in ogni caso per avere una buona velocita', e' opportuno scegliere modelli di dimensione intermedia. Tutti i modelli :3b, :7b, :8b girano tranquillamente su un MacBook con 16GB di RAM. Tra i modelli piu' adatti: llama3:8b llama3.1:8b mistral:7b Anche i modelli 14b si eseguono senza problemi (eg. qwen3:14b Size 9.3GB) ed i modelli 24b (eg. mistral-small3.1:24b Size 15GB) mandano il sistema in memory pressure ma senza altre conseguenze. Per una verifica puntuale dei singoli modelli e delle GPU si puo' usare questo sito.
In pratica con 16GB di RAM non conviene superare il limite dei 10GB di Size del modello. [NdA si riescono ad eseguire anche modelli (eg. mistral-small3.1:24b Size 15GB) piu' grandi ma superando la memoria disponibile il sistema va in swap, la GPU non viene sfruttata al 100% e l'LLM risponde molto, troppo lentamente].
      Memory and GPU usage up to 14b    Memory and GPU usage with 24b

Forse ancora piu' importante della scelta del modello e' il Prompt ovvero le domande poste all'LLM: non ci serve parlare con un Genio se poi facciamo domande stupide! Ollama consente di impostare una serie di parametri come temperature, num_ctx, top_p, top_k, ... nel seguito cercheremo descriverli senza superare lo scopo di questa paginetta.

Con Ollama e' anche possibile utilizzare modelli fine-tuned oppure modelli in Cloud [NdA preview dal 2025-09 con Ollama 0.12] utilizzando gli stessi comandi e l'interfaccia di Ollama. L'utilizzo di modelli in cloud richiede il login, per superare il limite giornaliero e' richiesto un abbonamento e le richieste, vengono inviate in rete crittografate per essere elaborate. Non e' un'esecuzione locale ma e' comunque utile sapere che esiste questa possibilita'.

Interagire con Ollama e' semplice anche da linea di comando:

MacBook ~ % ollama run mistral:7b
>>> Rispondi come un professore universitario. Spiega i concetti principali della teoria quantistica.

 Benvenuti alla mia aula virtuale! Siamo qui oggi per discutere delle basi fondamentali della Teoria Quantistica dei Campi 
(TQC), una importante estensione della meccanica quantistica alle interazioni tra particelle elementari.

1. **Fondamenti della meccanica quantistica**: La TQC ha le sue radici nella Meccanica Quantistica di Matrici (MQM), 
sviluppata da Werner Heisenberg e Erwin Schrödinger negli anni venti del XX secolo. MQM descrive la natura quantica degli 
oggetti fisici attraverso equazioni difficili, note come Equazioni di Schrödinger.

2. **Campi quantici**: La TQC sostituisce la descrizione della posizione e del momento di una particella quantica con la 
descrizione di un campo quantico associato alla particella. Un campo quantico e' una distribuzione continua di energia e 
materia, che può essere influenzata da particelle elementari in movimento. I campi quantici possono esistere sia in un stato 
di equilibrio statico (campi di bosoni) sia in uno stato dinamico (campi di fermioni).

3. **Leggi di conservazione**: La TQC mantiene le legge di conservazione che sarebbero violate dalla meccanica classica a 
bassa energia, ...

vLLM logo Anche se e' l'inference engine piu' diffuso e noto, Ollama [NdA o meglio llama.cpp che Ollama utilizza] non e' il migliore per tutti i casi d'uso possibili...
Sicuramente va ricordato anche vLLM che ha un'efficienza maggiore ma che e' anche piu' complesso da utilizzare.
Per sperimentare l'utilizzo degli LLM su MacOS a mio avviso Ollama e' piu' che sufficiente ma nel seguito spederemo qualche parola in piu' su MLX che e' in grado di sfruttare al meglio le piu' recenti caratteristiche dei processori Silicon.

L'arte del Prompting per LLM

Spesso un modello "stupido" sembra tale solo perche' la domanda e' posta male. Con gli LLM il Prompt una vera e propria istruzione strutturata. Ecco alcuni consigli per ottenere risposte di alta qualità:

Struttura di un Prompt Efficace

Un prompt professionale dovrebbe seguire questa struttura ideale:

[Ruolo]: "Sei un esperto di cybersecurity."
[Contesto]: "Stai analizzando un log di accesso sospetto su un server Linux."
[Compito]: "Identifica potenziali tentativi di brute force attack in questo testo."
[Vincoli]: "Elenca i risultati in una tabella, includendo IP e timestamp. Non includere spiegazioni teoriche."
[Dati]: "Inserisci qui il log..."
I vincoli diretti funzionano bene: "Non usare gergo tecnico", "Evita introduzioni prolisse" o "Non rispondere se non sei sicuro al 100%". Se il modello continua a ignorare i divieti, si puo' ribaltare la frase in positivo: invece di "Non scrivere codice Java", usa "Scrivi un programma in Python".
Oppure si possono seguire alcune le molte indicazioni disponibili su Web ed infine... farci consigliare da un AI!

Ottimizzare l'uso degli LLM

Per ottenere il massimo da un LLM in locale non basta "installarlo". Ci sono molti elementi che determinano la qualità della risposta degli LLM.

Personalizzare il comportamento: il Modelfile

Ollama ha la possibilità di creare un "agente" personalizzato definendo un System Prompt. Ad esempio, se vogliamo un assistente che risponda sempre in modo conciso:

# Crea un file chiamato 'esperto.mf'
FROM llama3
PARAMETER temperature 0.2
SYSTEM "Sei un assistente tecnico esperto. Rispondi in modo conciso e tecnico, usa sempre il grassetto per i termini chiave."

Poi da terminale eseguiamo:

ollama create mio-esperto -f esperto.mf ollama run mio-esperto

Parametri di Inferenza

Ecco alcuni dei parametri principali di Ollama che cambiano la "personalità" dell'AI:

Parametro Valore basso Valore alto
temperature Preciso, deterministico (per codice e dati). Creativo, variabile (per scrittura creativa e brainstorming).
num_ctx Risposte veloci, ma "dimentica" presto l'inizio. Memoria lunga della conversazione, ma usa più RAM.
Num_predict Definisce la lunghezza massima della risposta in token. Il default (-1) non limita la risposta.
Top_K Un valore basso fa considerare meno risposte. Genera risposte divergenti.
Top_P Usato in alternativa a top_k un valore basso di probabilita genera risposte conservative. Genera risposte differenti.
Repeat_penalty Tende a ripetere le cose. Evita le ripetizioni nella risposta.

Alcuni parametri hanno effetto sulla scelta della risposta (eg. temperature, top_k) altri, come num_ctx, hanno sia effetto sulla qualita' della risposta (perche' un contesto di maggiori dimensioni riduce le allucinazioni) che sulla quantita' di memoria utilizzata perche' un contesto piu' ampio richiede molta piu' memoria per la KV Cache in particolare con Ollama.

Modelli e quantizzazione

Ollama utilizza il formato GGUF per memorizzare i pesi delle reti neurali. Non e' l'unico formato disponibile e quindi puo' essere utile questa tabella che riporta i piu' diffusi:

Modello Utilizzo Note
GGUF
GPT-Generated Unified Format
Ollama, llama.cpp Lossy, orientato alla quantizzazione che e' molto flessibile (eg. Q4_K_M). Tutto-in-uno, perfetto per CPU/GPU consumer.
Safetensors Training, PyTorch, MLX Sicuro, veloce da caricare, contiene pesi "puri" da caricare in RAM senza modifiche (Zero-Copy). Creato da Hugging Face per sostituire i vecchi file .bin (Pickle) che erano potenzialmente pericolosi...
ONNX
Open Neural Network Exchange
Produzione, Mobile, Edge Rivolto all'interoperabilita'. Sviluppato inizialmente da Microsoft. Contiene anche la logica (grafo), non solo i pesi. Puo' essere Loseness ma generalmente usa INT8 o FP16.

La quantizzazione, in particolare con il formato GGUF, puo' essere molto spinta:

Formato Bit Note
FP32 32 Massimo dettaglio. Usato principalmente per il training.
FP16 / BF16 16 Standard per l'addestramento moderno e l'inferenza ad alta fedelta'.
INT8 8 Primo step di compressione massiccia. Perdita di precisione generalmente impercettibile.
Q4_K_M ~4.5 Ottimo equilibrio tra memoria e intelligenza. E' il default su GGUF/Ollama.
NF4 (Normal Float) 4 Formato speciale che usa una distribuzione normale per mappare i pesi. Molto efficace nei modelli Llama.
IQ2 / EXL2 2 Estremo. Il modello inizia a "farneticare" o perdere coerenza logica complessa (Perplexity).
Ternario 1.58 Utilizza i valori: -1, 0, 1. Il calcolo non richiede moltiplicazioni, ma solo addizioni. Adatto solo a casi particolari ma velocissimo.

Privacy e RAG (Retrieval-Augmented Generation)

Un ulteriore vantaggio dell'utilizzo in locale di un LLM e' il RAG. E' possibile collegare Ollama a strumenti come AnythingLLM o GPT4All per permettere all'AI di leggere i propri PDF o documenti privati. L'AI risponde basandosi sui dati locali senza che nulla venga inviato su server esterni: la privacy e' totale.

E' anche possibile implementare un RAG (Retrieval-Augmented Generation) su MacOS senza utilizzare alcuna applicazione. Un'architettura RAG necessita di diversi strumenti e richiede diversi passi... ma sono strumenti facilmente installabili su MacOS e passi facilmente eseguibili da linea di comando o lanciati da applicazioni specifiche. Tra le diverse possibilita' e' molto semplice installare su MacOS il database PostgreSQL e l'estensione pgvector che consentono di memorizzare e ricercare gli embedding effettuando ricerche per significato. La complessita' cresce e sono molte le scelte possibili per l'implementazione... ma tutto e' perfettamente installabile ed integrabile in locale su MacOS.

MLX

MLX logo Un approccio tecnicamente piu' complesso ma piu' efficiente di Ollama e' quello disponibile con MLX. MLX e' il framework di machine learning sviluppato da Apple per eseguire modelli di intelligenza artificiale in modo estremamente efficiente sui Mac con chip Apple Silicon. MLX permettere agli utenti di far girare modelli avanzati, come modelli linguistici, modelli di immagini o modelli audio direttamente in locale, senza bisogno del cloud e con prestazioni molto elevate.

I modelli MLX non sono modelli speciali: sono gli stessi modelli di intelligenza artificiale disponibili gratuitamente (come LLaMA, Mistral, Gemma, Stable Diffusion e altri) che vengono convertiti nel formato MLX. Sono in pratica una versione ottimizzata per Apple Silicon di modelli gia' esistente.
Le API di MLX sono simili a quelle dei framework piu' diffusi. L'API Python di MLX segue in modo preciso NumPy. MLX fornisce API per il C, C++, and Swift con chiamate analoghe a quelle Python. MLX ha packages di piu' alto livello come mlx.nn e mlx.optimizers with APIs che corrispondono a PyTorch.

Avviando il server compatibile con le API di OpenAI incluso in mlx-lm e' possibile utilizzare localmente modelli AI ottimizzati per i processori Silicon di Apple.
Ecco le indicazioni di dettaglio per provarlo:

Non e' poi cosi' complesso, vero?
Apple MLX e' lo strumento piu' adatto per ottenere il massimo dai processori Silicon e sfruttare le funzionalita' introdotte piu' di recente. Ma in realta' Ollama e' molto piu' conosciuto, sfrutta comunque le GPU Silicon e la conversione dei modelli per MLX non e' sempre semplice... quindi per le prime prove di elaborazione in locale consigliamo comunque Ollama!

Test

Non ti fidi e vuoi provare? Ottimo, perche' e' anche il mio approccio!
E' importante conoscere un poco sotto come funzionano i modelli di inferenza per non confrontare cose diverse o cercare di ottimizzare qualcosa mentre in realta' il collo di bottiglia e' un altro.

Con ollama show model si ottengono le informazioni sul modello oltre ai parametri ed alla lunghezza del contesto e' riportata la quantizzazione. Nel training tipicamente si usano pesi che sono FP32, che richiederebbero una memoria enorme. Per l'inferenza si usano modelli quantizzati. Ad esempio Q4_K_M indica una quantizzazione a 4 bit ed una distribuzione bilanciata della precisione (Medium) dove necessario.

Su MacOS la memoria e' tipicamente la risorsa piu' critica ed oltre al modello bisogna considerare un paio di GB per sistema operativo MacOS e la grafica ed almeno altrettanto per la KV Cache (Key-Value Cache) [NdA la dimensione della cache dipende principalmente dal contesto].

Per ottenere i dati di dettaglio con Ollama basta aggiungere il parametro --verbose. Al termine dell'elaborazione verra' riportato un dettaglio come il seguente:

ollama run llama3:8b --verbose ... total duration: 20.875594209s load duration: 127.874417ms prompt eval count: 41 token(s) prompt eval duration: 227.603ms prompt eval rate: 180.14 tokens/s eval count: 574 token(s) eval duration: 20.343336164s eval rate: 28.22 tokens/s

Per ottenere i dati con MLX si puo' lanciare il comando:

python -m mlx_lm.generate --model mlx-community/Meta-Llama-3-8B-Instruct-4bit \ --prompt "Scrivi un saggio breve (circa 300 parole) sull'evoluzione ed utilizzo delle reti neurali fino ad oggi." \ --max-tokens 500 ... Prompt: 41 tokens, 50.379 tokens-per-sec Generation: 500 tokens, 30.305 tokens-per-sec Peak memory: 5.430 GB

Sulla valutazione del Prompt Ollama e' molto piu' veloce ma quello che tipicamente e' piu' importante e' la velocita' di generazione: su questo punto MLX batte Ollama, anche se per meno del 10%. L'elaborazione dipende dalla velocita' delle GPU, dalla banda per l'accesso alla memoria e dall'efficienza degli algoritmi. Ma e' solo uno dei molti aspetti da considerare: i tempi di caricamento del modello, l'analisi del prompt, i tempi totali, ... sono altri elementi che possono diventare ancora piu' importanti a seconda dell'utilizzo.
Per una configurazione di lavoro su MacOS sono utili le impostazioni di Ollama:

export OLLAMA_NUM_PARALLEL=1
export OLLAMA_MAX_LOADED_MODELS=1
export OLLAMA_FLASH_ATTENTION=1
Ora avete un paio di strumenti in piu': l'importante e' avere sufficiente memoria libera e sapere cosa confrontare!

Grafica

Quanto abbiamo visto fino ad adesso e' in grado di generare solo testi. Con Ollama, sfruttando i modelli con le necessarie capacita', e' possibile analizzare un immagine:

ollama run llava "Describe the image /path/image_name.jpg"

[NdA non riporto l'immagine il risultato perche' ho chiesto di analizzare una mia foto e mi ha detto che sono un vecchio... quindi funziona ;-]

Con Ollama e' solo possibile analizzare un'immagine ma non e' possibile generare immagini.

Come possiamo generare un'immagine con l'AI sul Mac? Facile, basta usare Stable Diffusion...

Stable Diffusion

Stable Diffusion icon Come possiamo generare un'immagine con l'AI sul Mac? Facile, con Stable Diffusion bastano pochi passi:

La grafica e' un modo intero da esplorare e non puo' certo esaurirsi con un esempio. Il discorso sarebbe troppo ampio, ma possiamo provare a dare qualche cenno.

MacOS memory pressure Il download iniziale dei modelli richiede tempo... pazienza! I richiami successivi sfrutteranno la cache e saranno molto piu' veloci.
Alcuni modelli richiedono la registrazione su Hugging Face per poter essere scaricati. Basta dare il comando hf auth login e passare il token generato sul sito.
Se la memoria si esaurisce il primo sintomo e' il rallentamento dovuto allo swapping, ma altri problemi possono essere la generazioni di immagini nere, bianche, verdi, ... fino ad arrivare al blocco del sistema. Se si e' vicini al limite delle risorse i vari "trucchi" riportati per la gestione della memoria vanno sperimentati caso per caso. A volte il problema delle immagini nere e' dovuto ad un bug nell'ultima fase del VAE, in questo caso si aggira con pipe.vae.to(dtype=torch.float32).

Questo avrei dovuto scriverlo prima... ma non volevo annoiare nessuno!
Stable Diffusion e' un programma di intelligenza artificiale estremamente avanzato, progettato per la generazione di immagini a partire da descrizioni testuali. Fino ad ora abbiamo parlato di modelli di Stable Diffusion confondendoli con i LLM (Large Language Model). In realta' il meccanismo di generazione e' diverso. Un LLM genera in modo seriale una parola alla volta basandosi sulla probabilita' che tale parola sia corretta. Stable Diffusion invece sfrutta un’architettura di diffusione latente, un approccio che consente di trasformare il rumore casuale in immagini dettagliate e coerenti. Questo avviene attraverso un processo iterativo di raffinamento, in cui l’intelligenza artificiale costruisce progressivamente l’immagine in base alle istruzioni fornite dall’utente. Stable Diffusion opera parallelamente su tutta l'immagine e non una parola o un token alla volta. L'esempio seguente non e' mio e mi e' stato suggerito un'AI e ma mi e' piaciuto... un LLM e' un muratore che aggiunge un mattone alla volta, un modello a diffusione e' uno scultore che toglie il materiale in eccesso rivelando l'immagine finale.
Ma vi sono anche molti punti in comune tra gli LLM ed i modelli a diffusione: l'interpretazione del Prompt, l'utilizzo di reti neurali, la dimensione dei modelli, i LoRA, ... insomma spero mi perdonerete!

ComfyUI

ComfyUI icon La generazione di video con un Mac portatile ci porta vicino ai limiti della nostra workstation ma e' comunque possibile ottenere risultati interessanti.
In questo caso anziche' richiamare un programma Python utilizzeremo un'applicazione: ComfyUI. In realta' ComfyUI e' solo un'interfaccia grafica perche' i vari passi per la generazione degli oggetti avviene sempre con moduli Python che pero' sono montati assieme come nodi connessi tra loro. ComfyUI non e' semplicissimo da utilizzare... ma consente la creazione di immagini o di video con il massimo grado di liberta' nelle scelte di implementazione.

Certo utilizzare ComfyUI e' un po' piu' complesso che chattare con un LLM lanciato con Ollama: dobbiamo scaricare i modelli, modificare il workflow, impostare ogni parametro dei vari nodi, attendere un po' di tempo, ...

Utilizzare l'AI localmente su un Mac

In questa paginetta abbiamo visto in dettaglio due casi di utilizzo di AI generativa per il testo (con Ollama) e per le immagini (con StableDiffusion), vediamo di riassumere le nostre raccomandazioni...

n8n AI Agent with Ollama Per sperimentare l'utilizzo degli LLM su MacOS con processori Silicon Ollama e' la scelta migliore: e' tra i tool piu' utilizzati e la memoria unificata di Apple consente di utilizzare modelli di dimensioni significative come llama3:8b, llama3.1:8b, mistral:7b o modelli fine-tuned con ottimi risultati. E' anche possibile utilizzare modelli in cloud come qwen3-coder:480b-cloud senza cambiare l'interfaccia, ma naturalmente si rinuncia all'esecuzione solo in locale. L'evoluzione e' continua e vi sono sempre modelli piu' potenti e con contesti piu' lunghi utilizzabili su dispositivi Edge.
Nel tempo sono state sviluppate molteplici integrazioni con Ollama per Coding agents: VS Code VS Code Codex Codex Claude Code Claude Code OpenCode OpenCode, Documents: LangChain LangChain LlamaIndex LlamaIndex AnythingLLM AnythingLLM Open WebUI Open WebUI, Automation & Data: n8n n8n Dify Dify Flowise Flowise, Assistant: openclaw OpenClaw, ...

Per la generazione di immagini StableDiffusion con SDXL-Lightning e' il miglior compromesso tra qualita' delle immagini e velocita'. E' vicino al limite della memoria (con 16GB disponibili) ma con qualche trucco si riesce ad operare con risultati graficamente molto validi. Sempre con qualche trucco nella scelta dei modelli e' possibile realizzare in locale brevi video con ComfyUI.

Le applicazioni di AI utilizzabili in locale su MacOS non si limitano alla generazione di testi ed immagini:

Anche queste utili tipologie di applicazioni AI possono essere eseguite in locale e per alcune la privacy e' molto critica (eg. registrazioni mediche o legali).

I piu' esperti forse avranno notato che non e' stato riportata nessuna indicazione per il training dei modelli... a mio parere per il training sono necessarie risorse di memoria e di calcolo nettamente superiori quindi l'utilizzo di sistemi con schede dedicate, oppure di servizi in cloud, diventa praticamente necessario. Una volta eseguito il tuning il modello potra' poi essere eseguito efficacemente in locale.

Utility

Non sono applicazioni al livello di quelle di viste in precedenza... ma sono terribilmente utili!

Se si generano immagini che debbono anche essere pubblicate su web conviene convertirle in formato .webp perche' si ottiene un'ottima riduzione delle dimensioni. Su MacOS si puo' utilizzare il comando cwebp (installabile con Homebrew 🍺):

for file in test*.jpg; do cwebp -q 80 -resize 256 0 "$file" -o "${file%.*}.webp"; done

Tesseract e' un potente OCR. Ecco un semplice script che lo utilizza per estrarre il testo da una serie di file:

#!/bin/bash

IMAGE_DIR="." 
LANGUAGE="eng"

# loop
for img_file in "$IMAGE_DIR"/*.png; do
  if [ -f "$img_file" ]; then
    echo "Processing: $img_file"

    TEXT=$(tesseract "$img_file" stdout -l $LANGUAGE --psm 3 2>/dev/null)
    echo $TEXT
    echo
  fi
done

Tesseract opera solo su file immagine [NdA meglio se TIIF 300 dpi] ma e' semplice convertire i pdf in immagine quando necessario...

Varie ed eventuali

Anche se l'elaborazione avverra' poi in locale, i modelli da utilizzare vanno caricati dalla rete almeno una volta.
I principali siti di riferimento sono Hugging face Hugging Face icon e Civitai CivitAI icon per tutte le risorse: LLM, modelli di diffusione, LoRA, ...

Un semplice esempio di utilizzo di Ollama su Mac e' riportata in questa paginetta.

Le versioni di macOS sono riportate in questo utile ma pestilenziale documento.


Titolo: Utilizzo dell'AI su MacOS
Livello: Medio (2/5)
Data: 1 Aprile 2025 🐟 Fools' Day
Versione: 1.0.4 - 14 Febbraio 2026 ❤️
Autore: mail [AT] meo.bogliolo.name