使用 Ollama 在笔记本电脑上运行 DeepSeek-R1

2025-05-26

使用 Ollama 在笔记本电脑上运行 DeepSeek-R1

昨天,DeepSeek 发布了一系列非常强大的语言模型,包括 DeepSeek R1 以及一些基于 Qwen 和 Llama 架构的精简(较小)模型。这些模型因其性能、推理能力以及最重要的基于 MIT 许可证的开源特性,在人工智能社区引起了广泛关注。

我一直在测试这些模型,既通过它们自己的 API,也在我自己的 MacBook Pro 上进行本地测试。不得不说,它们的性能非常出色,即使是 8B 和 14B 等较小的模型也是如此。以下是 DeepSeek R1 与 OpenAI 和 Anthropic 的其他最先进模型的基准测试对比。

DeepSeek R1 基准测试

在本指南中,我将引导您如何在自己的计算机上本地设置 Ollama 并运行最新的 DeepSeek R1 模型。但在开始之前,让我们先来了解一下这些模型本身。

DeepSeek R1

DeepSeek R1 是一个专注于推理的大型语言模型。它可以处理需要多步骤解决问题和逻辑思维的任务。该模型采用一种特殊的训练方法,更侧重于强化学习 (RL) 而非监督微调 (SFT)。这种方法有助于模型更好地自主解决问题。

该模型是开源的,这意味着其权重遵循 MIT 许可证。这意味着人们可以将其用于商业用途、对其进行修改,并基于它创建新版本。这与许多其他非开源的大型语言模型不同。

精简模型:更小巧但功能依然强大

DeepSeek AI 还发布了该模型的较小版本。这些精简模型有不同的大小,例如 1.5B、7B、8B、14B、32B 和 70B 参数。它们基于 Qwen 和 Llama 架构。这些较小的模型保留了较大模型的大量推理能力,但更易于在个人计算机上使用。

较小的型号,尤其是 8B 及更小的型号,可以在配备 CPU、GPU 或 Apple Silicon 的普通计算机上运行。这使得人们可以轻松地在家中进行实验。

Ollama 是什么?

Ollama 是一款工具,可让您在自己的计算机上运行和管理大型语言模型 (LLM)。它让您能够更轻松地下载、运行和使用这些模型,而无需强大的服务器。Ollama 支持各种操作系统,包括 macOS、Linux 和 Windows。它设计简单易用,只需使用一些基本的命令即可提取、运行和管理模型。

Ollama 还提供了通过 API 使用模型的方法,方便您将模型集成到其他应用程序中。值得一提的是,Ollama 提供了一个与 OpenAI API 兼容的实验性兼容层。这意味着您通常可以将为 OpenAI 设计的现有应用程序和工具与本地 Ollama 服务器一起使用。它可以配置为使用 GPU 来提高处理速度,并提供自定义模型创建和模型共享等功能。Ollama 是探索和使用 LLM 的绝佳方式,无需依赖云服务。

安装 Ollama

在使用 DeepSeek 模型之前,你需要安装 Ollama。以下是在不同的操作系统上执行此操作的方法:

macOS

  1. 前往Ollama 网站并下载 macOS 安装程序。
  2. 打开下载的文件并将 Ollama 应用程序拖到您的应用程序文件夹中。
  3. 启动 Ollama 应用程序。它将在后台运行并显示在系统托盘中。
  4. 打开终端并输入ollama -v以检查安装是否成功。

Linux

  1. 打开终端并运行以下命令来安装 Ollama:

    curl -fsSL https://ollama.com/install.sh | sh
    
  2. 如果您喜欢手动安装,请.tgzOllama 网站/usr下载正确的软件包。然后,使用以下命令将软件包提取到:

    curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
    sudo tar -C /usr -xzf ollama-linux-amd64.tgz
    
  3. 要启动 Ollama,请运行。您可以通过在另一个终端中ollama serve输入来检查它是否正常工作。ollama -v

  4. 为了获得更可靠的设置,请创建 systemd 服务。首先,为 Ollama 创建用户和组:

    sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
    sudo usermod -a -G ollama $(whoami)
    
  5. /etc/systemd/system/ollama.service然后,创建一个包含以下内容的服务文件:

    [Unit]
    Description=Ollama Service
    After=network-online.target
    
    [Service]
    ExecStart=/usr/bin/ollama serve
    User=ollama
    Group=ollama
    Restart=always
    RestartSec=3
    Environment="PATH=$PATH"
    
    [Install]
    WantedBy=default.target
    
  6. 最后,启动并启用服务:

    sudo systemctl daemon-reload
    sudo systemctl enable ollama
    sudo systemctl start ollama
    sudo systemctl status ollama
    

