🐋DeepSeek-V3.1: Anleitung zum lokalen Betrieb

Eine Anleitung, wie man DeepSeek-V3.1 und Terminus auf dem eigenen lokalen Gerät ausführt!

DeepSeek’s V3.1 und Terminus Update führt hybrides Schlussfolgern ein, das „Denken“ und „Nicht-Denken“ in einem Modell kombiniert. Das vollständige 671B-Parameter-Modell benötigt 715 GB Festplattenspeicher. Die quantisierte dynamische 2-Bit-Version verwendet 245 GB (-75 % Größenreduzierung). GGUF: DeepSeek-V3.1-GGUFarrow-up-right

circle-check

Alle Uploads verwenden Unsloth Dynamic 2.0 für SOTA 5-shot MMLU- und KL-Divergenz-Leistung, was bedeutet, dass Sie quantisierte DeepSeek-LLMs mit minimalem Genauigkeitsverlust ausführen und feinabstimmen können.

Tutorial-Navigation:

In llama.cpp ausführenAusführen in Ollama/Open WebUI

⚙️ Empfohlene Einstellungen

Die 1-Bit dynamische Quantisierung TQ1_0 (1 Bit für unwichtige MoE-Schichten, 2–4 Bit für wichtige MoE-Schichten und 6–8 Bit für den Rest) benötigt 170 GB Festplattenspeicher – das funktioniert gut in einem 1x24GB-Karte und 128GB RAM mit MoE-Auslagerung – es funktioniert auch nativ in Ollama!

circle-info

Sie müssen --jinja für llama.cpp-Quants verwenden – dies nutzt unsere festen Chat-Vorlagen und aktiviert die korrekte Vorlage! Sie könnten falsche Ergebnisse erhalten, wenn Sie nicht --jinja

Die 2-Bit-Quants passen in eine 1x 24GB GPU (mit MoE-Schichten, die in den RAM ausgelagert sind). Erwartet etwa 5 Tokens/s mit dieser Konfiguration, wenn ihr zusätzlich 128 GB RAM habt. Es wird empfohlen, mindestens 226 GB RAM zu haben, um dieses 2-Bit-Modell auszuführen. Für optimale Leistung benötigen Sie mindestens 226 GB Unified Memory oder 226 GB kombinierter RAM+VRAM für 5+ Tokens/s. Um zu lernen, wie man die Generationsgeschwindigkeit erhöht und längere Kontexte unterbringt, hier lesen.

circle-check

🦋Fehlerbehebungen für Chat-Vorlage

Wir haben einige Probleme mit dem Chat-Template von DeepSeek V3.1 behoben, da sie in llama.cpp und anderen Engines nicht korrekt funktionierten:

  1. DeepSeek V3.1 ist ein Hybrid-Reasoning-Modell, das heißt, Sie können das Chat-Template ändern, um Reasoning zu aktivieren. Das eingeführte Chat-Template thinking = True , aber andere Modelle verwenden enable_thinking = True . Wir haben die Option hinzugefügt, stattdessen enable_thinking als Schlüsselwort zu verwenden.

  2. llama.cpps jinja-Renderer über minjaarrow-up-right erlaubt nicht die Verwendung zusätzlicher Argumente in der .split() Anweisung, sodass die Verwendung von .split(text, 1) in Python funktioniert, aber nicht in minja. Wir mussten dies ändern, damit llama.cpp korrekt funktioniert, ohne einen Fehler auszulösen. Beim Verwenden anderer Quants erhalten Sie folgenden Fehler: terminate called after throwing an instance of 'std::runtime_error' what(): split method must have between 1 and 1 positional arguments and between 0 and 0 keyword arguments at row 3, column 1908 Wir haben es in all unseren Quants behoben!

🐳 Offiziell empfohlene Einstellungen

Laut DeepSeekarrow-up-rightsind dies die empfohlenen Einstellungen für die V3.1-Inferenz:

  • Setzen Sie die Temperatur auf 0,6 , um Wiederholungen und Inkohärenz zu reduzieren.

  • Setzen Sie top_p auf 0,95 (empfohlen)

  • Kontextlänge 128K oder weniger

  • Verwenden Sie --jinja für llama.cpp-Varianten – wir haben einige Probleme mit Chat-Vorlagen behoben!

  • Verwenden Sie enable_thinking = True um den Reasoning-/Denkmodus zu verwenden. Standardmäßig ist er auf Nicht-Reasoning gesetzt.

🔢 Chat-Template/Prompt-Format

Sie müssen nicht erzwingen <think>\n , aber Sie können es trotzdem hinzufügen! Mit dem angegebenen Präfix generiert DeepSeek V3.1 Antworten auf Anfragen im Nicht-Denkmodus. Im Gegensatz zu DeepSeek V3 führt es ein zusätzliches Token ein </think>.

