359afb3a59
Infrastructure configs for GMKtec K11 (Docker, vLLM, LocalAI, ComfyUI, control-plane, gpu-fan agent, Server UI with CLI/file explorer/GPU fan curve). Co-authored-by: Cursor <cursoragent@cursor.com>
5.2 KiB
5.2 KiB
Handoff — sesja ubuntu-bare-metal
Dokument dla agenta kontynuującego pracę. Ostatni znany stan po sesji konfiguracji serwera LLM na GMKtec K11.
Kontekst projektu
| Element | Wartość |
|---|---|
| Repo | /home/tomasz-syn-grzegorza/cursor/ubuntu-bare-metal |
| Urządzenie | GMKtec K11 |
| OS | Ubuntu 26.04 LTS minimized (resolute) |
| GPU | NVIDIA GeForce RTX 3090 Ti, 24 GB VRAM (CUDA_VISIBLE_DEVICES=0) |
| RAM | ~29 GiB |
| Dysk systemowy | nvme1n1 128 GB → / |
| Dysk danych | nvme0n1 1 TB → /data |
| Docker data-root | /data/docker |
| Użytkownik | tomasz-syn-grzegorza (sudo) |
Workflow: tutorial krok po kroku w manual-tutorial/. Użytkownik czyta markdown i wykonuje komendy ręcznie. Agent nie może wpisać hasła sudo interaktywnie — skrypty wymagające sudo użytkownik uruchamia w swoim terminalu SSH.
Ukończone (infrastruktura + repo)
| Rozdział / obszar | Status |
|---|---|
| 01 — Docker CE ~29.x | Ukończony przez użytkownika |
| 02 — NVIDIA driver 595 open | Ukończony |
| 03 — NVIDIA Container Toolkit 1.19 | Ukończony |
| 03b — narzędzia minimized | Dokumentacja gotowa |
| 04A — dysk 1 TB, fstab, migracja Docker | Ukończony (scripts/setup-data-disk.sh) |
| 04B — stack vLLM | Repo gotowe; obraz Docker pobrany; kontener nie uruchomiony (brak modelu) |
| Katalog modeli vLLM | stacks/vllm/models.catalog.yaml + skrypty list/download/switch |
| Placeholder llama.cpp | stacks/llamacpp/README.md |
| 05 — stack LocalAI | Repo gotowe; kontener uruchomiony przez użytkownika |
| LocalAI API key | Użytkownik dodał LOCALAI_API_KEY do stacks/localai/.env — wartość nie dokumentowana tutaj |
Stan runtime (faktyczny na serwerze)
| Serwis | Stan |
|---|---|
| vLLM | Obraz vllm/vllm-openai:latest na dysku; kontener nie działa (VLLM_MODEL puste w .env) |
| LocalAI | Kontener localai running; obraz localai/localai:v4.4.3-gpu-nvidia-cuda-13 |
| Model LocalAI | Użytkownik w trakcie pobierania modelu (prawdopodobnie przez UI / galerię) |
| API key | Ustawiony w .env — wymaga przekazania do kontenera w docker-compose.yml + restart (patrz BACKLOG P0) |
Porty
| Serwis | Port w dokumentacji | Port faktyczny (.env użytkownika) |
|---|---|---|
| vLLM API | 8000 | 8000 (nieaktywny) |
| LocalAI UI + API | 8080 | 8070 |
| llama.cpp (plan) | 8001 | nie wdrożony |
Wewnątrz kontenera LocalAI zawsze nasłuchuje na 8080; mapowanie hosta ustawia LOCALAI_PORT w .env.
Decyzje techniczne (nie zmieniać bez uzgodnienia)
- GGUF z lmstudio-community nie działa w standardowym
vllm/vllm-openai— użycie przez LocalAI (llama.cpp backend) lub przyszły host llama.cpp. - vLLM interim dla Q4-odpowiednika: AWQ
Qwen/Qwen3.6-27B-Instruct-AWQ, profilqwen3.6-27b-awq-128k, kontekst 128K (MAX_MODEL_LEN=131072), KVfp8. - LocalAI: oficjalny obraz Docker (nie build ze źródeł); bez
command: phi-2(brak auto-pobierania modelu przy starcie). - Jeden duży model w VRAM naraz na 24 GB — nie uruchamiać vLLM + LocalAI z dużymi modelami równolegle.
- Modele docelowe (katalog): Qwen3.6-27B Q4_K_M GGUF, Gemma 4 12B Q4_0 GGUF (lmstudio-community).
- Brak domyślnego modelu przy instalacji stacków — pobieranie on-demand.
Co zrobiono w repo (implementacja agenta)
vLLM (stacks/vllm/)
models.catalog.yaml— GGUF (llamacpp) + AWQ (vllm)- Elastyczny
docker-compose.yml+vllm-entrypoint.sh(QUANTIZATION,VLLM_EXTRA_ARGS) - Skrypty:
list-models.sh,download-model.sh,switch-model.sh,start.sh - Profile:
qwen3.6-27b-awq-128k.env,_template.env - Tutorial część B w
manual-tutorial/04-vllm-stack.md
LocalAI (stacks/localai/)
docker-compose.yml,.env.example, skryptypull.sh,start.sh,clone-upstream.sh- Bind mounty na
/data/apps/localai/{models,backends,configuration,images,data} - Tutorial
manual-tutorial/05-localai-stack.md - Roadmapa root README: 05 LocalAI, 06 ComfyUI, 07 firewall
Inne
scripts/setup-data-disk.sh— rozszerzony o katalogigguf/ilocalai/
Ostatnia rozmowa (advisory — nie wdrożone w repo)
Użytkownik pytał o:
- Wystawienie endpointu przez domenę — reverse proxy (Caddy/nginx) + DNS + HTTPS; LocalAI za proxy na
127.0.0.1:PORT. - API token — opcja A:
LOCALAI_API_KEY(legacy, pełny admin); opcja B:LOCALAI_AUTH=true+LOCALAI_BASE_URL(konta użytkowników).
Brak w repo: Caddyfile, rozdział proxy/TLS, wpis LOCALAI_API_KEY w docker-compose.yml.
Następny agent — zacznij od
- Przeczytaj BACKLOG.md — sekcja P0.
- Napraw przekazanie
LOCALAI_API_KEYdo kontenera i zweryfikuj auth po restarcie. - Uzgodnij z użytkownikiem port 8070 vs 8080 w dokumentacji.
- Po zakończeniu pobierania modelu — test chat w UI i
curl /v1/chat/completions.
Transkrypt sesji
Pełna historia rozmowy (Cursor):
/home/tomasz-syn-grzegorza/.cursor/projects/home-tomasz-syn-grzegorza/agent-transcripts/f1d1befe-e1e0-44e8-8a40-1f175e6df09c/f1d1befe-e1e0-44e8-8a40-1f175e6df09c.jsonl