视窗

  1. 转到Ollama 网站并下载 Windows 安装程序 ( OllamaSetup.exe)。
  2. 运行安装程序。Ollama 将安装在您的用户配置文件中。
  3. Ollama 将在后台运行并显示在系统托盘中。
  4. 打开命令提示符或 PowerShell 并键入ollama -v以检查安装是否成功。

了解 Ollama 命令

Ollama 使用简单的命令来管理模型。以下是您需要的一些关键命令:

  • ollama -v:检查已安装的 Ollama 版本。
  • ollama pull <model_name>:<tag>:从 Ollama 库下载模型。
  • ollama run <model_name>:<tag>:运行模型并启动交互式聊天会话。
  • ollama create <model_name> -f <Modelfile>:使用 Modelfile 创建自定义模型。
  • ollama show <model_name>:显示有关模型的信息。
  • ollama ps:列出当前正在运行的模型。
  • ollama stop <model_name>:从内存中卸载模型。
  • ollama cp <source_model> <destination_model>:复制模型。
  • ollama delete <model_name>:删除模型。
  • ollama push <model_name>:<tag>:将模型上传到模型库。

Ollama 上的 DeepSeek 模型

Ollama 库中提供了不同大小和格式的 DeepSeek 模型。具体如下:

  • 模型大小:模型大小各异,例如 1.5 亿、7 亿、8 亿、14 亿、32 亿、70 亿和 671 亿。“b”代表十亿个参数。模型越大,通常性能越好,但需要的资源也越多。
  • 量化版本:部分模型提供量化版本(例如q4_K_Mq8_0)。这些版本占用内存更少,运行速度更快,但质量可能会略有下降。
  • 精简版本: DeepSeek 也提供精简版本(例如qwen-distillllama-distill)。这些较小的模型经过训练,可以像较大的模型一样运行,从而平衡性能和资源使用。
  • 标签:每个模型都有一个latest标签和特定的标签,显示大小、量化和提炼方法。

使用DeepSeek模型

以下是将 DeepSeek 模型与 Ollama 结合使用的方法:

拉取模型

要下载 DeepSeek 模型,请使用以下命令:

ollama pull deepseek-r1:<model_tag>
Enter fullscreen mode Exit fullscreen mode

替换<model_tag>为要使用的模型的具体标签。例如:

  • 下载最新的 7B 模型:

    ollama pull deepseek-r1:7b
    
  • 要下载经过量化的 14B Qwen-distilled 模型q4_K_M

    ollama pull deepseek-r1:14b-qwen-distill-q4_K_M
    
  • 要下载精确的 70B Llama 蒸馏模型fp16

    ollama pull deepseek-r1:70b-llama-distill-fp16
    

以下是一些可用的标签:

  • latest
  • 1.5b
  • 7b
  • 8b
  • 14b
  • 32b
  • 70b
  • 671b
  • 1.5b-qwen-distill-fp16
  • 1.5b-qwen-distill-q4_K_M
  • 1.5b-qwen-distill-q8_0
  • 14b-qwen-distill-fp16
  • 14b-qwen-distill-q4_K_M
  • 14b-qwen-distill-q8_0
  • 32b-qwen-distill-fp16
  • 32b-qwen-distill-q4_K_M
  • 32b-qwen-distill-q8_0
  • 70b-llama-distill-fp16
  • 70b-llama-distill-q4_K_M
  • 70b-llama-distill-q8_0
  • 7b-qwen-distill-fp16
  • 7b-qwen-distill-q4_K_M
  • 7b-qwen-distill-q8_0
  • 8b-llama-distill-fp16
  • 8b-llama-distill-q4_K_M
  • 8b-llama-distill-q8_0

