Accéder au contenu principal

Comment configurer et exécuter DeepSeek R1 localement avec Ollama

Apprenez à installer, configurer et exécuter DeepSeek-R1 localement avec Ollama et à construire une application RAG simple.
Actualisé 30 janv. 2025  · 12 min de lecture

Dans ce tutoriel, je vais vous expliquer étape par étape comment exécuter DeepSeek-R1 localement et comment le configurer à l'aide d'Ollama. Nous explorerons également la construction d'une application RAG simple qui fonctionne sur votre ordinateur portable en utilisant le modèle R1, LangChain et Gradio.

Si vous ne souhaitez qu'une vue d'ensemble du modèle R1, je vous recommande cet article de DeepSeek-R1. Pour apprendre à affiner le réglage de R1, je vous recommande ce tutoriel sur l'affinement de DeepSeek-R1.

Pourquoi faire fonctionner DeepSeek-R1 localement ?

L'exécution locale de DeepSeek-R1 vous permet de contrôler entièrement l'exécution du modèle sans dépendre de serveurs externes. Voici quelques avantages à exécuter DeepSeek-R1 localement :

  • Vie privée et sécurité: Aucune donnée ne quitte votre système.
  • Accès ininterrompu: Évitez les limites de taux, les temps d'arrêt ou les interruptions de service.
  • Performance: Obtenez des réponses plus rapides grâce à l'inférence locale, en évitant la latence de l'API.
  • Personnalisation: Modifiez les paramètres, affinez les messages-guides et intégrez le modèle dans les applications locales.
  • Coût-efficacité: Éliminez les frais d'API en exécutant le modèle localement.
  • Disponibilité hors ligne: Travailler sans connexion internet une fois le modèle téléchargé.

Configurer DeepSeek-R1 localement avec Ollama

Ollama simplifie l'exécution locale des LLM en gérant les téléchargements de modèles, la quantification et l'exécution de manière transparente.

Étape 1 : Installer Ollama

Tout d'abord, téléchargez et installez Ollama depuis le officiel.

Télécharger Ollama

Une fois le téléchargement terminé, installez l'application Ollama comme vous le feriez pour n'importe quelle autre application.

Étape 2 : Téléchargez et exécutez DeepSeek-R1

Testons la configuration et téléchargeons notre modèle. Lancez le terminal et tapez la commande suivante.

ollama run deepseek-r1

Ollama propose une gamme de modèles DeepSeek R1, allant de 1,5B paramètres au modèle complet de 671B paramètres. Le modèle 671B est le DeepSeek-R1 original, tandis que les modèles plus petits sont des versions distillées basées sur les architectures Qwen et Llama. Si votre matériel ne supporte pas le modèle 671B, vous pouvez facilement exécuter une version plus petite en utilisant la commande suivante et en remplaçant le X ci-dessous par la taille de paramètre que vous souhaitez (1.5b, 7b, 8b, 14b, 32b, 70b, 671b) :

ollama run deepseek-r1: Xb

Grâce à cette flexibilité, vous pouvez utiliser les capacités de DeepSeek-R1 même si vous ne disposez pas d'un superordinateur.

Étape 3 : Exécution de DeepSeek-R1 en arrière-plan

Pour exécuter DeepSeek-R1 en continu et le servir via une API, démarrez le serveur Ollama :

ollama serve

Le modèle pourra ainsi être intégré à d'autres applications.

Utilisation locale de DeepSeek-R1

Étape 1 : Exécution de l'inférence via l'interface de programmation

Une fois le modèle téléchargé, vous pouvez interagir avec DeepSeek-R1 directement dans le terminal.

DeepSeek-R1 fonctionne dans un terminal

Étape 2 : Accès à DeepSeek-R1 via l'API

Pour intégrer DeepSeek-R1 dans des applications, utilisez l'API Ollama à l'aide de curl:

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

curl est un outil de ligne de commande natif de Linux, mais qui fonctionne également sur macOS. Il permet aux utilisateurs de faire des requêtes HTTP directement à partir du terminal, ce qui en fait un excellent outil pour interagir avec les API.

Accès à DeepSeek-R1 via l'API sur un terminal

Étape 3 : Accéder à DeepSeek-R1 via Python

Nous pouvons exécuter Ollama dans l'environnement de développement intégré (IDE) de notre choix. Vous pouvez installer le paquetage Python d'Ollama en utilisant le code suivant :

!pip install ollama

Une fois Ollama installé, utilisez le script suivant pour interagir avec le modèle :

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

La fonction ollama.chat() prend le nom du modèle et une invite de l'utilisateur, qu'elle traite comme un échange conversationnel. Le script extrait et imprime ensuite la réponse du modèle.

Exécuter DeepSeek R1 localement en VSCode

Exécuter une application locale Gradio pour RAG avec DeepSeek-R1

Construisons une application de démonstration simple utilisant Gradio pour interroger et analyser des documents avec DeepSeek-R1.

Étape 1 : Conditions préalables

Avant de plonger dans la mise en œuvre, assurons-nous que les outils et bibliothèques suivants sont installés :

  • Python 3.8+.
  • Langchain : Cadre pour la création d'applications alimentées par de grands modèles de langage (LLM), permettant de faciliter la recherche, le raisonnement et l'intégration d'outils.
  • Chromadb : Une base de données vectorielles à haute performance conçue pour des recherches de similarité efficaces et le stockage des embeddings.
  • Gradio : Créer une interface web conviviale.

Exécutez les commandes suivantes pour installer les dépendances nécessaires :

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

Une fois les dépendances ci-dessus installées, exécutez les commandes d'importation suivantes :

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

Étape 2 : Traitement du PDF téléchargé

Une fois les bibliothèques importées, nous traiterons le PDF téléchargé.

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

La fonction process_pdf:

  • Charge et prépare le contenu des PDF pour une réponse basée sur la recherche.
  • Vérifie si un PDF a été téléchargé.
  • Extraction de texte à l'aide de PyMuPDFLoader.
  • Découpe le texte en morceaux à l'aide de RecursiveCharacterTextSplitter.
  • Génère des encastrements vectoriels à l'aide de OllamaEmbeddings.
  • Stocke les données d'intégration dans une mémoire vectorielle Chroma pour une récupération efficace.

Étape 3 : Combinaison de morceaux de documents récupérés

Une fois que les encastrements ont été récupérés, il faut les assembler. La fonction combine_docs() fusionne plusieurs morceaux de documents récupérés en une seule chaîne.

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

Étant donné que les modèles basés sur la recherche tirent des extraits pertinents plutôt que des documents entiers, cette fonction garantit que le contenu extrait reste lisible et correctement formaté avant d'être transmis à DeepSeek-R1.

Étape 4 : Interroger DeepSeek-R1 avec Ollama

Notre entrée dans le modèle est maintenant prête. Mettons en place DeepSeek R1 en utilisant Ollama.

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

La fonction ollama_llm() formate la question de l'utilisateur et le contexte du document récupéré en une invite structurée. Cette entrée formatée est ensuite envoyée à DeepSeek-R1 via ollama.chat(), qui traite la question dans le contexte donné et renvoie une réponse pertinente. Si vous avez besoin de la réponse sans le script de réflexion du modèle, utilisez la fonction strip() pour obtenir la réponse finale.

Étape 5 : La filière RAG

Maintenant que nous avons tous les composants nécessaires, construisons le pipeline RAG pour notre démo.

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)

La fonction ci-dessus effectue d'abord une recherche dans le magasin de vecteurs à l'aide de retriever.invoke(question) et renvoie les extraits de documents les plus pertinents. Ces extraits sont formatés dans une entrée structurée à l'aide de la fonction combine_docs et envoyés à ollama_llm, ce qui permet à DeepSeek-R1 de générer des réponses bien informées sur la base du contenu récupéré.

Étape 6 : Création de l'interface Gradio

Nous avons mis en place notre pipeline RAG. Maintenant, nous pouvons construire l'interface Gradio localement avec le modèle DeepSeek-R1 pour traiter les entrées PDF et poser les questions qui s'y rapportent.

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()

Nous procédons aux étapes suivantes :

  • Vérifier si un PDF est téléchargé.
  • Traitez le PDF à l'aide de la fonction process_pdf pour extraire le texte et générer des incorporations de documents.
  • Transmettez la requête de l'utilisateur et les enchâssements de documents à la fonction rag_chain() pour qu'elle récupère les informations pertinentes et génère une réponse adaptée au contexte.
  • Mettez en place une interface web basée sur Gradio pour permettre aux utilisateurs de télécharger un PDF et de poser des questions sur son contenu.
  • Définissez la mise en page à l'aide de la fonction gr.Interface(), qui accepte un fichier PDF et une requête de texte comme entrées.
  • Lancez l'application à l'aide de interface.launch() pour permettre des questions-réponses interactives et transparentes basées sur des documents via un navigateur web.

Exécuter une application locale Gradio pour RAG avec DeepSeek-R1

Conclusion

L'exécution locale de DeepSeek-R1 avec Ollama permet une inférence de modèle plus rapide, privée et rentable. Avec un processus d'installation simple, une interaction CLI, une prise en charge API et une intégration Python, vous pouvez utiliser DeepSeek-R1 pour une variété d'applications d'IA, des requêtes générales aux tâches complexes basées sur l'extraction.

Pour vous tenir au courant des derniers développements en matière d'IA, je vous recommande ces blogs :


Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Je suis un expert Google Developers en ML (Gen AI), un expert Kaggle 3x, et un ambassadeur Women Techmakers avec plus de 3 ans d'expérience dans la technologie. J'ai cofondé une startup dans le domaine de la santé en 2020 et je poursuis un master en informatique à Georgia Tech, avec une spécialisation dans l'apprentissage automatique.

Sujets

Apprenez l'IA avec ces cours !

Certification disponible

cours

Développer des applications LLM avec LangChain

3 hr
13.3K
Découvrez comment créer des applications alimentées par l'IA en utilisant des LLM, des invites, des chaînes et des agents dans LangChain.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus