AI og Large Language Model (LLM) er utvilsomt de største buzzwordene i bransjen vår de siste par årene. Det skjer ekstremt mye satsning her, og da spesielt fra de som ønsker å tilby deg og meg en lukket tjeneste på skyen som du betaler for månedlig.

Det finnes en alternativ leir til disse tjenestene, og det er lokal LLM. La oss ta en titt dit.

Først, la oss skille på to ting

  • LLM-verktøy er programvare som laster modeller og betjener brukere (deg).
  • LLM-modell er kun data. Det finnes en skokk av modeller der ute.

Det finnes mange LLM-verktøy. Ollama er open source, voldsomt i vinden og funker bra så vi tar for oss denne. Kan nevne at jan.ai er glimrende også. Jan.ai ligger også på github slik vi liker det.

Vi tar for oss en høyprofilert modell fra Meta; llama3.1 heter den. Du bruker en modell av gangen i verktøyet ditt.

Vi skal kjøre Ollama med Llama 3.1 nå altså.

Installasjon

Ollama har mange installasjonsmuligheter. Du får det i alle pakkesystemer (brew, snap etc), direkte nedlasting på ollama.com, eller i container.

La oss bruke container. Det er ryddigst synes jeg.

$ mkdir ${HOME}/.ollama-workdir

$ docker run --rm -v ${HOME}/.ollama-workdir:/root/.ollama  -p 11434:11434  --name ollama ollama/ollama 

Denne kommandoen er optimistisk og funker ikke ut av boksen på alle maskiner. Den fungerer fint på en moderne Mac (v/Apple Silicone) med litt RAM. På Mac deler GPU og CPU RAM-en, som gjør det idéelt til LLM. På min maskin med Linux må jeg gi eksplistt GPU-tilgang for å få levelig ytelse --device nvidia.com/gpu=all

~/.ollama-workdir/ er dit modellene lagres. Erfaringsmessig så laster en ned mange modeller mens en leker med dette. De tar opp mye plass og det flyr raskt titalls med gigabytes på en god kveld. Da er det fint å bare slette hele workdir-en hvis en vil rydde og starte på nytt uten å slette docker imaget.

Første test

Nå har du en ollama server kjørende med API åpent lokalt på port 11434. Men, du kan snike deg inn på containeren din og starte et shell rett mot serveren.

PS! Hvis du har litt knepen internettlinje, så last ned f.eks tinyllama i stedet for llama3.1

docker exec -it ollama ollama run llama3.1 

Hvis det gikk bra så lastet den ned modellen og kjørte et shell.

$ docker exec -it ollama ollama run llama3.1
>>> how are you
I'm just a language model, I don't have feelings or emotions like humans do, but I'm functioning properly and ready to help with any questions or tasks
you may have. How can I assist you today?

>>> Send a message (/? for help)

Hvis det ikke gikk på din maskin så kan det være pga for lite minne - nok en gang prøv tinyllama i stedet for llama 3.1.

docker exec -it ollama ollama run tinyllama 

Du kan kalle mot API-et på porten vi spesifiserte i docker-kommandoen. Mot Ollama API-et finnes det masse GUI-er, kommandolinjeverktøy, plugins til IDE-er og editorer. Du trenger ikke sitte i shell.

Så kjør denne:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.1",
  "prompt": "How many people live on the moon?",
  "stream": false
  }'

Inni JSON-en finner du:

...
"response":"There are no people living on the Moon
...
 

Hva nå?

Det er ikke 2022 lengre. Vi blir ikke lengre imponert over en chatbot, selv om den høres helt menneskelig ut. Dette holder ikke. Det må være noe mere her.

Ja, selv eksperimenterer jeg med å bruke den lokale LLM-en som en kodeassistant sammen med IDE-et. Jeg tester Continue Plugin i IntelliJ for tiden. Det finnes godt utvalg i plugins for de fleste IDE-er og editorer.

I tillegg er det spennende med ‘tools’-støtte i LLM. Kort fortalt så kan LLM-en kjøre (Python) kode du har skrevet. Det kan komme en oppfølger-post om dette.