Da quando l’Intelligenza Artificiale generativa ha fatto il suo prepotente ingresso nel mondo del business e dell’impresa, in molti stanno cercando di comprenderla per poterla integrare nei propri servizi e processi produttivi. Una delle grandi sfide resta quella di poterla utilizzare non solo “a distanza” mediante i servizi cloud offerti dai grandi provider, ma anche con proprie installazioni in locale. Il vantaggio di tutto ciò consisterebbe nel guadagnare un controllo totale sull’intero processo,  poterla applicare ai propri dati mantenendone la riservatezza e integrarla nei flussi di lavoro aziendali.

Sia i cloud provider che i vendor di hardware hanno soluzioni ottimizzate e validate per impiegare modelli linguistici in modo semplice, affidabile e scalabile. Tutte caratteristiche necessarie per un sistema di produzione. Molte aziende sono però ancora in una fase precedente, in cui hanno bisogno di sperimentare e avviare progetti pilota. Oppure vogliono attivare modelli da usare solo internamente, da pochi dipendenti.

Per sperimentazione, o per utilizzare un LLM su un PC o piccolo server, Ollama è la soluzione che si sta facendo più strada di recente per installare e usare velocemente i principali large language model open source. Vedremo in questo articolo che cosa è Ollama, come si può installare su Windows, Linux o macOS, e in particolare come farlo sfruttando Docker, che permette di evitare laboriose configurazioni che possono anche compromettere la stabilità del sistema.

Ollama è un tool open source che si pone l’obiettivo principale di eseguire in locale gli LLM (Large Language Model) a cui si è interessati. Ciò non solo garantisce la maggiore riservatezza dei dati e un controllo totale del processo, senza costi di licenza.

Scaricare e installare Ollama su Windows, Linux e Mac

Ollama è un sistema disponibile e versatile, in quanto può essere installato in tutti maggiori sistemi operativi in pochi click. Dalla pagina dei Download infatti accediamo ad una semplice “pulsantiera” in cui con un solo click è possibile lo scaricamento del pacchetto migliore per la propria macchina. Per i sistemi di casa Apple, si potrà scaricare un pacchetto per l’installazione su dispositivi con sistema macOS 11 Big Sur o successivi.

Per i sistemi Linux, viene consigliato di ricorrere al comando:

curl -fsSL https://ollama.com/install.sh | sh

dove con curl si procede al download dello script install.sh che, successivamente, viene eseguito con il comando sh.

Per Windows, esiste una versione da scaricare su sistemi Windows 10 o successivi.

Una volta messo a disposizione il prodotto potremo accedere ad una serie di modelli, elencati alla pagina Models in cui si potrà scegliere quale “forma di intelligenza” integrare.

Non appena si apre questa pagina ci si trova in un elenco di modelli tra cui svettano tutti quelli maggiormente considerati per un impiego locale. Si parte da llama2, prodotto di Meta, per passare a gemma, nuova creazione di Google, mistral, code llama o orca mini, solo per citarne qualcuno.

Noi sperimenteremo Llama ma non procederemo all’installazione di Ollama direttamente bensì sfrutteremo la sua immagine Docker.

Ollama come container Docker

Il vantaggio delle immagini Docker è che possono essere messe in esecuzione senza una reale installazione nel proprio sistema, quindi senza comprometterne la stabilità. È un sistema fondamentale nella produzione informatica odierna per garantire la scalabilità di un’applicazione, ma soprattutto può esserlo per la sperimentazione e l’approccio di soluzioni in maniera del tutto rapida ed efficace, come in questo caso può essere con Ollama.

L’immagine per container Ollama è disponibile da fine 2023 e può essere avviata in due versioni: solo CPU o con GPU. Tale distinzione è fondamentale in quanto sappiamo che la GPU, per l’Intelligenza Artificiale, è un aiuto indispensabile che in fase di produzione e di test “seri” non dovrebbe mai essere omessa. Tuttavia, per la sperimentazione o il primo approccio può essere  temporaneamente bypassata soprattutto per permettere l’avvio su hardware a ridotte potenzialità.

Ollama in versione CPU-only consiste nel semplice avvio del container con la direttiva indicata dalla documentazione ufficiale:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

in cui il comando di esecuzione di immagini, docker run, attiva l’immagine ollama/ollama (ultimo termine) eseguendo il tutto in background (opzione -d), agganciando un volume (opzione -v), assegnando un nome al container (opzione --name, il cui valore – qui impostato a ollama – può essere personalizzato) ed eseguendo infine il port-forwarding sulla porta 11434 (opzione -p).