Ein BOS wird zwangsweise hinzugefügt, und ein EOS trennt jede Interaktion. Um doppelte BOS-Token während der Inferenz zu vermeiden, solltest du nur tokenizer.encode(..., add_special_tokens = False) da das Chat-Template automatisch auch ein BOS-Token hinzufügt. Für llama.cpp / GGUF-Inferenz sollten Sie das BOS weglassen, da es automatisch hinzugefügt wird.

📔 Nicht-Denkmodus (verwenden thinking = Falseoder enable_thinking = False und ist standardmäßig aktiv)

Erste Runde

Präfix: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|></think>

Mit dem angegebenen Präfix generiert DeepSeek V3.1 Antworten auf Anfragen im Nicht-Denkmodus. Im Gegensatz zu DeepSeek V3 führt es ein zusätzliches Token ein </think>.

Mehr-Runden

Kontext: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>...<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>

Präfix: <|User|>{query}<|Assistant|></think>

Durch das Aneinanderreihen des Kontexts und des Präfixes erhalten wir das korrekte Prompt für die Anfrage.

📚 Denkmodus (verwenden thinking = Trueoder enable_thinking = True und ist standardmäßig aktiv)

Erste Runde

Präfix: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|><think>

Das Präfix des Denkmodus ähnelt DeepSeek-R1.

Mehr-Runden

Kontext: <|begin▁of▁sentence|>{system prompt}<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>...<|User|>{query}<|Assistant|></think>{response}<|end▁of▁sentence|>

Präfix: <|User|>{query}<|Assistant|><think>

Die Mehr-Runden-Vorlage ist dieselbe wie die Nicht-Denk-Mehr-Runden-Chatvorlage. Das bedeutet, dass das Denktoken in der letzten Runde entfernt wird, aber das </think> wird in jeder Runde des Kontexts beibehalten.

🏹 Tool-Aufruf

Tool-Aufrufe werden im Nicht-Denkmodus unterstützt. Das Format ist:

<|begin▁of▁sentence|>{system prompt}{tool_description}<|User|>{query}<|Assistant|></think> wobei wir die tool_description im Bereich nach dem System-Prompt einfügen.

▶️Führen Sie DeepSeek-V3.1 Tutorials aus:

🦙 Ausführen in Ollama/Open WebUI

1

Installieren Sie ollama falls Sie es noch nicht getan haben! Um weitere Varianten des Modells auszuführen, siehe hier.

2

Führen Sie das Modell aus! Beachten Sie, dass Sie aufrufen können ollama servein einem anderen Terminal, falls es fehlschlägt! Wir fügen alle unsere Fixes und vorgeschlagenen Parameter (Temperatur usw.) in params in unserem Hugging Face Upload! &#xNAN;(NEU) Um das vollständige R1-0528-Modell in Ollama auszuführen, können Sie unser TQ1_0 (170 GB Quant) verwenden:

3

Um andere Quants auszuführen, müssen Sie zuerst die GGUF-Split-Dateien zu einer Datei wie im folgenden Code zusammenführen. Dann müssen Sie das Modell lokal ausführen.

4

Open WebUI hat auch ein Schritt-für-Schritt-Tutorialarrow-up-right dazu erstellt, wie man R1 ausführt; für V3.1 müssen Sie lediglich R1 durch das neue V3.1-Quant ersetzen.

✨ In llama.cpp ausführen

1

Holen Sie sich die neueste llama.cpp auf GitHub hierarrow-up-right. Sie können auch den unten stehenden Build-Anweisungen folgen. Ändern Sie -DGGML_CUDA=ON zu -DGGML_CUDA=OFF wenn Sie keine GPU haben oder nur CPU-Inferenz wünschen.

2

Wenn Sie llama.cpp direkt zum Laden von Modellen verwenden möchten, können Sie Folgendes tun: (:Q2_K_XL) ist der Quantisierungstyp. Sie können auch über Hugging Face herunterladen (Punkt 3). Dies ist ähnlich wie ollama run . Verwenden Sie export LLAMA_CACHE="folder" um zu erzwingen, dass llama.cpp an einem bestimmten Ort speichert. Denken Sie daran, dass das Modell nur eine maximale Kontextlänge von 128K hat.

circle-check
3

Laden Sie das Modell herunter über (nach Installation von pip install huggingface_hub hf_transfer ). Sie können wählen UD-Q2_K_XL (dynamische 2-Bit-Quantisierung) oder andere quantisierte Versionen wie Q4_K_M . Wir empfehlen die Verwendung unserer 2,7-Bit-dynamischen Quantisierung UD-Q2_K_XL um Größe und Genauigkeit auszugleichen.

4

