🐋DeepSeek-V3.1: Wie man lokal ausführt

Ein Leitfaden, wie man DeepSeek-V3.1 und Terminus auf deinem eigenen lokalen Gerät ausführt!

DeepSeeks V3.1 und Terminus Update führt hybrides Reasoning-Inference ein und kombiniert „Think“ und „Non-Think“ in einem Modell. Das vollständige Modell mit 671B Parametern benötigt 715 GB Festplattenspeicher. Die quantisierte dynamische 2-Bit-Version verwendet 245 GB (-75 % Größenreduktion). GGUF: DeepSeek-V3.1-GGUF

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

Tutorial-Navigation:

In llama.cpp ausführenIn Ollama/Open WebUI ausführen

⚙️ Empfohlene Einstellungen

Die 1-Bit-Dynamik-Quant 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!

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

Die 2-Bit-Quants passen auf 1x 24-GB-GPU (mit in den RAM ausgelagerten MoE-Schichten). Rechnen Sie mit etwa 5 Tokens/s mit diesem Setup, wenn Sie zusätzlich 128 GB RAM haben. Es wird empfohlen, mindestens 226 GB RAM zu haben, um diese 2-Bit-Version auszuführen. Für optimale Leistung benötigen Sie mindestens 226 GB Unified Memory oder 226 GB kombinierte RAM+VRAM für 5+ Tokens/s. Um zu lernen, wie man die Generierungsgeschwindigkeit erhöht und längere Kontexte unterbringt, lesen Sie hier.

🦋Fehlerbehebungen am Chat-Template

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

  1. DeepSeek V3.1 ist ein hybrides Reasoning-Modell, was bedeutet, dass Sie das Chat-Template ändern können, um Reasoning zu aktivieren. Das eingeführte Chat-Template thinking = True während andere Modelle enable_thinking = True verwenden. Wir haben die Option hinzugefügt, enable_thinking stattdessen als Schlüsselwort zu verwenden.

  2. Der Jinja-Renderer von llama.cpp über minja erlaubt die Verwendung zusätzlicher Argumente im .split() Befehl nicht, daher funktioniert die Verwendung von .split(text, 1) in Python, aber nicht in minja. Wir mussten das ändern, damit llama.cpp korrekt funktioniert, ohne Fehler zu verursachen. Sie erhalten den folgenden Fehler, wenn Sie andere Quants verwenden: 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!

🐳Offizielle empfohlene Einstellungen

Laut DeepSeeksind 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)

  • 128K Kontextlänge oder weniger

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

  • Verwende enable_thinking = True um den Reasoning-/Thinking-Modus zu verwenden. Standardmäßig ist er auf Non-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 erzeugt DeepSeek V3.1 Antworten auf Anfragen im Non-Thinking-Modus. Anders als DeepSeek V3 führt es ein zusätzliches Token ein </think>.

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

📔 Non-Thinking-Modus (verwenden Sie thinking = Falseoder enable_thinking = False und standardmäßig ist es so eingestellt)

Erste Runde

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

Mit dem angegebenen Präfix erzeugt DeepSeek V3.1 Antworten auf Anfragen im Non-Thinking-Modus. Anders als DeepSeek V3 führt es ein zusätzliches Token ein </think>.

Multi-Turn

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 die Verkettung von Kontext und Präfix erhalten wir den korrekten Prompt für die Anfrage.

📚 Thinking-Modus (verwenden Sie thinking = Trueoder enable_thinking = True und standardmäßig ist es so eingestellt)

Erste Runde

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

Das Präfix des Thinking-Modus ähnelt DeepSeek-R1.

Multi-Turn

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>

Das Multi-Turn-Template ist dasselbe wie das Non-Thinking-Multi-Turn-Chat-Template. Das bedeutet, dass das Thinking-Token in der letzten Runde verworfen wird, aber das </think> in jeder Runde des Kontexts beibehalten wird.

🏹 Tool-Aufruf

Tool-Aufrufe werden im Non-Thinking-Modus unterstützt. Das Format ist:

<|begin▁of▁sentence|>{system prompt}{tool_description}<|User|>{query}<|Assistant|></think> wobei wir den tool_description-Bereich nach dem System-Prompt befüllen.

▶️DeepSeek-V3.1-Tutorials ausführen:

🦙 In Ollama/Open WebUI ausführen

1

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

2

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

3

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

4

Open WebUI hat außerdem ein Schritt-für-Schritt-Tutorial zum Ausführen von R1 erstellt, und für V3.1 müssen Sie nur R1 durch den neuen V3.1-Quant ersetzen.

✨ In llama.cpp ausführen

1

