Gestern habe ich lokal ein feines Modell mit 16 GB VRAM laufen lassen. Am Anfang lief es noch gut, aber nach zwanzig Runden ist es direkt OOM (Out of Memory) abgestürzt. Ich habe die Überwachung gecheckt und gesehen, dass der Cache-Speicherfragmentierung den VRAM komplett aufgefressen hat, also musste ich neu starten. Das hat mich eine Stunde gekostet.
Das hat mich dazu gebracht, das KV-Cache-Management von OpenLedger's OpenLoRA genauer unter die Lupe zu nehmen. Es hat ein dynamisches Migrationssystem entworfen, das, wenn der Cache einer GPU fast voll ist, automatisch einige Anfragen auf eine andere Karte verschiebt. Und während des Migrationsprozesses bleibt der Inferenzstatus erhalten, sodass man nicht neu rechnen muss.
Ich habe nachgeschaut, dass es die Segmentierte Gather Matrix-Vektor-Multiplikation verwendet. Einfach gesagt, werden die K- und V-Vektoren unterschiedlicher Anfragen segmentiert gespeichert und bei Bedarf blockweise abgerufen, anstatt die gesamte Tabelle auf einmal zu verschieben. So ist das übertragene Datenvolumen viel geringer.
Im Whitepaper wird eine Formel angegeben, dass neue Anfragen R_new einer GPU zugewiesen werden, die die Grenzen der Batchgröße und der Speicherkapazität erfüllt, wobei die optimalste ausgewählt wird. Das ist intelligenter als zufällige Zuweisungen oder Round-Robin, da letzteres leicht dazu führen kann, dass eine Karte überlastet wird, während andere leer bleiben $OPEN .
Ich selbst habe ein ähnliches Problem erlebt. Bei der Ausführung von Inferenzdiensten ist nicht die Rechenleistung das größte Problem, sondern die Fragmentierung des VRAMs. Es gibt noch freie Plätze auf den Karten, aber aufgrund der Fragmente kann die neue Anfrage nicht hinein. Man muss zusätzliche Maschinen hinzufügen, was teuer ist. Das segmentierte Speichern und die dynamische Migration von OpenLoRA sollten theoretisch helfen, die Fragmente zu nutzen. Weniger Karten bedeutet weniger Kosten.
Aber ich muss auch sagen, dass die Migrationslogik in der Theorie gut läuft, aber wenn sie in einer Produktionsumgebung eingesetzt wird, kann das anders sein. Häufige Migration kann zusätzliche Latenz einführen, und bei hoher Parallelität kann der Scheduler selbst zum Flaschenhals werden. Der Blockraum von Bitcoin ist begrenzt, und die Gasgebühren von Ethereum steigen bei hoher Auslastung stark an. Das sind alles Probleme, die nicht gut gelöst sind. Ob OpenLoRA mit echtem Traffic umgehen kann, wird sich zeigen, wenn es einige Monate läuft, und ich werde auf die Updates des Whitepapers achten.
Ich werde das Überwachungsdashboard des Mainnets im Auge behalten. Wenn die Migrationslatenz unter 5 Millisekunden bleibt, werde ich versuchen, ein paar kleine Modelle hochzuladen @OpenLedger #OpenLedger .
Das hat mich dazu gebracht, das KV-Cache-Management von OpenLedger's OpenLoRA genauer unter die Lupe zu nehmen. Es hat ein dynamisches Migrationssystem entworfen, das, wenn der Cache einer GPU fast voll ist, automatisch einige Anfragen auf eine andere Karte verschiebt. Und während des Migrationsprozesses bleibt der Inferenzstatus erhalten, sodass man nicht neu rechnen muss.
Ich habe nachgeschaut, dass es die Segmentierte Gather Matrix-Vektor-Multiplikation verwendet. Einfach gesagt, werden die K- und V-Vektoren unterschiedlicher Anfragen segmentiert gespeichert und bei Bedarf blockweise abgerufen, anstatt die gesamte Tabelle auf einmal zu verschieben. So ist das übertragene Datenvolumen viel geringer.
Im Whitepaper wird eine Formel angegeben, dass neue Anfragen R_new einer GPU zugewiesen werden, die die Grenzen der Batchgröße und der Speicherkapazität erfüllt, wobei die optimalste ausgewählt wird. Das ist intelligenter als zufällige Zuweisungen oder Round-Robin, da letzteres leicht dazu führen kann, dass eine Karte überlastet wird, während andere leer bleiben $OPEN .
Ich selbst habe ein ähnliches Problem erlebt. Bei der Ausführung von Inferenzdiensten ist nicht die Rechenleistung das größte Problem, sondern die Fragmentierung des VRAMs. Es gibt noch freie Plätze auf den Karten, aber aufgrund der Fragmente kann die neue Anfrage nicht hinein. Man muss zusätzliche Maschinen hinzufügen, was teuer ist. Das segmentierte Speichern und die dynamische Migration von OpenLoRA sollten theoretisch helfen, die Fragmente zu nutzen. Weniger Karten bedeutet weniger Kosten.
Aber ich muss auch sagen, dass die Migrationslogik in der Theorie gut läuft, aber wenn sie in einer Produktionsumgebung eingesetzt wird, kann das anders sein. Häufige Migration kann zusätzliche Latenz einführen, und bei hoher Parallelität kann der Scheduler selbst zum Flaschenhals werden. Der Blockraum von Bitcoin ist begrenzt, und die Gasgebühren von Ethereum steigen bei hoher Auslastung stark an. Das sind alles Probleme, die nicht gut gelöst sind. Ob OpenLoRA mit echtem Traffic umgehen kann, wird sich zeigen, wenn es einige Monate läuft, und ich werde auf die Updates des Whitepapers achten.
Ich werde das Überwachungsdashboard des Mainnets im Auge behalten. Wenn die Migrationslatenz unter 5 Millisekunden bleibt, werde ich versuchen, ein paar kleine Modelle hochzuladen @OpenLedger #OpenLedger .


