didi-lot1-ai/ai_platform/local_gpu_stack/README.md

74 lines
4.2 KiB
Markdown
Raw Permalink 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.

# DiDi LOT 1 — Local GPU stack (deploy progresiv)
Deploy „cărămidă cu cărămidă" al întregii platforme pe un host cu GPU.
Pentru fiecare componentă: **build/pull + download → seed (dacă e cazul) →
TEST funcțional → doar dacă testul trece corect → următoarea**. Idempotent,
se oprește la primul test picat.
## Cerințe (verificate de preflight, nu se instalează automat)
- Docker Engine 24+ cu plugin `docker compose` v2
- NVIDIA driver ≥535 + `nvidia-container-toolkit` (runtime configurat în Docker)
- ≥1 GPU (proiectat pe 2× H200; GPU 0 = LLM+Whisper, GPU 1 = BusterX+bge×2)
- ~100 GB liberi pe `/` (toate modelele ≈ 94 GB)
## Modele — o singură zonă locală
Toate modelele stau în **`ai_platform/models/`** (format HF cache, un folder per model),
servite **offline** de acolo (fără rețea la runtime). `MODELS_DIR` în `.env` (auto = acest folder).
Ce lipsește se descarcă o singură dată în el (`deploy.sh` pasul DOWNLOAD). NU se comite în git.
| Folder | Model | Folosit de |
|---|---|---|
| `models--Qwen--Qwen3.5-35B-A3B` | LLM (67G) | llm (vLLM) |
| `models--l8cv--BusterX_plusplus` | deepfake (16G, Qwen2.5-VL intern) | video (vLLM) |
| `models--BAAI--bge-m3` | embeddings | embeddings (vLLM) |
| `models--BAAI--bge-reranker-v2-m3` | reranker | rerank (vLLM) |
| `models--mobiuslabsgmbh--faster-whisper-large-v3-turbo` | STT | audio |
| `models--urchade--gliner_multi-v2.1` + `models--microsoft--mdeberta-v3-base` | NER + backbone | extractors |
Copiezi `ai_platform/models/` pe altă mașină → zero download la deploy.
## Utilizare
```bash
cd ai_platform/local_gpu_stack
./deploy.sh # tot, de la preflight la dashboard
./deploy.sh --from web # reia de la cărămida 'web' (sare peste cele dinainte)
./deploy.sh --only llm # rulează o singură cărămidă (presupune deps deja up)
./deploy.sh --install-deps # instalează Docker + nvidia-container-toolkit (sudo), apoi continuă
```
`.env` se creează automat din `.env.example` la prima rulare.
### Mașină nouă (VM „chioară" cu GPU)
1. (o singură dată) driver NVIDIA ≥535 + reboot — `sudo ubuntu-drivers install` (nu se automatizează, cere reboot).
2. `git clone <repo> && cd .../ai_platform/local_gpu_stack`
3. `./deploy.sh --install-deps` → instalează Docker+toolkit, apoi:
- **HOST_IP** se auto-detectează și se scrie în `.env`
- **BusterX** se descarcă automat din HF dacă nu e pe disc (`BUSTER_HF_CACHE`)
- Qwen/bge se descarcă (cu progres), totul se ridică cărămidă cu cărămidă cu test la fiecare.
> Singurul pas care NU e o comandă: driverul NVIDIA (reboot). Restul e `./deploy.sh`.
Cărămizi, în ordine: `embeddings · rerank · llm · extractors · audio · video · forensic · web · catalog · gateway · brain · dashboard`.
La final: dashboard pe `http://<HOST_IP>:51300/admin-ai/` (staging mode, fără login).
## Ce automatizează (fixurile care înainte erau manuale)
- rețea unică `didi-network`; plasare GPU 0/1; nume containere `didiAI-*`
- base-URL vLLM **fără** `/v1` (codul îl adaugă) pentru llm/embeddings/video
- YOLO scrie modelul în `/tmp` (cwd e read-only la non-root)
- gateway LLM injectează `enable_thinking:false` → JSON curat din Qwen3.5 (sentiment/OCR/semantic/brain)
- SearXNG fără proxy outbound, ca serviciu compose
- brain: aliniere parolă postgres, creare **token atomic** (auto, salvat în `.env`), **seed taxonomie** (79 tag-uri)
- dashboard: `.env` cu staging + override-uri health; **seed catalog** (9 intrări)
## Fișiere
| Fișier | Rol |
|---|---|
| `deploy.sh` | orchestratorul progresiv gated |
| `lib.sh` | logging, `wait_health`, `gate`, shim docker (merge și prin `sg docker`) |
| `docker-compose.yml` | stack-ul GPU + non-GPU + searxng |
| `.env.example` | configurația (host, porturi, parole, token) |
| `seed/seed_catalog.sh` | populează catalogul DB al dashboard-ului (idempotent) |
| `seed/seed_brain.sh` | token atomic + taxonomie + env brain |
| `TESTING.md` | comenzi de testare per componentă + smoke-test |
> Brain rulează din `modules/didi_brain/infra/docker-compose.yml`; dashboard și gateway
> din `modules/*/deploy/` — `deploy.sh` le orchestrează pe toate sub proiectul `local_gpu_stack`.