Hole dir die neueste llama.cpp auf GitHub hier. Du kannst auch den untenstehenden Build-Anweisungen folgen. Ändere -DGGML_CUDA=ON zu -DGGML_CUDA=OFF wenn du keine GPU hast oder nur CPU-Inferenz möchtest.

2

Wenn du 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 gespeichert wird. Denken Sie daran, dass das Modell nur eine maximale Kontextlänge von 128K hat.

3

Lade das Modell herunter über (nach der Installation von pip install huggingface_hub hf_transfer ). Du kannst UD-Q2_K_XL (dynamisches 2-Bit-Quant) oder andere quantisierte Versionen wie Q4_K_M . Wir empfehlen unser dynamisches 2,7-Bit-Quant UD-Q2_K_XL zu verwenden, um Größe und Genauigkeit auszubalancieren.

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 GPU-Offloading, also für wie viele Layer. Versuchen Sie, dies anzupassen, wenn Ihrem GPU-Speicher der Platz ausgeht. Entfernen Sie es auch, wenn Sie nur CPU-Inferenz haben.

5

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

✨ Bereitstellen mit llama-server und der Completion-Bibliothek von OpenAI

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

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

💽Modell-Uploads

ALLE unsere Uploads - einschließlich derjenigen, die nicht auf imatrix-basiert oder dynamisch sind, verwenden unseren Kalibrierungsdatensatz, der speziell für Konversations-, Coding- und Sprachaufgaben optimiert ist.

  • Die vollständigen DeepSeek-V3.1-Modell-Uploads unten:

Wir haben auch IQ4_NL und Q4_1 Quants hochgeladen, die speziell auf ARM- bzw. Apple-Geräten schneller laufen.

MoE-Bits
Typ + Link
Festplattengröße
Details

1,66 Bit

170 GB

1,92/1,56 Bit

1,78 Bit

185 GB

2,06/1,56 Bit

1,93 Bit

200 GB

2.5/2.06/1.56

2,42 Bit

216 GB

2,5/2,06 Bit

2,71 Bit

251GB

3,5/2,5 Bit

3,12 Bit

273 GB

3,5/2,06 Bit

3,5 Bit

296 GB

4,5/3,5 Bit

4,5 Bit

384 GB

5,5/4,5 Bit

5,5 Bit

481 GB

6,5/5,5 Bit

Wir haben auch Versionen in BF16-Formatund originalem FP8-(Float8)-Format.

🏂 Die Generierungsgeschwindigkeit verbessern

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

Normalerweise -ot ".ffn_.*_exps.=CPU" lagert alle MoE-Layer auf die CPU aus! Dadurch können Sie effektiv alle Nicht-MoE-Layer auf 1 GPU unterbringen, was die Generierungsgeschwindigkeit verbessert. Sie können den Regex-Ausdruck anpassen, um mehr Layer unterzubringen, wenn Sie mehr GPU-Kapazität haben.

Wenn Sie etwas mehr GPU-Speicher haben, versuchen Sie -ot ".ffn_(up|down)_exps.=CPU" Dies lagert die MoE-Layer für Up- und Down-Projektionen aus.

Versuchen Sie -ot ".ffn_(up)_exps.=CPU" wenn Sie noch mehr GPU-Speicher haben. Dies lagert nur die MoE-Layer für Up-Projektionen 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-Layer auszulagern, aber nur ab der 6. Schicht.

Die neueste llama.cpp-Version führt außerdem einen High-Throughput-Modus ein. Verwenden Sie llama-parallel. Lesen Sie mehr darüber hier. Sie können auch den KV-Cache auf 4 Bit quantisieren zum Beispiel um den VRAM-/RAM-Datenverkehr zu reduzieren, was den Generierungsprozess ebenfalls beschleunigen kann.

📐Wie man langen Kontext unterbringt (volle 128K)

Um längeren Kontext unterzubringen, können Sie KV-Cache-Quantisierung verwenden, um die K- und V-Caches auf niedrigere Bits zu quantisieren. Dies kann auch die Generierungsgeschwindigkeit aufgrund des geringeren RAM-/VRAM-Datenverkehrs erhöhen. Die zulässigen Optionen für die K-Quantisierung (Standard ist f16) sind unten aufgeführt.

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

Sie sollten die _1 Varianten verwenden, um die Genauigkeit etwas zu erhöhen, auch wenn es etwas langsamer ist. Zum Beispiel q4_1, q5_1

Sie können auch den V-Cache quantisieren, aber dafür müssen Sie llama.cpp mit Flash Attention-Unterstützung kompilieren via -DGGML_CUDA_FA_ALL_QUANTS=ON , und--flash-attn verwenden, 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 :

verwenden

Zuletzt aktualisiert

War das hilfreich?