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
| Vergelijk | Wat een verbetering zou laten zien |
|---|---|
| Kernelstarts en pauzes ertussen | Minder overhead tussen kleine bewerkingen |
| HBM-lees- en schrijfacties | Minder tussentijdse transfers |
| Gebruik van registers en gedeeld geheugen | Of de gecombineerde kernel meer lokale opslag nodig heeft |
| Registerspills en actieve blokken | Of de druk op resources de parallelle uitvoering heeft verminderd |
| Latency van het volledige verzoek | Of 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.