Come usare Ollama per installare LLM in locale, anche come container Docker
Indice dell'articolo
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.