Files
boc/intelligence/build-a2-vram-konflikt.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

294 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BUILD-A2: VRAM-konflikt GPU-box — Analys & Strategi
**Datum:** 2026-06-06 21:32 UTC
**GPU-box:** ubuntu@172.31.36.61 (NVIDIA A10G, 23 028 MiB VRAM)
---
## 1. Nuläge (faktisk nvidia-smi)
```
NVIDIA A10G | Persistence-M: On | 30°C | P0 | 60W/300W
Memory: 19699 MiB / 23028 MiB (85,5% VRAM upptaget)
Processes:
PID 8873 VLLM::EngineCore 19690 MiB
```
**Vad körs exakt (ps aux):**
```
PID 8817: bash -c "source ~/eslm-venv/bin/activate && vllm serve ~/aamos_merged
--served-model-name aamos-eslm --host 0.0.0.0 --port 8000
--max-model-len 8192 --quantization bitsandbytes --enforce-eager
--gpu-memory-utilization 0.85"
PID 8818: /home/ubuntu/eslm-venv/bin/python3 ... (API-servern)
PID 8873: VLLM::EngineCore (den som äger VRAM:en)
```
**Trafikstatus:** vLLM servar aktivt — loggarna visar POST-anrop från `172.31.35.76` (red-team-maskinen) med 10-sekunders-mellanrum så sent som 21:01:01 UTC. Red-team är **aktivt pågående**.
**Modell som serveras:** `~/aamos_merged` — detta är den mergade 4-bit BitsAndBytes-kvantiserade Qwen2.5-7B modellen (ESLM), **inte** LoRA-adaptern separat.
---
## 2. Serving-script: inventering
### `~/start_vllm.sh` (600 bytes, skapad 2026-05-30)
```bash
#!/bin/bash
FULL_PATH="/home/ubuntu/.cache/huggingface/hub/models--Qwen--Qwen2.5-7B-Instruct/snapshots/a09a35458c702b33eeacc393d103063234e8bc28"
pkill -f "vllm.entrypoints" 2>/dev/null
sleep 2
nohup /home/ubuntu/vllm_env/bin/python3 -m vllm.entrypoints.openai.api_server \
--model $FULL_PATH \
--served-model-name aamos-qwen25-7b \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 4096 \
--gpu-memory-utilization 0.85 \
--enable-lora \
--max-lora-rank 64 \
--lora-extra-vocab-size 256 \
--dtype bfloat16 \
> /tmp/vllm.log 2>&1 &
echo "vLLM started PID:$!"
```
**Vad det gör:** Servar bas-modellen (Qwen2.5-7B-Instruct från HF-cache) med LoRA-stöd aktiverat. Kan dynamiskt ladda LoRA-adaptrar via API:t. Venv: `vllm_env`. Nohup + background.
### `~/start_vllm_lora.sh` (422 bytes, skapad 2026-05-30)
```bash
#!/bin/bash
/home/ubuntu/vllm_env/bin/python3 -m vllm.entrypoints.openai.api_server \
--model /home/ubuntu/.cache/huggingface/hub/.../Qwen2.5-7B-Instruct/... \
--served-model-name aamos-base \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 2048 \
--enable-lora \
--max-lora-rank 64 \
--lora-modules "aamos=/home/ubuntu/aamos_adapter" \
--dtype bfloat16 \
--gpu-memory-utilization 0.88
```
**Vad det gör:** Servar bas-modellen MED LoRA-adapter inladdad statiskt vid start (`aamos_adapter/`). Kortare context (2048), lite högre GPU-util (0.88). Kör **inte** i nohup — förgrundsprocess. Venv: `vllm_env`.
### Aktuell körning (inte något av dessa script)
Den som körs nu startades direkt från eslm-venv, inte vllm_env, och servar `~/aamos_merged` (mergad modell). Det är ett tredje sätt att starta — sannolikt manuellt eller via ett okänt script.
### Tillgängliga venv:
| Venv | Innehåll | Syfte |
|------|----------|-------|
| `eslm-venv` | vLLM + transformers 5.10.2 + bitsandbytes 0.49.2 | Serving (nuvarande) |
| `vllm_env` | vLLM + transformers 5.5.0 | Serving (start_vllm*.sh) |
| `train_env` | **unsloth 2026.5.8** + peft + trl + bitsandbytes | Träning (Unsloth/LoRA) |
---
## 3. VRAM-budget-kalkyl
### Faktisk fördelning just nu:
```
Total VRAM: 23 028 MiB (100%)
vLLM tar nu: 19 699 MiB (85,5%)
varav modell: ~5 200 MiB (4-bit BnB Qwen2.5-7B ≈ 5.2 GB)
varav KV-cache: ~14 500 MiB (gpu-util 0.85 × 23GB modell)
Fritt just nu: 3 329 MiB (14,5%)
```
### Unsloth-träning 7B 4-bit LoRA behöver:
```
Modell (4-bit weights): ~5 200 MiB
Gradienter (LoRA-parametrar): ~ 800 MiB (rank 64, ~1% av params)
Optimizer states (AdamW 8-bit): ~1 000 MiB
Aktiveringscache (batch_size=4): ~4 000 MiB
CUDA-overhead + buffers: ~ 500 MiB
───────────
Minimum rimligt: ~11 500 MiB
Mer realistiskt (batch 8): ~14 000 MiB
```
### Kan BÅDA plats?
```
vLLM (reducerad gpu-util 0.4):
Modell: ~5 200 MiB
KV-cache: ~4 000 MiB (0.4 × 23GB modell)
Subtotal: ~9 200 MiB
Träning (minimal batch=2): ~10 500 MiB
TOTALT: ~19 700 MiB (86%)
```
**Teoretiskt möjligt på pappret, men extremt riskabelt:**
- Minnesallokering är inte deterministisk — fragmentering kan ge OOM
- Unsloth allokerar dynamiskt vid forward pass — spikes uppåt ~3GB
- vLLM pre-allokerar KV-cache vid start, ger inga varningar
- En enkelt batch-spike = CUDA OOM = kraschad träning
**SLUTSATS: NEJ, de kan inte köras simultant på ett säkert sätt.**
---
## 4. Strategianalys
### Alt A: Stoppa vLLM under träning, starta om efter
-**Enklast** — inga konfigurationsändringar
- ✅ Full VRAM för träning (~23GB) — snabbare, lägre OOM-risk
- ✅ Deterministiskt och reproducerbart
- ❌ Red-team-endpointen nere ~1-3h under träning
- **Risk:** Låg (om red-team koordineras)
### Alt B: Reducera vLLM gpu-util + träna med liten batch
- ❌ Extremt riskabelt (se kalkyl ovan)
- ❌ Träning tar 3-5× längre med batch=2
- ❌ Svårt att reproducera (OOM-sannolikhet okänd)
- ❌ Kräver konfigurationsändringar i båda riktningar
- **Risk:** Hög — rekommenderas inte
### Alt C: Red-team FÖRE träning → stoppa vLLM → träna → starta om → red-team igen
-**Bästa alternativet** — ger jämförbar baslinje + post-träning
- ✅ Red-team hinner samla baslinje-data utan avbrott
- ✅ Tydlig before/after-struktur för utvärdering
- ✅ vLLM körs med full VRAM i båda faserna (konsistenta resultat)
- ✅ Reproducerbart: samma `start_vllm.sh` (eller eslm-venv-kommandot) startar om serving
- ⏱️ Kräver koordination: red-team måste veta när fas 1 slutar
---
## 5. Rekommenderad strategi: **Alt C**
### Motivering:
Red-team körs **just nu** aktivt (loggarna visar anrop in i 21:01 UTC). Det betyder fas 1 (baslinje) redan är igång. Rätt sekvens:
1. Låt red-team slutföra baslinje-körning mot nuvarande `aamos-eslm` (kör klart)
2. Stoppa vLLM rent
3. Kör ESLM-omträning med full VRAM (train_env + Unsloth)
4. Starta vLLM med den nya ESLM
5. Kör red-team igen — jämför mot baslinje
---
## 6. Exakta kommandon
### 6.1 Stoppa vLLM rent (INGEN mutation nu — bara dokumentation)
```bash
ssh -i ~/.ssh/gpu_deploy_key ubuntu@172.31.36.61
# Kontrollera att red-team är klart INNAN du kör detta:
curl -s http://172.31.36.61:8000/v1/models | python3 -m json.tool
# Stoppa vLLM (PID 8817/8818/8873):
kill 8817 8818
sleep 3
# Om inte dött:
pkill -f "vllm serve"
pkill -f "VLLM::EngineCore"
# Verifiera:
nvidia-smi # ska visa 0 MiB VRAM i use
```
**OBS:** PID:arna 8817/8818/8873 är aktuella nu (2026-06-06 21:32). Om servern omstartas kan PID:arna ändras — använd `pkill -f` som är PID-oberoende.
### 6.2 Starta ESLM-omträning (efter att vLLM stoppats)
```bash
ssh -i ~/.ssh/gpu_deploy_key ubuntu@172.31.36.61
source ~/train_env/bin/activate
# Verifiera GPU är fri:
nvidia-smi
# Starta träning (exakt kommando beror på träningsskript — BUILD-A3 ansvarar)
# Förväntad VRAM-användning: 14-20 GB (Unsloth 4-bit LoRA, batch 4-8)
```
### 6.3 Starta om vLLM efter träning
**Alternativ 1: Samma konfiguration som nu (rekommenderas — identisk red-team-miljö)**
```bash
ssh -i ~/.ssh/gpu_deploy_key ubuntu@172.31.36.61
# Starta eslm-venv-versionen (samma som körs nu):
source ~/eslm-venv/bin/activate
export VLLM_ATTENTION_BACKEND=FLASH_ATTN
export VLLM_USE_FLASHINFER_SAMPLER=0
nohup vllm serve ~/aamos_merged \
--served-model-name aamos-eslm \
--host 0.0.0.0 --port 8000 \
--max-model-len 8192 \
--quantization bitsandbytes \
--enforce-eager \
--gpu-memory-utilization 0.85 \
> ~/vllm-serve.log 2>&1 &
echo "vLLM restarted, PID: $!"
# Vänta ~60s på uppstart:
sleep 60 && curl http://172.31.36.61:8000/v1/models
```
**Alternativ 2: Med inbakad LoRA-adapter (start_vllm_lora.sh — återanvändbart)**
```bash
ssh -i ~/.ssh/gpu_deploy_key ubuntu@172.31.36.61
nohup ~/start_vllm_lora.sh > /tmp/vllm-lora.log 2>&1 &
```
**Alternativ 3: Med dynamisk LoRA-laddning (start_vllm.sh — återanvändbart)**
```bash
ssh -i ~/.ssh/gpu_deploy_key ubuntu@172.31.36.61
~/start_vllm.sh
```
### 6.4 Verifiera att vLLM är igång
```bash
# Från GPU-boxen eller server-2:
curl http://172.31.36.61:8000/v1/models
curl http://172.31.36.61:8000/health
# Kolla VRAM:
nvidia-smi
```
---
## 7. Noteringar inför nästa BUILD
### `start_vllm_lora.sh` — återanvändbart ✅
- Laddar `~/aamos_adapter` (LoRA) direkt vid uppstart
- Servar bas-modellen med adapter inbakad → rödbräm mot ny adapter efter träning = byt ut `~/aamos_adapter`
- Kortare context (2048) vs eslm-venv-varianten (8192) — kan bli begränsande för red-team
### Separata venv är en fördel:
- `train_env` kör aldrig vLLM → ingen versionskollision
- `eslm-venv` kör aldrig träning → rent
### Red-team-trafik-källa:
- Alla anrop kommer från `172.31.35.76` — det är red-team-maskinen/scriptet
- Port 8000 öppen internt på VPC — inga externa anrop
### Modell-hierarki på boxen:
```
~/aamos_adapter/ → LoRA-adapter (161 MB) — senaste tränad ESLM
~/aamos_merged/ → Mergad full modell (5.5 GB) — det som serveras nu
~/.cache/huggingface/ → Qwen2.5-7B-Instruct bas (HF-cache)
```
---
## 8. Beslutspunkt för projektet
**Innan träning kan starta behöver följande beslutas:**
1. Är red-team-baslinjen klar? (kontrollera loggarna på red-team-maskinen)
2. Vad är det exakta träningsskriptet? (`train_env` är redo med Unsloth, men inget `train.py` hittades i `~` — BUILD-A3 bör ha det)
3. Ska den tränade adaptern mergas (`aamos_merged`) eller laddas som LoRA? (påverkar vilken start-variant som används efter)
---
*Genererat av BUILD-A2 subagent | Baserat på faktisk nvidia-smi + ps aux output | Inga mutationer gjorda*