Speculative decoding : hoe je een 3× snellere inferentie krijgt met elke LLM

Speculative decoding is een techniek die de tekstgeneratie door grote taalmodellen versnelt, zonder het model aan te passen of de kwaliteit van de antwoorden te verminderen. Ze wordt gepresenteerd als in staat om de inferentie 2 tot 3 keer te versnellen en berust op een slimmere generatiestrategie in plaats van op een architectuurwijziging.

De geheugenflessenhals

Telkens wanneer een gebruiker een bericht naar een chatbot stuurt, genereert het model zijn antwoord token voor token, dat wil zeggen tekstfragment voor tekstfragment. Deze werking wordt een obstakel naarmate de modellen groter worden, vooral voor programmeerassistenten, klantenservices of realtime-agents, die een bijna onmiddellijk antwoord vereisen.

De rem komt niet voornamelijk van de rekenkracht. GPU’s zoals de NVIDIA H100 zijn zeer snel voor matrixberekeningen. Het probleem is dat de miljarden parameters van het model, opgeslagen in het geheugen, naar de processor moeten worden overgebracht vóór de generatie van elke token. De rekeneenheden blijven dan grotendeels inactief. Ingenieurs spreken van een systeem beperkt door de geheugenbandbreedte: meer rekenkracht toevoegen versnelt de zaken dus niet duidelijk.

Voorstellen, dan verifiëren

Het principe bestaat eruit meerdere kandidaat-tokens in één keer te genereren en ze vervolgens parallel te verifiëren. Het systeem berust op twee modellen. Een klein zogenaamd kladmodel (draft model) produceert snel een reeks kandidaten, meestal vier tot acht tokens. Een doelmodel (target model), groter en van betere kwaliteit, evalueert de hele reeks in één keer. Omdat GPU’s zijn ontworpen voor parallelle berekening, kost het verwerken van een batch tokens nauwelijks meer tijd dan het verwerken van één token.

Voor elke kandidaat vergelijkt het doelmodel zijn eigen waarschijnlijkheid met die welke het kladmodel hem heeft toegekend. Als het doelmodel minstens even zeker is, wordt de token geaccepteerd. Zo niet, dan wordt hij geaccepteerd met een waarschijnlijkheid die afneemt naarmate het verschil groter wordt. Een afgewezen token wordt vervangen door een token getrokken uit een aangepaste distributie, waarna de lus opnieuw begint. Volgens de presentatie van de methode garandeert deze statistische procedure dat de uitvoer exact dezelfde waarschijnlijkheidsverdeling volgt alsof het doelmodel elke token alleen had gegenereerd.

In het beste geval worden alle kandidaten geaccepteerd en voegt het doelmodel een extra token toe, dat zijn vijf tot negen tokens voor de kost van één keer doorlopen van het doelmodel. In het slechtste geval wordt de eerste kandidaat afgewezen, wat een lichte overhead toevoegt, aangezien de generatietijd van het kladmodel nog steeds betaald moet worden. Een slecht op elkaar afgestemd modelpaar kan de generatie dus licht vertragen.

De werkelijke winst hangt vooral af van het acceptatiepercentage, dat wil zeggen hoe vaak de kandidaten van het kladmodel de verificatie doorstaan. Rond de 70 tot 80 %, een niveau dat als typisch wordt beschouwd voor goed op elkaar afgestelde paren bij gangbare taken, ligt de versnelling tussen 2x en 3x. Voorspelbare of repetitieve teksten produceren hogere percentages en grotere winsten.

Varianten en praktische toepassing

Het oorspronkelijke schema vereist een apart kladmodel, wat geheugen en technische complexiteit toevoegt. Verschillendere recentere technieken doen dit zonder. Sommige laten de strikte statistische garantie vallen voor een eenvoudigere implementatie of een hogere doorvoer, met volgens de bron over het algemeen een verwaarloosbare impact op de kwaliteit van de uitvoer.

Medusa voegt aan het doelmodel verschillende extra voorspellingskoppen toe op zijn laatste laag, elk voorspellend een andere toekomstige positie. Eagle, voor ‘Extrapolation Algorithm for Greater Language-model Efficiency’, steunt op de interne toestanden van het model in plaats van op zijn uitvoertokens, wat volgens de bron hogere acceptatiepercentages bevordert bij complexe of gespecialiseerde teksten. Prompt Lookup Decoding gebruikt geen secundair model: het identificeert in de prompt en de gespreksgeschiedenis uitdrukkingen die waarschijnlijk opnieuw verschijnen in het antwoord, en gebruikt ze als kandidaten, wat met name geschikt is voor codebewerking en documentensamenvatting.

Speculative decoding wordt als optie aangeboden in verschillende inferentieframeworks, waaronder text-generation-inference van Hugging Face, vLLM en llama.cpp. Volgens de bron komt het activeren meestal neer op een configuratiewijziging.

De techniek komt vooral ten goede aan lange generaties, wanneer het model één verzoek tegelijk verwerkt en de prompt en het antwoord vocabulaire of structuur delen. Vraag-antwoord, documentensamenvatting en codecompletering behoren tot de gevallen waar de winsten het grootst zijn. In batchverwerking met hoge doorvoer daarentegen kan ze de doorvoer verminderen, omdat de kladtokens geheugen en rekenkracht verbruiken die voor andere verzoeken gebruikt hadden kunnen worden.