MODUL 2 - LEKCIJA 1

Benchmark Analiza i Model Selection

Kako kvantifikovati "inteligenciju" modela, usporediti proprietary vs. open-source, i izračunati ROI za firmu

⏱️ Trajanje: 2 sata (09:00 - 11:00) 📚 Nivo: Srednji (Arhitektonski) 🎯 Lab: Cost Analysis Python Kalkulator

📈 Dan 2 — Gdje Smo i Kuda Idemo?

Na Danu 1 razumjeli smo kako LLM-ovi rade iznutra (Transformer, tokeni, API parametri). Danas rješavamo praktičniji problem koji svaki IT arhitekt ili CTO mora riješiti: koji model izabrati i kako ga pokrenuti?

Pitanja koja ćemo odgovoriti:

🏆 Kako Znamo Koji Model Je Bolji? (Benchmark Testovi)

Nije dovoljno reći "GPT-4 je pametan". U inženjeringu, tvrdnje se dokazuju mjerenjima. AI industrija je razvila set standardiziranih benchmark testova koji objektivno mjere različite aspekte sposobnosti modela.

📌 Šta je Benchmark Test?

Benchmark (referentni test) je standardizirani skup zadataka sa poznatim tačnim odgovorima, koji se koristi za mjerenje i uspoređivanje performansi sistema. U kontekstu LLM-a, benchmark ima stotine ili hiljade pitanja iz raznih oblasti, a model "polaže" test odgovarajući na svako pitanje automatski. Score = udio ispravnih odgovora.

🎓 MMLU (Massive Multitask Language Understanding)

Šta mjeri: Široko akademsko znanje i logičko razmišljanje.

Objedinjuje 57 različitih akademskih predmeta uklj. višu matematiku, pravo, medicinu, historiju, fiziku, ekonomiju. Svako pitanje je Multiple Choice (A, B, C, D). 14,079 pitanja ukupno.

Kontekst: Zamislite kao maturi koji polažu Google, OpenAI i Meta — svaki put sa istim pitanjima iz kompletnog curricula.

👥 Stručni eksperti: 89% | GPT-4o: ~88% | Claude 3.5 Sonnet: ~89%
Llama 3.1 70B: ~83% | Mistral Large 2: ~84%
💻 HumanEval (Programming Benchmark)

Šta mjeri: Sposobnost pisanja ispravnog programskog koda.

OpenAI je kreirao 164 Python programerska zadatka. Svaki zadatak ima: opis funkcije u docstringu + unit testove. Model mora napisati tijelo funkcije koje prolazi SVE testove. Nema "djelomičnog poena" — ili radi ili ne radi.

Kontekst: Ekvivalent tehničkom intervjuu za junior Python developera — samo 164 pitanja istovremeno.

Claude 3.5 Sonnet: ~92% | GPT-4o: ~90% | Llama 3.1 70B: ~81%
GPT-3.5-turbo: ~67% (koliko je napredak!)
🧮 GSM8K (Grade School Math)

Šta mjeri: Matematičko rezonovanje i višekorančno razmišljanje.

8,500 matematičkih zadataka na nivou osnovne škole koji zahtijevaju 2-8 logičkih koraka rješavanja. Ključno: model mora pronalaziti tačan numerički odgovor, ne samo "izgled" rješenja. Ovo testira Chain-of-Thought sposobnost.

Kontekst: Matka matematike za pametne 10-godišnjake, ali 8,500 pitanja.

