Custom C++ Engine verdoppelt MiniCPM-V 4.6 auf Orange Pi AIPro auf 5,90 Token/s
Nutzer Known_Ice9380 hat in wenigen Wochen eine vollständig von Grund auf neu geschriebene C++-Inference-Engine für das multimodale Modell MiniCPM-V 4.6 entwickelt, die auf dem Orange Pi AIPro-Board mit Ascend 310B NPU läuft. Das Board kostet rund 149 USD und bietet 20 TOPS INT8 bzw. 10 TFLOPS FP16. Ausgangspunkt war die Beobachtung, dass der Standard-aclnnMm-Stack beim Token-Decoding (M=1, Vektor-Matrix-Multiplikation) die Cube-Einheit des NPU stark unterauslastet und nur 2,88 Token/s bei 350 ms pro Schritt liefert. Die Optimierung erfolgte in drei Stufen: Erstens ein Custom Cube Matmul-Kernel für M=1 via MatmulImpl (+1,49 Token/s, –121 ms), zweitens ein 16-Chunk-Cube-Pfad für den besonders breiten lm_head (Vokabular ~248k Token, –29 ms), drittens ein vektorisierter Causal-Conv1d-Step-Kernel mit Unified Buffer DMAs (–30 ms). Python wird ausschließlich für CPU-seitiges Tokenisieren und Bild-Preprocessing verwendet; der gesamte Hot Path läuft torch_npu-frei im C++-Subprocess. Das Dekodieren ist aktuell durch die 44 GB/s Speicherbandbreite des Boards limitiert; die theoretische Untergrenze liegt bei ~32 ms, der aktuelle Wert bei 170 ms. Als nächsten Schritt plant der Autor INT4/INT8-Dequantisierungskernels, um 12+ Token/s zu erreichen. Der Quellcode inklusive Custom Ops, Build-Skripten und Gradio-Web-UI ist öffentlich auf GitHub verfügbar.
Frag die KI zum Artikel
Folgefragen zu Headline, Quelle und Volltext — Antwort streamt in wenigen Sekunden.
Verwandte Beiträge
Custom C++ Engine verdoppelt MiniCPM-V 4.6 auf Orange Pi AIPro auf 5,90 Token/s
Nutzer Known_Ice9380 hat in wenigen Wochen eine vollständig von Grund auf neu geschriebene C++-Inference-Engine für das multimodale Modell MiniCPM-V 4.6 entwickelt, die auf dem Orange Pi AIPro-Board mit Ascend 310B NPU läuft. Das Board kostet rund 149 USD und bietet 20 TOPS INT8 bzw. 10 TFLOPS FP16. Ausgangspunkt war die Beobachtung, dass der Standard-aclnnMm-Stack beim Token-Decoding (M=1, Vektor-Matrix-Multiplikation) die Cube-Einheit des NPU stark unterauslastet und nur 2,88 Token/s bei 350 ms pro Schritt liefert. Die Optimierung erfolgte in drei Stufen: Erstens ein Custom Cube Matmul-Kernel für M=1 via MatmulImpl (+1,49 Token/s, –121 ms), zweitens ein 16-Chunk-Cube-Pfad für den besonders breiten lm_head (Vokabular ~248k Token, –29 ms), drittens ein vektorisierter Causal-Conv1d-Step-Kernel mit Unified Buffer DMAs (–30 ms). Python wird ausschließlich für CPU-seitiges Tokenisieren und Bild-Preprocessing verwendet; der gesamte Hot Path läuft torch_npu-frei im C++-Subprocess. Das Dekodieren ist aktuell durch die 44 GB/s Speicherbandbreite des Boards limitiert; die theoretische Untergrenze liegt bei ~32 ms, der aktuelle Wert bei 170 ms. Als nächsten Schritt plant der Autor INT4/INT8-Dequantisierungskernels, um 12+ Token/s zu erreichen. Der Quellcode inklusive Custom Ops, Build-Skripten und Gradio-Web-UI ist öffentlich auf GitHub verfügbar.
Frag die KI zum Artikel
Folgefragen zu Headline, Quelle und Volltext — Antwort streamt in wenigen Sekunden.