La IA in cantina

Sto cercando di capire come funzioni una IA. Non mi riferisco alla matematica o agli algoritmi che ci sono dietro, ma alla composizione di un qualcosa da interrogare, possibilmente open source e possibilmente che sfrutti la scheda grafica Intel B580 del server in cantina.

Un po’ di terminologia

  • ollama, è una specie di frontend che espone in maniera semplificata (ma non ancora semplice) le potenzialità di una IA, in particolare di quella che si chiama llama.cpp. ollama offre funzionalità per scaricare e gestire i vari modelli, offre una interfaccia REST per l’accesso alla IA, e cose simii;
  • llama.cpp, è un motore di inferenza scritto in C++ che utilizza i modelli GGUF e che ha la possibilità di accelerare grazie all’hardware delle schede video. Una caratteristica di llama.cpp è che se il modello in uso utilizza più RAM di quanta ne abbia la scheda video, allora viene usata anche la memoria RAM del computer;
  • Open-WebUI, è una interfaccia web che permette l’interazione con un motore di inferenza tramite i protocolli di ollama oppure di OpenAI;
  • quantizzazione, indicata con sigle tipo Q4_K_M, Q5_K_M, è una modalità di memorizzazione del modello in formato ridotto: anziché contenere i pesi interi da 16 e 32 bit in virgola mobile, si memorizzano valori approssimati usando meno bit. Il metodo per approssimare prevede di usare fattori di scala e altri stratagemmi, che valgono spesso per più quanti successivi, da cui l’opzione del raggruppamento. La lettera Q indica appunto che parliamo di quantizzazione, il numero successivo indica il numero di bit occupati da ogni quanto, la lettera K indica che la quantizzazione è fatta a gruppi ed è contrapposta al numero 0 che indica una quantizzazione non raggruppata, la lettera M indica una precisione media contrapposta alle lettere S (precisione piccola, maggiore velocità) e L (grande precisione, maggiore lentezza);
  • perplexity, se si utilizza la quantizzazione si va incontro ad una approssimazione, quindi ad un errore. Per misurare questo errore si fa riferimento ad un valore chiamato perplexity: minore è il valore, migliore è l’approssimazione;
  • GGUF, è un formato di file binari che descrivono un modello. Si tratta di una sigla inglese che vuol dire «Formato unificato generato da GPT». Questo formato è l’evoluzione del precedente, chiamato GGML «Linguaggio modello generato da GPT». Il formato GGUF è adottato da vari motori di inferenza;
  • SYCL: è uno dei backend che permettono di sfruttare la scheda video, in particolare è quello utilizzato fino a gennaio 2026 da pkix-llm per utilizzare le schede Intel;
  • vulkan, è un backend per utilizzare le schede video, ma più generico del SYCL, difatti gestisce schede video Intel, AMD e nVidia e funziona su Linux, MacOS e Windows,
  • ROCm, è un backend per utilizzare le schede video AMD.

Proviamo!

Partiamo dal compilare llama.cpp per farne una immagine da usare con docker. Il progetto llama.cpp ha già un dockerfile che prepara un immagine con il compilatore (attualmente basata su Ubuntu 26.04) e che viene lanciata per compilare il tutto e creare una immagine docker finale. La compilazione dura pochi minuti e genera l’immagine llama-cpp-vulkan già pronta tra quelle di docker.

# git clone https://github.com/ggml-org/llama.cpp.git
# cd llama.cpp.git
# docker build -t llama-cpp-vulkan -f .devops/vulkan.Dockerfile .
[...]
# docker image ls llama-cpp-vulkan
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
llama-cpp-vulkan   latest    83854865d087   5 minutes ago   501MB

Facciamo un primo test, che attiva il container, controlla e riconosce l’hardware e scarica un piccolo modello. Per dare dello spazio disco nel quale scaricare il modello, uso la mia directory /srv/nfs/docker/modelli_ollama/models:

# docker run -it --rm -v "/srv/nfs/docker/modelli_ollama/models:/root/.cache/llama.cpp:Z" --device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0 llama-cpp-vulkan -hf ggml-org/gemma-3-1b-it-GGUF
[...]
ggml_vulkan: 0 = Intel(R) Arc(tm) B580 Graphics (BMG G21) (Intel open-source Mesa driver) | uma: 0 | fp16: 1 | bf16: 1 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: KHR_coopmat
load_backend: loaded Vulkan backend from /app/libggml-vulkan.so
load_backend: loaded CPU backend from /app/libggml-cpu-haswell.so
common_download_file_single_online: no previous model file found /root/.cache/llama.cpp/ggml-org_gemma-3-1b-it-GGUF_preset.ini
[...]
llama_model_load_from_file_impl: using device Vulkan0 (Intel(R) Arc(tm) B580 Graphics (BMG G21)) (0000:0a:00.0) - 3366 MiB free
[...]

Usiamo le immagini già pronte

Al di là di compilare la propria immagine e poi creare l’immagine docker, è anche possibile utilizzare l’immagine standard, quella fatta e tenuta aggiornata direttamente dagli sviluppatori di ollama, la quale all’interno ha i vari backend. Per farlo io ho utilizzato questo file docker che definisce due container, uno per ollama e uno per l’interfaccia web:

services:
  ollama-vk:
    image: ollama/ollama
    container_name: ollama-vk
    restart: always
    networks: [ ml_shared ]
    ports:
      - "11434:11434"
    devices:
      - /dev/dri:/dev/dri
    environment:
      OLLAMA_HOST: "0.0.0.0"
      OLLAMA_VULKAN: 1
    volumes:
      - /srv/nfs/docker/modelli_ollama:/root/.ollama

  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    restart: always
    networks: [ ml_shared ]
    depends_on:
      - ollama-vk
    ports:
      - "3000:8080"
    environment:
      OLLAMA_BASE_URL: "http://ollama-vk:11434"

networks:
  ml_shared:

volumes:
  ollama_models:

Questo testo, se copiato in un file chiamato docker-compose.yml, permette di attivare tutto ciò che serve. Notare che nella sezione «devices» ho fatto in modo da far vedere nel container il device /dev/dri che da accesso alla scheda video, mentre nella sezione «volumes» ho fatto sì che i modelli non finiscano dentro l’immagine del container, ma su un file system esterno, persistente. In questo modo quando l’immagine verrà aggiornata, non perderò i modelli scaricati.

Una volta attivato questi container di docker, posso controllare se siano veramente attivi in questo modo:

# docker ps
CONTAINER ID   IMAGE                                COMMAND               CREATED          STATUS                    PORTS                                           NAMES
9382e06bb799   ghcr.io/open-webui/open-webui:main   "bash start.sh"       27 minutes ago   Up 27 minutes (healthy)   0.0.0.0:3000->8080/tcp, :::3000->8080/tcp       openwebui
66487bef49b8   ollama/ollama                        "/bin/ollama serve"   27 minutes ago   Up 27 minutes             0.0.0.0:11434->11434/tcp, :::11434->11434/tcp   ollama-vk

e poi collegarmi al Open-WebUi con un browser all’indirizzo http://localhost:3000/ , ma posso collegarmici anche da altri computer sostituendo «localhost» con il nome o l’indirizzo IP del server.

Alla prima connessione sarà necessario creare un account amministratore indicando un nome utente, un indirizzo email e una password. Non ho ancora capito dove queste informazioni vadano a finire, ma se lo scoprissi sarebbe utile impostare, anche per il container dell’interfaccia web, un volume esterno all’immagine, in modo che questi account siano persistenti.

Come migliorare il software libero in Europa

Dal 6 gennaio al 3 febbraio 2026 la Commissione Europea raccoglie commenti, suggerimenti, opinioni, ricerche su come ridurre la dipendenza dell’unione europea sul fronte digitale tramite il software libero. Più in particolare:

  • facilitare l’adozione del software libero da privati cittadini, aziende private e pubbliche e incoraggiare le società a contribuire allo sviluppo del software libero;
  • dare una spinta allo sviluppo della competitività nei settori open source emergenti nell’unione europea;
  • rafforzare la posizione delle start-up nell’ecosistema dell’innovazione (che non ho ben capito cosa voglia dire).

Il testo originale, chiamato call for evidence, è qui. Il modulo per inviare i propri commenti è qui.

Sto cercando di raccogliere le idee su quest’argomento e avrei in effetti qualche suggerimento, che nei prossimi giorni proporrò alla Commissione. Cerco di trascriverle qui anche per raccogliere pareri.

La prima cosa che mi viene da dire è che mi piacerebbe che il software libero fosse sviluppato parallelamente ad una generalizzata disaffezione rispetto ai grandi colossi di Internet. Intendo dire che vorrei che in Europa (ma anche altrove) non ci fosse l’accentramento di troppo potere legato alla sfera del digitale, come ad esempio succede con le grosse società della sigla GAFAM. Non so dire se software libero e, ad esempio, decentralizzazione, siano legati, sicché qui dico solo che vorrei che andassero a braccetto. Poi magari scopriremo che la cosa è automatica, chissà.

