mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-13 18:28:03 +02:00
Sur Unraid, /mnt/user/… n'est pas un disque mais shfs, un démon FUSE : chaque fsync de loki.db et chaque page d'un gros MoE mmappé relue depuis le disque (modèle plus gros que la RAM) le traverse, à chaque token. Rien n'est perdu ni altéré, mais le décodage ralentit — sans que rien ne le dise. Loki ne déplace rien : changer le chemin hôte d'une installation donnerait un /data vide. Il le voit et le dit, sur un ton d'information : - sys_storagefuse.go lit /proc/self/mountinfo (type lu après le séparateur « - », montage le plus long qui contient le chemin) pour LOKI_HOME et chaque dossier de modèles ; Linux en conteneur seulement, mis en cache une minute puisque /api/status est interrogé en boucle ; - conseil en jaune au démarrage et champ « hint » de /api/status, affiché en encart discret, distinct du bandeau rouge de perte de données ; - compose Unraid et README : « Exclusive access » recommandé (même chemin, FUSE court-circuité), /mnt/<pool> en option avancée avec migration manuelle et mise en garde sur un pool inexistant (RAM). La détection de thrash du cache de pages est laissée de côté : elle exige un signal majflt calibré par modèle sur le serveur. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
63 lines
3.6 KiB
YAML
63 lines
3.6 KiB
YAML
# ───────────────────────────────────────────────────────────────────────────
|
|
# Loki — docker-compose pour Unraid (image préconstruite par GitHub Actions)
|
|
#
|
|
# Loki est un fork conteneurisé d'AJEAN (github.com/nathaninline/ajean, MIT) :
|
|
# moteur llama.cpp CUDA + interface web dans UN conteneur autonome.
|
|
# Aucun build ni git nécessaire sur Unraid — l'image est publiée sur GHCR à
|
|
# chaque push sur main.
|
|
#
|
|
# MISE EN PLACE :
|
|
# 1) Plugin « Nvidia Driver » (Apps) installé, GPU visible (nvidia-smi).
|
|
# 2) Crée les dossiers de données (terminal Unraid) :
|
|
# mkdir -p /mnt/user/appdata/loki/data /mnt/user/appdata/loki/models
|
|
# 3) Plugin « Compose Manager » -> nouvelle stack -> colle ce fichier.
|
|
# 4) Compose Up. Interface : http://<ip-unraid>:8090
|
|
#
|
|
# Les modèles se téléchargent directement depuis l'UI (catalogue intégré),
|
|
# ou dépose tes .gguf dans /mnt/user/appdata/loki/models.
|
|
#
|
|
# Mise à jour : Compose Down puis Up avec « pull image », ou
|
|
# « docker compose pull » avant Up.
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
services:
|
|
loki:
|
|
image: ghcr.io/r0m1k3/loki:latest
|
|
container_name: loki
|
|
runtime: nvidia
|
|
ports:
|
|
# Pour changer de port : modifie 8090 à gauche ET LOKI_WEB_PORT… ou
|
|
# seulement à gauche (ex. "8717:8090") si tu veux garder l'ancien port.
|
|
- "8090:8090"
|
|
environment:
|
|
- NVIDIA_VISIBLE_DEVICES=all
|
|
# Optionnel : modèle initial (sinon, choisis-le dans l'UI au premier
|
|
# lancement). Ex. LOKI_MODEL=Qwen3-14B-Q4_K_M.gguf après dépôt du
|
|
# fichier dans /mnt/user/appdata/loki/models.
|
|
- LOKI_MODEL=
|
|
# Accès par NOM DE DOMAINE (reverse proxy, ex. loki.mondomaine.fr) sans
|
|
# clé de pilotage : liste ici le(s) nom(s), séparés par des virgules —
|
|
# sinon l'API répond 403 (protection contre les sites tiers / DNS
|
|
# rebinding). Inutile pour un accès par IP ou nom local.
|
|
- LOKI_TRUSTED_HOSTS=
|
|
volumes:
|
|
# PERFORMANCE — /mnt/user/… passe par la couche FUSE des partages
|
|
# Unraid (shfs) : chaque écriture de la base et chaque page d'un gros
|
|
# modèle relue depuis le disque (modèle plus gros que la RAM) traverse un
|
|
# démon en espace utilisateur. Loki le signale au démarrage (encart
|
|
# d'information, rien n'est perdu). Deux remèdes, au choix :
|
|
# - Recommandé : Shares -> appdata (et le partage des modèles) ->
|
|
# « Exclusive access » = Yes (Unraid 6.12+, partage sur un seul
|
|
# pool). Le chemin /mnt/user reste le même, FUSE est court-circuité.
|
|
# - Avancé : mapper /mnt/<ton-pool>/appdata/loki/… (ex. /mnt/cache si
|
|
# ton pool s'appelle « cache »). Migration MANUELLE obligatoire :
|
|
# Compose Down, rsync -a de l'ancien dossier vers le nouveau, puis
|
|
# changer les deux lignes ci-dessous. Un /mnt/<pool> qui n'existe
|
|
# pas atterrit dans la RAM d'Unraid : données perdues au redémarrage,
|
|
# et un modèle de 80 Go peut saturer la mémoire du serveur.
|
|
# Ne change JAMAIS ce chemin sans migrer : /data apparaîtrait vide.
|
|
# /data : config, base, mémoire, workspace, modèles téléchargés par l'UI
|
|
- /mnt/user/appdata/loki/data:/data
|
|
# /models : dossier de .gguf déposés à la main (gros fichiers)
|
|
- /mnt/user/appdata/loki/models:/models
|
|
restart: unless-stopped
|