Abstracts
10. Februar 2025Unterstützung für DeepseekR1 und V3 auf einem einzelnen Grafikprozessor (24 GB RAM) / mehreren Grafikprozessoren und 382 GB RAM, mit Geschwindigkeitssteigerungen von bis zu 3-28x.
Grüße an alle vom KTransformers-Team (früher bekannt als das CPU/GPU Hybrid Inference Open Source Project Team, bekannt für DeepSeek-V2).
KTransformatoren Das Team hat Anfragen für DeepSeek-R1/V3-Unterstützung erhalten und freut sich sehr, dass diese nun endlich geliefert wurde!
Entschuldigt die Wartezeit, aber das KTransformers-Team hat etwas wirklich Erstaunliches ausgeheckt!
Heute ist das KTransformers-Team stolz darauf, nicht nur die Unterstützung für DeepSeek-R1/V3 bekannt zu geben, wie im Video unten gezeigt wird:
https://github.com/user-attachments/assets/ebd70bfa-b2c1-4abb-ae3b-296ed38aa285
- [Aktualisiert!!!!] Lokal 671B DeepSeek-Coder-V3/R1. Die Q4_K_M-Version läuft nur mit 14 GB Videospeicher und 382 GB RAM.
- Geschwindigkeit des Vorfüllens (Token/s).
- KTransfermor: 54,21 (32 Kerne) → 74,362 (dualer Pfad, 2×32 Kerne) → 255,26 (optimierter AMX-basierter MoE-Kernel, nur V0.3) → 286,55 (selektive Nutzung von 6 Experten, nur V0.3)
- zusammen mit lama.cpp bis zu 10,31 Token/s bei 2×32 Kernen im Vergleich zum 27,79-fache Beschleunigung.
- Dekodiergeschwindigkeit (Token/s).
- KTransfermor: 8,73 (32 Kerne) → 11,26 (dual, 2×32 Kerne) → 13,69 (selektive Nutzung von 6 Experten, nur V0.3)
- Im Vergleich zu den 4,51 Token/s von llama.cpp auf 2×32 Kernen erreicht dies bis zu 3,03x Beschleunigung.
- Geschwindigkeit des Vorfüllens (Token/s).
Das KTransformers-Team gab auch eine Vorschau auf kommende Optimierungen, einschließlich eines Intel AMX-beschleunigten Kernels und selektiver Expertenaktivierungsmethoden, die die Leistung erheblich verbessern werden. Mit der V0.3-Preview ist das Prefill bis zu 286 Token/s, schneller als llama.cpp für native Inferenz! 28 Mal.
Die Binärdistribution ist jetzt verfügbar und der Quellcode wird so bald wie möglich veröffentlicht!Radpakete hier ansehen.
Bedingungen der Vorbereitung
Das KTransformers-Team hat die besten Leistungstests (V0.2) mit den folgenden Konfigurationen durchgeführt:
CPU: Intel (R) Xeon (R) Gold 6454S 1T RAM (2 NUMA-Knoten)
GPU: 4090D 24G Videospeicher
Speicher: Standard DDR5-4800-Serverspeicher (1 TB)
Benchmarking-Ergebnisse
V0.2
aufstellen
- Modell: DeepseekV3-q4km (int4)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S, 32 Kerne pro Pfad, 2 Pfade, 2 numa nodes
- GPU: 4090D 24G Videospeicher
- KTransformers Team testet nach vollem Aufwärmen
Speicherverbrauch.
- Einzeln: 382G RAM, mindestens 14GB VRAM
- Dual: 1T RAM, mindestens 14GB VRAM
Benchmarking-Ergebnisse
Das Szenario "6 Experten" ist Teil der V0.3-Vorschau.
| Aufforderung
(500 Token) | Doppelter Ktrans (6 Experten) | Doppelter Ktrans (8 Experten) | Einzelne Ktrans (6 Experten) | Einzelne Ktrans (8 Experten) | llama.cpp (8 Experten) |
---|---|---|---|---|---|
Prefill Token/s | 97.32 | 82.94 | 65.14 | 54.21 | 10.31 |
Token dekodieren | 13.69 | 12.208 | 10.303 | 8.73 | 4.51 |
Erhöhung der Dekodiergeschwindigkeit um bis zu 3,03 malMaximale Erhöhung der Vorfüllgeschwindigkeit 9,44 Mal. Es scheint, dass KTransformers in Bezug auf die Dekodierungsbeschleunigung nicht so gut ist wie pre-populated, und es gibt noch viel Raum für Dekodierungsoptimierung.
V0.3-Vorschau
aufstellen
- Modell: DeepseekV3-BF16 (online quantisiert als int8 für CPU, int4 für GPU)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S, 32 Kerne pro Pfad, 2 Pfade, 2 numa nodes
- GPU: (1~4)x 4090D 24GVRAM (längere Prompts erfordern mehr Speicher)
Speicherverbrauch.
- 644 GB RAM, mindestens 14 GB Grafikspeicher
Benchmarking-Ergebnisse
Länge der Aufforderung | 1K | 2K | 4K | 8K |
---|---|---|---|---|
KTrans (8 Experten) Prefill-Token/s | 185.96 | 255.26 | 252.58 | 195.62 |
KTrans (6 Experten) Prefill-Token/s | 203.70 | 286.55 | 271.08 | 207.20 |
KTrans V0.3 ist beim Vorfüllen schneller als KTrans V0.2. 3,45 MalEs ist schneller als llama.cpp. 27,79 Mal. Dieser Geschwindigkeitszuwachs beim Vorfüllen ist wirklich beeindruckend und es sieht so aus, als hätte KTransformers viel Mühe in die Optimierung des Vorfüllens gesteckt.
Die Dekodiergeschwindigkeit ist die gleiche wie bei KTrans V0.2 (6-Experten-Version), daher wird sie weggelassen. Es scheint, dass sich die Version V0.3 hauptsächlich auf die Verbesserung der Geschwindigkeit beim Ausfüllen konzentriert.
Die Hauptbeschleunigung kommt von
- Intel AMX-Befehlssatz und cachefreundliches Speicherlayout, entwickelt vom KTransformers-Team
- Expertenauswahlstrategie zur Auswahl weniger Experten auf der Grundlage von Offline-Profilergebnissen aus Out-of-Domain-Daten
Nach Angaben des KTransformers-Teams für DeepSeekV2, DeepSeekV3 und DeepSeekR1 ist die
Wenn man die Anzahl der aktivierten Experten in der Inferenz leicht reduziert, wird die
Die Ausgabequalität ändert sich nicht. Aber die Geschwindigkeit der Dekodierung und des Vorfüllens
beschleunigt, was sehr ermutigend ist. Die Demo des KTransformers-Teams macht sich also diese Erkenntnis zunutze Es scheint, dass die "Expertenauswahlstrategie" der Schlüssel zur Beschleunigung ist, aber wie sichergestellt werden kann, dass sich die Qualität der Ergebnisse nicht verschlechtert, muss noch weiter getestet und überprüft werden.
Wie es funktioniert
V0.2 Demo
Ein-Pfad-Version (32 Kerne)
Das Team von KTransformers lokal_chat
Der Testbefehl lautet:
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
numactl -N 1 -m 1 python . /ktransformers/local_chat.py --model_path --gguf_path --prompt_file --cpu_infer 33 -- cache_lens 1536
kann ein lokaler Pfad oder ein Pfad sein, der von einem Online-Hugging Face gesetzt wurde, z. B. deepseek-ai/DeepSeek-V3. Wenn Sie online auf Verbindungsprobleme stoßen, versuchen Sie es mit einem Spiegel (hf-mirror.com).
kann auch ein Online-Pfad sein, aber da er sehr groß ist, empfiehlt das KTransformers-Team, ihn herunterzuladen und das Modell in das von Ihnen gewünschte Format zu quantisieren!
Befehl numactl -N 1 -m 1
Entwickelt, um Datenübertragungen zwischen NUMA-Knoten zu vermeiden
Dual-Path-Version (64 Kerne)
Vor der Installation (mit install.sh oder make dev_install
), durch export USE_NUMA=1
Setzen von Umgebungsvariablen USE_NUMA=1
(Falls bereits installiert, installieren Sie es mit dieser Umgebungsvariablen neu)
Das Team von KTransformers lokal_chat
Der Testbefehl lautet:
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
export USE_NUMA=1
make dev_install # oder sh . /install.sh
python . /ktransformers/local_chat.py --model_path --gguf_path --prompt_file --cpu_infer 65 -- cache_lens 1536
Parameter hat die gleiche Bedeutung. Da das KTransformers-Team jedoch ein Zwei-Wege-System verwendet, wird es cpu_infer
Einstellung auf 65
V0.3 Demo
Dual-Path-Version (64 Kerne)
Das Team von KTransformers lokal_chat
Der Testbefehl lautet:
wget https://github.com/kvcache-ai/ktransformers/releases/download/v0.1.4/ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311- linux_x86_64.whl
pip install . /ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311-linux_x86_64.whl
python -m ktransformers.local_chat --model_path --gguf_path --prompt_file -cpu_infer 65 - -cache_lens 1536
Die Bedeutung der Parameter ist die gleiche wie in V0.2. Da das KTransformers-Team jedoch einen doppelten Pfad verwendet, sind die cpu_infer
Einstellung auf 65
Einige Erklärungen
- Das KTransformers-Team wollte auch die beiden NUMA-Knoten der Xeon Gold-CPU weiter nutzen.
Um die Kosten für die Datenübertragung zwischen den Knotenpunkten zu vermeiden, ist das KTransformers-Team
Die Schlüsselmatrix wird auf beide Knoten "kopiert", was zwar mehr Speicherplatz beansprucht, aber den Vorbesetzungs- und Entschlüsselungsprozess beschleunigt.
Allerdings verbraucht diese Methode viel Speicherplatz und ist langsam beim Laden von Gewichten, also haben Sie bitte etwas Geduld, während sie geladen wird!
Das KTransformers-Team wird diesen großen Speicher-Overhead optimieren. Bleiben Sie dran~ Dieses "Kopieren" der Matrix mag den Prozess beschleunigen, aber der Speicherplatzbedarf ist ein echtes Problem, daher sind wir gespannt, was sich das KTransformers-Team in Zukunft einfallen lässt. - Befehlsparameter
--cpu_infer 65
Geben Sie die Anzahl der zu verwendenden Kerne an (mehr als die Anzahl der physischen Kerne ist in Ordnung, die
Aber mehr ist nicht besser. Stellen Sie ihn einfach auf etwas weniger als die tatsächliche Anzahl der Kerne ein.) - Warum hybride CPU/GPU-Inferenz?
DeepSeek Der MLA-Algorithmus ist rechenintensiv. Es ist zwar möglich, ihn vollständig auf der CPU laufen zu lassen, aber die Auslagerung der schweren Berechnungen auf die GPU kann die Leistung drastisch verbessern. Da die CPU die Expertenberechnungen und die GPU den MLA/KVCache übernimmt, sieht diese hybride Inferenzstrategie intelligent aus und nutzt sowohl die CPU als auch die GPU voll aus. - Woher kommt der Geschwindigkeitszuwachs?
- Experten-Offload: Im Gegensatz zu traditionellen Layer- oder KVCache-basierten Offloads (wie in llama.cpp) verlagert das KTransformers-Team die Expertenberechnungen auf die CPU und den MLA/KVCache auf die GPU, was perfekt zur DeepSeek-Architektur passt, um eine optimale Effizienz zu erreichen.
- Intel AMX-Optimierung - Der AMX-beschleunigte Kernel des KTransformers-Teams wurde sorgfältig abgestimmt, um mehrere Male schneller als die bestehende llama.cpp-Implementierung zu laufen. Das KTransformers-Team plant, diesen Kernel nach der Bereinigung als Open-Source zu veröffentlichen und erwägt, Code zum Upstream llama.cpp beizusteuern. der AMX Das Hinzufügen des AMX-Befehlssatzes scheint einer der Schlüsselfaktoren für die Beschleunigung von KTransformers zu sein.
- Warum Intel-CPUs?
Intel ist derzeit der einzige CPU-Anbieter, der so etwas wie den AMX-Befehl unterstützt, der eine deutlich bessere Leistung bietet als die reine AVX-Alternative. Es scheint, dass Intel-CPUs der richtige Weg sind, wenn es darum geht, die beste Leistung von KTransformern zu erhalten.