Wie viel RAM wird für einen mehrsprachigen RAG-Index für Familien benötigt?

Eva Wong ist die Technische Redakteurin und und leidenschaftliche Tüftlerin bei ZimaSpace. Eine lebenslange Geek mit einer Leidenschaft für Homelabs und Open-Source-Software, sie spezialisiert sich darauf, komplexe technische Konzepte in zugängliche, praktische Anleitungenzu übersetzen. Eva ist der Meinung, dass Self-Hosting Spaß machen und nicht einschüchternd sein sollte. Durch ihre Tutorials befähigt sie die Community, Hardware-Setups zu entmystifizieren, vom Bau ihres ersten NAS bis hin zur Beherrschung von Docker-Containern.

Ein mehrsprachiger RAG-Index für eine Familie passt häufig in 16–32 GB RAM, aber die Anzahl der Chunks und das Indexdesign sind wichtiger als die reine Anzahl der Sprachen.

Ein Heimarchiv mit 500.000 Chunks kann pro Chunk ein mehrsprachiges Embedding verwenden, statt eine Kopie pro Sprache anzulegen. Der Speicherbedarf wächst dennoch durch Vektordimensionen, Graphverknüpfungen, Metadaten, Caches, Reranker und das Generierungsmodell. Das sinnvolle Ziel ist daher ein gemessener maximaler Arbeitssatz mit Reserven und nicht eine Faustregel nach dem Muster „Gigabytes pro Sprache“ unter Spitzenlast.

Mit den Vektoren beginnen und anschließend die Suchstruktur hinzufügen

Der Speicherbedarf der Rohvektoren ergibt sich aus der Anzahl der Chunks multipliziert mit der Anzahl der Dimensionen und den Bytes pro Wert. Bei Float32 enthalten 500.000 Vektoren mit 768 Dimensionen etwa 1,54 GB an Koordinaten. Float16 halbiert diese Koordinatenmenge, wobei die Datenbankunterstützung und das Verhalten hinsichtlich der Genauigkeit überprüft werden müssen.

Eine Übersicht über die HNSW-Graphindexierung erklärt, warum HNSW für eine schnelle approximative Suche einen Graphen aus Nachbarverbindungen verwaltet. Diese Verbindungen, IDs, Ausrichtung und der Overhead des Speicherallokators kommen zur Berechnung der Rohvektoren hinzu.

Metadatenfilter, Dokument-IDs, Text-Caches und doppelte Strukturen während der Erstellung können die Erwartungen übertreffen. Eine festplattenbasierte Datenbank kann häufig verwendete Graphseiten dennoch im Speicher halten, während eine In-Memory-Engine nahezu den gesamten Index behalten kann. Rohvektoren bilden die Untergrenze, nicht den endgültigen RAM-Bedarf.

Mehrsprachige Abdeckung verändert die Chunk-Anzahl stärker als die Berechnung

Ein mehrsprachiges Embedding-Modell bildet mehrere Sprachen in einem gemeinsamen Vektorraum ab. Daher werden beim Hinzufügen einer Sprache nicht automatisch alle Vektoren dupliziert. Der RAM-Bedarf steigt, wenn übersetzte Kopien separat in Chunks aufgeteilt werden, sprachspezifische Indizes verwaltet werden oder die Tokenisierung für dieselben Dokumente mehr Chunks erzeugt.

Die Forschung zu mehrsprachigen Embeddings untersucht gemeinsame Repräsentationen für viele Sprachen und unterstützt Designs mit einem einzigen Index, sofern das ausgewählte Modell diese Sprachen ausreichend gut aufeinander abstimmt. Die Abdeckungsqualität kann je nach Sprache variieren, auch wenn der Speicherbedarf gleich bleibt.

Auch das Generierungsmodell und der Reranker konkurrieren um den Systemspeicher. Ein Server mit 16 GB kann einen moderaten Index aufnehmen, beginnt aber möglicherweise stark auszulagern, sobald ein LLM, ein OCR-Prozess und ein Datenbank-Cache gemeinsam ausgeführt werden. Mehr RAM behebt keine schwache mehrsprachige Suche, sondern verhindert lediglich, dass Speicherdruck den Test verfälscht.

Wo der Bereich von 16–32 GB nicht mehr ausreicht

Sechzehn Gigabyte sind für Hunderttausende kompakter Vektoren mit festplattenbasierten Textdaten und einem kleinen lokalen Modell plausibel. Zweiunddreißig Gigabyte sind ein sicherer Ausgangspunkt für annähernd eine Million Vektoren mit 768 Dimensionen plus Dienste. Höhere Dimensionen, mehrere Replikate, separate Sprachindizes oder ein dauerhaft im Speicher gehaltenes größeres LLM können 64 GB oder mehr rechtfertigen.

Eine Kapazitätsbetrachtung zum HNSW-Indexspeicher zeigt, dass die Bytes der Rohvektoren nach Einbeziehung der Graphstrukturen nur einen Bruchteil des gesamten HNSW-Speichers ausmachen können. Die Implementierungsentscheidungen machen jedes allgemeingültige Verhältnis unsicher.

Diese Bereiche gelten nicht mehr, wenn die Datenbank Komprimierung, Memory-Mapping, Product Quantization oder einen ganz anders konfigurierten Graphen verwendet. Sie gelten auch während der Indexerstellung nicht, wenn der Builder vorübergehend alte und neue Kopien im Speicher hält. Messen Sie die Spitzenwerte für den laufenden Suchbetrieb und für die Neuerstellung des Indexes getrennt.

RAM anhand eines gemessenen Arbeitssatzes dimensionieren

Berechnen Sie zunächst die Rohvektoren und übernehmen Sie anschließend zehn Prozent des geplanten Korpus mit den endgültigen Dimensionen, Metadaten und Indexparametern. Messen Sie den belegten Speicher nach einer aufgewärmten Suche, bei gleichzeitigen Abfragen und während einer Neuerstellung. Multiplizieren Sie nur die Komponenten, die linear skalieren, und reservieren Sie anschließend mindestens 25 Prozent Betriebsreserve.

Führen Sie den Prototyp neben der geplanten Vektordatenbank-Workload für zu Hause aus, da sich die Spitzen von Modell und Datenbank überschneiden können. Halten Sie auch die Swap-Aktivität und die Seitenfehlerquote in der Aufzeichnung fest.

Wählen Sie 16 GB nur dann, wenn der hochgerechnete Spitzenbedarf unter etwa 12 GB bleibt, und 32 GB, wenn er unter etwa 24 GB bleibt. Gehen Sie auf mehr Speicher, sobald Neuerstellungen oder gleichzeitige Inferenz diese Grenze überschreiten. Berechnen Sie den Bedarf nach Änderungen an der Chunk-Aufteilung oder den Embedding-Dimensionen erneut.

Tech- & KI-Zentrum

Mehr zum Lesen

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.