Direkt zum Inhalt

Wie du DeepSeek R1 lokal mit Ollama einrichtest und ausführst

Lerne, wie du DeepSeek-R1 lokal mit Ollama installierst, einrichtest und ausführst und eine einfache RAG-Anwendung erstellst.
Aktualisierte 30. Jan. 2025  · 12 Min. Lesezeit

In diesem Tutorial erkläre ich Schritt für Schritt, wie du DeepSeek-R1 lokal ausführst und wie du es mit Ollama einrichtest. Wir werden auch eine einfache RAG-Anwendung erstellen, die auf deinem Laptop läuft und das R1-Modell, LangChain und Gradio verwendet.

Wenn du nur einen Überblick über das R1-Modell haben möchtest, empfehle ich dir diesen DeepSeek-R1-Artikel. Um zu lernen, wie du R1 fein abstimmst, empfehle ich dir dieses Tutorial zur Feinabstimmung von DeepSeek-R1.

Warum DeepSeek-R1 vor Ort betreiben?

Wenn du DeepSeek-R1 lokal ausführst, hast du die vollständige Kontrolle über die Modellausführung, ohne von externen Servern abhängig zu sein. Hier sind ein paar Vorteile, wenn du DeepSeek-R1 lokal ausführst:

  • Datenschutz & Sicherheit: Keine Daten verlassen dein System.
  • Ununterbrochener Zugang: Vermeide Ratenbeschränkungen, Ausfallzeiten oder Serviceunterbrechungen.
  • Leistung: Erhalte schnellere Antworten mit lokaler Inferenz und vermeide API-Latenzzeiten.
  • Personalisierung: Ändere die Parameter, passe die Eingabeaufforderungen an und integriere das Modell in lokale Anwendungen.
  • Kosteneffizienz: Beseitige API-Gebühren, indem du das Modell lokal ausführst.
  • Offline-Verfügbarkeit: Arbeite ohne Internetverbindung, sobald das Modell heruntergeladen ist.

Lokale Einrichtung von DeepSeek-R1 mit Ollama

Ollama vereinfacht die lokale Ausführung von LLMs, indem es Modell-Downloads, Quantisierung und Ausführung nahtlos handhabt.

Schritt 1: Ollama installieren

Lade zunächst Ollama von der offiziellen Website herunter und installiere es. Website herunter..

Herunterladen von Ollama

Sobald der Download abgeschlossen ist, installierst du die Ollama-Anwendung wie jede andere Anwendung auch.

Schritt 2: DeepSeek-R1 herunterladen und ausführen

Testen wir das Setup und laden wir unser Modell herunter. Starte das Terminal und gib den folgenden Befehl ein.

ollama run deepseek-r1

Ollama bietet eine Reihe von DeepSeek R1-Modellen an, die von 1,5 B Parametern bis zum vollen Modell mit 671 B Parametern reichen. Das Modell 671B ist der ursprüngliche DeepSeek-R1, während die kleineren Modelle destillierte Versionen sind, die auf den Architekturen Qwen und Llama basieren. Wenn deine Hardware das 671B-Modell nicht unterstützt, kannst du ganz einfach eine kleinere Version ausführen, indem du den folgenden Befehl verwendest und die X unten durch die gewünschte Parametergröße ersetzt (1.5b, 7b, 8b, 14b, 32b, 70b, 671b):

ollama run deepseek-r1: Xb

Dank dieser Flexibilität kannst du die Möglichkeiten von DeepSeek-R1 auch dann nutzen, wenn du keinen Supercomputer hast.

Schritt 3: DeepSeek-R1 im Hintergrund laufen lassen

Um DeepSeek-R1 kontinuierlich laufen zu lassen und über eine API bereitzustellen, starte den Ollama-Server:

ollama serve

Dadurch wird das Modell für die Integration in andere Anwendungen verfügbar.

DeepSeek-R1 lokal verwenden

Schritt 1: Inferenz über CLI ausführen

Sobald das Modell heruntergeladen ist, kannst du direkt im Terminal mit DeepSeek-R1 arbeiten.

DeepSeek-R1 läuft im Terminal

Schritt 2: Zugriff auf DeepSeek-R1 über API

Um DeepSeek-R1 in Anwendungen zu integrieren, verwende die Ollama API unter curl:

curl http://localhost:11434/api/chat -d '{
  "model": "deepseek-r1",
  "messages": [{ "role": "user", "content": "Solve: 25 * 25" }],
  "stream": false
}'

curl ist ein Kommandozeilen-Tool, das unter Linux, aber auch unter macOS funktioniert. Sie ermöglicht es den Nutzern, HTTP-Anfragen direkt vom Terminal aus zu stellen, was sie zu einem hervorragenden Werkzeug für die Interaktion mit APIs macht.

