speedtest.it
← Blog
AI - Artificial Intelligence

Il motore di inferenza EULLM: cosa fa davvero, spiegato semplice

EULLM Engine, motore di inferenza italiano: binario singolo, compatibile Ollama/OpenAI, gira su GPU o CPU anche su ARM economico. Cosa fa oggi, spiegato semplice.

Il motore di inferenza EULLM: cosa fa davvero, spiegato semplice

Quando si parla di intelligenza artificiale, si pensa quasi sempre a servizi come ChatGPT: si scrive un messaggio in un sito, un server lontano (spesso negli Stati Uniti) elabora la richiesta e risponde. EULLM Engine nasce per rompere questo schema — ed è, va detto con orgoglio, un motore di inferenza sviluppato in Italia da I3K. È un programma che fa girare modelli linguistici di grandi dimensioni (LLM) direttamente sul tuo computer, sul tuo server aziendale, o su hardware europeo — senza che una singola parola di quello che scrivi debba mai lasciare la tua macchina. Vediamo, punto per punto, cosa sa fare oggi, in modo concreto e senza promesse gonfiate.

Un unico programma, nessuna installazione complicata

EULLM Engine è un binario singolo. Non serve installare Python, non serve Docker, non servono librerie esterne da configurare a mano. Si scarica un file eseguibile (per Linux, macOS o Windows, sia su processori Intel/AMD che ARM) e si lancia. Questo è deliberato: l'obiettivo è che chiunque — un piccolo studio legale, un ospedale, un singolo sviluppatore — possa avere un motore AI locale senza dover assumere un team DevOps solo per farlo partire.

Compatibilità con Ollama, senza essere un fork

Uno dei punti di forza pratici è la compatibilità con le API di Ollama, il progetto open source più diffuso per far girare LLM in locale. Questo significa che qualsiasi applicazione, plugin o script già scritto per parlare con Ollama funziona con EULLM senza modifiche: cambia solo l'indirizzo a cui punta. In più, EULLM espone anche un'API compatibile con quella di OpenAI (/v1/chat/completions), quindi funziona pure con tutto ciò che è stato scritto pensando a ChatGPT. Non è un fork del codice di Ollama: è una implementazione scritta da zero in Italia, in Rust, pensata fin dall'inizio per l'auditabilità e la sovranità dei dati.

Chat integrata, pronta all'uso

Non serve nessun client esterno per iniziare a chattare con un modello. Quando lanci EULLM in modalità run, il motore apre automaticamente un'interfaccia di chat nel browser, su una porta dedicata. Se preferisci restare nel terminale, un flag (--cli) ti dà una classica interfaccia a riga di comando, comoda per chi lavora da SSH o su macchine senza interfaccia grafica. Se invece vuoi usare EULLM solo come motore, senza nessuna interfaccia (per esempio dentro un'applicazione tua), un altro flag (--no-ui) lo rende completamente headless.

C'è anche un selettore interattivo: se lanci il programma senza specificare nulla, ti propone di scegliere un modello già scaricato, uno dal catalogo, oppure di incollare un percorso o un URL personalizzato. Utile per chi non vuole imparare a memoria i comandi.

Navigazione web integrata

