E' utile aprire una digressione sulla possibilità di utilizzare Ollama soprattutto in congiunzione con Colab. Ollama è particolarmente semplice da avere a disposizione in quanto veloce da installare e disponibile per Docker. Tuttavia se vogliamo completare un ambiente di lavoro in Colab potrebbe essere utile avviare anche questo strumento all'interno di un notebook. In realtà, la connessione tra i due ambienti potrebbe essere effettuata in tanti modi impostando diversamente macchine virtuali (in Cloud e non), runtime e ambienti di sviluppo. Tutto sommato, però, quello che stiamo per vedere in questa lezione potrebbe essere particolarmente comodo.
Ollama: una panoramica di utilizzo
Ollama utilizza i suoi LLM come immagini scaricabili da repository. Per ognuno di questi sono individuabili versioni caratterizzate da un certo numero di parametri e di conseguenza da dimensioni diverse. Tutto viene attuato usando il comando ollama
- disponibile dopo l'installazione - tramite il quale eseguire un'operazione mediante un sottocomando. Ecco un tipico flusso di lavoro in Ollama:
- avviamo il server di Ollama con
ollama serve
(tale servizio dovrà rimanere in esecuzione). Tramite variabili d'ambiente specifichiamo parametri che comunicheranno gli IP di ascolto e la porta TCP (tipicamente la 11434) visto che con Ollama si interagirà in rete; - scarichiamo l'immagine dell'LLM cui siamo interessati, ad esempio con
ollama pull gemma2:2b
richiederemo di predisporre in locale un modello Gemma 2 (di Google) di 2 miliardi di parametri della dimensione di 1,6 GB; - verifichiamo l'avvenuto scaricamento con
ollama list
; - interagiamo con il modello con
ollama run
o in un'altra delle modalità previste ; - eventualmente cancelliamo un LLM scaricato con
ollama rm [nome dell'LLM]
.
Esistono alcuni altri comandi ma diciamo che possiamo accontentarci per il momento.
Da adesso in poi, si potrà interagire con Ollama via rete sfruttando librerie di linguaggi di programmazione (impareremo a farlo insieme), tramite il comando ollama run
per l'interazione diretta con un modello o mediante un client di rete come curl
, sempre ottimo per il testing.
Adesso dobbiamo vedere come poter integrare tali operazioni, di carattere sistemistico potremmo dire, in un tool come Colab che sembra predisposto soprattutto per l'interazione con linguaggi di programmazione (Python e R in primis) e scrittura di testo in MarkDown.
Integrare Ollama in Colab
Prima di vedere i passaggi, ricapitoliamo alcuni aspetti di un notebook:
- in un notebook possiamo invocare comandi Linux anteponendo un punto esclamativo. Ad esempio, con
!ls
il notebook saprà chels
non è una direttiva di un linguaggio di programmazione ma un comando di sistema; - possiamo richiedere la pulizia dell'output mediante la funzione
clear_output
di IPython cosa che sarà molto utile in quanto le operazioni che vedremo genereranno molto testo in output.from IPython.display import clear_output clear_output()
Questo sarà utile, come possiamo immaginare, per le operazioni di installazione e scaricamento di modelli non per quelle in cui dovremo leggere dei risultati;
- il runtime può disporre di una GPU la cui attivazione verrà data per assodata nel prosieguo della trattazione.
Per sperimentare Ollama in un notebook si possono seguire vari approcci ma tutti si risolveranno in una serie di passaggi di cui alcuni in linguaggio Python, altri come comandi Linux.
Per prima cosa, procediamo all'installazione di Ollama ed i tool necessari per la gestione della GPU:
!sudo apt-get install -y pciutils
!curl -fsSL https://ollama.com/install.sh | sh
from IPython.display import clear_output
clear_output()
Successivamente, passiamo ad attivare il server Ollama con un processo in background in modo che la cella non resti in stallo impedendo l'esecuzione delle successive:
from IPython.display import clear_output
%env OLLAMA_HOST=0.0.0.0:11434
%env OLLAMA_ORIGINS=*
import subprocess
subprocess.Popen(["ollama", "serve"])
clear_output()
Ora che Ollama è pronto procediamo a scaricare un modello, scegliamo ad esempio Gemma 2 a 2 miliardi di parametri:
!ollama pull gemma2:2b
clear_output()
e controlliamo che il modello sia disponibile alla fine del download:
!ollama list
ottenendo in output:
NAME ID SIZE MODIFIED
gemma2:2b 8ccf136fdd52 1.6 GB 32 seconds ago
Proviamo l'ambiente creato interrogando il modello con curl
(usando dei backslash per gestire la prosecuzione del comando su più righe):
!curl http://localhost:11434/api/generate -d \
'{ \
"model": "gemma2:2b", \
"prompt": "Who was the most famous Italian singer?", \
"stream": false \
}'
ed in pochi istanti avremo la risposta powered by Gemma 2, in formato JSON ma qui abbreviata per motivi di leggibilità:
{"model":"gemma2:2b",...,"response":"It's impossible to definitively say who is THE MOST famous Italian singer of all time.
Fame is subjective and depends on various factors like era, genre, and global reach. \n\nHowever, some strong contenders for
\"most famous\" include: \n\n* **Domenico Modugno:** Known for \"Volare,\" a song that became an international hit in the
1950s, bridging cultures through its universal message of longing.\n* **Lucio Dalla:** Considered one of the most iconic
and influential Italian singers-songwriters, known for his poetic lyrics and unique style. \n* **Mina:** A legendary
singer with a career spanning decades, Mina's influence on popular music in Italy is undeniable. \n* **Domenico Modugno:**
Known for \"Volare,\" which became an international hit in the 1950s. \n\nUltimately, deciding who is \"most famous\"
depends on your criteria. Are we talking about global recognition, record sales, cultural impact, or longevity? \n\n\n
Do you have a specific time period, genre, or criteria in mind? This might help narrow down the list for a more accurate
answer! \n","done":true,...}
Starà a noi ora leggere la risposta e giudicare quanto questa possa risultare confacente alle nostre esigenze. Interessante notare come si possa interrogare Ollama mediante API il che lo predispone già così ad un pratico uso mediante qualsiasi linguaggio di programmazione in grado di interagire in Rete. Noi tuttavia conosceremo strumenti appositi molto validi, offerti dalla libreria LangChain, che impareremo ad apprezzare dalla prossima lezione.