Aller au contenu

Trace install tas - SGLang

De Loic Wiki
Version datée du 20 août 2026 à 14:27 par Admin (discussion | contributions) (Ajout du commit local de déploiement SGLang)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

Modèle:Projet

SGLang ROCm — Qwen3.8 27B W8A8 déployé

Modèle:Encadré

Composants

  • Unité Quadlet rootless : sglang.service, activée pour default.target
  • Quadlet : /home/loic/.config/containers/systemd/sglang.container
  • Conteneur : sglang-qwen38-w8a8
  • Image : localhost/sglang:qwen38-w8a8-rdna3-21c88f8
  • Image ID : 06977e11fa96592e779eba01f41229884553d490788b3c73ad80aec6edeb05d3
  • API : http://127.0.0.1:30000/v1, non publiée sur le LAN
  • Nom OpenAI : qwen3.8-27b-w8a8
  • Checkpoint : Freaksterz/Qwen3.8-27B-SmoothQuant-W8A8-INT8, révision 68746dd
  • Quantification : poids INT8 par canal et activations INT8 dynamiques par token (compressed-tensors, W8A8)
  • GPU : Radeon RX 7900 XTX 24 Gio, architecture gfx1100

Profil retenu

--context-length 32768
--cpu-offload-gb 14
--mem-fraction-static 0.80
--max-running-requests 1
--chunked-prefill-size 2048
--attention-backend triton
--sampling-backend pytorch
--cuda-graph-backend-decode disabled
--cuda-graph-backend-prefill disabled

Le modèle accepte nativement 262 144 tokens, mais le profil 256K n'est pas réaliste sur cette carte avec des poids 8 bits. Après chargement, rocm-smi mesure environ 22,5 Go de VRAM utilisés sur 25,75 Go décimaux. Le démarrage à froid dure environ 80 à 90 secondes. Le premier appel après redémarrage compile encore des noyaux Triton et a pris 63,7 secondes lors du contrôle final ; le même test à chaud prend environ 18 secondes.

Ollama peut rester actif sans modèle chargé. Il ne faut toutefois pas charger simultanément un gros modèle Ollama, faute de marge VRAM ; arrêter SGLang ou décharger Ollama au préalable.

Construction RDNA3 et correctif

Le dépôt de travail est /media/loic/nem/sglang/build-rdna3/sglang-qwen38-current, branche deploy/qwen38-rdna3, base SGLang 21c88f862, déploiement figé au commit local 19d7dd612. L'image de base immuable est localhost/sglang:qwen38-rdna3-21c88f8-base. La couche finale se trouve dans docker/rdna3-w8a8-runtime.Dockerfile.

Le correctif déterminant concerne le déport CPU. SGLang exécute les couches déportées avec torch.func.functional_call. La vue attn.conv_weights, créée pendant l'initialisation, restait attachée à l'ancien stockage au lieu du poids conv1d.weight substitué. Cette vue est maintenant rafraîchie dans le passage avant. Le test W8A8 est alors passé de sorties invalides à une génération exacte.

Un port du GGUF Q8_0 officiel a aussi été chargé. Les multiplications et le remappage des poids sont numériquement corrects, mais la génération finale échoue encore au contrôle sémantique. Cette variante n'est pas déployée et reste étiquetée localhost/sglang:qwen38-rdna3-21c88f8-gguf-experimental pour diagnostic.

Contrôles

systemctl --user status sglang.service --no-pager
journalctl --user -u sglang.service -f
podman logs -f sglang-qwen38-w8a8
curl -fsS http://127.0.0.1:30000/v1/models

curl -fsS http://127.0.0.1:30000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"qwen3.8-27b-w8a8",
    "messages":[{"role":"user","content":"Réponds uniquement par le nombre exact : 17 + 25 = ?"}],
    "temperature":0,
    "max_tokens":8,
    "chat_template_kwargs":{"enable_thinking":false}
  }'

Résultat attendu et observé : 42, arrêt sur le token de fin, 30 tokens d'entrée et 3 tokens de sortie. L'inventaire renvoie max_model_len: 32768. La génération texte est validée ; la partie vision présente dans le checkpoint ne l'est pas encore.

Exploitation et retour arrière

systemctl --user start sglang.service
systemctl --user stop sglang.service
systemctl --user restart sglang.service

La sauvegarde antérieure se trouve dans /home/loic/backups/sglang-qwen38-20260820T084200+0200/. Pour arrêter sans supprimer les images, checkpoints ou caches :

systemctl --user disable --now sglang.service

La documentation détaillée est dans /home/loic/mediawiki/docs/sglang.md. Les artefacts ont aussi été copiés dans Nextcloud sous minidev/sglang-qwen38-w8a8/.

Références