Bruker du Ollama og har irritert deg over den tragisk dårlige norsken som kommer ut av en ellers fantastisk Llama 3.1 8b-modell? Visste du at det finnes språkmodeller som er trent på norsk ved UiO og med hjelp av Nasjonalbiblioteket? Det er enkelt å benytte disse modellene med Ollama, men det er ikke åpenbart ut fra dokumentasjonen hvordan man skal gjøre det, så jeg har laget en kort oppskrift.
At this point, I guess I should point out the obvious: this post is aimed at Norwegians. The post is about NorMistral instruct, a fine-tuned Mistral model re-trained on Norwegian datasets, and how to get it to work in Ollama.
I denne artikkelen skal jeg demonstrere hvordan du kan tilpasse NorMistral-7b-warm-instruct
til å kjøre på Ollama. Det hele koker ned til å lage en modellfil og laste modellen inn i den lokale "modellkatalogen" til din Ollama-server.
Den minste modellen krever ca. 4,5GB for å laste inn, og da helst VRAM. Dette er med standard kontekststørrelse i Ollama som er på 2048 tokens. Hvis du øker kontekstlengden vil du oppleve at modellen krever mer minneplass.
Jeg bruker selv et NVIDIA-kort på en dedikert server for å kjøre ulike modeller og har laget en veileder for å sette opp NVIDIA-drivere i Proxmox. Men du trenger ikke spesifikt et Nvidia-kort, og du trenger ikke Proxmox. Ollama støtter til og med CPU-basert inferens (å kjøre uten grafikkort), men det vil gå betydelig langsommere. Så lenge du har installert riktige drivere til ditt grafikkort og installerer Ollama rett på serveren, skal Ollama detektere og informere deg om den har funnet en kompatibel GPU.
Hvis du har havnet her og ikke helt vet hva Ollama er, så er en kort oppsummering på sin plass. Ollama er en serverløsning som standardiserer måten du kommuniserer med AI-modeller gjennom et eget API. Dette gjør det enkelt å eksperimentere med mange ulike modeller.
Det finnes flere alternativer til Ollama, som Oobabooga, LocalAI, og llama.cpp sin server-implementasjon, men jeg har funnet at Ollama er enklest for "casual" utprøving av modeller. Når det i tillegg fungerer svært godt integrert med Home Assistant (smarthus), så ble det mitt "go-to" valg for kjøring av AI-modeller på privaten.
Ollama tilbyr:
Installasjon av Ollama er superenkelt - det er en oneliner på Linux:
curl -fsSL https://ollama.com/install.sh | sh
Har du et annet OS finner du installasjonsveiledning her.
Hvis du trenger å nå Ollama sitt API fra en annen maskin enn den du installerte det på, må du åpne eventuelle brannmurer på PC/serveren din og få Ollama til å lytte på nettverksinterfacet ditt. Det siste gjør du enkelt ved å kjøre følgende kommandoer:
sudo systemctl edit ollama
Dette vil åpne en editor, hvor du må legge inn følgende tekst (på rett sted hvis det er en mal som åpner):
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Nå kan du kjøre to kommandoer for å laste inn ny konfigurasjon og restarte Ollama:
sudo systemctl daemon-reload
sudo systemctl restart ollama
Husk at når du eksponerer Ollama på denne måten, er det viktig å sikre at ikke uvedkommende får tilgang til APIet. Dette kan du gjøre ved å konfigurere en brannmur eller ved å sette opp autentisering foran APIet.
Nå som du har Ollama installert kan vi installere en norsk språkmodell. Jeg har valgt å bruke NoraLLM Normistral som er basert på en instruction-tuned Mistral 7b-modell.
Logoen NoraLLM bruker på hjemmesiden og Hugging Face.
Når vi kjører språkmodeller i Ollama bruker vi en kvantisert modell. Kvantisering kan sammenlignes med en "lossy" komprimering av en original modell som gjør det enklere å kjøre den med mindre minne. I komprimeringen mister man noe presisjon og evnen til å parallellisere forespørsler til modellen, men til hjemmebruk er dette egentlig den eneste praktiske løsningen.
Et annet viktig poeng, er at vi installerer en instruction-tuned modell. Hvis modellen ikke er instruction-tuned kan du prompte den så mye du vil. Poenget med instruction tuning er at man skal kunne be modellen om å svare på spesifikke oppgaver. Hvis du prøver å kjøre en basemodell, i stedet for en instruction modell, vil du oppleve at den ikke svarer spesifikt på det du har bedt om, men bare genererer tekst den tror passer til å komplettere det du allerede har sagt.
Vi starter derfor med å laste ned en komprimert instruction tuned modell, og vi laster den ned til en egen mappe for å holde orden:
mkdir norallm
cd norallm
wget https://huggingface.co/norallm/normistral-7b-warm-instruct/resolve/main/normistral-7b-warm-instruct.Q3_K_M.gguf
Merk at denne modellen bruker Q3_K_M kvantiseringsformatet, som gir en god balanse mellom modellstørrelse og kvalitet. Andre kvantiseringsformater som er tilgjengelige inkluderer Q4_K_M, Q5_K_M og Q8_0, der høyere tall generelt gir bedre resultater men krever mer minne.
Nå må vi fortelle Ollama hvordan den kan nyttiggjøre seg av denne modellen. Blant annet må vi angi hvordan Ollama skal kommunisere med modellen og hvilke parametere vi skal kjøre modellen med. Dette gjøres i en modellfil:
vi Modelfile
Legg inn følgende innhold:
FROM normistral-7b-warm-instruct.Q3_K_M.gguf
# SYSTEM prompt for å hjelpe modellen med å forstå sin rolle
SYSTEM """
Du er en hjelpsom assistent som beskriver personer på bilder. Din oppgave er
å gi korte og presise beskrivelser på norsk basert på bildedetaljene du får.
"""
# Modellparametere som passer ditt use case
PARAMETER temperature 0.3
PARAMETER top_k 64
PARAMETER top_p 0.9
PARAMETER repeat_penalty 1.0
# Templating for at Ollama skal følge det påkrevde ChatML-formatet
TEMPLATE """
<|im_start|> user
{{ .Prompt }}<|im_end|>
<|im_start|> assistant
{{ .Response }}<|im_end|>
"""
Det vi gjør her er å:
Nå som vi har både en modell og en modellfil, kan vi "installere" modellen i den lokale modellkatalogen til vår Ollama-server.
Kjør følgende kommando fra modellkatalogen:
ollama create norallm -f ./Modelfile
Dette vil laste opp modellfilen og den tilhørende GGUF-filen til Ollama. Prosessen kan ta litt tid avhengig av størrelsen på modellen.
Når kommandoen er fullført, kan vi bruke "norallm" som modellnavn i Ollama. Du kan selv velge modellnavn, og hvis du vil ha flere varianter, kan du lage flere modellfiler med ulike konfigurasjoner. For eksempel kan du eksperimentere med:
For å øke konteksten kan man legge følgende til modellfilen, sammen med øvrige parametere:
PARAMETER num_ctx 4096
Modellen vil kreve mer minne for å kjøre, men kan da huske mer data eller være kapabel til å svare på større spørsmål. Husk derimot at en såpass liten modell (7b) fort blir forvirret av mye tekst, så i praksis er det ikke sikkert du tjener så mye på å øke kontekstlengden.
For å teste modellen din kan du kjøre:
ollama run norallm
Dette starter en interaktiv sesjon hvor du kan stille spørsmål til modellen på norsk. Du kan avslutte sesjonen ved å skrive /exit
eller trykke Ctrl+D.
Hvis du vil bruke modellen programmatisk, kan du benytte Ollama sitt API. For eksempel kan du sende en forespørsel med curl:
curl -X POST http://localhost:11434/api/generate -d '{
"model": "norallm",
"prompt": "Fortell meg om Norge"
}'
For chat-baserte interaksjoner kan du bruke /api/chat
:
curl -X POST http://localhost:11434/api/chat -d '{
"model": "norallm",
"messages": [
{ "role": "user", "content": "Hva er hovedstaden i Norge?" }
]
}'
Her er noen nyttige kommandoer for å administrere dine Ollama-modeller:
# Liste alle installerte modeller
ollama list
# Liste alle kjørende modeller og deres minnebruk
ollama ps
# Stoppe en kjørende modell
ollama stop norallm
# Slette en modell du ikke lenger trenger
ollama rm norallm
# Få hjelp om tilgjengelige kommandoer
ollama --help
Den norske språkmodellen Normistral er spesielt nyttig for:
Jeg har prøvd å bruke denne modellen til å styre Home Assistant, men det gav ikke spesielt gode resultater. For slike formål kan det være bedre å bruke en modell som er spesifikt trent for kommandoer og kontroll av enheter. Llama3.1 8b fungerer utmerket til det!
Med en norsk språkmodell i Ollama får du tilgang til en AI-assistent som forstår og kommuniserer godt på norsk. Dette er særlig nyttig hvis du jobber med norsk tekst eller ønsker å få svar på norsk. Håper du får gode resultater med å bruke en norsk LLM!