Ollama: instalacija na Linux serveru od nule

Do sada je sve bila priprema: računica memorije, drajveri, kvantizacija. Ovim tekstom se prvi put pokreće model.

Ollama je najbrži put do toga. Jedna komanda instalira servis, druga preuzima model, treća otvara razgovor. Sve ostalo — systemd, mrežni pristup, Docker, produkciona inferencija — nadogradnja je na ovo.

Šta Ollama zapravo jeste

Iz ugla administratora, Ollama je HTTP servis koji sluša na portu 11434 i ima klijent u terminalu. Ispod haube koristi llama.cpp, ali od tebe krije kompajliranje, izbor slojeva za karticu i sklapanje prompta u format koji model očekuje.

Preuzima na sebe Ostaje tvoj posao
Preuzimanje i čuvanje modela Drajveri i hardver
Raspoređivanje slojeva na karticu Izbor modela koji staje u memoriju
Format prompta po modelu Mrežni pristup i zaštita
HTTP API, uključujući OpenAI-kompatibilan Nadzor i kapacitet

Ollama je namenjena postavci sa jednim ili nekoliko korisnika. Kada ti treba desetine paralelnih zahteva, prelazi se na vLLM, o čemu ima poseban tekst. Za sve ostalo je Ollama sasvim dovoljna i ostaje najjednostavnije rešenje.

Pre instalacije

Dve provere. Prva — da li kartica radi, o čemu detaljno govori tekst o drajverima:

$ nvidia-smi
$ lsmod | grep nvidia_uvm

Ako nvidia_uvm nedostaje, Ollama će se instalirati bez problema i tiho raditi na procesoru. Nikakvu grešku nećeš videti — samo brzinu od nekoliko tokena u sekundi.

Druga provera je prostor na disku. Modeli su veliki i nagomilavaju se brže nego što očekuješ:

$ df -h /usr/share

Za početak računaj bar pedeset gigabajta. Ako je taj particija tesna, u odeljku o smeštanju modela stoji kako se putanja menja.

Instalacija

Zvaničan način je skripta:

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

Skripta radi četiri stvari: preuzima binarni fajl u /usr/local/bin/ollama, pravi sistemskog korisnika ollama, postavlja systemd jedinicu i pokreće je. Prepoznaje i NVIDIA i AMD kartice i sama povlači odgovarajuće biblioteke.

Ako ti pravilo firme ne dozvoljava izvršavanje skripte sa interneta — a to je razumno pravilo — prvo je pročitaj:

$ curl -fsSL https://ollama.com/install.sh -o install.sh
$ less install.sh
$ sh install.sh

Ručna instalacija

Bez skripte, sa arhivom:

$ curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama.tgz
$ sudo tar -C /usr -xzf ollama.tgz

Ovo postavlja samo binarni fajl. Korisnika i servis praviš sam:

$ sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama

Kompletna systemd jedinica sa svim podešavanjima je tema sledećeg teksta. Za sada je dovoljno da servis radi.

Provera

$ ollama --version
ollama version is 0.12.3
$ systemctl status ollama
● ollama.service - Ollama Service
     Loaded: loaded (/etc/systemd/system/ollama.service; enabled)
     Active: active (running) since Sat 2026-08-22 14:03:11 CEST

Da servis stvarno odgovara:

$ curl http://localhost:11434
Ollama is running

Ako ovde nema odgovora, pogledaj logove — komanda je ista kao za svaki drugi servis, kako pokazuje tekst o journalctl:

$ sudo journalctl -u ollama -n 50 --no-pager

Prvi model

Preuzimanje:

$ ollama pull qwen3:8b
pulling manifest
pulling 3a1b8c9d2e4f... 100%  ▕████████████▏ 4.9 GB
verifying sha256 digest
writing manifest
success

Razgovor u terminalu:

$ ollama run qwen3:8b
>>> Kako da vidim koji procesi najviše troše memoriju?
Koristi komandu ps sa sortiranjem:

    ps aux --sort=-%mem | head -10

>>> /bye

Komanda run preuzima model ako ga nema, pa možeš i preskočiti pull. Korisne komande unutar razgovora: /bye izlaz, /clear pražnjenje konteksta, /? spisak svih.

Jedno pitanje bez ulaska u razgovor:

$ ollama run qwen3:8b "Objasni šta radi komanda umask u jednoj rečenici"

Ovaj oblik čita i sa standardnog ulaza, što je osnova za sve kasnije skripte:

$ journalctl -p err -n 30 --no-pager | ollama run qwen3:8b "Sažmi ove greške"

Izbor varijante

Bez oznake dobijaš podrazumevanu kvantizaciju, po pravilu četvorobitnu. Varijanta se traži izričito:

$ ollama pull qwen3:8b-q8_0
$ ollama pull qwen3:27b-q4_K_M

Koja ti varijanta odgovara, računa tekst o kvantizaciji, a koliki model uopšte staje — tekst o proceni VRAM-a. Spisak porodica modela nalazi se u pregledu open-weight modela.

Provera da model radi na kartici

