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.
Il titolo e' sbagliato!
O meglio non e' preciso...
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].
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!
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!
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...
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 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].
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
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.
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:
Dobbiamo configurare Chatbox per farlo accedere al modello locale;
lanciata l'applicazione, l'impostazione si esegue nei 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!
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].
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, ...
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.
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à:
Un prompt professionale dovrebbe seguire questa struttura ideale:
Per ottenere il massimo da un LLM in locale non basta "installarlo". Ci sono molti elementi che determinano la qualità della risposta degli LLM.
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:
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.
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. |
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.
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:
Come descritto nella documentazione ufficiale di MLX-LLM le API HTTP sono simili a quelle di OpenAI chat API. La richiesta deve contenere il campo messages e puo' contenere una serie di campi opzionali: role_mapping, stop, max_tokens, stream, temperature, top_p, top_k, min_p, repetition_penalty, repetition_context_size, logit_bias, logprobs, model, adapters, draft_model, num_draft_tokens.
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!
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:
Per ottenere i dati con MLX si puo' lanciare il comando:
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=1Ora avete un paio di strumenti in piu': l'importante e' avere sufficiente memoria libera e sapere cosa confrontare!
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:
[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...
Come possiamo generare un'immagine con l'AI sul Mac? Facile, con Stable Diffusion bastano pochi passi:
import torch
from diffusers import StableDiffusionPipeline
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
)
pipe.to("mps")
prompt = "A detailed oil painting of a sailing boat in a stormy sea, dark clouds, waves, masterpiece"
image = pipe(
prompt=prompt,
num_inference_steps=30,
guidance_scale=7.0
).images[0]
image.show()
image.save("quadroAI.jpg")
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.
import os os.environ["TRANSFORMERS_OFFLINE"] = "1" os.environ["HF_HUB_OFFLINE"] = "1"Naturalmente i modelli debbono essere stati scaricati localmente.
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!
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.
La programmazione con ComfyUI si effettua creando nodi, che tipicamente
corrispondono a moduli Python, e collegandoli tra loro in un workflow.
Per semplificare la costruzione si parte da un template;
i template sono centinaia e va individuato quello piu' adatto
per risultato che si vuole ottenere.
Ad esempio se vogliamo generare un video partendo da un'immagine
scegliamo Image to Video come tipo di elaborazione,
ConmfyUI per eseguire localmente
ed ordiniamo i risultato per VRAM Usage (Low to High);
a questo punto scegliamo un template di partenza (eg. LTXV Image to Video).
📂 ComfyUI/ ├── 📂 models/ │ ├── 📂 diffusion_models/ │ │ └── ltx-video-2b-v0.9-Q4_K_M.gguf │ ├── 📂 text_encoders/ │ │ └── t5-v1_1-xxl-encoder-Q4_K_M.gguf │ └── 📂 vae/ │ └── LTX-Video-VAE-BF16.safetensors
Se non ci sono errori il programma termina dopo diversi minuti e nella directory output troveremo il video richiesto!
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, ...
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...
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
Codex
Claude Code
OpenCode,
Documents:
LangChain
LlamaIndex
AnythingLLM
Open WebUI,
Automation & Data:
n8n
Dify
Flowise,
Assistant:
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.
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 🍺):
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...
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
e
Civitai
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
Data:
1 Aprile 2025 🐟 Fools' Day
Versione: 1.0.4 - 14 Febbraio 2026 ❤️
Autore: mail [AT] meo.bogliolo.name