GPT-4o: ~97% | Claude 3.5 Sonnet: ~96% | Llama 3.1 70B: ~93%
ChatGPT-3 kada je izašao: ~57% (raison d'être za GPT-4!)
🏟️ LMSYS Chatbot Arena (ELO Ranking)

Šta mjeri: Što korisnici zapravo preferiraju (Human Preference).

Blind test: korisnik šalje isti prompt, dva anonimna modela odgovaraju istovremeno. Korisnik glasuje koji mu se više svidio — bez znanja koji je koji. Matematika šaha (ELO rating sustav) formira globalnu rang-listu. Milioni glasova korisnika čine ovo najpouzdanijim pokazateljem.

Kontekst: Demokracija modela — "glasači" su stvarni korisnici, ne akademici.

Ovo je jedini benchmark koji mjeri stvarno korisničko iskustvo!
Pristupačno na: chat.lmsys.org/leaderboard
🎯 MMLU-Pro (Teža Verzija)

Šta mjeri: Napredno akademsko znanje (10 opcija umjesto 4).

Nastao jer su top modeli saturirali klasični MMLU (dostigli ~90%). Komplicovaniji zadaci koji zahtijevaju dublje rezonovanje i expert znanje. Za razlikovanje između vrhunskih modela.

GPT-4o: ~72% | Claude 3.5 Sonnet: ~78% | Llama 3.1 405B: ~73%
O3 mini (reasoning): ~79%
🔧 SWE-Bench (Software Engineering)

Šta mjeri: Rješavanje pravih GitHub issue-a (ne igračke probleme).

2,294 pravih GitHub issue-a iz popularnih Python projekata (Django, Flask, NumPy). Model mora: razumjeti codebase, napisati patch (diff), test suite mora proći. Ovo je najbliže realnom dev poslu ikad!

Claude 3.5 Sonnet: ~49% | GPT-4o: ~38% | Llama 3.1 70B: ~14%
Ovaj benchmark jasno diferencira coding sposobnost!
Performanse Top Modela (2024) MMLU (Opšte znanje) HumanEval (Kodiranje) GSM8K (Matematika) SWE-Bench (Inženjering) Chatbot Arena (ELO) Legenda: GPT-4o (OpenAI) Claude 3.5 Sonnet Llama 3.1 70B

⚖️ Proprietary vs. Open-Source: Sveobuhvatna Usporedba

Kod odabira modela za poslovni sistem, bitna su tri faktora: sposobnost, trošak, i kontrola podataka. Evo sveobuhvatne usporedbe aktualnih modela (2025.):

Model Tip Coding Analitika Context Window Input Cijena Privatnost Podataka
☁️ PROPRIETARY CLOUD MODELI
GPT-4o (OpenAI) Cloud API ⭐⭐⭐⭐½ ⭐⭐⭐⭐⭐ 128k tokena $5.00/1M Podaci idu na OpenAI servere (USA)
Claude 3.5 Sonnet (Anthropic) Cloud API ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐½ 200k tokena $3.00/1M Podaci idu na Anthropic servere (USA)
Gemini 1.5 Pro (Google) Cloud API ⭐⭐⭐⭐ ⭐⭐⭐⭐ 2M tokena! $3.50/1M Podaci idu na Google servere
🔓 OPEN-SOURCE MODELI (besplatni za lokalno pokretanje)
Llama 3.1 70B (Meta) Open-Source ⭐⭐⭐⭐ ⭐⭐⭐⭐ 128k tokena Besplatno* (treba GPU) 100% lokalno — podaci ne napuštaju firmu
Mistral Large 2 (Mistral) Open-Source ⭐⭐⭐⭐ ⭐⭐⭐⭐ 128k tokena Besplatno* (treba GPU) 100% lokalno
Llama 3.1 8B (Meta) — Quantiziran Open-Source ⭐⭐⭐ ⭐⭐⭐ 128k tokena Besplatno (radi i na laptop-u!) 100% lokalno
Phi-3 Mini (Microsoft) Open-Source / SLM ⭐⭐⭐ ⭐⭐½ 128k tokena Besplatno (radi bez GPU) 100% lokalno, čak i na CPU-u

🏛️ Napomena za Javnu Upravu i Regulisane Industrije

Institucije javne uprave (ministarstva, agencije), zdravstvo (bolnice), pravosuđe (sudovi), finansije (banke, osiguranje) tipično imaju stroge zahtjeve o lokalizaciji podataka. U kontekstu BiH i EU, GDPR (i Zakon o zaštiti ličnih podataka) postavlja ograničenja za prenos ličnih podataka izvan EU/EEA.

Praktično: Slati ID broj, JMBG, medicinske podatke ili sudske spise na OpenAI ili Anthropic servere u SAD može biti u koliziji sa važećom legislativom. Lokalni open-source deploy (Ollama + Llama 3.1) eliminira ovaj rizik jer podaci ostaju na vašim serverima unutar zemaljskih granica.

🧮

LAB O4: Kalkulacija ROI — Cloud vs. On-Premise

Izgradićemo Python skriptu koja automatizira finansijsku analizu za konkretan scenarij. Scenario: firma sa 500 zaposlenih želi RAG chatbot koji pretražuje interne PDF dokumente (ISO standarde, pravilnike, procedure).

Korak 1: Definisanje Scenarija

Parametri koji dolaze od biznis analize:

  • Broj zaposlenih (korisnika): 500
  • Prosječna pitanja dnevno po zaposleniku: 10 (radni dani: 22 u mjesecu) → 110,000 zahtjeva/mj
  • Prosječna veličina PDF konteksta (input): 2,500 tokena/pitanju
  • Prosječna veličina odgovora (output): 500 tokena/pitanju

Korak 2: Python Kalkulator Skripta

Napravite fajl roi_calculator.py u VS Code i unesite:

python
"""
roi_calculator.py - Kalkulacija ROI za AI sistem u firmi
Modul 2.1: Model Selection & Benchmarks
"""

from dataclasses import dataclass
from typing import List

# ================================================================
# SCENARIJ OPTEREĆENJA
# ================================================================

@dataclass
class ScenarijOtpecenja:
    """Parametri koji opisuju kako će se AI koristiti u firmi."""
    broj_korisnika: int
    pitanja_po_korisniku_dnevno: int
    radnih_dana_u_mjesecu: int
    input_tokeni_po_pitanju: int   # Prompt + PDF kontekst
    output_tokeni_po_pitanju: int  # Odgovor modela

    @property
    def ukupno_pitanja_mjesecno(self) -> int:
        return self.broj_korisnika * self.pitanja_po_korisniku_dnevno * self.radnih_dana_u_mjesecu

    @property
    def ukupno_input_tokena_mjesecno(self) -> int:
        return self.ukupno_pitanja_mjesecno * self.input_tokeni_po_pitanju

    @property
    def ukupno_output_tokena_mjesecno(self) -> int:
        return self.ukupno_pitanja_mjesecno * self.output_tokeni_po_pitanju


@dataclass
class CloudRjesenje:
    """Troškovi Cloud API rješenja (OpenAI, Anthropic itd.)"""
    naziv: str
    model: str
    input_cijena_per_million: float   # USD
    output_cijena_per_million: float  # USD
    setup_cost: float = 0.0           # Jednokratni troškovi razvoja

    def godisnji_trosak(self, scenarij: ScenarijOtpecenja) -> float:
        """Izračunava ukupni godišnji trošak API poziva."""
        input_cost_mj = (scenarij.ukupno_input_tokena_mjesecno / 1_000_000) * self.input_cijena_per_million
        output_cost_mj = (scenarij.ukupno_output_tokena_mjesecno / 1_000_000) * self.output_cijena_per_million
        api_cost_godisnje = (input_cost_mj + output_cost_mj) * 12
        return api_cost_godisnje + self.setup_cost


@dataclass
class OnPremiseRjesenje:
    """Troškovi On-Premise / Lokalni server rješenja."""
    naziv: str
    model: str
    capex_hardver: float       # Jednokratna kupovina hardvera
    capex_instalacija: float   # IT radni sati za setup
    opex_struja_godisnje: float  # Struja po godini
    opex_it_odrzavanje_godisnje: float  # IT radni sati za odrzavanje

    def trosak_za_n_godina(self, n: int) -> List[float]:
        """Vraća ukupni kumulativni trošak za svaku godinu."""
        kumulativni = []
        for god in range(1, n + 1):
            ukupno = self.capex_hardver + self.capex_instalacija
            ukupno += (self.opex_struja_godisnje + self.opex_it_odrzavanje_godisnje) * god
            kumulativni.append(ukupno)
        return kumulativni


# ================================================================
# INICIJALIZACIJA SCENARIJA
# ================================================================

scenarij = ScenarijOtpecenja(
    broj_korisnika=500,
    pitanja_po_korisniku_dnevno=10,
    radnih_dana_u_mjesecu=22,
    input_tokeni_po_pitanju=2500,
    output_tokeni_po_pitanju=500
)

# ================================================================
# RJEŠENJA ZA USPOREDBU
# ================================================================

# Cloud rješenja (API)
gpt4o = CloudRjesenje(
    naziv="OpenAI GPT-4o (Cloud API)",
    model="gpt-4o",
    input_cijena_per_million=5.00,
    output_cijena_per_million=15.00,
    setup_cost=0.0  # Nema hardvera — razvoj aplikacije je posebna stavka
)

claude_sonnet = CloudRjesenje(
    naziv="Anthropic Claude 3.5 Sonnet (Cloud API)",
    model="claude-3-5-sonnet",
    input_cijena_per_million=3.00,
    output_cijena_per_million=15.00,
    setup_cost=0.0
)

# On-Premise rješenje (lokalni server)
# Za Llama 3.1 70B model — treba ~2× A6000 GPU (48GB VRAM svaka)
local_llama = OnPremiseRjesenje(
    naziv="Meta Llama 3.1 70B (On-Premise Server)",
    model="llama3.1 70B (4-bit quantized)",
    capex_hardver=12_000.0,      # Server ($3k) + 2× RTX A6000 ($4.5k = $9k)
    capex_instalacija=2_000.0,   # 2 dana IT inženjera × $1000/dan
    opex_struja_godisnje=600.0,  # ~350 kWh/mj × $0.15 × 12
    opex_it_odrzavanje_godisnje=3_000.0  # Patchiranje, monitoring, uptime
)

# ================================================================
# IZVJEŠTAJ
# ================================================================

print("=" * 70)
print("  💰 ROI ANALIZA: AI CHATBOT ZA 500 ZAPOSLENIH")
print("=" * 70)

print(f"\n📊 SCENARIJ OPTEREĆENJA:")
print(f"   Korisnici: {scenarij.broj_korisnika}")
print(f"   Pitanja/korisnik/dan: {scenarij.pitanja_po_korisniku_dnevno}")
print(f"   Pitanja UKUPNO/mj: {scenarij.ukupno_pitanja_mjesecno:,}")
print(f"   Input tokeni/mj: {scenarij.ukupno_input_tokena_mjesecno:,}")
print(f"   Output tokeni/mj: {scenarij.ukupno_output_tokena_mjesecno:,}")

print("\n" + "-" * 70)
print("  ☁️  CLOUD RJEŠENJA")
print("-" * 70)

for cloud in [gpt4o, claude_sonnet]:
    godisnji = cloud.godisnji_trosak(scenarij)
    mj = godisnji / 12
    print(f"\n🤖 {cloud.naziv}")
    print(f"   Trošak / Mjesec:   ${mj:>10,.2f}")
    print(f"   Trošak / Godina:   ${godisnji:>10,.2f}")
    print(f"   Trošak / 3 godine: ${godisnji*3:>10,.2f}")

print("\n" + "-" * 70)
print("  🏢  ON-PREMISE RJEŠENJE")
print("-" * 70)

godisnji_cloud = gpt4o.godisnji_trosak(scenarij)  # Uspoređujemo s GPT-4o

print(f"\n🖥️  {local_llama.naziv}")
print(f"   CAPEX (Hardver):   ${local_llama.capex_hardver:>10,.2f}")
print(f"   CAPEX (Instalacija): ${local_llama.capex_instalacija:>8,.2f}")
print(f"   OPEX/god (Struja):   ${local_llama.opex_struja_godisnje:>8,.2f}")
print(f"   OPEX/god (IT):       ${local_llama.opex_it_odrzavanje_godisnje:>8,.2f}")

kumulativni = local_llama.trosak_za_n_godina(5)
for i, ukupno in enumerate(kumulativni, 1):
    cloud_ekvivalent = godisnji_cloud * i
    usteda = cloud_ekvivalent - ukupno
    print(f"\n   Godina {i}: Lokalno = ${ukupno:,.2f} | Cloud (GPT-4o) = ${cloud_ekvivalent:,.2f}")
    if usteda > 0:
        print(f"           ✅ UŠTEDA sa lokalnim: ${usteda:,.2f}")
    else:
        print(f"           ❌ Cloud je jeftiniji za: ${-usteda:,.2f}")

# Pronalazimo break-even tačku
print("\n" + "=" * 70)
print("  📈 ZAKLJUČAK — BREAK-EVEN ANALIZA")
print("=" * 70)
capex_total = local_llama.capex_hardver + local_llama.capex_instalacija
godisnji_opex = local_llama.opex_struja_godisnje + local_llama.opex_it_odrzavanje_godisnje
breakeven_mj = capex_total / ((godisnji_cloud - godisnji_opex) / 12)

print(f"\n🎯 Break-even točka: {breakeven_mj:.1f} mjeseci ({breakeven_mj/12:.1f} godina)")
print(f"\nSve IZNAD {breakeven_mj:.0f} mjescei = On-Premise je isplativije!")
print(f"\nDodatne prednosti On-Premise rješenja:")
print(f"   ✅ Podaci ostaju unutar firme (GDPR, sigurnost)")
print(f"   ✅ Nema internet veze potrebe za AI funkcionalnost")
print(f"   ✅ Nema rate limiting-a ili downtime od providera")
print(f"\nPrednosti Cloud rješenja:")
print(f"   ✅ Bez CAPEX-a — trenutni start")
print(f"   ✅ Najkvalitetniji modeli (GPT-4o je bolji od Llama 70B)")
print(f"   ✅ Auto-scaling (0 do 10,000 korisnika bez promjena)")
print(f"   ✅ Nema IT timske obaveze za održavanje")
3

Pokretanje i analiza

powershell
python roi_calculator.py
  • Za 500 korisnika sa 10 pitanja dnevno, GPT-4o prosječno košta oko $2,200 mjesečno (≈ $26,400 godišnje). Ovo je u skladu sa komercijalnim SaaS pretplatama za software.
  • On-premise server košta otprilike $14,000 u prvoj godini (CAPEX + OPEX), a od druge godine samo ~$3,600/god za struju i IT. Break-even nastupa oko 6-9 mjeseci.
  • Ključni zaključak: Break-even ne uzima u račun razliku u kvalitetu modela. GPT-4o je mjerljivo bolji od Llama 70B. Arhitekt mora pitati: "Da li je razlika u kvalitetu vrijedna $17,000 godišnje od druge godine?"
  • Promijenite parametre u skripti i testirajte: šta se dešava sa 100 umjesto 500 korisnika? Ili sa samo 2 pitanja dnevno? Kada cloud postaje jeft iniji?
Kumulativni Trošak: Cloud API vs On-Premise (3 Godine) $0 $20k $40k $60k $80k 0 6mj 1 Godina 2 Godine 3 Godine Cloud API (GPT-4o) CAPEX $14k On-Premise Server Break-even (~7 mj.) UŠTEDA

✅ Checkpoint — Provjera Razumijevanja

  • MMLU mjeri akademsko znanje, HumanEval mjeri coding, LMSYS mjeri korisničku preferenciju.
  • Claude 3.5 Sonnet prednjači na SWE-Bench (realni coding) i input cijeni vs GPT-4o.
  • Break-even za on-premise je tipično 6-12 mjeseci za veće organizacije s visokim prometom.
  • GDPR i regulatorne obaveze često diktiraju on-premise za javnu upravu i zdravstvo.
  • Model quality razlika: GPT-4o/Claude 3.5 > Llama 3.1 70B > Llama 3.1 8B (generalno).

✅ Nastavak: Pokretanje lokalnog modela

Završili smo sa teorijom benchmarkova i kalkulacijom budžeta. Napravili smo informiran zaključak o tome kada koristiti cloud API a kada lokalni server. U sljedećoj lekciji prelazimo na praktiku: instaliramo Ollama i lokalno pokrećemo Llama 3.1 model koji sagledavamo izbliza kao sistem administratori.