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 :
- débit : de −1,1 % à +2,0 % selon la taille de batch, de 1 à 256, sans ralentissement significatif ;
- qualité : GSM8K, MBPP et IFEval à un ou deux points d'écart, dans les barres d'erreur ;
- détection à 1 % de faux positifs : près de 100 % dès une centaine de tokens en écriture créative, mais environ 69 % à 400 tokens sur du code (MBPP), et 49 % ou 43 % si l'on teste 10 ou 100 configurations candidates.
Deux pièges traités
- Décodage spéculatif. Un même tatouage appliqué au brouillon et au modèle cible fait baisser le taux d'acceptation. vLLM utilise deux clés, l'une pour les tokens de brouillon acceptés, l'autre pour ceux de la cible, au prix d'un signal un peu dilué à la détection.
- Boucles de répétition. Si un contexte revient, le même bruit revient avec lui et peut enfermer la génération dans une boucle. vLLM saute le tatouage quand le contexte a déjà été vu, pour au plus 0,19 % de débit en moins.
Les limites
- Textes courts ou prévisibles : peu de signal. Le code est le cas défavorable.
- Une modification brouille le score autour des tokens touchés ; un passage assez long copié tel quel garde la preuve.
- Tout repose sur la clé : elle se protège comme un secret de signature.
Comment s'y prendre
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.