Ovo je najvažnija provera u celom tekstu.

$ ollama ps
NAME         ID            SIZE     PROCESSOR    UNTIL
qwen3:8b     a1b2c3d4e5f6  6.2 GB   100% GPU     4 minutes from now

Kolona PROCESSOR mora da pokaže sto posto GPU. Ako piše nešto poput 58%/42% CPU/GPU, deo slojeva radi na procesoru i brzina pada višestruko — razlog je razrađen u tekstu o CPU i GPU inferenciji.

Kolona UNTIL pokazuje koliko model još stoji u memoriji. Podrazumevano je pet minuta neaktivnosti, posle čega se izbacuje i sledeći upit čeka ponovno učitavanje.

$ OLLAMA_KEEP_ALIVE=30m ollama serve

Vrednost -1 drži model u memoriji trajno. Na serveru sa jednim modelom to je ono što želiš.

Gde modeli žive

Kada Ollama radi kao servis, modeli idu u početni direktorijum sistemskog korisnika:

$ sudo du -sh /usr/share/ollama/.ollama/models
18G	/usr/share/ollama/.ollama/models

Ako je pokrećeš kao svoj korisnik, putanja je ~/.ollama/models. Struktura je ista u oba slučaja:

$ sudo ls /usr/share/ollama/.ollama/models
blobs
manifests

U blobs stoje sami fajlovi modela, u manifests opisi koji povezuju naziv sa fajlovima. Više oznaka može da deli isti blob, pa zbir prikazanih veličina iz ollama list ume da bude veći od stvarnog zauzeća na disku.

Premeštanje na drugi disk

Korenska particija se popuni brzo. Putanja se menja promenljivom:

$ sudo systemctl stop ollama
$ sudo mkdir -p /data/ollama
$ sudo mv /usr/share/ollama/.ollama /data/ollama/
$ sudo chown -R ollama:ollama /data/ollama
$ sudo systemctl edit ollama

U otvoreni fajl:

[Service]
Environment="OLLAMA_MODELS=/data/ollama/.ollama/models"
$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama
$ ollama list

Ako je spisak modela nakon ovoga prazan, putanja ili vlasništvo nisu tačni — proveri jedno pa drugo.

Osnovne komande

Komanda Šta radi
ollama list Preuzeti modeli i njihove veličine
ollama ps Šta je trenutno učitano u memoriju
ollama show Parametri, kontekst, kvantizacija, licenca
ollama rm Brisanje modela sa diska
ollama cp Kopija pod drugim imenom
ollama create Novi model iz Modelfile opisa
ollama stop Izbacivanje modela iz memorije
$ ollama show qwen3:8b
  Model
    architecture        qwen3
    parameters          8.2B
    context length      40960
    quantization        Q4_K_M

  Capabilities
    completion
    tools

Odeljak Capabilities vredi pogledati pre nego što nešto planiraš. Ako tu nema stavke tools, model ne podržava pozivanje alata i agentske postavke sa njim neće raditi.

Modelfile

Podešavanja koja stalno ponavljaš mogu se zapisati u model. Modelfile je tekstualni opis nad postojećim modelom:

$ nano Modelfile
FROM qwen3:8b

PARAMETER temperature 0.1
PARAMETER num_ctx 8192

SYSTEM """
Ti si pomoćnik za administraciju Linux servera.
Odgovaraj kratko i konkretno, na srpskom.
Uz svaku komandu navedi šta tačno radi.
Nikada ne predlaži komandu koja briše podatke bez izričitog upozorenja.
"""
$ ollama create linux-pomocnik -f Modelfile
$ ollama run linux-pomocnik

Novi model ne zauzima dodatni prostor jer deli iste fajlove sa izvornim — čuva se samo opis. Najkorisniji parametri:

Parametar Značenje
temperature Odstupanje od najverovatnijeg tokena; nisko za komande
num_ctx Veličina konteksta; direktno troši VRAM
num_predict Gornja granica dužine odgovora
repeat_penalty Kazna za ponavljanje; 1.1 ako se model vrti u krug
stop Niz na kome generisanje prestaje

Pazi na num_ctx. Podizanje konteksta na sto tisuća tokena umeće model koji je do juče stajao na kartici da se prelije na procesor. Računicu daje tekst o proceni VRAM-a.

Sopstveni GGUF fajl

Model preuzet mimo Ollame se uvozi istim putem:

FROM ./model-q4_k_m.gguf
$ ollama create moj-model -f Modelfile

Odakle se takvi fajlovi preuzimaju, pokazuje tekst o Hugging Face CLI alatu.

API

Sve što radi klijent u terminalu dostupno je i preko HTTP-a. Ovo je deo koji ćeš zapravo koristiti u skriptama.

$ curl http://localhost:11434/api/generate -d '{
  "model": "qwen3:8b",
  "prompt": "Nabroj tri komande za pregled zauzeća diska",
  "stream": false
}'

Bez "stream": false odgovor stiže kao niz JSON objekata, token po token. Za skripte je jednostavnije tražiti ceo odgovor odjednom.