Una delle funzioni più interessanti, e che risponde direttamente a una domanda frequente ("posso far cercare informazioni online al modello?"), è il flag --web. Quando è attivo, se nel messaggio che scrivi è presente un URL, il motore lo scarica lato server, ne estrae il contenuto testuale e lo inserisce nel prompt prima di generare la risposta. In pratica il modello può "leggere" una pagina web che gli indichi, senza bisogno di plugin esterni o servizi terzi. È una funzione ancora giovane e va usata con consapevolezza (qualunque sistema che scarica contenuto da URL fornito dall'utente richiede attenzione lato sicurezza), ma è già utilizzabile e utile per riassumere articoli, documentazione tecnica o pagine di riferimento.

Gestione dei modelli: scaricare, cambiare, liberare memoria

EULLM tratta i modelli come "pacchetti" da gestire con comandi semplici:

  • pull — scarica un modello dal catalogo EULLM, da Hugging Face o da un URL diretto.
  • run — lo carica e lo esegue subito, in modalità interattiva.
  • serve — avvia il motore come server permanente (demone), che carica i modelli su richiesta: è la modalità pensata per un uso da "servizio" continuo, per esempio dietro un'applicazione aziendale.
  • list / show — elencano i modelli scaricati e ne mostrano i dettagli.
  • rm — rimuove un modello dal disco.
  • unload — libera la memoria video (VRAM) occupata da un modello senza dover riavviare tutto il server: comodo quando si vuole recuperare memoria per un altro processo senza interrompere il servizio.
  • import-ollama — se hai già modelli scaricati con Ollama, questo comando li migra dentro EULLM senza doverli riscaricare da capo, risparmiando tempo e banda.

Una funzione particolarmente utile per chi gestisce EULLM come servizio è il cambio modello "a caldo": basta indicare un modello diverso nel campo model di una richiesta HTTP, e il server lo carica al volo, senza bisogno di riavviare nulla. Questo rende EULLM adatto a scenari dove più applicazioni condividono lo stesso motore ma usano modelli diversi a seconda del compito.

Prestazioni: batching continuo e cache intelligente

Sotto il cofano, EULLM usa uno scheduler a batching continuo: se arrivano più richieste contemporaneamente, il motore le elabora insieme in modo efficiente invece di metterle in coda una dopo l'altra, sfruttando meglio la GPU o la CPU disponibile.

C'è poi un meccanismo di riutilizzo della cache (la cosiddetta KV cache) che, in conversazioni con più turni di scambio, riconosce quanto del contesto precedente è già stato "calcolato" ed evita di ricalcolarlo da zero ogni volta. Nei test su hardware reale questo porta a un riutilizzo vicino al 100% in conversazioni multi-turno, con un impatto diretto sulla velocità di risposta.

Per chi ha poca memoria disponibile, la cache KV può anche essere compressa (quantizzata) in diversi formati, per ridurre l'uso di RAM o VRAM a scapito di una piccola perdita di precisione — una scelta configurabile, non imposta.

Girare ovunque: GPU, CPU, hardware europeo

EULLM supporta diversi "motori di calcolo" sottostanti: schede NVIDIA (CUDA, la combinazione più testata e matura), Apple Silicon (Metal, validata dalla community), e — in fase di build da sorgente, non ancora distribuita come binario pronto — AMD (ROCm) e Vulkan per altre GPU.

Ma il punto forse più significativo per la missione di EULLM è che il motore gira bene anche solo su CPU, senza GPU dedicata. È stato dimostrato concretamente su una scheda Radxa Orion O6 (un SoC ARM CIX P1, senza GPU dedicata), facendo girare un modello MoE (mixture-of-experts) da 35 miliardi di parametri interamente su CPU, a una velocità di 9-11 token al secondo. È un dato che conta molto per la missione di sovranità digitale europea che EULLM — motore nato e sviluppato in Italia — porta avanti: non serve hardware costoso o import da fuori Europa per avere un'IA locale utilizzabile.

Per i modelli di tipo MoE, esiste anche un'opzione (--cpu-moe / --n-cpu-moe) che tiene gli "esperti" del modello in RAM di sistema mentre il resto (attenzione, cache) resta in GPU — un compromesso intelligente per far girare modelli enormi su GPU con poca memoria video, e che funziona con qualsiasi backend GPU, non solo CUDA.

Sicurezza e trasparenza di base

Per default, EULLM ascolta solo su localhost e applica una lista di IP consentiti anche se configurato per essere raggiungibile dall'esterno — una protezione di base contro l'esposizione accidentale del servizio in rete.

Il motore mantiene inoltre un registro di controllo (audit trail) locale in formato JSONL: per ogni richiesta annota modello usato, tipo di richiesta, numero di token, durata e timestamp. Importante: registra solo metadati, mai il contenuto di prompt o risposte, e questo file resta sulla macchina — non viene mai inviato a nessun server esterno. È pensato per chi deve rispettare obblighi di tracciabilità (per esempio in ottica AI Act) senza rinunciare alla riservatezza dei contenuti.

Multimodalità (in fase sperimentale)

Chi compila EULLM con il flag opzionale multimodal ottiene anche il supporto per input immagine (e, in prospettiva, audio), tramite un flag --image da riga di comando o il campo images nell'API di chat. È una funzionalità ancora giovane (MVP), pensata per chi vuole sperimentare fin da ora modelli capaci di "vedere", ma non è (ancora) parte del binario standard.

Cosa NON fa ancora, detto onestamente

Per completezza, e per non promettere più di quanto EULLM offra oggi: non ha ancora il tool-calling stile OpenAI, non ha ancora schema JSON strutturati completi (response_format: json_schema), non fa ancora decoding speculativo, non serve ancora embedding o reranking in-process, e non gestisce ancora adapter LoRA a runtime. Sono tutte funzionalità nella roadmap, non nel motore di oggi — ed è giusto dirlo chiaramente piuttosto che vendere qualcosa che non c'è ancora.

In sintesi

EULLM Engine è, oggi, un motore di inferenza compatto progettato e sviluppato in Italia, compatibile con gli standard più diffusi (Ollama e OpenAI), capace di far girare modelli linguistici sia su GPU che su semplice CPU — anche su hardware ARM economico — con una chat integrata pronta all'uso, la possibilità di far leggere pagine web al modello, gestione flessibile dei modelli, e un occhio di riguardo per la sicurezza e la tracciabilità locale. Tutto questo restando un singolo binario, senza dipendenze nascoste e senza che un solo byte dei tuoi dati debba mai uscire dalla tua macchina: un'alternativa concreta, europea e italiana, ai motori di inferenza a stelle e strisce.


← Tutti gli articoli