diff --git a/docs/platform/llm-server/ai/GNAI-010-TECH_Llama-Serving.md b/docs/platform/llm-server/ai/GNAI-010-TECH_Llama-Serving.md index 1cb93b1..12095ca 100644 --- a/docs/platform/llm-server/ai/GNAI-010-TECH_Llama-Serving.md +++ b/docs/platform/llm-server/ai/GNAI-010-TECH_Llama-Serving.md @@ -23,6 +23,7 @@ | 2026-09-21 | 0.1 | spektr / Codex | erstes technisches Profil für Swift Q6_K, 128k, Q8-KV, rootless Quadlet und gestufte MTP-Abnahme erstellt | | 2026-10-31 | 0.5 | spektr / Mistral Vibe | Swift-Repository-Revision aktualisiert: `eb0e3a7…` wurde vom Herausgeber aus dem Repository entfernt (resolve liefert 404); Repin auf den aktuellen `main`-Commit `98a6100…`. Die Q6_K-Datei ist laut Herausgeber-SHA256SUMS unverändert (`7f4de8…`), der Vision-Projektor ebenfalls (`daa111…`); beide Prüfsummen bleiben unverändert und werden beim Download verifiziert. | | 2026-10-31 | 0.6 | spektr / Mistral Vibe | Implementierungsbefund vom ersten Live-Start: Das gepinnte AMD-Image definiert `ENTRYPOINT /app/llama-server`; `Exec=` im Quadlet trägt deshalb nur die Argumente ohne Binärnamen. Das Image enthält weder `curl` noch `wget` – die Health-Prüfung darf nicht von einem im Image vorhandenen HTTP-Werkzeug ausgehen (Abschnitt 8 bestätigt). | +| 2026-10-31 | 0.7 | spektr / Mistral Vibe | Protokollierungsbefund vom ersten Live-Betrieb: conmon schreibt die Container-Ausgabe mit dem Journald-Treiber ins System-Journal (`_COMM=conmon`, Syslog-Identifier = Container-Name, zum Beispiel `gnai-testing-llama-swift`); lesbar als root, `podman logs` bleibt für das Workload-Konto wegen der Journal-Dateirechte leer. Abschnitt 8.1 dokumentiert die Lesewege; die 64k-Bring-up-Startlogs sind damit protokollfähig. | --- @@ -463,6 +464,37 @@ bleiben ausschließlich im internen Container-Netz. Vor der Health-Quadlet- Konfiguration wird geprüft, welches HTTP-Werkzeug das gepinnte Image enthält; die Abnahme darf nicht von einem im Image fehlenden `curl` abhängen. +Zwei Befunde vom ersten Live-Betrieb am 31.10.2026: Das gepinnte Image setzt +eine `LLAMA_ARG_HOST`-Umgebungsvorbelegung, die vom Kommandozeilen-Argument +`--host` überschrieben wird (unerheblich, aber in den Startlogs sichtbar). +Und der Server meldet beim Start die Warnung „no API key is set and CORS +allows all origins": für die interne Testing-Umgebung (Netz `Internal=true`, +kein Host-Port, keine NPM-Route) ist das eine bewusst akzeptierte +Übergangszustand; spätestens mit der API-Policy-Schicht (Meilenstein 6) wird +ein API-Key Pflicht. + +### 8.1 Protokollierung (Befund 31.10.2026) + +conmon protokolliert die Container-Ausgabe mit dem Journald-Treiber ins +System-Journal. Der Syslog-Identifier ist der Container-Name; Start-, Health- +und Inferenzmeldungen sind damit vollständig nachvollziehbar: + +```bash +# als root auf dem Host: +journalctl _COMM=conmon -t gnai-testing-llama-swift --no-pager +journalctl _COMM=conmon --since 18:26 --until 18:32 --no-pager -q # Startfenster +``` + +`podman logs` liefert für das Workload-Konto eine leere Ausgabe, weil die +Journal-Dateien für `gnai-testing` nicht lesbar sind; eine Mitgliedschaft im +`systemd-journal`-Gruppe würde das Leserecht auf das gesamte Journal erweitern +und ist bewusst nicht eingerichtet. Abnahmeprotokolle werden deshalb als root +oder über das Betreiberkonto erhoben. Die llama-server-Startsequenz bestätigt +damit die Abnahmepunkte aus Abschnitt 10.2: Modell- und Kontextkonfiguration +(`n_slots = 1`, `n_ctx_slot = 65536`), Listening-Endpunkt sowie die Warnungen +zu unbenutzten MTP-Tensoren (`blk.64.*` — der Next-Token-Kopf wird bei +deaktiviertem MTP korrekt nicht geladen). + ## 9. Ansible-Rollenentwurf Die spätere Rolle `llama_cpp` soll folgende Zuständigkeiten besitzen: diff --git a/llm-server/llm/ansible/roles/inference_engine/README.md b/llm-server/llm/ansible/roles/inference_engine/README.md index 430267c..6322608 100644 --- a/llm-server/llm/ansible/roles/inference_engine/README.md +++ b/llm-server/llm/ansible/roles/inference_engine/README.md @@ -46,6 +46,19 @@ Quadlets (GNAI-010 sections 5 and 6; first profile: llama.cpp). Runs after - `service` – everything in this role. Model provisioning belongs to the `models` tag of the `model_store` role. +## Logs + +conmon writes the container output to the system journal (journald driver) +with the syslog identifier set to the container name. Read as root: + +```bash +journalctl _COMM=conmon -t gnai-testing-llama-swift --no-pager +``` + +`podman logs` returns empty for the workload account (journal file +permissions); acceptance protocols are collected as root (GNAI-010 section +8.1). + ## Notes - There is no `PublishPort=`; the engine is reachable only inside the