Razgovor sa istorijom ide na drugu adresu:

$ curl http://localhost:11434/api/chat -d '{
  "model": "qwen3:8b",
  "messages": [
    {"role": "system", "content": "Odgovaraj kratko."},
    {"role": "user", "content": "Šta radi komanda ss -tulpn?"}
  ],
  "stream": false
}'

Spisak modela u JSON obliku:

$ curl -s http://localhost:11434/api/tags | jq -r '.models[].name'
qwen3:8b
qwen3:27b-q4_K_M
linux-pomocnik:latest

Postoji i OpenAI-kompatibilan put, zahvaljujući kome većina gotovih alata radi bez izmena:

$ curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3:8b",
    "messages": [{"role": "user", "content": "Zdravo"}]
  }'

Detaljno o oblicima zahteva i odgovora ima u tekstu o OpenAI-kompatibilnom API-ju.

Servis podrazumevano sluša samo na 127.0.0.1. To je dobra podrazumevana vrednost i ne menjaj je dok ne pročitaš tekst o zaštiti — port sa modelom otvoren prema mreži je port bez ikakve autentifikacije.

Održavanje

Ažuriranje ide istom komandom kao instalacija:

$ curl -fsSL https://ollama.com/install.sh | sh
$ sudo systemctl restart ollama

Modeli ostaju netaknuti. Brisanje onoga što se nakupilo:

$ ollama list
$ ollama rm qwen3:27b-q4_K_M

Potpuno uklanjanje:

$ sudo systemctl stop ollama
$ sudo systemctl disable ollama
$ sudo rm /etc/systemd/system/ollama.service
$ sudo rm /usr/local/bin/ollama
$ sudo rm -rf /usr/share/ollama
$ sudo userdel ollama

Praktični scenariji

Scenario 1: instalacija prošla, servis ne radi

$ sudo journalctl -u ollama -n 50 --no-pager

Najčešći uzrok je zauzet port 11434. Proveri ko ga drži:

$ sudo ss -tulpn | grep 11434

Scenario 2: sve radi, ali sporo

Prvo ollama ps i kolona PROCESSOR. Ako nije sto posto GPU, uzrok je prelivanje na procesor, a ne Ollama. Uzmi manji model ili nižu kvantizaciju.

Scenario 3: prvi odgovor kasni, ostali su brzi

Model se učitava u memoriju pri prvom upitu. Podigni OLLAMA_KEEP_ALIVE ili prihvati kašnjenje od nekoliko sekundi posle pauze.

Scenario 4: nema mesta na disku

$ sudo du -sh /usr/share/ollama/.ollama/models

Obriši nekorišćene modele ili premesti direktorijum na veći disk po uputstvu iz ovog teksta.

Scenario 5: model ne poštuje sistemski prompt

Proveri koristiš li instruct verziju. Base verzije samo nastavljaju tekst i uputstva ih se ne tiču. Oznaka stoji u nazivu modela.

Scenario 6: odgovori se seku na pola rečenice

Granica dužine izlaza. Podigni num_predict u Modelfile opisu ili je pošalji uz zahtev.

Kratka referenca

  • curl -fsSL https://ollama.com/install.sh | sh — instalacija
  • ollama --version — provera instalacije
  • curl http://localhost:11434 — provera servisa
  • ollama pull model — preuzimanje
  • ollama run model — razgovor u terminalu
  • ollama run model "pitanje" — jedan upit, pogodno za skripte
  • ollama list — preuzeti modeli
  • ollama ps — učitano u memoriju, kolona PROCESSOR
  • ollama show model — parametri i mogućnosti
  • ollama rm model — brisanje
  • ollama create ime -f Modelfile — sopstvena varijanta
  • OLLAMA_MODELS — putanja do modela
  • OLLAMA_KEEP_ALIVE — koliko model stoji u memoriji
  • /api/generate, /api/chat, /api/tags — glavne API adrese
  • /v1/chat/completions — OpenAI-kompatibilan put
  • Port 11434, podrazumevano samo na localhost
  • 100% GPU u koloni PROCESSOR — jedina provera koja je bitna

Vežba

  1. Instaliraj Ollamu i potvrdi da servis radi preko systemctl status i curl.
  2. Preuzmi model koji po računici staje u tvoju karticu, pa proveri ollama ps tokom generisanja.
  3. Napravi Modelfile sa sistemskim promptom po svojoj meri i temperaturom 0.1, pa uporedi odgovore sa izvornim modelom.
  4. Pošalji isti upit kroz ollama run i kroz curl na /api/generate. Uporedi oblik odgovora.
  5. Napiši jednu komandu koja poslednjih dvadeset grešaka iz journalctl propušta kroz model.
  6. Premesti direktorijum sa modelima na drugu putanju i potvrdi da ollama list i dalje sve vidi.

Sledeći tekst u serijalu: Ollama kao systemd servis

Povezano:

Comments

Popular posts from this blog

Početak u Linuxu — šta je i zašto se uči

Konverzija tipova podataka u Pythonu

groupadd