Ein 10-Millionen-Dokument-Korpus, der als Float32-Vektoren 31 Gigabyte Arbeitsspeicher belegt, passt mit turbovec in 4 Gigabyte. Die Suche in diesem komprimierten Index dauert weniger lang als mit FAISS, dem etablierten Standardwerkzeug für Vektorsuche. Möglich macht das eine Kombination aus einem neuen Quantisierungsverfahren und handoptimierten SIMD-Kernels.
Speicherfresser Vektorsuche: Das Problem
Vektorsuche steckt in vielen modernen Anwendungen, von Empfehlungssystemen bis zu Retrieval-Augmented Generation. Die zugrunde liegenden Einbettungen haben ihren Preis: Ein Vektor mit 1536 Dimensionen belegt als Float32 knapp 6 Kilobyte. Bei Millionen von Dokumenten summiert sich das auf mehrere hundert Gigabyte RAM. Zu teuer und oft unpraktikabel.
Dazu kommt die Geschwindigkeit. Eine lineare Suche über alle Vektoren ist bei dieser Größenordnung zu langsam. Klassische Indizes wie FAISS oder HNSW benötigen oft eine Trainingsphase, bevor sie Daten aufnehmen können. FAISS muss erst mit einer Stichprobe trainieren, um Codebücher zu lernen. Bei sich ständig ändernden Daten wird das zum Problem.
turbovec umgeht das: weniger Speicher durch Quantisierung, schnellere Suche durch SIMD-Optimierung und ein Online-Ingest ohne Trainingsschritt. Der Index eignet sich für Szenarien mit kontinuierlich neuen Daten, etwa bei RAG-Systemen für Dokumentenanalyse.
TurboQuant: Quantisierung ohne Trainingsphase
Um Vektoren kompakt abzulegen, nutzt turbovec die Produktquantisierung. Dabei wird ein Vektor in mehrere Untervektoren zerlegt, die jeweils durch einen Index aus einem Codebuch repräsentiert werden. Üblicherweise muss dieses Codebuch mit einem Trainingslauf auf den eigenen Daten erstellt werden. Genau das macht TurboQuant überflüssig.
Der Algorithmus von Google Research ist ein daten-agnostischer Quantisierer. Er erzeugt ein Codebuch, das für beliebige Datenverteilungen nahezu optimale Verzerrung bietet. Statt vollständiger Vektoren werden nur Codebuch-Indizes gespeichert. Das spart Platz, kostet aber etwas Genauigkeit.
turbovec unterstützt zwei Bit-Breiten: 2-Bit und 4-Bit pro Komponente. Je niedriger die Bit-Breite, desto stärker die Kompression, aber desto größer der potenzielle Qualitätsverlust. In den Benchmarks zeigt sich, dass die 4-Bit-Variante kaum an Recall einbüßt, während sie den Speicherbedarf drastisch senkt. Die 2-Bit-Variante ist für extrem speicherhungrige Systeme gedacht.
Rust, SIMD und Python: Die technische Basis
Rust als Implementierungssprache hat Vorteile. Sie garantiert Speichersicherheit ohne Garbage Collector und erlaubt feingranulare Optimierungen. Entwickler Ryan Codrai hat die Such-Kernels von turbovec von Hand geschrieben und nutzt SIMD-Instruktionen. SIMD steht für Single Instruction Multiple Data – eine CPU verarbeitet damit mehrere Vektoren parallel. Das beschleunigt die Suche erheblich.
Konkret kommen auf ARM-Prozessoren NEON SDOT/SMMLA zum Einsatz, auf x86 AVX-512 VNNI und vpermb. Ältere CPUs nutzen AVX2 oder skalare Fallbacks. In den Messungen des Autors übertrifft turbovec damit FAISS IndexPQFastScan in fast jeder Konfiguration. Bei 4-Bit-Quantisierung liegt der Vorsprung durchschnittlich beim Faktor 3,4, bei 2-Bit bei 20 bis 30 Prozent.
Die Python-Bindings machen die Bibliothek direkt nutzbar. Du installierst turbovec per Pip und kannst sofort einen Index anlegen, Vektoren hinzufügen und durchsuchen. Die API ist bewusst schlank: TurboQuantIndex für den einfachen Fall, IdMapIndex für stabile IDs. Wer in Python arbeitet, profitiert damit von der Leistung einer nativen Rust-Bibliothek.
Quelle: github.com