Quindi per aumentare lo sviluppo del software libero non vorrei che ci fossero strumenti come github gestiti però da una azienda europea. Vorrei invece che ci fossero strumenti analoghi, realizzati esclusivamente con software libero, e forniti da tante diverse aziende private e/o pubbliche. Mentre ovviamente l’azienda privata che vuole raccogliere su di sè il massimo numero di clienti cerca di isolarli dalla concorrenza col meccanismo del lock-in, nel nostro caso immagino un ecosistema nel quale tutti si possano scambiare dati. Credo che qualcosa di simile stia nascendo ora con forgejo.it che offre il servizio basandosi sul software forgeio. Ci sono comunque già parecchie realtà dove si realizzano servizi, per utenti e per sviluppatori, interamente basati su software libero, come ad esempio framasoft in Francia.

Alla base della federazione tra i vari software/servizi ci potrebbe essere il protocollo ActivityPub, ormai abbastanza rodato e già ampiamente utilizzato da molti, ad esempio PeerTube (pubblicazione di video), Mastodon (microblogging), Forgejo (repository GIT), WordPress (blog), NextCloud (condivisione file ad altro), Friendica (social network), PixelFed (social basato su immagini), Mobilizon (gestione eventi) e appuntamenti), Ghost (siti web), BookWyrm (social di lettori) e flohmarkt (vendite e acquisti online). Ci sono dei limiti a questo protocollo, ad esempio attualmente non può sempre essere verificata l’età di un utente, quindi non è facile limitare l’accesso ai social ai minori di 14 anni (l’età può essere verificata, ma non è un controllo obbligatorio). Ciononostante è un buon protocollo e vorrei che fosse adottato e migliorato per le esigenze che possono emergere.

ActivityPub non è uno strumento per l’autenticazione, difatti internamente utilizza OAuth 2.0 per autenticare gli utenti, e un meccanismo diverso per autenticare le applicazioni; invece è un protocollo per inviare a, modificare in e cancellare contenuti da un server, nonché notifiche e contenuti da un sistema ad un altro. ActivityPub è attualmente sviluppato dal W3C, una organizzazione senza scopo di lucro basata nel Massachussets.

Una cosa molto importante è che non penso sia necessario sviluppare software da zero in Europa. Credo che sia invece molto importante condividere questi sviluppi con tutto il mondo. Se ad esempio ci fosse un progetto open source sviluppato in Giappone e gestito tramite gitLab, io vorrei che si partecipasse a quel progetto facendo in modo che tutti se ne avvantaggiassero. Magari gli europei contribuirebbero a funzionalità usate solo in questo continente, ma finché non ci fossero divergenze sullo sviluppo del progetto, manterrei lo sviluppo comune, magari con un mirror europeo del repository.

Ci sono alcune cose che mi piacerebbe vedere implementate in Europa, con software libero. Una di queste è alla base della rete Internet, cioè l’emissione e gestione di certificati SSL, come fa ad esempio Let’s Encrypt, che è di una organizzazione senza scopo di lucro basata in California e chiamata Internet Security Research Group.

Al di là dello scenario generico con varie piattaforme federate che offrono servizi diversi, credo sarebbe importante fare crescere qui in Europa alcuni servizi, che per me dovrebbero essere basati su software libero.

Visto che alla base di tutte o quasi tutte le applicazioni c’è uno strato di persistenza, credo che l’agevolazione dell’adozione del software libero sarebbe più semplice se ci fossero incentivi economici per le aziende che si equipaggiassero, in casa, con personale specifico per la gestione di database. Ad esempio, una società che acquista un sistema ERP o anche un piccolo gestionale, spesso può scegliere il database da usare. Come viene fatta la scelta? Ovviamente l’azienda vuole limitare i costi e quindi sceglie il database al costo minore delle licenze e del contratto di manutenzione. Sappiamo che il software libero non ha costi di licenza, ma ha la manutenzione. Questa però è offerta ancora da poche aziende e capita che abbia costi maggiori rispetto alla controparte con software proprietario. Una soluzione sarebbe quella di assumere come dipendente, oppure come consulente esterno, una persona o più persone ad un costo contenuto grazie all’incentivo. Oppure di formare personale nuovo o già esistente grazie a corsi di formazione a costo agevolato. Questo sarebbe aggiunto al piatto della bilancia, in favore della scelta del software libero. Con, indirettamente, l’aumento dell’occupazione e l’aumento della diffusione della conoscenza sui database liberi come ad esempio PostgreSQL, MariaDB.

