Schnelle LLM-Inferenz von Grund auf neu

2024-12-15

Dieser Artikel beschreibt den Weg des Autors beim Bau einer LLM-Inferenz-Engine von Grund auf mit C++ und CUDA, ohne auf Bibliotheken zurückzugreifen. Der Prozess ermöglichte einen tiefen Einblick in den gesamten Stack der LLM-Inferenz, von CUDA-Kernen bis zur Modellarchitektur, und zeigte, wie Optimierungen die Inferenzgeschwindigkeit beeinflussen. Das Ziel war es, ein Programm zu erstellen, das die Gewichte gängiger Open-Source-Modelle laden und eine Single-Batch-Inferenz auf einem einzelnen CPU+GPU-Server durchführen kann, wobei der Token-Durchsatz iterativ verbessert wird, um llama.cpp zu übertreffen. Der Artikel beschreibt detailliert die Optimierungsschritte auf CPU und GPU, darunter Multithreading, Gewichtsquantisierung, SIMD, Kernel-Fusion und KV-Cache-Quantisierung, und analysiert Engpässe und Herausforderungen. Das Endergebnis erreicht eine nahezu state-of-the-art Leistung für lokale LLM-Inferenz.

Entwicklung LLM-Inferenz