HeadlinesBriefing favicon HeadlinesBriefing.com

Décodage spéculatif vLLM AMD

Hacker News •
×

Résumé : Le décodage spéculatif permet à vLLM de vérifier plusieurs tokens drafts en une seule passe du modèle cible. Dans nos expériences, son effet sur le débit de tokens de sortie a varié selon les méthodes de draft et les longueurs de proposition, et dépend également de la famille de modèles, du point de contrôle de draft, de la charge de travail et du comportement d'acceptation.

Introduction : Les grands modèles de langage prennent en charge un large éventail d'applications, mais les servir à grande échelle nécessite une optimisation soigneuse. La décodage autogressionnelle standard est la base utilisée par la plupart des systèmes de service LLM : le modèle génère un token, l'ajoute à la séquence, puis utilise la séquence mise à jour pour générer le token suivant. Ce processus est simple et fiable, mais la boucle de service avance toujours d'un token engagé à la fois, car les tokens de sortie doivent être produits dans un ordre strict de gauche à droite. Le décodage spéculatif [1] s'appuie sur cette base à travers un mécanisme brouillon-et-vérification. Un composant brouillon léger propose des tokens candidats futurs, et le modèle cible vérifie ces candidats avant de les engager. Lorsque plusieurs tokens de brouillon sont acceptés, le système peut engager plusieurs tokens de sortie à partir d'une seule étape de vérification du modèle cible tout en préservant le comportement de sortie du modèle cible. Cette publication explore comment fonctionne le décodage spéculatif dans vLLM et partage des mesures de notre environnement de test. Nous examinons d'abord la base de la décodage autogressionnelle et le processus brouillon-et-vérification. Nous examinons ensuite cinq approches de draft spéculatif : MTP natif, Gemma 4 MTP, EAGLE-3, DFlash et DSpark. Ces méthodes diffèrent par la manière dont le composant brouillon reçoit des informations du modèle cible et si les tokens candidats sont générés séquentiellement, de manière autogressionnelle, en parallèle ou via une approche hybride. Enfin, nous montrons comment activer les méthodes testées dans notre environnement, rapportons des mesures de nos expériences sur les GPU AMD Instinct↓ MI300X et MI355X utilisant la plateforme logicielle ouverte ROCm↓, et discutons des considérations pratiques d'ajustement et d'observabilité.

Base de la décodage autogressionnelle : Dans la décodage autogressionnelle standard, chaque étape de décodage produit et engage un nouveau token. Par exemple, la génération de quatre tokens de sortie nécessite quatre étapes de décodage séquentiel : Étape 1 :context→model→T1 Étape 2 :context + T1→model→T2 Étape 3 :context + T1 T2→model→T3 Étape 4 :context + T1 T2 T3→model→T4 Après chaque étape, le token généré est ajouté à la séquence et devient l'entrée de l'étape suivante. Cela rend la boucle de décodage simple, mais elle nécessite également une étape de décodage du modèle pour chaque token de sortie. Pendant des générations longues, cette boucle token par token peut dominer la latence et limiter le débit de service.

La question clé derrière le décodage spéculatif est donc : pouvons-nous préserver le comportement de sortie du modèle original tout en réduisant la fréquence à laquelle la génération n'avance que d'un token à la fois ? Le décodage spéculatif y répond en séparant la proposition de la vérification. Un composant brouillon propose d'abord plusieurs tokens candidats futurs. Le modèle original, agissant comme modèle cible, vérifie ensuite ces candidats avant de les engager.

Idée centrale du décodage spéculatif : Le décodage spéculatif ne remplace pas le modèle original. Il conserve le modèle original comme modèle cible, qui reste responsable du résultat final, et ajoute une étape de proposition plus rapide devant lui. Le processus comporte deux parties : Draft : proposer plusieurs tokens candidats futurs. Verify : utiliser le modèle cible pour vérifier ces candidats.

Au cours de chaque ronde de décodage spéculatif, comme illustré dans la Figure 1, un composant brouillon léger propose un ou plusieurs tokens futurs. Ces tokens ne sont que des candidats et ne sont pas engagés immédiatement. Le modèle cible évalue ensuite la séquence de tokens candidats en une seule passe de vérification. La vérification procede de gauche à droite. Chaque token de brouillon est vérifié à l'aide du résultat du modèle cible à la position correspondante. Les tokens acceptés sont engagés dans la séquence de sortie. Lorsqu'un token de brouillon est rejeté, les candidats suivants...