Compare commits
2
Commits
e8512b56f5
...
c6dba0b9ec
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6dba0b9ec | ||
|
|
eb456b37ea |
No files matched your search
@@ -1,3 +1,13 @@
|
|||||||
|
# 2026-10-12 — VRAM-Reserve und portable CPU-Kompression
|
||||||
|
|
||||||
|
- `desktop-64k` mit 4096 MiB Fit-Zielmarge und 64K Kontext als Standard neuer
|
||||||
|
Konfigurationen ergänzt; frühere Profile bleiben verfügbar.
|
||||||
|
- Separaten CPU-Kompressionsdienst mit eigener portabler Konfiguration,
|
||||||
|
Geräte-/Op-/KV-Offload-Ausschluss und Installation ohne Aktivierung ergänzt.
|
||||||
|
- Migrationsschritte, tatsächliche Workstation-Abnahme und Prüfgrenzen dokumentiert.
|
||||||
|
- Bestehende lokale Konfigurationen und laufende Dienste bleiben beim Deployment
|
||||||
|
erhalten; Optionen werden vor dem Modellstart auf Unterstützung geprüft.
|
||||||
|
|
||||||
# 2026-09-10 — Cleanup-Reparatur und dauerhafte Modelle
|
# 2026-09-10 — Cleanup-Reparatur und dauerhafte Modelle
|
||||||
|
|
||||||
- Korrigierte Cleanup-Skripte unter maintenance/ aufgenommen: kein globales
|
- Korrigierte Cleanup-Skripte unter maintenance/ aufgenommen: kein globales
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ Reproduzierbares Benutzer-Deployment für Hermes Agent auf Arch Linux mit:
|
|||||||
- offizieller Hermes-Git-Installation unter `~/.hermes/hermes-agent`
|
- offizieller Hermes-Git-Installation unter `~/.hermes/hermes-agent`
|
||||||
- von Hermes erzeugtem systemd-User-Service für den Messaging Gateway
|
- von Hermes erzeugtem systemd-User-Service für den Messaging Gateway
|
||||||
- optionalem lokalen llama.cpp/OpenAI-kompatiblen Modellendpunkt
|
- optionalem lokalen llama.cpp/OpenAI-kompatiblen Modellendpunkt
|
||||||
|
- optionalem CPU-Kompressionsserver für Hermes
|
||||||
- optionalem signal-cli HTTP-Daemon
|
- optionalem signal-cli HTTP-Daemon
|
||||||
- robustem Hermes-Update mit Vorprüfung, Retry, Backup und Rollback
|
- robustem Hermes-Update mit Vorprüfung, Retry, Backup und Rollback
|
||||||
- regelmäßigen Healthchecks und Selbstheilungsversuchen
|
- regelmäßigen Healthchecks und Selbstheilungsversuchen
|
||||||
@@ -13,10 +14,12 @@ Reproduzierbares Benutzer-Deployment für Hermes Agent auf Arch Linux mit:
|
|||||||
- optionalem CUDA-Build von llama-server, llama-cli und llama-bench
|
- optionalem CUDA-Build von llama-server, llama-cli und llama-bench
|
||||||
- Qwen-/RTX-3080-Profilen mit prüfbarem Wechsel und Rückweg
|
- Qwen-/RTX-3080-Profilen mit prüfbarem Wechsel und Rückweg
|
||||||
|
|
||||||
Stand: 2026-09-05. Für deine **bestehende Workstation** zuerst
|
Stand: 2026-10-12. Für deine **bestehende Workstation** zuerst
|
||||||
[`docs/WORKSTATION.md`](docs/WORKSTATION.md) lesen. Der Schnellstart unten ist für
|
[`docs/WORKSTATION.md`](docs/WORKSTATION.md) lesen. Der Schnellstart unten ist für
|
||||||
eine neue Maschine. Hardware-Leistungsgewinne sind noch nicht auf deiner GPU
|
eine neue Maschine. Hardware-Leistungsgewinne sind noch nicht auf deiner GPU
|
||||||
gemessen. Es wird kein Gitea-Server angelegt und nichts automatisch gepusht.
|
gemessen; die kurze Funktions- und VRAM-Abnahme vom 12.10.2026 ist in
|
||||||
|
[RTX3080.md](docs/RTX3080.md) dokumentiert. Der Installer richtet keinen
|
||||||
|
Gitea-Server ein und pusht keine Änderungen.
|
||||||
|
|
||||||
Das Repository enthält **keine Zugangsdaten, Signal-Sitzung oder
|
Das Repository enthält **keine Zugangsdaten, Signal-Sitzung oder
|
||||||
Modellgewichte**. Diese Daten werden lokal angelegt und sind durch `.gitignore`
|
Modellgewichte**. Diese Daten werden lokal angelegt und sind durch `.gitignore`
|
||||||
@@ -43,6 +46,8 @@ Danach die beim ersten Lauf erzeugten lokalen Konfigurationen bearbeiten:
|
|||||||
```bash
|
```bash
|
||||||
$EDITOR ~/.config/hermes-stack-maintenance/config.env
|
$EDITOR ~/.config/hermes-stack-maintenance/config.env
|
||||||
$EDITOR ~/.config/hermes-stack-maintenance/llama.env
|
$EDITOR ~/.config/hermes-stack-maintenance/llama.env
|
||||||
|
# Bei Nutzung der lokalen Kompression:
|
||||||
|
$EDITOR ~/.config/hermes-stack-maintenance/compression.env
|
||||||
$EDITOR ~/.config/hermes-stack-maintenance/signal-cli.env
|
$EDITOR ~/.config/hermes-stack-maintenance/signal-cli.env
|
||||||
$EDITOR ~/.hermes/.env
|
$EDITOR ~/.hermes/.env
|
||||||
```
|
```
|
||||||
@@ -123,11 +128,17 @@ Start des llama-Dienstes geladen, nicht bei der Konfigurationsprüfung.
|
|||||||
~/.local/libexec/hermes-stack-llama-report
|
~/.local/libexec/hermes-stack-llama-report
|
||||||
```
|
```
|
||||||
|
|
||||||
`baseline` behält deine bisherigen 64K Kontext / 1536 MiB Fit-Zielmarge.
|
Für neue Konfigurationen ist `desktop-64k` der Standard: 64K Kontext,
|
||||||
`balanced` reduziert nur den Kontext auf 48K; `vram-plus` danach optional die
|
4096 MiB Fit-Zielmarge, Reasoning-Budget 128 ohne Reasoning-Preserve.
|
||||||
Marge auf 1280 MiB. `compact` bietet 32K bei 1536 MiB. Das sind Vergleichsprofile,
|
Das priorisiert Spielraum für Browser und Desktop auf einer gemeinsam genutzten
|
||||||
keine Garantie gegen Desktop-Speicherdruck. Details, Messprotokoll und Rücknahme:
|
GPU. Die früheren Profile bleiben für bewusste Vergleiche verfügbar.
|
||||||
[`docs/RTX3080.md`](docs/RTX3080.md).
|
Bestehende Konfigurationen werden nicht umgestellt. Bei expliziten `LLAMA_ARGS`
|
||||||
|
und leerem `LLAMA_PROFILE` wirken die Profile nicht.
|
||||||
|
|
||||||
|
Der optionale Dienst `llama-compression.service` verwendet eine eigene
|
||||||
|
`compression.env`, Port 8081 und CPU-Ausführung einschließlich KV-/Op-Offload.
|
||||||
|
Für beide Server werden Modellgewichte separat bereitgestellt. Einrichtung,
|
||||||
|
Messgrenzen und Migration: [`docs/RTX3080.md`](docs/RTX3080.md).
|
||||||
|
|
||||||
Profilwechsel ändern zunächst nur eine separate Auswahl-Datei. Ein Neustart
|
Profilwechsel ändern zunächst nur eine separate Auswahl-Datei. Ein Neustart
|
||||||
benötigt `hermes-stack-llama-restart --jobs-finished`. Der Healthcheck teilt das
|
benötigt `hermes-stack-llama-restart --jobs-finished`. Der Healthcheck teilt das
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Optionaler CPU-Kompressionsserver. Modellgewichte separat bereitstellen.
|
||||||
|
# Gleiche Binary-Auswahl wie beim Hauptmodell; bei Bedarf explizit setzen.
|
||||||
|
LLAMA_SERVER_BIN=""
|
||||||
|
LLAMA_MODEL="$HOME/.local/share/hermes-stack/models/qwen3-1.7b-compression/Qwen3-1.7B-Q4_K_M.gguf"
|
||||||
|
LLAMA_HF_REPO=""
|
||||||
|
LLAMA_MMPROJ=""
|
||||||
|
LLAMA_ALIAS="qwen3-1.7b-compression"
|
||||||
|
LLAMA_HOST="127.0.0.1"
|
||||||
|
LLAMA_PORT="8081"
|
||||||
|
LLAMA_PROFILE=""
|
||||||
|
LLAMA_ARGS=(
|
||||||
|
--ctx-size 65536 --rope-scaling yarn --rope-scale 2 --yarn-orig-ctx 32768
|
||||||
|
--parallel 1 --jinja --reasoning-budget 0 --no-reasoning-preserve
|
||||||
|
--n-gpu-layers 0 --device none --no-op-offload --no-kv-offload
|
||||||
|
--threads 8 --threads-batch 8 --flash-attn auto
|
||||||
|
--cache-type-k q8_0 --cache-type-v q8_0 --no-ui
|
||||||
|
)
|
||||||
|
# 64K-Kontext ist die übernommene Workstation-Konfiguration mit YaRN.
|
||||||
|
# Die Binary meldet Kontext über dem Trainingslimit; Qualität bei langen
|
||||||
|
# Kompressionsaufgaben auf dem Zielmodell gesondert prüfen.
|
||||||
@@ -9,5 +9,5 @@ LLAMA_HF_REPO=""
|
|||||||
LLAMA_ALIAS="qwen38-27b-local"
|
LLAMA_ALIAS="qwen38-27b-local"
|
||||||
LLAMA_HOST="127.0.0.1"
|
LLAMA_HOST="127.0.0.1"
|
||||||
LLAMA_PORT="8080"
|
LLAMA_PORT="8080"
|
||||||
LLAMA_PROFILE="baseline"
|
LLAMA_PROFILE="desktop-64k"
|
||||||
LLAMA_ARGS=()
|
LLAMA_ARGS=()
|
||||||
@@ -9,9 +9,9 @@ LLAMA_MMPROJ=""
|
|||||||
LLAMA_HOST="127.0.0.1"
|
LLAMA_HOST="127.0.0.1"
|
||||||
LLAMA_PORT="8080"
|
LLAMA_PORT="8080"
|
||||||
|
|
||||||
# Erster Start unverändert mit 64K / 1536 MiB Fit-Zielmarge.
|
# Standard für eine gemeinsam mit dem Desktop genutzte GPU: 64K / 4096 MiB.
|
||||||
# baseline bleibt Standard; vram-64k ist ein optionales Testprofil.
|
# Fit ist ein Planungsziel; die freie Reserve auf der Zielmaschine messen.
|
||||||
LLAMA_PROFILE="baseline"
|
LLAMA_PROFILE="desktop-64k"
|
||||||
LLAMA_ARGS=()
|
LLAMA_ARGS=()
|
||||||
# HF lädt beim ersten echten Start herunter. Für offline/reproduzierbar:
|
# HF lädt beim ersten echten Start herunter. Für offline/reproduzierbar:
|
||||||
# LLAMA_MODEL und optional LLAMA_MMPROJ setzen; LLAMA_HF_REPO leeren.
|
# LLAMA_MODEL und optional LLAMA_MMPROJ setzen; LLAMA_HF_REPO leeren.
|
||||||
@@ -11,7 +11,9 @@ außerhalb des Caches abgelegt und mit cmp gegen die Quellen geprüft.
|
|||||||
|
|
||||||
Nach Umstellung und kontrolliertem Neustart bestätigte das Serverlog beide
|
Nach Umstellung und kontrolliertem Neustart bestätigte das Serverlog beide
|
||||||
neuen Pfade. Eine Textanfrage lieferte OK, der Healthcheck Result=success.
|
neuen Pfade. Eine Textanfrage lieferte OK, der Healthcheck Result=success.
|
||||||
Profil baseline bleibt unverändert (65536 Kontext, 1536 MiB Fit-Zielmarge).
|
Historisch blieb damals baseline unverändert (65536 Kontext, 1536 MiB Fit-Zielmarge).
|
||||||
|
Seit 12.10.2026 gilt die größere Desktop-Reserve; siehe
|
||||||
|
[aktuellen Workstation-Abgleich](WORKSTATION.md#workstation-abgleich-vom-2026-10-12).
|
||||||
Damit sind Modellstart, kurze Textinferenz und leichte Gesundheitsprüfung
|
Damit sind Modellstart, kurze Textinferenz und leichte Gesundheitsprüfung
|
||||||
belegt; ein kompletter Bildjob und der Docker-Netzwerk-Canary wurden bei
|
belegt; ein kompletter Bildjob und der Docker-Netzwerk-Canary wurden bei
|
||||||
dieser Wiederherstellung noch nicht erneut getestet.
|
dieser Wiederherstellung noch nicht erneut getestet.
|
||||||
|
|||||||
+12
-1
@@ -56,7 +56,16 @@ betreiben. Für Parallelbetrieb die neue Maschine als separates Gerät verknüpf
|
|||||||
inklusive CLI und Benchmark) oder vorhandene Binary verwenden. Die GGUF-Datei
|
inklusive CLI und Benchmark) oder vorhandene Binary verwenden. Die GGUF-Datei
|
||||||
und einen ggf. benötigten Vision-Projektor übertragen oder beim ersten Start
|
und einen ggf. benötigten Vision-Projektor übertragen oder beim ersten Start
|
||||||
über HF beziehen. Danach
|
über HF beziehen. Danach
|
||||||
`~/.config/hermes-stack-maintenance/llama.env` anpassen. Modellgewichte gehören
|
`~/.config/hermes-stack-maintenance/llama.env` anpassen.
|
||||||
|
|
||||||
|
Für eine Workstation mit Desktop auf derselben GPU `desktop-64k` (64K,
|
||||||
|
4096 MiB Fit-Zielmarge) als Ausgangspunkt verwenden. Den optionalen lokalen
|
||||||
|
Kompressionsserver über `compression.env` auf CPU konfigurieren und seine
|
||||||
|
GGUF-Datei separat übertragen. Die vollständige Einrichtung und Abnahme steht
|
||||||
|
unter [Desktop-Reserve und CPU-Kompression](RTX3080.md#desktop-reserve-und-cpu-kompression-seit-12102026).
|
||||||
|
Auch die eigenen `~/.config/hermes-stack-maintenance/`-Dateien sichern und
|
||||||
|
gezielt übertragen; lokale Pfade, Binary-Auswahl und Profil-Override auf der
|
||||||
|
neuen Maschine prüfen. Keine vollständige systemd-Konfiguration blind kopieren. Modellgewichte gehören
|
||||||
wegen Größe und Lizenz nicht in dieses Repository.
|
wegen Größe und Lizenz nicht in dieses Repository.
|
||||||
|
|
||||||
Die RTX-3080-Profile sind für 10 GB VRAM und die bisherige CPU ausgelegt; auf
|
Die RTX-3080-Profile sind für 10 GB VRAM und die bisherige CPU ausgelegt; auf
|
||||||
@@ -70,6 +79,8 @@ NVIDIA-/Kernelpakete. Keine Binärkopie des alten CUDA-Builds erzwingen.
|
|||||||
hermes gateway install --force
|
hermes gateway install --force
|
||||||
systemctl --user daemon-reload
|
systemctl --user daemon-reload
|
||||||
systemctl --user enable --now signal-cli.service llama-qwen.service
|
systemctl --user enable --now signal-cli.service llama-qwen.service
|
||||||
|
# Nur nach Einrichtung der optionalen Kompression:
|
||||||
|
systemctl --user enable --now llama-compression.service
|
||||||
systemctl --user enable --now \
|
systemctl --user enable --now \
|
||||||
hermes-stack-hermes-update.timer \
|
hermes-stack-hermes-update.timer \
|
||||||
hermes-stack-health.timer \
|
hermes-stack-health.timer \
|
||||||
|
|||||||
+102
-7
@@ -9,17 +9,22 @@ helfen; weder Voll-Offload noch eine bestimmte Beschleunigung werden versprochen
|
|||||||
|
|
||||||
| Profil | Kontextlimit | Fit-Zielmarge | Einsatz |
|
| Profil | Kontextlimit | Fit-Zielmarge | Einsatz |
|
||||||
| --- | ---: | ---: | --- |
|
| --- | ---: | ---: | --- |
|
||||||
| `baseline` | 65536 | 1536 MiB | bisherige Startparameter, Referenz und Rückweg |
|
| `desktop-64k` | 65536 | 4096 MiB | Standard für Neuinstallationen mit Desktop auf derselben GPU |
|
||||||
|
| `baseline` | 65536 | 1536 MiB | historische Vergleichsparameter |
|
||||||
| `vram-64k` | 65536 | 1280 MiB | optionaler Vergleich, kein Standard |
|
| `vram-64k` | 65536 | 1280 MiB | optionaler Vergleich, kein Standard |
|
||||||
| `balanced` | 49152 | 1536 MiB | erster Vergleich, nur Kontext reduzieren |
|
| `balanced` | 49152 | 1536 MiB | erster Vergleich, nur Kontext reduzieren |
|
||||||
| `vram-plus` | 49152 | 1280 MiB | zweiter Vergleich, kleinere Zielmarge |
|
| `vram-plus` | 49152 | 1280 MiB | zweiter Vergleich, kleinere Zielmarge |
|
||||||
| `compact` | 32768 | 1536 MiB | Alternative für kürzere Sitzungen |
|
| `compact` | 32768 | 1536 MiB | Alternative für kürzere Sitzungen |
|
||||||
|
|
||||||
Alle Profile: ein Slot, K/V-Cache q8_0, Flash Attention auto, GPU-Layer auto,
|
Gemeinsam: ein Slot, K/V-Cache q8_0, Flash Attention auto, GPU-Layer auto,
|
||||||
Fit an, 6 Generierungs-/16 Batch-Threads, Jinja, Reasoning auto/512/preserve,
|
Fit an, 6 Generierungs-/16 Batch-Threads, Jinja, Reasoning auto,
|
||||||
Image-Minimum 1024 Tokens und Idle-Sleep nach 300 Sekunden. Modellalias bleibt
|
Image-Minimum 1024 Tokens und Idle-Sleep nach 300 Sekunden. Modellalias bleibt
|
||||||
`qwen38-27b-local`. Es werden keine Sampling-Werte oder Hermes-Memories geändert.
|
`qwen38-27b-local`. Es werden keine Sampling-Werte oder Hermes-Memories geändert.
|
||||||
|
|
||||||
|
`desktop-64k` verwendet Reasoning-Budget 128 ohne Preserve wie die am
|
||||||
|
12.10.2026 geprüfte Workstation. Die älteren Vergleichsprofile behalten 512 mit
|
||||||
|
Preserve; sie ändern neben der Speicherplanung auch diesen Parameter.
|
||||||
|
|
||||||
Die Definitionen stehen zentral in `libexec/hermes-stack-llama-run`.
|
Die Definitionen stehen zentral in `libexec/hermes-stack-llama-run`.
|
||||||
Die Konfiguration und Optionsnamen werden anhand der installierten Binary
|
Die Konfiguration und Optionsnamen werden anhand der installierten Binary
|
||||||
geprüft. Nicht unterstützte Optionen führen zum Abbruch, nicht zum stillen
|
geprüft. Nicht unterstützte Optionen führen zum Abbruch, nicht zum stillen
|
||||||
@@ -35,14 +40,15 @@ hier bewusst nicht als fertiges Profil vorgesehen.
|
|||||||
|
|
||||||
## Messung statt Auslastungsziel
|
## Messung statt Auslastungsziel
|
||||||
|
|
||||||
1. Zuerst `baseline` mit deiner normalen Browser-/Hyprland-Nutzung messen.
|
1. Zuerst `desktop-64k` mit deiner normalen Browser-/Hyprland-Nutzung messen.
|
||||||
2. Nur bei erneutem Tuning: Jobs beenden, ein Vergleichsprofil wählen
|
2. Nur bei erneutem Tuning: Jobs beenden, ein Vergleichsprofil wählen
|
||||||
und kontrolliert neu starten. Für 64K Kontext ist dies `vram-64k`.
|
und kontrolliert neu starten. Für 64K Kontext ist dies `vram-64k`.
|
||||||
3. Dieselben Aufgaben erneut ausführen: kurze Textantwort, längerer Agent-Task
|
3. Dieselben Aufgaben erneut ausführen: kurze Textantwort, längerer Agent-Task
|
||||||
mit Tools und eine repräsentative Bildaufgabe. Qualität mitbewerten.
|
mit Tools und eine repräsentative Bildaufgabe. Qualität mitbewerten.
|
||||||
4. Kalten Start nach Idle-Sleep getrennt von warmem Prompt-Cache messen.
|
4. Kalten Start nach Idle-Sleep getrennt von warmem Prompt-Cache messen.
|
||||||
5. Erst bei genügend Spielraum `vram-plus` probieren. Bei Rucklern, OOM,
|
5. Erst bei genügend Spielraum `vram-plus` probieren. Bei Rucklern, OOM,
|
||||||
Grafikfehlern oder deutlich schlechterer Latenz zurück auf `baseline`.
|
Grafikfehlern wieder die größere Reserve von `desktop-64k` verwenden.
|
||||||
|
Latenz und Qualität gegen die eigenen Anforderungen prüfen.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
~/.local/libexec/hermes-stack-llama-profile list
|
~/.local/libexec/hermes-stack-llama-profile list
|
||||||
@@ -80,10 +86,10 @@ zwingend automatisch. Lange alte Sitzungen nicht ungeprüft fortsetzen; eine
|
|||||||
frische Sitzung für den Vergleich verwenden. Das Deployment überschreibt deine
|
frische Sitzung für den Vergleich verwenden. Das Deployment überschreibt deine
|
||||||
`config.yaml` bewusst nicht.
|
`config.yaml` bewusst nicht.
|
||||||
|
|
||||||
## Rückkehr
|
## Zur größeren Desktop-Reserve zurückkehren
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
~/.local/libexec/hermes-stack-llama-profile baseline
|
~/.local/libexec/hermes-stack-llama-profile desktop-64k
|
||||||
~/.local/libexec/hermes-stack-llama-restart --jobs-finished
|
~/.local/libexec/hermes-stack-llama-restart --jobs-finished
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -98,3 +104,92 @@ für Fit-Marge, Kontext, Cache und Idle-Sleep; geprüft am 2026-09-05. Maßgebli
|
|||||||
für deinen Rechner bleibt `llama-server --help` seiner tatsächlich installierten
|
für deinen Rechner bleibt `llama-server --help` seiner tatsächlich installierten
|
||||||
Version. Die Profile übernehmen die von dir gezeigten Modellparameter; sie
|
Version. Die Profile übernehmen die von dir gezeigten Modellparameter; sie
|
||||||
sind noch kein auf deiner GPU gemessener Optimalwert.
|
sind noch kein auf deiner GPU gemessener Optimalwert.
|
||||||
|
|
||||||
|
## Desktop-Reserve und CPU-Kompression seit 12.10.2026
|
||||||
|
|
||||||
|
Auf der RTX 3080 mit NVIDIA Open 615.78.08 standen vor den GUI-Abstürzen
|
||||||
|
NVKMS-Allokationsfehler und `NV_ERR_NO_MEMORY` im Kerneljournal; danach folgten
|
||||||
|
anhaltende GSP-Zustandsfehler und Abstürze neuer GPU-Anwendungen. VRAM-Druck ist
|
||||||
|
belegt, die vollständige Kausalkette zum Treiberfehler nicht. Eine spätere
|
||||||
|
Momentaufnahme mit freiem Speicher schließt frühere Lastspitzen nicht aus.
|
||||||
|
|
||||||
|
Die aktive Workstation-Konfiguration wurde auf 4096 MiB Fit-Zielmarge geändert.
|
||||||
|
Das Kompressionsmodell bekam zusätzlich zu `--n-gpu-layers 0` die Optionen
|
||||||
|
`--device none --no-op-offload --no-kv-offload`. Nur null GPU-Layer hatte zuvor
|
||||||
|
noch etwa 700 MiB VRAM belegt. `MemoryHigh`/`MemoryMax` begrenzen RAM, nicht VRAM.
|
||||||
|
|
||||||
|
Kurze produktive Abnahme am 12.10.2026: CPU-Kompression antwortet, Hauptmodell
|
||||||
|
verarbeitet einen Text mit 984 Eingabetokens und erkennt ein synthetisches
|
||||||
|
96×96-Bild. Mindestens 4096 MiB VRAM frei während dieser Tests; keine neuen
|
||||||
|
NVIDIA-/CUDA-OOM-Fehler im Prüfzeitraum. Kein Nachweis langfristiger
|
||||||
|
Treiberstabilität, maximaler Kontext-/Bildlast oder einer bestimmten Leistung.
|
||||||
|
Das Hauptmodell behält 64K Kontext und GPU-Visionprojektor. Bei weiterem
|
||||||
|
Speicherdruck zuerst Reserve messen; optional `--no-mmproj-offload` prüfen,
|
||||||
|
Kontextkürzungen mit Hermes abstimmen. Mehr CPU-Offload kann langsamer sein.
|
||||||
|
|
||||||
|
### Auf einer neuen Workstation einrichten
|
||||||
|
|
||||||
|
Nach `./install.sh` und Bereitstellung der Modellgewichte:
|
||||||
|
|
||||||
|
1. In `llama.env` Binary/Modell/Projektor setzen; `LLAMA_PROFILE="desktop-64k"`
|
||||||
|
und `LLAMA_ARGS=()` verwenden. Ein eventuell aus dem alten Rechner kopiertes
|
||||||
|
`llama-profile.env` kann die Profilwahl überschreiben. Über den Profilhelfer
|
||||||
|
bewusst `desktop-64k` wählen. Die lokale Modellvorlage verwendet `$HOME`.
|
||||||
|
2. In `compression.env` CPU-Binary bzw. die gemeinsame CUDA-Binary, Modellpfad
|
||||||
|
und Port prüfen. Die CUDA-Binary kann mit `--device none` auf CPU rechnen.
|
||||||
|
3. Beide Konfigurationen ohne Modellstart prüfen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
~/.local/libexec/hermes-stack-llama-run --check
|
||||||
|
HERMES_LLAMA_CONFIG="$HOME/.config/hermes-stack-maintenance/compression.env" \
|
||||||
|
~/.local/libexec/hermes-stack-llama-run --check
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Hermes' Hauptmodell auf `http://127.0.0.1:8080/v1`, Alias
|
||||||
|
`qwen38-27b-local`, und den separaten Kompressionsanbieter auf
|
||||||
|
`http://127.0.0.1:8081/v1`, Alias `qwen3-1.7b-compression`, konfigurieren.
|
||||||
|
Bestehende `config.yaml` übernehmen und mit der installierten Hermes-Version
|
||||||
|
abgleichen; keine Zugangsdaten oder allgemeine Modellantworten überschreiben.
|
||||||
|
5. Erst ohne laufende Backend-Aufträge aktivieren:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable --now llama-compression.service llama-qwen.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Bei bereits laufenden Diensten aktiviert `enable --now` keine neuen
|
||||||
|
Einstellungen: nach Abschluss aller Anfragen gezielt neu starten.
|
||||||
|
|
||||||
|
6. Mit normalem Browser-/Desktopbetrieb Text- und Bildanfragen prüfen und
|
||||||
|
`nvidia-smi` im Sekundentakt beobachten. Für diese 10-GB-Klasse mindestens
|
||||||
|
etwa 3 GiB tatsächlich freie Reserve unter den eigenen Aufgaben anstreben;
|
||||||
|
4096 MiB Fit-Zielmarge ist nur der Ausgangspunkt. CPU-Kompression sollte
|
||||||
|
nicht als NVIDIA-Verbraucher erscheinen. Journal auf neue CUDA-OOM-, NVKMS-
|
||||||
|
und GSP-Fehler prüfen. Aufwachen nach Idle-Sleep separat testen.
|
||||||
|
|
||||||
|
Die Unit-Vorlage verwendet den üblichen Konfigurationspfad unter `~/.config`.
|
||||||
|
Bei abweichendem `XDG_CONFIG_HOME` den Environment-Pfad in der Unit ebenfalls
|
||||||
|
anpassen. Auch vorhandene `ExecStart`-Drop-ins vor der Übernahme prüfen.
|
||||||
|
|
||||||
|
Der Installer installiert den Kompressionsdienst, aktiviert ihn aber nicht und
|
||||||
|
lädt keine Kompressionsgewichte herunter. Fehlende `compression.env` wird
|
||||||
|
angelegt, eine bestehende Datei bleibt erhalten. Die alte Workstation nutzt
|
||||||
|
aktuell explizite Argumente im Hauptmodell und eine direkte Kompressions-Unit;
|
||||||
|
diese portable Repo-Variante bildet die wirksamen Optionen ab. Ein erneuter
|
||||||
|
Installerlauf ersetzt Units/Wrapper nach Sicherung, startet aber keine laufenden
|
||||||
|
Modellserver neu. Für bestehende Setups deshalb zuerst sichern und den geplanten
|
||||||
|
Dienstwechsel ohne laufende Anfragen durchführen.
|
||||||
|
|
||||||
|
### Rücknahme auf einer Zielmaschine
|
||||||
|
|
||||||
|
Vor Änderungen `llama.env`, `llama-profile.env` (falls vorhanden),
|
||||||
|
`compression.env` und bestehende Units/Drop-ins sichern. Die Installer-Sicherung
|
||||||
|
enthält ersetzte Units/Wrapper; unveränderte Konfigurationen separat sichern.
|
||||||
|
Bei Rücknahme die betroffenen Dateien gezielt wiederherstellen, `daemon-reload`
|
||||||
|
ausführen und die beiden Server nach Abschluss der Anfragen neu starten.
|
||||||
|
Die früheren Profile sind Vergleichsmöglichkeiten, kein bewiesener stabiler
|
||||||
|
Rückfallweg bei Speicherdruck.
|
||||||
|
|
||||||
|
Quellen: [llama.cpp: Serveroptionen](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md),
|
||||||
|
[ähnlicher NVIDIA-GSP-Bericht](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/1408).
|
||||||
|
Der dort genannte Display-Wakeup-Auslöser ist lokal nicht bewiesen.
|
||||||
@@ -1,3 +1,16 @@
|
|||||||
|
# Validierung vom 2026-10-12
|
||||||
|
|
||||||
|
- `make test`: Shell-Syntaxprüfung, Secret-Mustercheck und **26 isolierte
|
||||||
|
Funktionstests bestanden**, einschließlich separater CPU-Kompressionskonfiguration.
|
||||||
|
- `git diff --check`: erfolgreich.
|
||||||
|
- Neue Profil- und Kompressionsvorlagen mit der installierten llama.cpp-Binary
|
||||||
|
auf unterstützte Optionsnamen geprüft, ohne Modellstart.
|
||||||
|
- ShellCheck ist lokal nicht installiert; weiterhin über Gitea-CI vorgesehen.
|
||||||
|
- Die aktive Workstation-Konfiguration wurde vor der Repo-Änderung mit echten
|
||||||
|
Text-/Bildanfragen und mindestens 4096 MiB freiem VRAM geprüft. Die portablen
|
||||||
|
Installer-/Wrapperdateien wurden nicht erneut auf den laufenden Rechner
|
||||||
|
installiert. Keine neue Workstation eingerichtet und kein Langzeitnachweis.
|
||||||
|
|
||||||
# Validierung vom 2026-09-05
|
# Validierung vom 2026-09-05
|
||||||
|
|
||||||
Ausgeführt in einer isolierten Arbeitsumgebung, nicht auf der Workstation:
|
Ausgeführt in einer isolierten Arbeitsumgebung, nicht auf der Workstation:
|
||||||
|
|||||||
+24
-3
@@ -60,7 +60,7 @@ LLAMA_ALIAS="qwen38-27b-local"
|
|||||||
LLAMA_MMPROJ=""
|
LLAMA_MMPROJ=""
|
||||||
LLAMA_HOST="127.0.0.1"
|
LLAMA_HOST="127.0.0.1"
|
||||||
LLAMA_PORT="8080"
|
LLAMA_PORT="8080"
|
||||||
LLAMA_PROFILE="baseline"
|
LLAMA_PROFILE="desktop-64k"
|
||||||
LLAMA_ARGS=()
|
LLAMA_ARGS=()
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -90,7 +90,8 @@ der neue Standard: HTTP-Probleme werden gemeldet, nicht durch Neustarts behandel
|
|||||||
## 3. Optimieren und zurücksetzen
|
## 3. Optimieren und zurücksetzen
|
||||||
|
|
||||||
Nun gemäß [RTX3080.md](RTX3080.md) jeweils nur ein Profil vergleichen. Zurück:
|
Nun gemäß [RTX3080.md](RTX3080.md) jeweils nur ein Profil vergleichen. Zurück:
|
||||||
Profil `baseline` wählen und kontrolliert neustarten. Für vollständige Rückkehr
|
Bei Speicherdruck die größere Reserve von `desktop-64k` verwenden. Die
|
||||||
|
früheren Vergleichsprofile bieten keine Stabilitätsgarantie. Für vollständige Rückkehr
|
||||||
alte llama.env und ggf. alte Unit/Wrapper aus der Deployment-Sicherung einzeln
|
alte llama.env und ggf. alte Unit/Wrapper aus der Deployment-Sicherung einzeln
|
||||||
wiederherstellen, `daemon-reload` und Neustart nach Jobende. Nicht pauschal ein
|
wiederherstellen, `daemon-reload` und Neustart nach Jobende. Nicht pauschal ein
|
||||||
Archiv über dein gesamtes Home extrahieren. Die Datei `llama-profile.env` hat nur
|
Archiv über dein gesamtes Home extrahieren. Die Datei `llama-profile.env` hat nur
|
||||||
@@ -98,7 +99,7 @@ bei aktivem Profilbetrieb Vorrang; ihre vorherigen Stände liegen daneben.
|
|||||||
|
|
||||||
## Workstation-Abgleich vom 2026-09-09
|
## Workstation-Abgleich vom 2026-09-09
|
||||||
|
|
||||||
Alltagsprofil bleibt baseline: 65536 Kontext, Fit-Zielmarge 1536 MiB.
|
Historischer Stand (durch den Abgleich vom 12.10.2026 abgelöst): baseline, 65536 Kontext, Fit-Zielmarge 1536 MiB.
|
||||||
Die zwei kurzen Texttests vom 5. September ergaben im Mittel rund 2,58 tok/s
|
Die zwei kurzen Texttests vom 5. September ergaben im Mittel rund 2,58 tok/s
|
||||||
für baseline und 2,62 tok/s für vram-64k. Das belegt keinen belastbaren
|
für baseline und 2,62 tok/s für vram-64k. Das belegt keinen belastbaren
|
||||||
Geschwindigkeitsvorteil. Im fünfminütigen Desktop-/Bildtest mit vram-64k
|
Geschwindigkeitsvorteil. Im fünfminütigen Desktop-/Bildtest mit vram-64k
|
||||||
@@ -126,3 +127,23 @@ Ein echter Update-/Rollback-Lauf der neuen Fassung war damit noch nicht geprüft
|
|||||||
Modell und Projektor liegen jetzt außerhalb von ~/.cache. Die korrigierten
|
Modell und Projektor liegen jetzt außerhalb von ~/.cache. Die korrigierten
|
||||||
Cleanup-Skripte sind unter ~/Scripts installiert. Details und Prüfgrenzen:
|
Cleanup-Skripte sind unter ~/Scripts installiert. Details und Prüfgrenzen:
|
||||||
[CLEANUP_RECOVERY.md](CLEANUP_RECOVERY.md).
|
[CLEANUP_RECOVERY.md](CLEANUP_RECOVERY.md).
|
||||||
|
|
||||||
|
|
||||||
|
## Workstation-Abgleich vom 2026-10-12
|
||||||
|
|
||||||
|
Nach NVIDIA-Speicherallokationsfehlern und GUI-Abstürzen wurde der aktive
|
||||||
|
Hauptserver auf 4096 MiB Fit-Zielmarge bei unverändert 65536 Kontext umgestellt.
|
||||||
|
Die aktive `llama.env` enthält dafür explizite `LLAMA_ARGS` bei leerem
|
||||||
|
`LLAMA_PROFILE`; Profilwechsel wirken dort erst nach bewusster Umstellung auf
|
||||||
|
Profilbetrieb. Reasoning: auto, Budget 128, kein Preserve.
|
||||||
|
|
||||||
|
Die bestehende Kompressions-Unit wurde um `--device none --no-op-offload
|
||||||
|
--no-kv-offload` ergänzt. Der vorher mit null GPU-Layern weiterhin belegte
|
||||||
|
VRAM wurde freigegeben. Kurze Text-/Bildtests bestanden mit mindestens 4096 MiB
|
||||||
|
freiem VRAM und ohne neue NVIDIA-/CUDA-OOM-Fehler. Langzeitstabilität bleibt offen.
|
||||||
|
|
||||||
|
Diese aktiven Änderungen wurden separat installiert. Die neuen portablen
|
||||||
|
Repo-Dateien wurden danach aufgenommen und getestet, aber nicht erneut über
|
||||||
|
`install.sh` auf die Workstation ausgerollt. Der aktuelle Betrieb bleibt bei den
|
||||||
|
bereits geprüften Einstellungen. Details zur Übertragung und zu bestehenden
|
||||||
|
Units/Drop-ins stehen in [RTX3080.md](RTX3080.md).
|
||||||
@@ -105,6 +105,8 @@ install_config_if_missing \
|
|||||||
"$ROOT_DIR/config/config.env.example" "$config_dir/config.env"
|
"$ROOT_DIR/config/config.env.example" "$config_dir/config.env"
|
||||||
install_config_if_missing \
|
install_config_if_missing \
|
||||||
"$ROOT_DIR/config/llama.env.example" "$config_dir/llama.env"
|
"$ROOT_DIR/config/llama.env.example" "$config_dir/llama.env"
|
||||||
|
install_config_if_missing \
|
||||||
|
"$ROOT_DIR/config/compression.env.example" "$config_dir/compression.env"
|
||||||
install_config_if_missing \
|
install_config_if_missing \
|
||||||
"$ROOT_DIR/config/signal-cli.env.example" "$config_dir/signal-cli.env"
|
"$ROOT_DIR/config/signal-cli.env.example" "$config_dir/signal-cli.env"
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ runner="$(dirname -- "${BASH_SOURCE[0]}")/hermes-stack-llama-run"
|
|||||||
case "${1:-list}" in
|
case "${1:-list}" in
|
||||||
list)
|
list)
|
||||||
printf '%-12s %8s %10s\n' Profil Kontext Fit-MiB \
|
printf '%-12s %8s %10s\n' Profil Kontext Fit-MiB \
|
||||||
baseline 65536 1536 vram-64k 65536 1280 \
|
desktop-64k 65536 4096 baseline 65536 1536 vram-64k 65536 1280 \
|
||||||
balanced 49152 1536 vram-plus 49152 1280 compact 32768 1536
|
balanced 49152 1536 vram-plus 49152 1280 compact 32768 1536
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
baseline|vram-64k|balanced|vram-plus|compact) selected="$1" ;;
|
desktop-64k|baseline|vram-64k|balanced|vram-plus|compact) selected="$1" ;;
|
||||||
*)
|
*)
|
||||||
printf 'Unbekanntes Profil. Verfügbare Profile: %s list\n' "$0" >&2
|
printf 'Unbekanntes Profil. Verfügbare Profile: %s list\n' "$0" >&2
|
||||||
exit 2 ;;
|
exit 2 ;;
|
||||||
|
|||||||
@@ -72,7 +72,10 @@ fi
|
|||||||
|
|
||||||
profile_args=()
|
profile_args=()
|
||||||
if [[ -n "${LLAMA_PROFILE:-}" ]]; then
|
if [[ -n "${LLAMA_PROFILE:-}" ]]; then
|
||||||
|
reasoning_budget=512
|
||||||
|
reasoning_preserve=--reasoning-preserve
|
||||||
case "$LLAMA_PROFILE" in
|
case "$LLAMA_PROFILE" in
|
||||||
|
desktop-64k) ctx=65536; margin=4096; reasoning_budget=128; reasoning_preserve=--no-reasoning-preserve ;;
|
||||||
baseline) ctx=65536; margin=1536 ;;
|
baseline) ctx=65536; margin=1536 ;;
|
||||||
vram-64k) ctx=65536; margin=1280 ;;
|
vram-64k) ctx=65536; margin=1280 ;;
|
||||||
balanced) ctx=49152; margin=1536 ;;
|
balanced) ctx=49152; margin=1536 ;;
|
||||||
@@ -86,7 +89,7 @@ if [[ -n "${LLAMA_PROFILE:-}" ]]; then
|
|||||||
|
|
||||||
profile_args=(
|
profile_args=(
|
||||||
--ctx-size "$ctx" --parallel 1 --jinja
|
--ctx-size "$ctx" --parallel 1 --jinja
|
||||||
--reasoning auto --reasoning-budget 512 --reasoning-preserve
|
--reasoning auto --reasoning-budget "$reasoning_budget" "$reasoning_preserve"
|
||||||
--flash-attn auto --threads 6 --threads-batch 16
|
--flash-attn auto --threads 6 --threads-batch 16
|
||||||
--n-gpu-layers auto --fit on --fit-target "$margin"
|
--n-gpu-layers auto --fit on --fit-target "$margin"
|
||||||
--cache-type-k q8_0 --cache-type-v q8_0
|
--cache-type-k q8_0 --cache-type-v q8_0
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Hermes auxiliary compression LLM (CPU)
|
||||||
|
After=default.target
|
||||||
|
StartLimitIntervalSec=300
|
||||||
|
StartLimitBurst=3
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Environment=HERMES_LLAMA_CONFIG=%h/.config/hermes-stack-maintenance/compression.env
|
||||||
|
ExecStart=%h/.local/libexec/hermes-stack-llama-run
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=30
|
||||||
|
Nice=10
|
||||||
|
MemoryHigh=8G
|
||||||
|
MemoryMax=12G
|
||||||
|
OOMPolicy=stop
|
||||||
|
TimeoutStopSec=60
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
+27
-3
@@ -13,9 +13,10 @@ RUNNER = ROOT / "libexec/hermes-stack-llama-run"
|
|||||||
PROFILE = ROOT / "libexec/hermes-stack-llama-profile"
|
PROFILE = ROOT / "libexec/hermes-stack-llama-profile"
|
||||||
RESTART = ROOT / "libexec/hermes-stack-llama-restart"
|
RESTART = ROOT / "libexec/hermes-stack-llama-restart"
|
||||||
OPTIONS = """--model --hf-repo --mmproj --alias --host --port --ctx-size --parallel
|
OPTIONS = """--model --hf-repo --mmproj --alias --host --port --ctx-size --parallel
|
||||||
--jinja --reasoning --reasoning-budget --reasoning-preserve --flash-attn --threads
|
--jinja --reasoning --reasoning-budget --reasoning-preserve --no-reasoning-preserve --flash-attn --threads
|
||||||
--threads-batch --n-gpu-layers --fit --fit-target --cache-type-k --cache-type-v
|
--threads-batch --n-gpu-layers --fit --fit-target --cache-type-k --cache-type-v
|
||||||
--sleep-idle-seconds --image-min-tokens --cors-origins --no-ui"""
|
--sleep-idle-seconds --image-min-tokens --cors-origins --no-ui --rope-scaling --rope-scale --yarn-orig-ctx
|
||||||
|
--device --no-op-offload --no-kv-offload"""
|
||||||
|
|
||||||
|
|
||||||
class LlamaTests(unittest.TestCase):
|
class LlamaTests(unittest.TestCase):
|
||||||
@@ -72,7 +73,8 @@ class LlamaTests(unittest.TestCase):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def test_profile_values(self):
|
def test_profile_values(self):
|
||||||
for name, ctx, margin in [("baseline", "65536", "1536"),
|
for name, ctx, margin in [("desktop-64k", "65536", "4096"),
|
||||||
|
("baseline", "65536", "1536"),
|
||||||
("vram-64k", "65536", "1280"),
|
("vram-64k", "65536", "1280"),
|
||||||
("balanced", "49152", "1536"),
|
("balanced", "49152", "1536"),
|
||||||
("vram-plus", "49152", "1280"),
|
("vram-plus", "49152", "1280"),
|
||||||
@@ -85,6 +87,28 @@ class LlamaTests(unittest.TestCase):
|
|||||||
self.assertEqual(args.count("--ctx-size"), 1)
|
self.assertEqual(args.count("--ctx-size"), 1)
|
||||||
self.assertIn("qwen38-27b-local", args)
|
self.assertIn("qwen38-27b-local", args)
|
||||||
|
|
||||||
|
def test_cpu_compression_template_uses_separate_config(self):
|
||||||
|
model = self.root / "compression model.gguf"
|
||||||
|
model.touch()
|
||||||
|
template = (ROOT / "config/compression.env.example").read_text()
|
||||||
|
template = template.replace('LLAMA_SERVER_BIN=""',
|
||||||
|
f'LLAMA_SERVER_BIN={shlex.quote(str(self.server))}')
|
||||||
|
template = template.replace(
|
||||||
|
'LLAMA_MODEL="$HOME/.local/share/hermes-stack/models/qwen3-1.7b-compression/Qwen3-1.7B-Q4_K_M.gguf"',
|
||||||
|
f'LLAMA_MODEL={shlex.quote(str(model))}')
|
||||||
|
config = self.config / "compression.env"
|
||||||
|
config.write_text(template)
|
||||||
|
self.env["HERMES_LLAMA_CONFIG"] = str(config)
|
||||||
|
self.run_tool(RUNNER)
|
||||||
|
args = self.record.read_text().splitlines()
|
||||||
|
self.assertEqual(args[args.index("--port") + 1], "8081")
|
||||||
|
self.assertEqual(args[args.index("--device") + 1], "none")
|
||||||
|
self.assertIn("--no-op-offload", args)
|
||||||
|
self.assertIn("--no-kv-offload", args)
|
||||||
|
self.assertIn(str(model), args)
|
||||||
|
self.assertNotIn("qwen38-27b-local", args)
|
||||||
|
self.assertNotIn("--fit-target", args)
|
||||||
|
|
||||||
def test_check_does_not_run_inference(self):
|
def test_check_does_not_run_inference(self):
|
||||||
self.run_tool(RUNNER, "--check")
|
self.run_tool(RUNNER, "--check")
|
||||||
self.assertFalse(self.record.exists())
|
self.assertFalse(self.record.exists())
|
||||||
|
|||||||
+3
-1
@@ -8,9 +8,11 @@ units=(
|
|||||||
hermes-stack-health.service hermes-stack-health.timer
|
hermes-stack-health.service hermes-stack-health.timer
|
||||||
hermes-stack-signal-health.service hermes-stack-signal-health.timer
|
hermes-stack-signal-health.service hermes-stack-signal-health.timer
|
||||||
hermes-stack-signal-update-check.service hermes-stack-signal-update-check.timer
|
hermes-stack-signal-update-check.service hermes-stack-signal-update-check.timer
|
||||||
llama-qwen.service signal-cli.service
|
llama-qwen.service llama-compression.service signal-cli.service
|
||||||
)
|
)
|
||||||
|
|
||||||
|
systemctl --user disable --now llama-compression.service 2>/dev/null || true
|
||||||
|
|
||||||
systemctl --user disable --now \
|
systemctl --user disable --now \
|
||||||
hermes-stack-hermes-update.timer \
|
hermes-stack-hermes-update.timer \
|
||||||
hermes-stack-health.timer \
|
hermes-stack-health.timer \
|
||||||
|
|||||||
Reference in new issue
Block a user