mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 07:54:42 +02:00
docs: suppression LM Studio — cluster utilise llama-server ROCm
- CLAUDE.md : état mis à jour (2026-05-13), gpu-01 → llama-server, setup IA → endpoints réels (llama-server + LiteLLM), rôles Ansible à jour, suppression CLI LM Studio - admin/lm_studio.md : marqué supprimé du cluster, lms CLI conservée pour téléchargement modèles uniquement, /opt/lmstudio disparu - admin/nfs.md : section modèles mise à jour (plus de symlink lmstudio) - admin/rocm.md : debug section → llama-server, section Vulkan supprimée - admin/README.md : description lm_studio.md mise à jour Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
6be2a89480
commit
515933c949
5 changed files with 45 additions and 83 deletions
62
CLAUDE.md
62
CLAUDE.md
|
|
@ -4,16 +4,17 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||||
|
|
||||||
## Présentation du projet
|
## Présentation du projet
|
||||||
|
|
||||||
**Funk** — homelab IA composé d'un cluster Kubernetes (Talos) pour les services applicatifs, d'un hôte d'inférence LLM dédié (gpu-01 / LM Studio), et d'un agent autonome (Hermes Agent) sur storage-01. Stack IaC complète : Ansible + talhelper + ArgoCD.
|
**Funk** — homelab IA composé d'un cluster Kubernetes (Talos) pour les services applicatifs, d'un hôte d'inférence LLM dédié (gpu-01 / llama-server ROCm), et d'un agent autonome (Hermes Agent) sur storage-01. Stack IaC complète : Ansible + talhelper + ArgoCD.
|
||||||
|
|
||||||
Référence complète : `Funk/Funk-infra/HOMELAB.md`
|
Référence complète : `Funk/Funk-infra/HOMELAB.md`
|
||||||
|
|
||||||
**État actuel (2026-05-09)** :
|
**État actuel (2026-05-13)** :
|
||||||
- ✅ Hermes Agent opérationnel sur le poste perso (LM Studio local `127.0.0.1:1234`)
|
- ✅ Hermes Agent opérationnel sur storage-01 (llama-server GPU via LiteLLM)
|
||||||
- ✅ storage-01 installé — `192.168.10.1` (LAN cluster), `192.168.1.200` (WAN)
|
- ✅ storage-01 installé — `192.168.10.1` (LAN cluster), `192.168.1.200` (WAN)
|
||||||
- ✅ gpu-01 installé — ping OK depuis storage-01 (`192.168.10.20`)
|
- ✅ gpu-01 installé — llama-server GPU (:1234) + CPU (:1236/:1237) opérationnels
|
||||||
- ⏳ Phase 1/2 en cours — Ansible, ROCm, LM Studio, dnsmasq, NAT restent à faire
|
- ✅ LiteLLM sur storage-01 — proxy multi-modèles + ask-agent
|
||||||
- ❌ Repo `lab-infra/` à initialiser, aucun cluster k8s monté
|
- ✅ Cluster k8s Talos opérationnel (MetalLB + Traefik + wildcard DNS lab.local)
|
||||||
|
- ⏳ WOL compute nodes non configuré (BIOS) — allumage manuel requis
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -25,7 +26,7 @@ Référence complète : `Funk/Funk-infra/HOMELAB.md`
|
||||||
| compute-01 | 192.168.10.11 | Talos v1.13+ | k8s control-plane |
|
| compute-01 | 192.168.10.11 | Talos v1.13+ | k8s control-plane |
|
||||||
| compute-02 | 192.168.10.12 | Talos v1.13+ | k8s worker |
|
| compute-02 | 192.168.10.12 | Talos v1.13+ | k8s worker |
|
||||||
| compute-03 | 192.168.10.13 | Talos v1.13+ | k8s worker |
|
| compute-03 | 192.168.10.13 | Talos v1.13+ | k8s worker |
|
||||||
| gpu-01 | 192.168.10.20 | AlmaLinux 9.7 | LM Studio dédié (RX 6700XT) — **hors cluster** |
|
| gpu-01 | 192.168.10.20 | AlmaLinux 9.7 | llama-server dédié (RX 6700XT, ROCm 7.x) — **hors cluster** |
|
||||||
|
|
||||||
**Points clés d'architecture :**
|
**Points clés d'architecture :**
|
||||||
- `storage-01` et `gpu-01` sont **hors du cluster k8s** — ils sont consommés via des `ExternalName` services ou `Endpoints` manuels
|
- `storage-01` et `gpu-01` sont **hors du cluster k8s** — ils sont consommés via des `ExternalName` services ou `Endpoints` manuels
|
||||||
|
|
@ -43,7 +44,7 @@ lab-infra/
|
||||||
│ ├── playbooks/site.yml
|
│ ├── playbooks/site.yml
|
||||||
│ ├── group_vars/
|
│ ├── group_vars/
|
||||||
│ └── roles/ # common, gateway, dnsmasq, nfs_server, postgresql,
|
│ └── roles/ # common, gateway, dnsmasq, nfs_server, postgresql,
|
||||||
│ # qdrant, minio, rocm, lm_studio, hermes_agent
|
│ # qdrant, minio, rocm, llama_server, litellm, hermes_agent, hermes_user
|
||||||
├── talos/ # nœuds Talos via talhelper
|
├── talos/ # nœuds Talos via talhelper
|
||||||
│ ├── talconfig.yaml # source de vérité (lue par talhelper)
|
│ ├── talconfig.yaml # source de vérité (lue par talhelper)
|
||||||
│ ├── talsecret.sops.yaml
|
│ ├── talsecret.sops.yaml
|
||||||
|
|
@ -77,7 +78,7 @@ ansible-playbook -i inventory.yml playbooks/site.yml # apply
|
||||||
ansible-playbook -i inventory.yml playbooks/site.yml --tags rocm # un rôle
|
ansible-playbook -i inventory.yml playbooks/site.yml --tags rocm # un rôle
|
||||||
```
|
```
|
||||||
|
|
||||||
Rôles prévus : `common`, `gateway`, `dnsmasq`, `nfs_server`, `postgresql`, `qdrant`, `minio`, `rocm`, `lm_studio`, `hermes_agent`. Tous idempotents. Secrets via Ansible Vault.
|
Rôles : `common`, `gateway`, `dnsmasq`, `nfs_server`, `nfs_client`, `postgresql`, `qdrant`, `minio`, `rocm`, `llama_server`, `litellm`, `hermes_agent`, `hermes_user`. Tous idempotents. Secrets via Ansible Vault.
|
||||||
|
|
||||||
### talhelper (nœuds Talos)
|
### talhelper (nœuds Talos)
|
||||||
|
|
||||||
|
|
@ -114,20 +115,15 @@ git push
|
||||||
|
|
||||||
## Contrainte GPU critique
|
## Contrainte GPU critique
|
||||||
|
|
||||||
La RX 6700XT (gfx1031) n'est **pas officiellement supportée** par ROCm. Sur gpu-01, toujours s'assurer que la variable est présente dans l'environnement LM Studio / le service systemd :
|
La RX 6700XT (gfx1031) n'est **pas officiellement supportée** par ROCm. Toujours s'assurer que la variable est présente dans le service systemd `llama-server` :
|
||||||
|
|
||||||
```
|
```
|
||||||
HSA_OVERRIDE_GFX_VERSION=10.3.0
|
HSA_OVERRIDE_GFX_VERSION=10.3.0
|
||||||
```
|
```
|
||||||
|
|
||||||
ROCm tourne directement sur l'hôte AlmaLinux (pas dans des conteneurs). Fallback : Vulkan dans LM Studio si ROCm coince.
|
ROCm tourne directement sur l'hôte AlmaLinux (pas dans des conteneurs). L'inférence est assurée par llama-server (llama.cpp compilé ROCm 7.x).
|
||||||
|
|
||||||
LM Studio bind sur `127.0.0.1` par défaut → pour l'exposer au réseau :
|
CLI `lms` disponible sur gpu-01 uniquement pour télécharger des modèles (`lms get <url-hf>`, `lms ls`).
|
||||||
```bash
|
|
||||||
lms server start --port 1234 --bind 0.0.0.0
|
|
||||||
```
|
|
||||||
|
|
||||||
CLI LM Studio utile : `lms ls`, `lms load <model>`, `lms unload`, `lms server status`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -137,44 +133,32 @@ CLI LM Studio utile : `lms ls`, `lms load <model>`, `lms unload`, `lms server st
|
||||||
|
|
||||||
| Composant | Endpoint |
|
| Composant | Endpoint |
|
||||||
|---|---|
|
|---|---|
|
||||||
| LM Studio | `http://127.0.0.1:1234/v1` |
|
|
||||||
| Ollama | `http://127.0.0.1:11434` |
|
| Ollama | `http://127.0.0.1:11434` |
|
||||||
| Hermes Agent | `base_url: http://127.0.0.1:1234/v1` |
|
| LM Studio (optionnel) | `http://127.0.0.1:1234/v1` |
|
||||||
|
| Hermes Agent | `base_url: http://127.0.0.1:1234/v1` ou Ollama |
|
||||||
```bash
|
|
||||||
# Prérequis : modèle chargé avec context suffisant (system prompt Hermes ≈ 15 000 tokens)
|
|
||||||
lms load <modele> --context-length 16384
|
|
||||||
lms server start --port 1234
|
|
||||||
```
|
|
||||||
|
|
||||||
Agents Goose dans `Funk/Funk-infra/agents/` — pointent tous sur `http://localhost:1234/v1` :
|
|
||||||
```bash
|
|
||||||
cd Funk/Funk-infra/agents/<nom-agent>
|
|
||||||
goose session --config goose-config.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
### Setup 2 — Cluster Funk (production)
|
### Setup 2 — Cluster Funk (production)
|
||||||
|
|
||||||
| Composant | Endpoint |
|
| Composant | Endpoint |
|
||||||
|---|---|
|
|---|---|
|
||||||
| LM Studio (gpu-01) | `http://192.168.10.20:1234/v1` |
|
| llama-server GPU (gpu-01) | `http://192.168.10.20:1234/v1` |
|
||||||
| Hermes Agent | service systemd sur storage-01, pointe sur gpu-01 |
|
| llama-server CPU system (gpu-01) | `http://192.168.10.20:1236/v1` |
|
||||||
|
| llama-server CPU monitor (gpu-01) | `http://192.168.10.20:1237/v1` |
|
||||||
|
| LiteLLM proxy (storage-01) | `http://127.0.0.1:4000/v1` (master_key: `lm-studio`) |
|
||||||
|
| Hermes Agent | service systemd sur storage-01, via LiteLLM |
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Sur gpu-01 — HSA_OVERRIDE requis pour RX 6700XT (gfx1031)
|
# Vérifier l'état complet depuis le poste perso
|
||||||
HSA_OVERRIDE_GFX_VERSION=10.3.0 lms load <modele> --context-length 16384
|
funk-status
|
||||||
lms server start --port 1234 --bind 0.0.0.0
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Détail complet des deux setups : `Funk/Funk-infra/HOMELAB.md` § 7.4
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Conventions
|
## Conventions
|
||||||
|
|
||||||
- **Domaine** : `lab.local` — wildcard DNS via dnsmasq sur storage-01
|
- **Domaine** : `lab.local` — wildcard DNS via dnsmasq sur storage-01
|
||||||
- **Ingress** : `<service>.lab.local` → IP MetalLB de Traefik (`192.168.10.200-230`)
|
- **Ingress** : `<service>.lab.local` → IP MetalLB de Traefik (`192.168.10.200-230`)
|
||||||
- **LM Studio endpoint** : `http://192.168.10.20:1234/v1`
|
- **llama-server endpoint** : `http://192.168.10.20:1234/v1` (GPU) — accès via LiteLLM sur storage-01
|
||||||
- **Namespaces k8s** : `argocd`, `infra`, `storage`, `external`, `ai`, `workflows`
|
- **Namespaces k8s** : `argocd`, `infra`, `storage`, `external`, `ai`, `workflows`
|
||||||
- **Git** : branches `main` (prod) / `feature/*` — commits en conventional commits (`feat:`, `fix:`, `chore:`, `docs:`)
|
- **Git** : branches `main` (prod) / `feature/*` — commits en conventional commits (`feat:`, `fix:`, `chore:`, `docs:`)
|
||||||
- **Secrets** : Ansible Vault (Ansible), SOPS+age (Talos via talhelper), Sealed Secrets (k8s)
|
- **Secrets** : Ansible Vault (Ansible), SOPS+age (Talos via talhelper), Sealed Secrets (k8s)
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
| [dnsmasq.md](dnsmasq.md) | DNS local lab.local — résolution, logs, ajout d'entrées |
|
| [dnsmasq.md](dnsmasq.md) | DNS local lab.local — résolution, logs, ajout d'entrées |
|
||||||
| [rocm.md](rocm.md) | GPU AMD RX 6700XT — ROCm, HSA_OVERRIDE, debug |
|
| [rocm.md](rocm.md) | GPU AMD RX 6700XT — ROCm, HSA_OVERRIDE, debug |
|
||||||
| [llama_server.md](llama_server.md) | llama-server — inférence ROCm 7.x, API OpenAI, build, modèles |
|
| [llama_server.md](llama_server.md) | llama-server — inférence ROCm 7.x, API OpenAI, build, modèles |
|
||||||
| [lm_studio.md](lm_studio.md) | LM Studio — gestion des modèles uniquement (lms get/ls) |
|
| [lm_studio.md](lm_studio.md) | LM Studio — supprimé du cluster, CLI `lms` conservée pour téléchargement modèles |
|
||||||
| [nfs.md](nfs.md) | NFS + RAID5 — exports, montages, automount, ajout de partages |
|
| [nfs.md](nfs.md) | NFS + RAID5 — exports, montages, automount, ajout de partages |
|
||||||
| [systeme.md](systeme.md) | Services, logs, ressources, NetworkManager, dnf |
|
| [systeme.md](systeme.md) | Services, logs, ressources, NetworkManager, dnf |
|
||||||
| [litellm.md](litellm.md) | LiteLLM Proxy — routage Qwen local + Claude API, config, validation |
|
| [litellm.md](litellm.md) | LiteLLM Proxy — routage Qwen local + Claude API, config, validation |
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,28 @@
|
||||||
# LM Studio — Commandes d'administration
|
# LM Studio — Historique
|
||||||
|
|
||||||
> **Note** : L'inférence GPU est désormais assurée par **llama-server** (voir `admin/llama_server.md`).
|
> **LM Studio est supprimé du cluster Funk (2026-05-13).**
|
||||||
> LM Studio reste installé sur gpu-01 **uniquement pour la gestion des modèles** (`lms get`, `lms ls`).
|
> L'inférence GPU est assurée par **llama-server** (llama.cpp compilé ROCm 7.x).
|
||||||
> Le service `lm-studio` est désactivé.
|
> L'utilisateur `lmstudio` et le répertoire `/opt/lmstudio` ont été supprimés.
|
||||||
|
> La CLI `lms` reste disponible sur gpu-01 pour télécharger des modèles GGUF.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Gestion des modèles (lms CLI)
|
## Télécharger des modèles (lms CLI)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Lister les modèles installés
|
# Lister les modèles installés (stockés sur NFS /mnt/models)
|
||||||
lms ls
|
ssh g01 "lms ls"
|
||||||
|
|
||||||
# Télécharger un modèle depuis HuggingFace
|
# Télécharger un modèle depuis HuggingFace
|
||||||
lms get https://huggingface.co/bartowski/Qwen2.5-7B-Instruct-GGUF -y
|
ssh g01 "lms get https://huggingface.co/bartowski/Qwen2.5-7B-Instruct-GGUF -y"
|
||||||
|
|
||||||
# Supprimer un modèle
|
|
||||||
lms remove bartowski/Qwen2.5-7B-Instruct-GGUF
|
|
||||||
|
|
||||||
# Les modèles sont stockés sur le NFS partagé :
|
# Les modèles sont stockés sur le NFS partagé :
|
||||||
# storage-01:/srv/data/models → gpu-01:/mnt/models
|
# storage-01:/srv/data/models → gpu-01:/mnt/models
|
||||||
# Symlink : /opt/lmstudio/.lmstudio/models → /mnt/models
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Pourquoi llama-server remplace LM Studio pour l'inférence
|
## Pourquoi llama-server remplace LM Studio
|
||||||
|
|
||||||
| Critère | LM Studio (Vulkan) | llama-server (ROCm) |
|
| Critère | LM Studio (Vulkan) | llama-server (ROCm) |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|
|
@ -34,7 +31,7 @@ lms remove bartowski/Qwen2.5-7B-Instruct-GGUF
|
||||||
| Backend | Vulkan (ROCm 6.x uniquement) | ROCm 7.x natif |
|
| Backend | Vulkan (ROCm 6.x uniquement) | ROCm 7.x natif |
|
||||||
| API | OpenAI-compatible | OpenAI-compatible |
|
| API | OpenAI-compatible | OpenAI-compatible |
|
||||||
|
|
||||||
Le backend ROCm de LM Studio est compilé pour ROCm 6.x et incompatible avec ROCm 7.x installé sur gpu-01.
|
Le backend ROCm de LM Studio était compilé pour ROCm 6.x, incompatible avec ROCm 7.x installé.
|
||||||
llama.cpp compilé from source avec ROCm 7.x donne un gain de ~5x sur la vitesse d'inférence.
|
llama.cpp compilé from source avec ROCm 7.x donne un gain de ~5x sur la vitesse d'inférence.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -44,6 +41,6 @@ llama.cpp compilé from source avec ROCm 7.x donne un gain de ~5x sur la vitesse
|
||||||
| Sujet | Détail |
|
| Sujet | Détail |
|
||||||
|---|---|
|
|---|---|
|
||||||
| GPU non officiel | RX 6700XT (gfx1031) — `HSA_OVERRIDE_GFX_VERSION=10.3.0` dans le service llama-server |
|
| GPU non officiel | RX 6700XT (gfx1031) — `HSA_OVERRIDE_GFX_VERSION=10.3.0` dans le service llama-server |
|
||||||
| Gemma 4 interdit | Gemma 4 E2B/E4B crash Vulkan et ROCm sur prompts >800 tokens — utiliser Qwen |
|
| Gemma 4 interdit | Gemma 4 E2B/E4B crash ROCm sur prompts >800 tokens — utiliser Qwen |
|
||||||
| Modèles sur NFS | `/opt/lmstudio/.lmstudio/models` est un symlink vers `/mnt/models` (NFS automount) |
|
| Modèles sur NFS | Stockés dans `/mnt/models/` sur gpu-01 (NFS automount depuis storage-01) |
|
||||||
| lms get | Utiliser `lms get <url-hf>` pour télécharger, puis pointer llama-server sur le GGUF |
|
| lms get | Télécharger avec `lms get <url-hf>`, puis pointer llama-server sur le GGUF |
|
||||||
|
|
|
||||||
16
admin/nfs.md
16
admin/nfs.md
|
|
@ -28,7 +28,7 @@ sudo systemctl status nfs-server
|
||||||
/srv/data/
|
/srv/data/
|
||||||
├── nfs/
|
├── nfs/
|
||||||
│ └── k8s/ → export pour le NFS provisioner Kubernetes
|
│ └── k8s/ → export pour le NFS provisioner Kubernetes
|
||||||
├── models/ → modèles LM Studio partagés (gpu-01 monte ce répertoire)
|
├── models/ → modèles GGUF partagés (gpu-01 monte ce répertoire via NFS)
|
||||||
├── hermes/ → données persistantes Hermes Agent (à venir)
|
├── hermes/ → données persistantes Hermes Agent (à venir)
|
||||||
├── postgres/ → données PostgreSQL (à venir)
|
├── postgres/ → données PostgreSQL (à venir)
|
||||||
├── qdrant/ → données Qdrant (à venir)
|
├── qdrant/ → données Qdrant (à venir)
|
||||||
|
|
@ -69,20 +69,16 @@ Les montages NFS sur gpu-01 utilisent `x-systemd.automount` :
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Modèles LM Studio sur NFS
|
## Modèles GGUF sur NFS
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Sur gpu-01 — symlink transparent pour LM Studio
|
# Les modèles sont montés directement sur gpu-01
|
||||||
ls -la /opt/lmstudio/.lmstudio/models
|
|
||||||
# → lrwxrwxrwx ... models -> /mnt/models
|
|
||||||
|
|
||||||
# Le contenu réel est sur storage-01
|
|
||||||
ls /mnt/models/
|
ls /mnt/models/
|
||||||
# → lmstudio-community/gemma-4-E2B-it-GGUF/
|
# → bartowski/
|
||||||
# → lmstudio-community/gemma-4-E4B-it-GGUF/
|
# → lmstudio-community/
|
||||||
|
|
||||||
# Ajouter un modèle (depuis gpu-01 — sera stocké directement sur NFS)
|
# Ajouter un modèle (depuis gpu-01 — sera stocké directement sur NFS)
|
||||||
lms get <modele>
|
ssh g01 "lms get <modele>"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ ssh g01 "sudo usermod -aG video,render ansible"
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Debug ROCm / LM Studio
|
## Debug ROCm / llama-server
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Tester OpenCL
|
# Tester OpenCL
|
||||||
|
|
@ -99,18 +99,3 @@ ssh g01 "cat /sys/class/drm/card*/device/hwmon/hwmon*/temp1_input"
|
||||||
ssh g01 "cat /sys/class/drm/card*/device/mem_info_vram_used"
|
ssh g01 "cat /sys/class/drm/card*/device/mem_info_vram_used"
|
||||||
ssh g01 "cat /sys/class/drm/card*/device/mem_info_vram_total"
|
ssh g01 "cat /sys/class/drm/card*/device/mem_info_vram_total"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Fallback Vulkan (si ROCm ne fonctionne pas)
|
|
||||||
|
|
||||||
Si `rocminfo` ne liste pas le GPU malgré `HSA_OVERRIDE`, LM Studio peut utiliser Vulkan :
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Vérifier que Vulkan fonctionne
|
|
||||||
ssh g01 "vulkaninfo 2>/dev/null | grep 'GPU id'"
|
|
||||||
|
|
||||||
# Installer les outils Vulkan si absents
|
|
||||||
ssh g01 "sudo dnf install -y vulkan-tools"
|
|
||||||
```
|
|
||||||
Dans LM Studio : Settings → GPU → Backend → Vulkan
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue