chore: update docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md via opax-mcp
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
This commit is contained in:
parent
478090b74f
commit
3e33696f05
|
|
@ -7,64 +7,25 @@ Denne handoffen er det eneste autoritative arbeidsdokumentet for sporet "lokal L
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## FREMDRIFT – OPPDATERT 2026-07-21 23:16 CEST
|
## FREMDRIFT – OPPDATERT 2026-07-21 23:45 CEST
|
||||||
|
|
||||||
### ✅ FASE 0–5 — FERDIG
|
### ✅ FASE 0–5 — FERDIG
|
||||||
### ✅ FASE 6 – CPU-optimalisering — FERDIG
|
### ✅ FASE 6 – CPU-optimalisering — FERDIG
|
||||||
### ✅ FASE 6-TILLEGG – Boot-warming — FERDIG 2026-07-21 23:16 CEST
|
### ✅ FASE 6-TILLEGG – Boot-warming — FERDIG
|
||||||
|
### ✅ DNS – NS-bytte utført — FERDIG 2026-07-21 23:44 CEST
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## LÅST SYSTEMKONFIGURASJON – GITEA-CPU-VM (komplett)
|
## LÅST SYSTEMKONFIGURASJON – GITEA-CPU-VM (komplett)
|
||||||
|
|
||||||
### Systemd-dropins: `/etc/systemd/system/ollama.service.d/`
|
### Systemd-dropins
|
||||||
|
|
||||||
```
|
```
|
||||||
override.conf — OLLAMA_HOST=0.0.0.0:11434 (eksisterende, ikke rørt)
|
override.conf — OLLAMA_HOST=0.0.0.0:11434
|
||||||
max-models.conf — MAX_LOADED_MODELS=2 + KEEP_ALIVE=-1
|
max-models.conf — MAX_LOADED_MODELS=2 + KEEP_ALIVE=-1
|
||||||
warmup.conf — ExecStartPost=/usr/local/bin/ollama-warmup.sh
|
warmup.conf — ExecStartPost=/usr/local/bin/ollama-warmup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**max-models.conf:**
|
|
||||||
```ini
|
|
||||||
[Service]
|
|
||||||
Environment="OLLAMA_MAX_LOADED_MODELS=2"
|
|
||||||
Environment="OLLAMA_KEEP_ALIVE=-1"
|
|
||||||
```
|
|
||||||
|
|
||||||
**warmup.conf:**
|
|
||||||
```ini
|
|
||||||
[Service]
|
|
||||||
ExecStartPost=/usr/local/bin/ollama-warmup.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
**`/usr/local/bin/ollama-warmup.sh`:**
|
|
||||||
```bash
|
|
||||||
#!/bin/bash
|
|
||||||
sleep 10
|
|
||||||
curl -s http://localhost:11434/api/generate \
|
|
||||||
-H 'Content-Type: application/json' \
|
|
||||||
-d '{"model":"gemma3:4b","prompt":"warmup","stream":false,"keep_alive":-1,"options":{"num_predict":1}}' \
|
|
||||||
> /dev/null
|
|
||||||
curl -s http://localhost:11434/api/generate \
|
|
||||||
-H 'Content-Type: application/json' \
|
|
||||||
-d '{"model":"qwen2.5:3b","prompt":"warmup","stream":false,"keep_alive":-1,"options":{"num_predict":1}}' \
|
|
||||||
> /dev/null
|
|
||||||
```
|
|
||||||
|
|
||||||
### Verifisert etter restart 2026-07-21 21:11 UTC
|
|
||||||
|
|
||||||
```
|
|
||||||
NAME SIZE PROCESSOR CONTEXT UNTIL
|
|
||||||
gemma3:4b 2.9 GB 100% CPU 4096 Forever
|
|
||||||
qwen2.5:3b 2.2 GB 100% CPU 4096 Forever
|
|
||||||
Mem: 15Gi | 6.8Gi used | 8.9Gi available | Swap: 0B
|
|
||||||
```
|
|
||||||
|
|
||||||
Merk: `warmup.conf` bruker eget skript — ikke inline JSON i ExecStartPost. Direkte inline førte til 400-feil p.g.a. systemd-escaping av anførselstegn.
|
|
||||||
|
|
||||||
### Operative parametere for Emma-kall
|
### Operative parametere for Emma-kall
|
||||||
|
|
||||||
```
|
```
|
||||||
num_ctx = 2048
|
num_ctx = 2048
|
||||||
num_batch = 256 (Ollama default)
|
num_batch = 256 (Ollama default)
|
||||||
|
|
@ -72,67 +33,62 @@ OLLAMA_NUM_THREADS = ikke satt (autodetect)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ytelsesbudsjett per Emma-turn (varm)
|
### Ytelsesbudsjett per Emma-turn (varm)
|
||||||
|
|
||||||
```
|
```
|
||||||
3-kall turn: ~23.5s
|
3-kall turn: ~23.5s
|
||||||
5-kall turn: ~42.5s
|
5-kall turn: ~42.5s
|
||||||
Boot-penalty: ~0s etter restart (warmup-skript laster begge modeller automatisk)
|
Boot-penalty: ~0s (warmup-skript)
|
||||||
Tok/s: 4.9–5.0 (gemma3:4b)
|
Tok/s: 4.9–5.0 (gemma3:4b)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## FASE 6 – KOMPLETT RESULTATOVERSIKT
|
## DNS – FULLFØRT 2026-07-21
|
||||||
|
|
||||||
### 6.1 Kaldstart / keep_alive baseline
|
### NS-bytte
|
||||||
| Modell | Kaldstart | Varm | Tok/s |
|
Proisp nameservere byttet fra `ns01/ns02.proisp.no` til Google Cloud DNS:
|
||||||
|
```
|
||||||
|
ns-cloud-a1.googledomains.com
|
||||||
|
ns-cloud-a2.googledomains.com
|
||||||
|
ns-cloud-a3.googledomains.com
|
||||||
|
ns-cloud-a4.googledomains.com
|
||||||
|
```
|
||||||
|
Byttet gjort: **2026-07-21 23:44 CEST**
|
||||||
|
Propagringstid `.no`: opp til 24 timer
|
||||||
|
|
||||||
|
### Cloud DNS-sone `vaucono` — komplett tilstand
|
||||||
|
|
||||||
|
| Record | Type | Verdi | Status |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| gemma3:4b | 117.69s | ~1.0s | 4.9–5.0 |
|
| `vauco.no.` | A | `34.98.77.173` (LB) | ✅ |
|
||||||
| qwen2.5:3b | 71.13s | ~1.0s | 6.4 |
|
| `www.vauco.no.` | A | `34.98.77.173` (LB) | ✅ |
|
||||||
|
| `opax.vauco.no.` | A | `34.98.77.173` (LB) | ✅ |
|
||||||
|
| `git.vauco.no.` | A | `34.67.252.59` (gitea-cpu-vm) | ✅ |
|
||||||
|
| `vauco.no.` | MX | Alle 5 Google MX | ✅ |
|
||||||
|
| `vauco.no.` | TXT | SPF `v=spf1 include:_spf.google.com ~all` | ✅ |
|
||||||
|
| `google._domainkey.vauco.no.` | TXT | DKIM-nøkkel | ✅ |
|
||||||
|
| `_dmarc.vauco.no.` | TXT | DMARC quarantine | ✅ |
|
||||||
|
|
||||||
### 6.2 Resident modell-strategi
|
### E-post
|
||||||
Låst: MAX=2 + KEEP_ALIVE=-1 systemd. MAX=1 gir 20–54s ekstra per Emma-turn.
|
Alle 4 lag (MX, SPF, DKIM, DMARC) var identiske mellom Proisp og Cloud DNS før bytte. `chris.christiansen@vauco.no` er upPåvirket.
|
||||||
|
|
||||||
### 6.3 Parameter-matrise
|
### Verifisering etter propagering
|
||||||
| num_ctx | num_batch | tok/s | Delta |
|
```bash
|
||||||
|---|---|---|---|
|
# Når git.vauco.no → 34.67.252.59 = propagert
|
||||||
| 1024 | 256 | 4.9 | baseline |
|
curl -s "https://dns.google/resolve?name=git.vauco.no&type=A" \
|
||||||
| **2048** | **256** | **5.0** | **+0.1 ✅** |
|
| python3 -c "import json,sys; d=json.load(sys.stdin); ans=d.get('Answer'); print(ans[0]['data'] if ans else 'IKKE PROPAGERT')"
|
||||||
| 4096 | 256 | 4.3 | -14% ⚠️ |
|
```
|
||||||
|
|
||||||
Threads: ingen målbar forskjell på 4 vCPU — ikke satt.
|
|
||||||
|
|
||||||
### 6.4 Emma MCoT end-to-end
|
|
||||||
| Scenario | Tid |
|
|
||||||
|---|---|
|
|
||||||
| Første turn etter boot (uten warmup) | 102.34s |
|
|
||||||
| **Varm turn (5 kall)** | **42.51s ✅** |
|
|
||||||
|
|
||||||
### 6.5 Belastningstest (20 turns × 3 kall)
|
|
||||||
| Måling | Verdi |
|
|
||||||
|---|---|
|
|
||||||
| Snitt per turn | 23.5s |
|
|
||||||
| Min/max | 23.2s / 25.2s |
|
|
||||||
| Swap | 0 MB hele testen |
|
|
||||||
| OOM | Ingen |
|
|
||||||
| RAM-vekst | +293 MB (OS page cache) |
|
|
||||||
|
|
||||||
### 6-tillegg Boot-warming
|
|
||||||
- Rotproblem: `ExecStartPost` med inline JSON → systemd-escaping → 400-feil
|
|
||||||
- Løsning: dedikert skript `/usr/local/bin/ollama-warmup.sh`
|
|
||||||
- Resultat: begge modeller Forever innen ~3 min etter `systemctl restart ollama`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ÅPNE PUNKTER SOM MÅ LØSES FØR ENDELIG BLUEPRINT
|
## ÅPNE PUNKTER SOM MÅ LØSES
|
||||||
1. `GITEA_URL` satt runtime — **må legges permanent inn i `opax-mcp.yaml` og rebuildes**
|
1. `GITEA_URL` satt runtime — **må legges permanent inn i `opax-mcp.yaml` og rebuildes** ← NESTE
|
||||||
2. `git.vauco.no` erstatter IP når DNS er oppe
|
2. `git.vauco.no` propagering verifiseres — sjekk i morgen tidlig
|
||||||
3. Gitea-commits ikke GPG-signert — vurder
|
3. Gitea-commits ikke GPG-signert — vurder
|
||||||
|
|
||||||
## FASTE SANNHETER (uendret)
|
## FASTE SANNHETER (uendret)
|
||||||
- Gitea er source of truth
|
- Gitea er source of truth
|
||||||
- Lokale modeller er hovedretning
|
- Lokale modeller er hovedretning
|
||||||
- Gitea-VM (34.67.252.59) er planlagt permanent målmaskin
|
- Gitea-VM (34.67.252.59) er permanent målmaskin
|
||||||
- Denne handoffen overstyrer alt annet
|
- Denne handoffen overstyrer alt annet
|
||||||
|
|
||||||
## DEFINITION OF DONE
|
## DEFINITION OF DONE
|
||||||
|
|
@ -144,18 +100,16 @@ Threads: ingen målbar forskjell på 4 vCPU — ikke satt.
|
||||||
- ⚠️ Konfigurasjon konsolidert — delvis (GITEA_URL må inn i repo)
|
- ⚠️ Konfigurasjon konsolidert — delvis (GITEA_URL må inn i repo)
|
||||||
- ⏳ Ingen skjult API-/agentavhengighet som hovedbane — ikke verifisert
|
- ⏳ Ingen skjult API-/agentavhengighet som hovedbane — ikke verifisert
|
||||||
- ✅ dev-snap-oppsettet dokumentert godt nok til blueprinting
|
- ✅ dev-snap-oppsettet dokumentert godt nok til blueprinting
|
||||||
- ✅ CPU-optimalisering verifisert på Gitea-VM — FERDIG
|
- ✅ CPU-optimalisering verifisert på Gitea-VM
|
||||||
- ✅ Boot-warming verifisert — begge modeller Forever etter restart
|
- ✅ Boot-warming verifisert
|
||||||
|
- ✅ DNS migrert til Google Cloud DNS — NS-bytte utført
|
||||||
|
- ⏳ `git.vauco.no` live — venter på propagering
|
||||||
|
|
||||||
## OPPDATERINGSLOGG
|
## OPPDATERINGSLOGG
|
||||||
| Dato | Fase | Handling |
|
| Dato | Fase | Handling |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 2026-07-21 | FASE 4 | Full smoke test grønn, alle 8 tools OK |
|
| 2026-07-21 | FASE 4 | Full smoke test grønn |
|
||||||
| 2026-07-21 | FASE 5 | Blueprint frosset |
|
| 2026-07-21 | FASE 5 | Blueprint frosset |
|
||||||
| 2026-07-21 | FASE 6.1 | Kaldstart/keep_alive: gemma3=117s, qwen=71s, keep_alive=-1 bevist |
|
| 2026-07-21 | FASE 6.1–6.5 | CPU-optimalisering fullført |
|
||||||
| 2026-07-21 | FASE 6.2 | Resident strategi: MAX=2 + KEEP_ALIVE=-1 systemd |
|
| 2026-07-21 | Boot-warming | ollama-warmup.sh verifisert |
|
||||||
| 2026-07-21 | FASE 6.3 | Parameter-matrise: num_ctx=2048, batch=256, NUM_THREADS ikke satt |
|
| 2026-07-21 | DNS | Cloud DNS-sone komplett verifisert, NS-bytte hos Proisp utført 23:44 CEST |
|
||||||
| 2026-07-21 | FASE 6.4 | Emma MCoT: varm turn=42.51s (5 kall) |
|
|
||||||
| 2026-07-21 | FASE 6.5 | Belastningstest: 20 turns, 23.5s/turn, Swap=0, ingen OOM |
|
|
||||||
| 2026-07-21 | FASE 6 | FASE 6 LUKKET — alle 5 exit-kriterier bestått |
|
|
||||||
| 2026-07-21 | Boot-warming | ollama-warmup.sh verifisert: begge modeller Forever etter restart, Swap=0 |
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user