L’avvio della versione GPU-based, deve essere preceduta dall’installazione dell’NVIDIA toolkit per container e poi avviata con un comando docker run molto simile al precedente:

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

ad eccezione dell’opzione --gpus=all che mette al lavoro proprio le GPU.

Ollama al lavoro

Come sperimentazione pratica, andiamo ad eseguire subito Llama 2, LLM di Meta, ed uno dei più amati e sperimentati del momento. Indipendentemente, da quale sia la modalità di installazione di Ollama che si è seguita (noi stiamo facendo uso, ricordiamo, di quella a container con Docker) l’avvio di un modello su tale sistema si persegue con l’utilizzo del comando ollama run seguita dall’identificativo del modello. Ad esempio, per Llama 2, si tratterebbe di ollama run llama2.

Visto che nel nostro caso stiamo utilizzando Docker, dobbiamo eseguire tale comando all’interno del container.

Per verificare che il docker run del paragrafo precedente abbia effettivamente avviato il container e che questo sia correttamente al lavoro possiamo eseguire la seguente interrogazione:

$ docker ps
CONTAINER ID   IMAGE           COMMAND               CREATED         STATUS         PORTS                      NAMES
af6eec15f714   ollama/ollama   "/bin/ollama serve"   8 minutes ago   Up 8 minutes   0.0.0.0:11434->11434/tcp   ollama

il cui output mostra effettivamente che tutto sta funzionando.

L’esecuzione del nostro ollama run llama2 deve essere eseguita dall’interno del container ma, volendo, lo si può fare senza effettuarvi accesso inviando la direttiva da un prompt del sistema che abbiamo usato come host (quello in cui c’è installato Docker per intenderci) con:

docker exec -it ollama ollama run llama2

infatti docker exec è proprio il comando che serve ad eseguire qualcosa all’interno di un container interagendovi dall’esterno grazie alla direttiva -it (il valore ollama che la segue è il nome del container che abbiamo avviato con docker run: in caso di scelte differenti, lo si adatti anche qui).

Al primo avvio del modello, viene eseguito un pull ovvero un’operazione di recupero dal repository centrale e, al momento in cui si scrive, la quantità di dati da scaricare corrisponde a 3,8 GB.

Al termine delle operazioni di pulling, vedremo apparire un prompt, identificato dai simboli >>>, e quello sarà il segno che Llama2 ci sta aspettando per soddisfare le nostre curiosità. Quella che segue è la nostra interazione di esempio il cui output è stato accorciato semplicemente per motivi di comodità di lettura:

>>> what are the most famous Italian singers in the world?
There are several famous Italian singers around the world, but some of the most well-known and 
successful include:

1. Andrea Bocelli - With over 90 million records sold worldwide, Bocelli is one of the most 
successful classical crossover artists of all time. He has collaborated with many famous artists, 
including Sarah Brightman, and has performed at various high-profile events, such as the Olympics 
and the World Cup.
2. Luciano Pavarotti - Known for his powerful voice ...

Inoltre, nel prompt di Llama 2, possiamo attivare comandi come ci spiega l’aiuto in linea:


>>> /?
Available Commands:
  /set            Set session variables
  /show           Show model information
  /load    Load a session or model
  /save    Save your current session
  /bye            Exit
  /?, /help       Help for a command
  /? shortcuts    Help for keyboard shortcuts

per la richiesta di  informazioni che illustra la versione dell’LLM e numero di parametri:


>>> /show info
Model details:
Family              llama
Parameter Size      7B
Quantization Level  Q4_0

o la gestione di sessioni (salvataggio e caricamento).

Con il comando /bye inoltre usciremo dall’interazione con il modello e al contempo, visto che questo canale è stato creato da docker exec, torneremo al prompt del sistema operativo host.

Si comincia

Quanto abbiamo visto non è altro che l’inizio della nostra vita con Ollama. Ispirati dalla sua praticità e disponibilità di modelli, potremo dare il via alle sperimentazioni. L’obiettivo da tenere saldo rimarrà comunque l’integrazione di LLM in sistemi locali soprattutto per ottenere maggiore sicurezza dei dati e risparmi in termini economici. La chiave sarà tuttavia l’hardware di cui disporremo che dovrà vedere possibilmente l’impiego di macchine dotate di GPU.