Sie können --threads 32 für die Anzahl der CPU-Threads bearbeiten, --ctx-size 16384 für die Kontextlänge, --n-gpu-layers 2 für das GPU-Offloading für wie viele Schichten. Versuchen Sie, es anzupassen, wenn Ihre GPU nicht mehr genügend Speicher hat. Entfernen Sie es auch, wenn Sie nur CPU-Inferenz haben.

5

Holen Sie sich die 1-Bit-Version (170 GB), wenn Sie nicht genug kombinierten RAM und VRAM haben:

✨ Mit llama-server und OpenAIs Completion-Bibliothek bereitstellen

Um llama-server für die Bereitstellung zu verwenden, benutzen Sie den folgenden Befehl:

Verwenden Sie anschließend die OpenAI-Python-Bibliothek nachdem Sie pip install openai :

💽Model-Uploads

ALLE unsere Uploads - einschließlich jener, die nicht imatrix-basiert oder dynamisch sind, nutzen unseren Kalibrierungs-Datensatz, der speziell für Konversation, Programmierung und Sprachaufgaben optimiert ist.

  • Vollständige DeepSeek-V3.1 Modell-Uploads unten:

Wir haben auch hochgeladen IQ4_NLarrow-up-right und Q4_1arrow-up-right Quants, die speziell für ARM- bzw. Apple-Geräte jeweils schneller laufen.

MoE-Bits
Typ + Link
Platten-/Festplattengröße
Details

1,66bit

170GB

1,92/1,56bit

1,78bit

185GB

2,06/1,56bit

1,93bit

200GB

2.5/2.06/1.56

2,42bit

216GB

2,5/2,06bit

2,71bit

251GB

3,5/2,5bit

3,12bit

273GB

3,5/2,06bit

3,5bit

296GB

4,5/3,5bit

4,5bit

384GB

5,5/4,5bit

5,5bit

481GB

6,5/5,5bit

Wir haben außerdem Versionen in BF16-Formatarrow-up-righthochgeladen, und das ursprüngliche FP8 (float8)-Formatarrow-up-right.

🏂 Generationsgeschwindigkeit verbessern

Wenn Sie mehr VRAM haben, können Sie versuchen, mehr MoE-Schichten auszulagern oder ganze Schichten selbst auszulagern.

Normalerweise, -ot ".ffn_.*_exps.=CPU" lagert alle MoE-Schichten auf die CPU aus! Dies ermöglicht es effektiv, alle Nicht-MoE-Schichten auf einer GPU unterzubringen und die Generationsgeschwindigkeit zu verbessern. Sie können den Regex-Ausdruck anpassen, um mehr Schichten auszulagern, wenn Sie mehr GPU-Kapazität haben.

Wenn Sie etwas mehr GPU-Speicher haben, versuchen Sie -ot ".ffn_(up|down)_exps.=CPU" Dies lagert up- und down-Projektions-MoE-Schichten aus.

Versuchen Sie -ot ".ffn_(up)_exps.=CPU" wenn Sie noch mehr GPU-Speicher haben. Dies lagert nur up-Projektions-MoE-Schichten aus.

Sie können den Regex auch anpassen, zum Beispiel -ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU" bedeutet, Gate-, Up- und Down-MoE-Schichten auszulagern, jedoch nur ab der 6. Schicht.

Der neueste llama.cpp-Versionarrow-up-right führt auch einen Hochdurchsatzmodus ein. Verwenden Sie llama-parallel. Lesen Sie mehr darüber hierarrow-up-right. Sie können auch den KV-Cache auf 4 Bit quantisieren zum Beispiel, um VRAM-/RAM-Bewegungen zu reduzieren, was den Generationsprozess auch beschleunigen kann.

📐Wie man langen Kontext unterbringt (vollständig 128K)

Um längere Kontexte unterzubringen, können Sie KV-Cache-Quantisierung verwenden, um die K- und V-Caches auf niedrigere Bits zu quantisieren. Dies kann auch die Generationsgeschwindigkeit aufgrund reduzierter RAM-/VRAM-Datenbewegung erhöhen. Die erlaubten Optionen für K-Quantisierung (Standard ist f16) umfassen die folgenden.

--cache-type-k f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1

Sie sollten die _1 Varianten für etwas erhöhte Genauigkeit verwenden, obwohl sie etwas langsamer sind. Zum Beispiel q4_1, q5_1

Sie können auch den V-Cache quantisieren, aber Sie müssen llama.cpp mit Flash Attention kompilieren Unterstützung über -DGGML_CUDA_FA_ALL_QUANTS=ON, und verwenden Sie --flash-attn um es zu aktivieren. Dann können Sie es zusammen mit --cache-type-k :

--cache-type-v f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1

Zuletzt aktualisiert

War das hilfreich?