运行模型

下载模型后,您可以使用以下命令运行它:

ollama run deepseek-r1:<model_tag>
Enter fullscreen mode Exit fullscreen mode

例如:

  • 要运行最新的 7B 模型:

    ollama run deepseek-r1:7b
    
  • 要运行具有量化的 14B Qwen-distilled 模型q4_K_M

    ollama run deepseek-r1:14b-qwen-distill-q4_K_M
    
  • 要精确运行 70B Llama 蒸馏模型fp16

    ollama run deepseek-r1:70b-llama-distill-fp16
    

这将启动一个交互式聊天会话,您可以在其中询问模型问题。

使用 API

您还可以将 Ollama API 与 DeepSeek 模型一起使用。以下是使用的示例curl

curl http://localhost:11434/api/generate -d '{
  "model": "deepseek-r1:7b",
  "prompt": "Write a short poem about the stars."
}'
Enter fullscreen mode Exit fullscreen mode

对于聊天完成情况:

curl http://localhost:11434/api/chat -d '{
  "model": "deepseek-r1:7b",
  "messages": [
    {
      "role": "user",
      "content": "Write a short poem about the stars."
    }
  ]
}'
Enter fullscreen mode Exit fullscreen mode

使用与 OpenAI 兼容的 API

Ollama 提供了一个实验性的兼容层,兼容部分 OpenAI API。这允许您在本地 Ollama 服务器上使用为 OpenAI 设计的现有应用程序和工具。

关键概念

  • API 端点: Ollama 的 OpenAI 兼容 API 在 处提供服务http://localhost:11434/v1
  • 身份验证: Ollama 的 API 本地使用时无需 API 密钥。您通常可以在客户端中使用类似占位"ollama"符的参数。api_key
  • 部分兼容性: Ollama 的兼容性尚处于实验阶段且不完整。并非所有 OpenAI API 功能都受支持,并且行为上可能存在一些差异。
  • 专注于核心功能: Ollama 主要旨在支持 OpenAI API 的核心功能,例如聊天完成、文本完成、模型列表和嵌入。

支持的端点和功能

以下是受支持的端点及其功能的细分:

  1. /v1/chat/completions

    • 目的:生成聊天风格的回应。
    • 支持的功能:
      • 聊天完成(多轮对话)。
      • 流式响应(实时输出)。
      • JSON 模式(结构化 JSON 输出)。
      • 可重现的输出(使用seed)。
      • 视觉(像llava这样的多模式模型可以处理图像)。
      • 工具(函数调用)。
    • 支持的请求字段:
      • model:要使用的 Ollama 模型的名称。
      • messages:消息对象数组,每个对象包含一个rolesystemuserassistanttool)和content(文本或图像)。
      • frequency_penalty, presence_penalty:控制重复。
      • response_format:指定输出格式(例如json)。
      • seed:用于可重复的输出。
      • stop:停止生成的序列。
      • stream:启用/禁用流媒体。
      • stream_options:流媒体的附加选项。
        • include_usage:包括流中的使用信息。
      • temperature:控制随机性。
      • top_p:控制多样性。
      • max_tokens:生成的最大令牌数量。
      • tools:模型可以访问的工具列表。
  2. /v1/completions

    • 目的:生成文本补全。
    • 支持的功能:
      • 文本完成(单轮生成)。
      • 流式响应。
      • JSON 模式
      • 可重复的输出。
    • 支持的请求字段:
      • model:Ollama 模型的名称。
      • prompt:输入文本。
      • frequency_penalty, presence_penalty:控制重复。
      • seed:用于可重复的输出。
      • stop:停止序列。
      • stream:启用/禁用流媒体。
      • stream_options:流媒体的附加选项。
        • include_usage:包括流中的使用信息。
      • temperature:控制随机性。
      • top_p:控制多样性。
      • max_tokens:生成的最大令牌数量。
      • suffix:模型响应后附加的文本
  3. /v1/models

  4. /v1/models/{model}

  5. /v1/embeddings

如何将 Ollama 与 OpenAI 客户端一起使用

