veilletech.fr
25 sept. Feed du jour
#09 LLM Article

vLLM tatoue le texte sans changer la distribution

Signer un texte sans y toucher : c'est tout l'enjeu.

vLLM sait tatouer les textes générés avec la méthode Gumbel-max : le tirage de chaque token devient pseudo-aléatoire, dérivé d'une clé secrète et du contexte, sans changer la distribution de sortie. La détection ne demande que la clé et le tokenizer ; le surcoût mesuré sur un H100 tient dans ±2 %.

3 min de lectureavancévidéo 1:18
Partager
Sommaire7 sections
  1. Ce qui se passe
  2. Le principe, sans formule
  3. Les chiffres
  4. Deux pièges traités
  5. Les limites
  6. Comment s'y prendre
  7. À retenir

Ce qui se passe

vLLM prend désormais en charge le tatouage des textes générés par la méthode Gumbel-max, intégré au pipeline d'échantillonnage du Model Runner v2 (RFC #53916, PR #54053, #56122 et #56233). Il s'active par une option au lancement du serveur.

Le principe, sans formule

À chaque pas, un modèle attribue une probabilité à chaque token possible, puis en tire un. L'astuce de Gumbel-max est une manière de faire ce tirage : ajouter un bruit bien choisi aux logits et garder le maximum donne exactement la même distribution qu'un tirage ordinaire. Le sampler standard de vLLM procède déjà ainsi.

Le tatouage remplace ce bruit aléatoire par un bruit pseudo-aléatoire, calculé à partir d'une clé secrète, des derniers tokens (quatre par défaut) et du token candidat. Sans la clé, rien ne distingue la sortie d'une génération normale : token par token, la distribution est inchangée.

Pour détecter, on retokenise le texte, on recalcule la valeur que chaque token aurait reçue et on additionne des scores. Un texte non tatoué suit une loi connue, ce qui donne une p-valeur : plus elle est faible, plus le texte est compatible avec le tatouage. Il faut la clé et le tokenizer, pas les poids ni les logits du modèle.

Les chiffres

Mesures de l'équipe vLLM sur Qwen3.5-27B, un H100, décodage spéculatif MTP-3, 512 tokens en sortie :

Deux pièges traités

Les limites

Comment s'y prendre

Terminal
vllm serve mistralai/Mistral-7B-Instruct-v0.3 \
  --watermark-config '{"algorithm":"gumbel","key":42}'

La clé 42 est celle de l'exemple, à remplacer. Le dépôt fournit un serveur de détection HTTP minimal, examples/basic/online_serving/watermark_detection_server.py, à utiliser avec le même tokenizer et la même clé. La documentation détaille la configuration.

Source : Watermarking in vLLM, blog vLLM, 24 septembre 2026.