Zugriff auf DeepSeek-R1 über API auf dem Terminal

Schritt 3: Zugriff auf DeepSeek-R1 über Python

Wir können Ollama in jeder integrierten Entwicklungsumgebung (IDE) unserer Wahl ausführen. Du kannst das Ollama Python-Paket mit folgendem Code installieren:

!pip install ollama

Sobald Ollama installiert ist, kannst du das folgende Skript verwenden, um mit dem Modell zu interagieren:

import ollama
response = ollama.chat(
    model="deepseek-r1",
    messages=[
        {"role": "user", "content": "Explain Newton's second law of motion"},
    ],
)
print(response["message"]["content"])

Die Funktion ollama.chat() nimmt den Modellnamen und eine Eingabeaufforderung des Benutzers entgegen und verarbeitet sie als Konversationsaustausch. Das Skript extrahiert und druckt dann die Antwort des Modells.

DeepSeek R1 lokal in VSCode ausführen

Eine lokale Gradio-App für RAG mit DeepSeek-R1 ausführen

Lass uns eine einfache Demo-App mit Gradio erstellen, um Dokumente mit DeepSeek-R1 abzufragen und zu analysieren.

Schritt 1: Voraussetzungen

Bevor wir mit der Implementierung beginnen, müssen wir sicherstellen, dass wir die folgenden Tools und Bibliotheken installiert haben:

  • Python 3.8+
  • Langchain: Framework für die Entwicklung von Anwendungen, die auf großen Sprachmodellen (LLMs) basieren und eine einfache Suche, Argumentation und Toolintegration ermöglichen.
  • Chromadb: Eine leistungsstarke Vektordatenbank, die für eine effiziente Ähnlichkeitssuche und Speicherung von Einbettungen entwickelt wurde.
  • Gradio: Um eine benutzerfreundliche Weboberfläche zu schaffen.

Führe die folgenden Befehle aus, um die notwendigen Abhängigkeiten zu installieren:

!pip install langchain chromadb gradio 
!pip install -U langchain-community

Sobald die oben genannten Abhängigkeiten installiert sind, führst du die folgenden Importbefehle aus:

import gradio as gr
from langchain_community.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
import ollama

Schritt 2: Verarbeitung der hochgeladenen PDF-Datei

Sobald die Bibliotheken importiert sind, verarbeiten wir das hochgeladene PDF.

def process_pdf(pdf_bytes):
    if pdf_bytes is None:
        return None, None, None
    loader = PyMuPDFLoader(pdf_bytes)
    data = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
    chunks = text_splitter.split_documents(data)
    embeddings = OllamaEmbeddings(model="deepseek-r1")
vectorstore=Chroma.from_documents(documents=chunks, embedding=embeddings)
    retriever = vectorstore.as_retriever()
    return text_splitter, vectorstore, retriever

Die Funktion process_pdf:

  • Lädt und bereitet PDF-Inhalte für die abrufbasierte Beantwortung vor.
  • Prüft, ob eine PDF-Datei hochgeladen wurde.
  • Extrahiert Text mit PyMuPDFLoader.
  • Teilt den Text mit Hilfe von RecursiveCharacterTextSplitter in einzelne Abschnitte auf.
  • Erzeugt Vektoreinbettungen mit OllamaEmbeddings.
  • Speichert Einbettungen in einem Chroma-Vektor-Speicher, um sie effizient abrufen zu können.

Schritt 3: Kombinieren von abgerufenen Dokumentenblöcken

Sobald wir die Einbettungen gefunden haben, müssen wir sie zusammenfügen. Die Funktion combine_docs() fasst mehrere abgefragte Dokumententeile zu einem einzigen String zusammen.

def combine_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

Da Retrieval-basierte Modelle relevante Auszüge und nicht ganze Dokumente abrufen, stellt diese Funktion sicher, dass der extrahierte Inhalt lesbar und richtig formatiert bleibt, bevor er an DeepSeek-R1 weitergeleitet wird.

Schritt 4: DeepSeek-R1 mit Ollama abfragen

Jetzt ist unser Input für das Modell fertig. Lass uns DeepSeek R1 mit Ollama einrichten.

def ollama_llm(question, context):
   formatted_prompt = f"Question: {question}\n\nContext: {context}"

 response = ollama.chat(model="deepseek-r1", messages=[{'role': 'user', 'content': formatted_prompt}])

   response_content = response['message']['content']
    
    # Remove content between <think> and </think> tags to remove thinking output
