docs: GPU-Belegung richtiggestellt (T600 zu klein, Strata auf GPU 1+2, TTS auf GPU 2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-16 11:45:37 +02:00
commit b097bdeed8
3 changed files with 43 additions and 25 deletions

View file

@ -127,14 +127,16 @@ Der Server läuft standardmäßig auf **GPU 1** (überschreibbar):
```bash
./start-coding-server.sh # GPU 1 (Standard)
GPU_DEVICE=0 ./start-coding-server.sh # GPU 0
GPU_DEVICE=2 ./start-coding-server.sh # die zweite RTX 3090
```
Auf einem System mit mehreren GPUs empfiehlt es sich, GPU 0 (Display) freizuhalten
und GPU 1 für den KI-Server zu verwenden.
Auf diesem Rechner ist GPU 0 eine T600 mit 4 GB (Display, Bild-Encoder von Strata) und für das Modell zu klein.
Der Container braucht eine RTX 3090 (GPU 1 oder 2) und läuft nur, solange Strata entladen oder gestoppt ist; lädt
Strata, stoppt `gpu-freigeben.sh` den Container vorher. Belegung und Freigabe:
`~/nvme2n1p7_home/strata-betrieb/BEDIENUNGSANLEITUNG.md`, „GPUs teilen“.
**Wichtig:** Andere GPU-Prozesse (z. B. TTS-Dienste, Ollama) auf der verwendeten GPU
können VRAM belegen und dazu führen, dass der Server nicht startet. Im Zweifel prüfen:
**Wichtig:** Andere GPU-Prozesse auf der verwendeten GPU (ein geladenes Strata, Ollama-Modelle, auf GPU 2 auch die
TTS/STT-Dienste) belegen VRAM und können verhindern, dass der Server startet. Im Zweifel prüfen:
```bash
nvidia-smi --query-gpu=index,name,memory.used,memory.free --format=csv
```
@ -986,7 +988,9 @@ HF_HOME=/korrekter/pfad ./start-coding-server.sh
**Ursachen und Lösungen:**
1. Zu wenig VRAM — Container bricht beim Laden ab:
1. Zu wenig VRAM — Container bricht beim Laden ab. Häufigste Ursache: Strata hat das Modell geladen und belegt
GPU 1 und 2 (`~/nvme2n1p7_home/strata-betrieb/scripts/strata.sh status`; entladen mit
`curl -X POST -H "Content-Type: application/json" http://127.0.0.1:9090/unload`). Sonst:
```bash
docker logs coding_model | tail -50
# Suche nach: "CUDA out of memory" oder "failed to allocate"
@ -998,8 +1002,8 @@ HF_HOME=/korrekter/pfad ./start-coding-server.sh
nvidia-smi # GPU sichtbar?
# GPU 1 testen:
docker run --gpus '"device=1"' --rm nvidia/cuda:12.0-base nvidia-smi
# Andere GPU testen:
GPU_DEVICE=0 ./start-coding-server.sh
# Die zweite RTX 3090 testen:
GPU_DEVICE=2 ./start-coding-server.sh
```
3. Port 8001 bereits belegt:

View file

@ -5,6 +5,12 @@ Alle wichtigen Änderungen an pi_coder. Format: [Keep a Changelog](https://keepa
## [Unreleased]
### Behoben (16.10.2026, Doku)
- README und BEDIENUNGSANLEITUNG: GPU-Belegung falsch beschrieben („nur GPU 1 für KI“, GPU 0 als Ausweich- oder
Zweit-GPU). Richtig: GPU 0 ist eine T600 mit 4 GB (Display, Bild-Encoder von Strata) und für das Modell zu klein;
Strata belegt GPU 1 und 2; die TTS/STT-Dienste liegen auf GPU 2; der llama.cpp-Container läuft nur ohne geladenes
Strata (Ausweich-GPU `GPU_DEVICE=2`, beide RTX 3090 mit `device=1,2`).
### Hinzugefügt
- `mcp.json` im Repo (MCP-Server `playwright@0.0.83` und `context7-mcp@4.1.1`, Key nur als
`${CONTEXT7_API_KEY}`); `deploy-pi-config.sh` verlinkt sie nach `~/.pi/agent/mcp.json`. Tests prüfen feste Versionen

View file

@ -89,7 +89,7 @@ Danach pi im Projektordner starten. Was das Skript genau tut und wie man das Mod
```bash
./start-coding-server.sh # startet den Container coding_model, wartet bis HTTP bereit (bis 5 min)
GPU_DEVICE=0 ./start-coding-server.sh
GPU_DEVICE=2 ./start-coding-server.sh # die zweite RTX 3090 statt GPU 1
./stop-coding-server.sh
./status-coding-server.sh
```
@ -121,24 +121,28 @@ Coder und Judge nutzen ihn mit `PI_CODER_MODEL=llama-cpp-single/coding_model pi`
| `-n 16384` | 16K | Maximale Ausgabelänge. |
| `--temp 0.2` | — | Deterministisch — Coder-Rolle. Der Judge-System-Prompt gleicht die etwas höhere Temperatur aus. |
| `--parallel 2` | — | 2 Slots, damit pi agent Folgeanfragen schnell hintereinander stellen kann. |
| `--gpus '"device=1"'` | — | Standard: GPU 1. Überschreibbar: `GPU_DEVICE=0 ./start-coding-server.sh`. |
| `--gpus '"device=1"'` | — | Standard: GPU 1 (RTX 3090). Überschreibbar: `GPU_DEVICE=2 ./start-coding-server.sh` (zweite RTX 3090). GPU 0 (T600, 4 GB) ist für das Modell zu klein. |
---
## GPU-Konfiguration und VRAM
### Aktuelles Setup (1 GPU, 1 Server)
Ein einzelner Container bedient beide Rollen sequenziell:
### GPU-Belegung auf diesem Rechner
```
GPU 0 NVIDIA T600 → Display / Monitor (nicht für KI genutzt)
GPU 1 RTX 3090 (24 GB) → coding_model (Port 8001, Coder + Judge)
GPU 0 NVIDIA T600 (4 GB) → Display; Bild-Encoder von Strata (strata-vision, rund 1,1 GB)
GPU 1 RTX 3090 (24 GB) → Strata, erste Hälfte der Schichten (Standardmodell für Coder + Judge)
GPU 2 RTX 3090 (24 GB) → Strata, zweite Hälfte; ohne geladenes Strata: TTS/STT-Dienste (per UUID fest)
```
Da Coder und Judge nicht gleichzeitig inferieren, gibt es keinen VRAM-Konflikt.
Die Umschaltung zwischen den Rollen erfolgt ausschließlich über den System-Prompt —
der Container läuft ohne Unterbrechung durch.
Strata belegt GPU 1 und 2 nur, solange das Modell geladen ist, und entlädt es nach 10 Minuten ohne Anfrage. Vor
jedem Laden stoppt `gpu-freigeben.sh` die TTS/STT-Dienste und den Container `coding_model` und entlädt die
Ollama-Modelle; nach dem Entladen startet `strata-wache` die Dienste wieder. Details:
`~/nvme2n1p7_home/strata-betrieb/BEDIENUNGSANLEITUNG.md`, „GPUs teilen“.
**Alternative llama.cpp-Server:** Ein Container `coding_model` (Port 8001) auf GPU 1 bedient beide Rollen
nacheinander; die Umschaltung erfolgt über den System-Prompt. Er läuft nur, solange Strata entladen oder gestoppt ist,
denn Strata braucht GPU 1 und 2 fast voll; lädt Strata, stoppt `gpu-freigeben.sh` den Container.
### VRAM-Abschätzung für das 27B IQ4_XS-Modell
@ -150,8 +154,9 @@ der Container läuft ohne Unterbrechung durch.
| KV-Cache bei 65 536 Tokens (q4_0) | ~2–3 GB |
| **Summe (262k Kontext)** | **~22–24 GB** |
Bei einer **24-GB-GPU** ist 262k Kontext knapp kalkuliert. Keine anderen Prozesse
dürfen nennenswert VRAM belegen (z. B. TTS-Dienste, Ollama). Prüfen mit:
Bei einer **24-GB-GPU** ist 262k Kontext knapp kalkuliert. Auf der gewählten GPU darf sonst nichts nennenswert
VRAM belegen – vor allem kein geladenes Strata und keine Ollama-Modelle; auf GPU 2 liegen zusätzlich die
TTS/STT-Dienste. Prüfen mit:
```bash
nvidia-smi --query-gpu=index,memory.used,memory.free --format=csv
```
@ -161,17 +166,20 @@ Falls der VRAM nicht reicht: Kontext in `start-coding-server.sh` auf `131072` od
### Anpassung für andere GPU-Konfigurationen
```bash
# Andere GPU verwenden:
GPU_DEVICE=0 ./start-coding-server.sh
# Die zweite RTX 3090 statt GPU 1:
GPU_DEVICE=2 ./start-coding-server.sh
# 2 GPUs für einen Server (sehr großer Kontext):
# start-coding-server.sh anpassen:
--gpus '"device=0,1"' \
# Beide RTX 3090 für einen Server (größerer Kontext oder größeres Modell) – start-coding-server.sh anpassen:
--gpus '"device=1,2"' \
--tensor-split 0.5,0.5 \
--main-gpu 0 \
-c 262144
```
`--main-gpu 0` meint die erste GPU, die der Container sieht, hier also GPU 1. Beide RTX 3090 sind nur frei, wenn
Strata gestoppt ist (`~/nvme2n1p7_home/strata-betrieb/scripts/strata.sh stop`). GPU 0 (T600, 4 GB) ist für das
27B-Modell zu klein und bleibt dem Display und dem Bild-Encoder von Strata vorbehalten.
---
## Parameter-Tuning-Guide