Lokálne AI modely alebo Ako sme postavili vlastný AI chat server: Open WebUI + Ollama - časť 1
Úvod
Cieľom tohto projektu je vybudovať lokálne AI riešenie pre potreby vývoja a podpory programovania, testovania modelov a vlastných dát, simulácie bezpečnosti AI riešení v prostredí (SMB - Small Medium Bussiness) stredne veľkej organizácie.
Naším cieľom bolo vytvoriť bezpečné, lokálne a dostupné AI riešenie pre vývojárov a interný tím bez závislosti na externých cloud službách.
Projekt je vytváraný v spolupráci s AI agentom. Texty sú generované pomocou AI agenta.
Pre potreby rýchlejšiej inštalácie a konfigurácie sú prvotné fázy projektu konfigurované bez využitie SSL komunikácie. SSL komunikácia bude dokonfigurovaná v ďalších fázach projektu.
Prečo ísť cestou lokálneho nasadenia
Rastúca potreba lokálnych AI riešení bez závislosti na cloude.
Ochrana citlivých firemných údajov.
Skútsenosti s nasadzovaním a správou vlastných LLM infraštruktúr.
Príprava na budúce AI aplikácie a vlastné RAG systémy.
Základné vlastnosti
Maximálna bezpečnosť dát - Citlivé informácie zostávajú výhradne vo vašom prostredí bez odosielania do cloudu
Plná kontrola nad infraštruktúrou - Nezávislosť od externých služieb a možnosť prispôsobiť systém vlastným potrebám
Žiadne paušálne poplatky - Jednorazová investícia do hardvéru namiesto neustálych platieb za API volania.
Príklad použitia v organizácii
Pre reálne použitie v organizácii je potrebné špecifikovať na čo všetko chce organizácia AI použiť. Možností je viacero.

Príklady použitia v Cybersec
Výber modelu závisí od použitia - analýza kódu, dotazy, generovanie pravidiel, atď. Tu sú odporúčané modely pre lokálne nasadenie.


Porovnanie modelov pre náš projekt
V doleuvedenej tabuľke je prehľad modelov, ktoré je možné vzhľadom na náš HW použiť

Hardvér
Návrh hardvéru pre lab

Návrh hardvéru pre organizáciu

Aktuálny Hardvér v Labe
Začíname s bežným HW. Žiadne drahé karty a server. Prečo? Jednak overiť použiteľnosť riešenia ale hlavne zistiť možnosti zabezpečenia modelu a použitia v internej infraštruktúre.




Použité softvérové komponenty
Ollama - Lokálny LLM server na modely (codellama, gemma, atď.)
Open WebUI - Jednoduché UI rozhranie pre prácu s modelmi
AnythingLLM - Web UI na upload dokumentov a RAG (Retrieval Augmented Generation)
Docker + Docker Compose - Správa všetkých služieb
Pre potreby nášho projektu sú použité tzv. kvantizované modely.

Co je kvantizovaný format?
Kvantizácia je proces zmenšenia čísel, s ktorými AI model pracuje. Z vysokopresných (napr. 32-bit float) na formáty nižšej presnosti (napr. 4-bit, 8-bit).
Výhody kvantizácie sú:
- Nižšia spotreba pamäte (VRAM, RAM)
- Vyššia rýchlosť inferencie
- Schopnosť spustiť väčšie modely na menšom hardware
Modely sa kvantizujú do formátov ako Q4, Q5, Q8 kde číslo udáva počet bitov použitých na reprezentáciu váh modelu.
Ako rozpoznať kvantizovaný model?
1. Podľa názvu modelu: obsahuje Q4, Q5, Q8 alebo slova ako int4, int8.
2. Podľa formátov súborov: .gguf, .bin, .safetensors.
3. Podľa veľkosti súboru: 7B model v FP16 má 13-15GB, kvantizovaný Q4 model má len 3-6GB.
4. Podľa popisu na webe: zmienky o "quantization", "4-bit model", "GPTQ".
5. Pri načítaní do inferenčného enginu: vypisuje sa info o použitom kvantizovanom formáte (napr. int4, Q4_K).
Ako pracujú tokeny v LLM modeloch
Čo je token?
Token je úsek textu (slovo, časť slova, znak, interpunkcia), ktorý model spracováva. Tokenizácia rozdelí text na tokeny pred spracovaním modelom.
Použitie tokenov
Tokeny sa rátaju vo vstupe (prompt), výstupe (odpoveď) a v celkovom kontexte (vstup + výstup dohromady).
Praktické limity pre RTX 3060 12GB
- CodeLLaMA 7B: cca 4096 az 8192 tokenov
- Mistral 7B: cca 8192 tokenov
- Gemma 3 12B: cca 4000-6000 tokenov
- Gemma 2B: viac ako 16000 tokenov
Prečo na tom záleží
Čím viac tokenov, tým viac VRAM potrebujete. Ak prekročíte limit, model moze zabudnúť začiatok promptu. Cloud sluzby si účtujú podľa počtu tokenov.
Ako zistiť počet tokenov
Použiť online nástroje ako OpenAI Tokenizer alebo lokálne nástroje ako tiktoken, transformers, llama.cpp.
Čo je inferencia v AI
Inferencia je proces, keď AI model (napr. LLM ako Mistral alebo Codellama) odpovedá na tvoju otázku na základe naučených dát.
Jednoducho povedané:
Tréning je, keď sa model učí.
Inferencia je, keď model odpovedá.
Ako to funguje:
- Input (prompt): napr. otázka, príkaz
- Model: použije svoje váhy a parametre
- Output: textová odpoveď
Rozdiel medzi tréningom a inferenciou:
Tréning: model sa učí zo stoviek GB dát, vykonáva sa raz.
Inferencia: model používa naučené vedomosti na odpoveď - deje sa to pri každom dotaze.

