Hoe CUDA-kernelfusie LLM-inference versnelt

Automatische vertaling

Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.

CUDA-kernelfusie combineert bewerkingen die anders als afzonderlijke GPU-kernels zouden draaien. Dit kan de startkosten verminderen en voorkomen dat een tussentijdse tensor naar het GPU-geheugen wordt geschreven en meteen weer wordt ingelezen. Het helpt wanneer deze kosten een aanzienlijk deel van de inference-latency vormen.

Volg de tussentijdse gegevens

Neem een residuele optelling gevolgd door normalisatie. Afzonderlijke kernels kunnen het resultaat van de optelling naar het hoofdgeheugen van de GPU schrijven en het opnieuw inlezen voor normalisatie. Een compatibele samengevoegde implementatie kan tussentijdse waarden binnen de kernel hergebruiken. Dat bespaart transfers; het neemt de wiskundige bewerkingen of de eisen aan hun correctheid niet weg.

Fusie is ook toepasbaar op grotere bewerkingen. DeepFusionKernel onderzoekt het samenvoegen van een volledige SwiGLU-feedforwardberekening, inclusief de matrixvermenigvuldigingen. Dit gaat verder dan het combineren van elementsgewijze activatiefuncties.

FlashNorm gebruikt een andere transformatie: het verwerkt de aangeleerde schaalfactor van RMSNorm in een volgende lineaire bewerking en stelt het herschalen uit.

Controleer of de fusie heeft geholpen

VergelijkWat een verbetering zou laten zien
Kernelstarts en pauzes ertussenMinder overhead tussen kleine bewerkingen
HBM-lees- en schrijfactiesMinder tussentijdse transfers
Gebruik van registers en gedeeld geheugenOf de gecombineerde kernel meer lokale opslag nodig heeft
Registerspills en actieve blokkenOf de druk op resources de parallelle uitvoering heeft verminderd
Latency van het volledige verzoekOf de kernelwijziging verschil heeft gemaakt voor gebruikers

De Hopper-optimalisatiegids legt de resourcelimieten uit die gelijktijdig actief GPU-werk beperken. Bewerkingen combineren kan het registergebruik verhogen, registerspills veroorzaken of het aantal blokken beperken dat tegelijk draait. Een grotere samengevoegde kernel kan daardoor bij sommige tensorvormen langzamer zijn.

Houd model, precisie, GPU, invoerlengte en batchgrootte constant. Controleer naast de tijd ook de numerieke resultaten en de kwaliteit op de taak. Vergelijk ook decode met kleine batches met prefill met grotere batches: lagere startkosten kunnen voor korte bewerkingen veel meer uitmaken dan voor lange matrixberekeningen.

De engineeringgids: CUDA-kernels en fusie legt het verband tussen deze methoden en gekwantiseerde matrixkernels.