final_answer = re.sub(r'<think>.*?</think>', '', response_content, flags=re.DOTALL).strip()

    return final_answer

Die Funktion ollama_llm() formatiert die Frage des Nutzers und den abgerufenen Dokumentenkontext zu einer strukturierten Eingabeaufforderung. Diese formatierte Eingabe wird dann über ollama.chat() an DeepSeek-R1 gesendet, der die Frage im gegebenen Kontext verarbeitet und eine passende Antwort zurückgibt. Wenn du die Antwort ohne das Denkskript des Modells brauchst, kannst du die Funktion strip() verwenden, um die endgültige Antwort zu erhalten.

Schritt 5: Die RAG-Pipeline

Jetzt, da wir alle benötigten Komponenten haben, können wir die RAG-Pipeline für unsere Demo erstellen.

def rag_chain(question, text_splitter, vectorstore, retriever):
    retrieved_docs = retriever.invoke(question)
    formatted_content = combine_docs(retrieved_docs)
    return ollama_llm(question, formatted_content)

Die obige Funktion durchsucht zunächst den Vektorspeicher mit retriever.invoke(question) und gibt die relevantesten Dokumentenauszüge zurück. Diese Auszüge werden mit der Funktion combine_docs in eine strukturierte Eingabe formatiert und an ollama_llm gesendet, um sicherzustellen, dass DeepSeek-R1 auf der Grundlage der abgerufenen Inhalte gut informierte Antworten generiert.

Schritt 6: Erstellen der Gradio-Schnittstelle

Wir haben unsere RAG-Pipeline eingerichtet. Jetzt können wir die Gradio-Schnittstelle lokal zusammen mit dem DeepSeek-R1-Modell erstellen, um PDF-Eingaben zu verarbeiten und Fragen dazu zu stellen.

def ask_question(pdf_bytes, question):
    text_splitter, vectorstore, retriever = process_pdf(pdf_bytes)
    if text_splitter is None:
        return None  # No PDF uploaded
    result = rag_chain(question, text_splitter, vectorstore, retriever)
    return {result}
interface = gr.Interface(
    fn=ask_question,
    inputs=[gr.File(label="Upload PDF (optional)"), gr.Textbox(label="Ask a question")],
    outputs="text",
    title="Ask questions about your PDF",
    description="Use DeepSeek-R1 to answer your questions about the uploaded PDF document.",
)
interface.launch()

Wir führen die folgenden Schritte durch:

  • Prüfe, ob ein PDF hochgeladen wurde.
  • Verarbeite das PDF mit der Funktion process_pdf, um Text zu extrahieren und Dokumenteneinbettungen zu erstellen.
  • Übergib die Anfrage des Nutzers und die Dokumenteneinbettung an die Funktion rag_chain(), um relevante Informationen abzurufen und eine kontextgenaue Antwort zu generieren.
  • Richte eine Gradio-basierte Weboberfläche ein, über die Nutzer/innen eine PDF-Datei hochladen und Fragen zu ihrem Inhalt stellen können.
  • Definiere das Layout mit der Funktion gr.Interface(), die eine PDF-Datei und eine Textabfrage als Eingaben akzeptiert.
  • Starte die Anwendung mit interface.launch(), um nahtlose, interaktive dokumentenbasierte Fragen und Antworten über einen Webbrowser zu ermöglichen.

Ausführen einer lokalen Gradio-Anwendung für RAG mit DeepSeek-R1

Fazit

Die lokale Ausführung von DeepSeek-R1 mit Ollama ermöglicht eine schnellere, private und kostengünstige Modellinferenz. Mit einem einfachen Installationsprozess, CLI-Interaktion, API-Unterstützung und Python-Integration kannst du DeepSeek-R1 für eine Vielzahl von KI-Anwendungen nutzen, von allgemeinen Abfragen bis hin zu komplexen Retrieval-basierten Aufgaben.

Um über die neuesten Entwicklungen in der KI auf dem Laufenden zu bleiben, empfehle ich diese Blogs:


Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Ich bin ein Google Developers Expert in ML (Gen AI), ein Kaggle 3x Expert und ein Women Techmakers Ambassador mit mehr als 3 Jahren Erfahrung im Tech-Bereich. Ich habe 2020 ein Startup im Bereich Gesundheitstechnologie mitbegründet und mache einen Master in Informatik an der Georgia Tech, der sich auf maschinelles Lernen spezialisiert.

Themen

Lerne KI mit diesen Kursen!

Kurs

Developing LLM Applications with LangChain

3 hr
13.7K
Discover how to build AI-powered applications using LLMs, prompts, chains, and agents in LangChain.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Mehr anzeigenMehr anzeigen