FastAPI-basierter Inferenz-Server, der ein Basis-Modell zusammen mit einem in der
pipeline trainierten LoRA-/QLoRA-Adapter lädt und über eine
OpenAI-kompatible REST-API bereitstellt. Teil des Projekts
LLM Code Completion.
- Python 3.10+
- CUDA-fähige GPU mit ≥ 16 GB VRAM (für ein 7B-Modell in voller Präzision)
- Optional: Docker mit NVIDIA Container Toolkit
cd model-server
pip install -r requirements.txtmake setup-modelDas Skript verlinkt bzw. kopiert das in der Pipeline trainierte Modell
(../pipeline/outputs/<run>/final_model) nach models/. Alternativ den Pfad in
config.yaml oder per Umgebungsvariable MODEL_PATH setzen. Wird kein
Adapter gefunden, lädt der Server das in BASE_MODEL konfigurierte Basis-Modell.
python server.py
# oder
make runDer Server ist konfigurationsgetrieben – Einstellungen kommen aus
config.yaml bzw. den Umgebungsvariablen aus
.env.example. Standard-Binding: 0.0.0.0:8000.
curl http://localhost:8000/health
# {"status":"healthy","model_loaded":true,...}| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/v1/completions |
Code-Completion (OpenAI-kompatibel) |
GET |
/health |
Health-Check inkl. Modell-Status |
GET |
/v1/models |
Liste der geladenen Modelle |
GET |
/ |
Service-Info |
Beispiel-Request:
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen2.5-Coder-7B-Instruct","prompt":"public int add(int a,","max_tokens":32}'Zentrale Optionen in config.yaml:
| Bereich | Schlüssel | Bedeutung |
|---|---|---|
model |
path, base_model, adapter_type, merge_adapter |
Modell-/Adapter-Quelle und Merge-Verhalten |
transformers |
max_model_len, dtype, load_in_4bit |
Präzision und Kontextlänge |
server |
host, port, timeout |
Netzwerk-Binding |
inference |
temperature, top_p, max_tokens, stop_tokens |
Sampling-Defaults |
monitoring |
enable_prometheus, metrics_port |
Metriken |
Tipp: Für schnelle Inferenz QLoRA-Training +
merge_adapter: true(voller Präzision) verwenden. Für minimalen VRAM-Verbrauchload_in_4bit: truesetzen.
make docker-build # Image bauen
make docker-run # Container starten (GPU)
make docker-logs # Logs verfolgen
make docker-stop # Container stoppenOder direkt via Compose:
docker-compose up -dSiehe Dockerfile und docker-compose.yml.
Der Server ist nicht an Qwen2.5-Coder gebunden. Jedes von Hugging Face Transformers
unterstützte, FIM-fähige Code-LLM kann als base_model konfiguriert werden. Modell-
spezifische FIM-Tokens werden client-seitig im Plugin (FIMFormatter) gekapselt.
model-server/
├── server.py # FastAPI-App + Endpunkte
├── src/
│ ├── model_loader.py # Laden von Basis-Modell + Adapter
│ ├── health_monitor.py # Health-/Status-Tracking
│ └── utils.py
├── scripts/
│ ├── setup_model.sh # Modell verlinken/kopieren
│ └── test_server.py # Server-Smoke-Test
├── config.yaml
├── Dockerfile
├── docker-compose.yml
└── models/ # (gitignored) bereitgestelltes Modell