Un altro fronte sul quale la Commissione potrebbe agire è quella degli incontri tra sviluppatori e tra utilizzatori. Questi incontri rafforzano le comunità, mettono in contatto persone, mostrano le novità. In alcuni casi sono organizzati direttamente da aziende, in altri invece c’è qualche volontario che lo fa, anche cercando sponsor aziendali. Non si tratta mai di eventi che richiedono budget enormi, e spesso i volontari si occupano di tutto, sicché quello servirebbe è un metodo per pubblicizzarli, il pagamento delle aule e magari anche di un servizio di trasmissione in rete, il rimborso delle spese per i relatori. Purtroppo su questo fronte siamo parecchio indietro, soprattutto in Italia: eventi come il pgDay mancano a tutti quelli che vi hanno partecipato. Altri, come il LinuxDay, potrebbero essere organizzati meglio.

Un ulteriore punto di vista è quello di spingere l’adozione del software libero partendo dall’alto: la Commissione potrebbe finanziare le nazioni, o le regioni o anche le singole municipalità in modo che le amministrazioni pubbliche adottino veramente il software libero. Questa non è una cosa semplice: in passato è successo, con grandi città europee (si veda qui un’esame a posteriori di come il comune di Monaco di Baviera abbia adottato il software libero dal 2006 al 2017 circa), che sia stato tentato l’abbandono dei prodotti di Microsoft Office, ma questo tentativo ha trovato molti detrattori sia tra chi era in una posizione dirigenziale sia tra i vari utenti, che sono normalmente contrari a qualsiasi cambiamento, finché, dopo qualche anno, la Microsoft ha proposto qualche accordo, tipo di dare le licenze gratis per due anni, e si è ripresa il comune. Il comune ha vantato il risparmio, anche se temporaneo, la Microsoft ci ha inizialmente rimesso un po’, e tutto è tornato come prima. Per evitare di cadere in questi pasticci la Commissione potrebbe far nascere dei centri di competenza con personale qualificato che conosce il software libero e il dominio dell’amministrazione pubblica, e questi centri dovrebbero agevolare l’adozione del software libero nelle amministrazioni pubbliche. (Esempi di strade abbandonate a Torino: la (prima?) decisione del comune di Torino di adottare il software libero nel 2017; la nota del CSI Piemonte del 2019 che decantava il software libero e lo dava per assodato e disponibile; una seconda decisione di adottare il software libero a Torino a novembre 2022).

Addendum del 18 gennaio 2026. Durante l’estate del e2025 la ministra danese alle politiche digitali, Caroline Stage, ha dichiarato di voler abbandonare Microsoft e i suoi prodotti per passare a equivalenti commerciali, a partire da LibreOffice e proseguendo con l’auspicio di sviluppare tutto l’occorrente sotto l’egida della comunità europea (vedi la notizia su massa-critica, il sole 24 ore, digital day, macitynet). Stesso discorso per la città di Lione, in Francia (vedi la notizia su the register, europa, il software, marco’s box). Oltre alle notizie iniziali, non ci sono informazioni successive che descrivano l’andamento delle transizioni proposte.

(Questa pagina non è ancora completa: sto raccogliendo ancora idee, ma accetto già commenti da tutti.)

Linuxday 2024 e la voglia di piccole realtà

Qualche giorno fa ho assistito al Linuxday di Torino e sono stato colpito dalla presentazione tenuta da Boris Budini e Redon Skikuli e intitolata «Rise against Big Tech with open source» (la cui presentazione è disponibile qui).
Hanno esposto quello che penso sia il frutto della loro esperienza a proposito di LibreLabs e di Cloud68.co. E questa esperienza è molto interessante: come riuscire a mettere su una infrastruttura gestita completamente da software libero, per l’hosting di applicazioni e servizi anch’essi liberi, senza mai ricorrere a nessuna delle grandi società come quelle conosciute con la sigla GAFAM.

Beh, ovviamente non potevano scendere in dettagli, anzi, non potevano neppure fare un riassunto a grandi linee, perché in un’ora si fa appena in tempo a scalfire la superficie di un argomento così vasto.

Ma la cosa importante è stata l’esortazione a fare qualcosa di simile un po’ ovunque. Loro hanno la base in Albania, ma ci sono servizi simili anche altrove. Ad esempio hanno citato chatons, in Francia.

Allora la domanda sorge spontanea: cosa c’è di simile in Italia?

Appunti per l’acquisto di un controller SATA (parte 1)

Appunti per l’acquisto di un controller SATA per espandere un vecchio computer DELL PowerEdge T20. Nella prima parte si vede l’argomento controller, nella seconda i dischi e il contenitore. Non sono pagine ben strutturate, sono solo degli appunti, quindi le informazioni vanno cercate un po’ in tutto il testo. Questa pagina è stata aggiornata con correzioni e nuove «scoperte».

Continua a leggere