Inštalácia serveru pre Ollama model
OS: Ubuntu 22.04 Inštalácia bola vykonaná na HW, tzn. nie je to virtualizovaný OS. V serveri je pripojená naša hlavná grafická karta NVIDIA RTX 3060.
Prečo starrší OS?
Z pohľadu bezpečnosti je samozrejme najlepšie používať najaktuálnejši OS. Tu sme všas pre rýchlosť vybudovania prostredia použili overené verzie. V budúcosti je dôležitá migrácia na novší OS.

Inštalácia Ollama na Server
Aktualizácia systému
sudo apt update && sudo apt upgrade -y
Inštalácia ovládačov NVIDIA
sudo apt install -y nvidia-driver-535
Reštart systému po nainštalovaní ovládača
sudo reboot
Inštalácia základných nástrojov
sudo apt install -y build-essential git curl python3-pip unzip
Inštalácia Ollama (LLM engine)
curl -fsSL https://ollama.com/install.sh | sh
Overenie inštalácie NVIDIA (nvidia-smi)
nvidia-smi
Príprava prostredia pre modely
mkdir -p ~/llm_models
Odporúčané Python balíčky
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip3 install langchain llama-index
sudo reboot
Spustenie modelu 7b
ollama run codellama:7b
Po spustení modelu máte možnosť pracovať/dotazovať sa priamo v terminály.

Zoznama možných modelov Ollama