以下是如何配置流行的 OpenAI 客户端以与 Ollama 配合使用:

  1. OpenAI Python库:

    from openai import OpenAI
    
    client = OpenAI(
        base_url='http://localhost:11434/v1/',
        api_key='ollama',  # Required but ignored
    )
    
    # Example chat completion
    chat_completion = client.chat.completions.create(
        messages=[
            {'role': 'user', 'content': 'Say this is a test'},
        ],
        model='deepseek-r1:7b',
    )
    
    # Example text completion
    completion = client.completions.create(
        model="deepseek-r1:7b",
        prompt="Say this is a test",
    )
    
    # Example list models
    list_completion = client.models.list()
    
    # Example get model info
    model = client.models.retrieve("deepseek-r1:7b")
    
  2. OpenAI JavaScript 库:

    import OpenAI from 'openai';
    
    const openai = new OpenAI({
      baseURL: 'http://localhost:11434/v1/',
      apiKey: 'ollama', // Required but ignored
    });
    
    // Example chat completion
    const chatCompletion = await openai.chat.completions.create({
      messages: [{ role: 'user', content: 'Say this is a test' }],
      model: 'deepseek-r1:7b',
    });
    
    // Example text completion
    const completion = await openai.completions.create({
      model: "deepseek-r1:7b",
      prompt: "Say this is a test.",
    });
    
    // Example list models
    const listCompletion = await openai.models.list()
    
    // Example get model info
    const model = await openai.models.retrieve("deepseek-r1:7b")
    
  3. curl(直接 API 调用):

    # Chat completion
    curl http://localhost:11434/v1/chat/completions \
        -H "Content-Type: application/json" \
        -d '{
            "model": "deepseek-r1:7b",
            "messages": [
                {
                    "role": "user",
                    "content": "Hello!"
                }
            ]
        }'
    
    # Text completion
    curl http://localhost:11434/v1/completions \
        -H "Content-Type: application/json" \
        -d '{
            "model": "deepseek-r1:7b",
            "prompt": "Say this is a test"
        }'
    
    # List models
    curl http://localhost:11434/v1/models
    
    # Get model info
    curl http://localhost:11434/v1/models/deepseek-r1:7b
    
    # Embeddings
    curl http://localhost:11434/v1/embeddings \
        -H "Content-Type: application/json" \
        -d '{
            "model": "all-minilm",
            "input": ["why is the sky blue?", "why is the grass green?"]
        }'
    

选择正确的模型

选择 DeepSeek 模型时,请考虑以下因素:

  • 规模:模型越大,通常性能越好,但需要的资源也越多。如果资源有限,可以先从较小的模型开始。
  • 量化:量化模型使用较少的内存,但质量可能略低。
  • 提炼:提炼的模型在性能和资源使用之间提供了良好的平衡。

最好尝试不同的模型,看看哪一个最适合您。

附加提示

  • 始终检查Ollama 库以获取最新的模型和标签。
  • 用于ollama ps监视模型所使用的资源。
  • 您可以调整temperaturetop_p和等参数num_ctx来微调模型的输出。

故障排除

如果有任何问题,请检查 Ollama 日志:

  • macOS: ~/.ollama/logs/server.log
  • Linux: journalctl -u ollama --no-pager
  • 视窗: %LOCALAPPDATA%\Ollama\server.log

您还可以使用OLLAMA_DEBUG=1环境变量获取更详细的日志。

继续攻读法学硕士学位

当然,在本地运行这些模型只是一个开始。您可以使用 API 将这些模型集成到您自己的应用程序中,构建自定义应用程序,例如聊天机器人、使用 Retriever 增强生成 (RAG) 的研究工具等等。

我已经撰写了许多关于进一步探索这些模型的指南,例如:

结论

希望本指南能帮助您轻松上手 Ollama,并在自己的计算机上运行最先进的语言模型。请记住,您不仅限于使用 DeepSeek 模型,还可以使用 Ollama 上的任何模型,甚至可以直接从 Hugging Face 等其他平台上的模型中获取。

如果您有任何问题或反馈,请在下面的评论中告诉我。

文章来源:https://dev.to/shayy/run-deepseek-locally-on-your-laptop-37hl
PREV
我为什么使用 Web 组件 - 我的用例
NEXT
2025 年我将如何构建 SaaS(如果我从零开始)