Ako to teda funguje v praxi
ollama run model je interaktívny režim — určený na jednu reláciu.
Inference API (napr. https://localhost:11434/api/generate) automaticky spustí a načíta model, keď je potrebný.
Ak je model nečinný, môže byť uvoľnený z RAM.
Ako spravovať modely v Ollama
Ollama podporuje viacerémodely naraz. Každý model môže byť volaný samostatne (napr. z OpenWebUI alebo API) a Ollama sa postará o paralelné obsluhovanie požiadaviek.
Ako sa modely správajú
Modely sa načítavajú do pamäte pri prvom volaní
Ak je málo pamäte, menej používané modely sa môžu vyhodiť a znova načítať neskôr
Viacero používatelov môže naraz volať rôzne modely
Užitočné príkazy
ollama list - Zoznam stiahnutých modelov
ollama ps - Zobrazí, ktoré modely boli aktívne
ollama stop <model> - Odstrání model z pamäte
ollama rm <model> - Trvalo odstrání model z disku
Tip pre optimalizaciu
Ak nepotrebujete konkrétny model, je možné ho stopnúť cez 'ollama stop', čím sa uvolní RAM/VRAM. Nie je to však nutné, ak server zvláda bez problémov viacerých používateľov naraz.
Pridanie webového rozhrania
Pre jednoduchšiu prácu s modelom sme nainštalovali a nakonfigurovali OpenWebUI. Najdôležitejšia je ale možnosť riadenia prístupov, teda riešenie práce s AI modelmi s lepším prístupom a riadením bezpečnosti.Čo je Open WebUI?
Open WebUI je jednoduché, ale výkonné webové rozhranie pre prácu s jazykovými modelmi (LLM), ktoré beží nad Ollama serverom.
Oficiálna stránka - https://github.com/open-webui/open-webui
Na čo ho používame?
- Chatovanie s modelmi ako codellama:7b, mistral, phi
- Správa používateľov (admin/user)
- Vebový prístup k modelom bez CLI
- Testovanie a ladenie AI promptov
Hlavné vlastnosti
- Napojenie na Ollama cez HTTP API
- Podpora viacerých modelov
- Admin email a práva
- Ukladanie konverzácií do databázy (napr. SQLite)
- Nasadenie cez Docker s minimálnou konfiguráciou
Prečo sme ho vybrali:
- Open source a aktívne vyvíjaný
- Jednoduché a moderné UI
- Výborná integrácia s Ollama
- Ľahké na úpravy a rozšírenia
Východisková konfigurácia
- Server2 s Ubuntu 24.04, Docker a Docker Compose
- Ollama model beží na druhom serveri - default port 11434
- Cieľ bol nakonfigurovať WebUI dostupné na https://server2:3000
Inštalácia Docker na Ubuntu 24.04
sudo apt-get remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker compose version
Spustenie docker inštancie OpenAI WEBui
Pre inštaláciu a konfiguráciu docker inštancie sme použili docker-compose.yml z oficiálneho zdroja: https://github.com/open-webui/open-webui/blob/main/docker-compose.yaml

Inštalácia a konfigurácia AnythingLLM
Cieľ:
Vytvorit lokalne riesenie na spravu a vyuzitie AI modelov cez kombinaciu:
Ollama (lokalny LLM server)
AnythingLLM (webove rozhranie pre pracu s dokumentmi a AI)
Východisková konfigurácia
- Server2 s Ubuntu 24.04, Docker a Docker Compose
- Ollama model beží na druhom serveri - default port 11434
- Cieľ bol nakonfigurovať AnythingLLM dostupné na https://server2:3001
Čo je AnythingLLM
- Webová aplikácia na správu dokumentov a využitie AI cez Ollama
- Upload a indexovanie dokumentov
- Vyhľadávanie a QA nad vlastnými dátami
AnythingLLM je open-source riešenie, ktoré ti umožní nahrávať vlastné dokumenty a následne s nimi komunikovať cez veľké jazykové modely (LLM) — priamo lokálne, bez nutnosti cloudu.
Prečo AnythingLLM
Vytvorenie RAG riešenia – model odpovedá na základe nahraných dokumentov.
Nahrávanie PDF, DOCX, TXT, webových stránok…
Indexácia a embedding textu – cez Ollama alebo OpenAI.
Chatovanie s vlastnými dokumentmi – bez toho, aby opustili tvoj server.
Funguje s Ollama modelmi ako mistral, codellama, phi, atď.
Beží offline – ideálne pre bezpečnostné projekty.
Nepotrebujeme cloudové API kľúče.
Flexibilné napojenie na rôzne modely.
Môžeme tvoriť vlastné "workspaces" pre rôzne oblasti, tímovú spoluprácu alebo zákazníkov.
Čo je RAG
RAG = Retrieval-Augmented Generation = "Generovanie doplnené vyhľadávaním"
Jazykový model najprv vyhľadá relevantné informácie z tvojich dát (napr. PDF, databázy, weby) a až potom vytvorí odpoveď, ktorá tieto dáta zohľadňuje.
Výhody RAG
Pracuje s tvojimi súkromnými dátami
Znižuje halucinácie (vymýšľanie)
Nemusíš model pretrénovať
Ľahko aktualizovateľné dáta
Inštalácia a konfigurácia AnythingLLM - Docker inštancia
AnythingLLM sme nakonfigurovali a spustili ako docker inštanciu. Použili sme oficiálny docker-compose.yml zo stránky https://github.com/Mintplex-Labs/anything-llm/blob/master/docker/HOW_TO_USE_DOCKER.md
Zmeny v konfigurácii:
Vytvoriť lokálny adresár pre centrálne úložisko pre dáta potrebné pre RAG.
mkdir -p /home/ubuntu/anythingllm_storage
Nastavenie práv pre daný adresár:
sudo chown 1000:1000 /home/ubuntu/anythingllm_storage
Nastaviť cestu k danému adresáru v docker-compose.yml
volumes:
anythingllm_storage:
driver: local
driver_opts:
type: none
o: bind
device: /home/ubuntu/anythingllm_storage
Zistenie: V docker inštancii nefunguje Live Document Sync. Inštalácia Desktop aplikácie AnythingLLM s prepojením na interný Ollama server je funkčná.
Problémy: Dokumenty sa ukladajú lokálne na pracovnú stanicu. Je potrebné následne vymyslieť napríklad zdieľanie s tímom atď.

Vyhodnotenie aktuálneho stavu
- Ollama (Server 1): Centrálna AI infraštruktúra, kde bežia modely (napr. codellama, phi, gemma).
- OpenWebUI (Server 2): Webové rozhranie s výberom modelov pre viacerých používateľov.
- AnythingLLM Desktop: Len lokálne (napr. Mac), bez možnosti centrálneho dokumentového úložiska.