使用 Ollama 在笔记本电脑上运行 DeepSeek-R1
昨天,DeepSeek 发布了一系列非常强大的语言模型,包括 DeepSeek R1 以及一些基于 Qwen 和 Llama 架构的精简(较小)模型。这些模型因其性能、推理能力以及最重要的基于 MIT 许可证的开源特性,在人工智能社区引起了广泛关注。
我一直在测试这些模型,既通过它们自己的 API,也在我自己的 MacBook Pro 上进行本地测试。不得不说,它们的性能非常出色,即使是 8B 和 14B 等较小的模型也是如此。以下是 DeepSeek R1 与 OpenAI 和 Anthropic 的其他最先进模型的基准测试对比。
在本指南中,我将引导您如何在自己的计算机上本地设置 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
- 前往Ollama 网站并下载 macOS 安装程序。
- 打开下载的文件并将 Ollama 应用程序拖到您的应用程序文件夹中。
- 启动 Ollama 应用程序。它将在后台运行并显示在系统托盘中。
- 打开终端并输入
ollama -v
以检查安装是否成功。
Linux
-
打开终端并运行以下命令来安装 Ollama:
curl -fsSL https://ollama.com/install.sh | sh
-
如果您喜欢手动安装,请
.tgz
从Ollama 网站/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
-
要启动 Ollama,请运行。您可以通过在另一个终端中
ollama serve
输入来检查它是否正常工作。ollama -v
-
为了获得更可靠的设置,请创建 systemd 服务。首先,为 Ollama 创建用户和组:
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama sudo usermod -a -G ollama $(whoami)
-
/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
-
最后,启动并启用服务:
sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama sudo systemctl status ollama
视窗
- 转到Ollama 网站并下载 Windows 安装程序 (
OllamaSetup.exe
)。 - 运行安装程序。Ollama 将安装在您的用户配置文件中。
- Ollama 将在后台运行并显示在系统托盘中。
- 打开命令提示符或 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_M
,q8_0
)。这些版本占用内存更少,运行速度更快,但质量可能会略有下降。 - 精简版本: DeepSeek 也提供精简版本(例如
qwen-distill
,llama-distill
)。这些较小的模型经过训练,可以像较大的模型一样运行,从而平衡性能和资源使用。 - 标签:每个模型都有一个
latest
标签和特定的标签,显示大小、量化和提炼方法。
使用DeepSeek模型
以下是将 DeepSeek 模型与 Ollama 结合使用的方法:
拉取模型
要下载 DeepSeek 模型,请使用以下命令:
ollama pull deepseek-r1:<model_tag>
替换<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>
例如:
-
要运行最新的 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."
}'
对于聊天完成情况:
curl http://localhost:11434/api/chat -d '{
"model": "deepseek-r1:7b",
"messages": [
{
"role": "user",
"content": "Write a short poem about the stars."
}
]
}'
使用与 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 的核心功能,例如聊天完成、文本完成、模型列表和嵌入。
支持的端点和功能
以下是受支持的端点及其功能的细分:
-
/v1/chat/completions
- 目的:生成聊天风格的回应。
- 支持的功能:
- 聊天完成(多轮对话)。
- 流式响应(实时输出)。
- JSON 模式(结构化 JSON 输出)。
- 可重现的输出(使用
seed
)。 - 视觉(像
llava
这样的多模式模型可以处理图像)。 - 工具(函数调用)。
- 支持的请求字段:
model
:要使用的 Ollama 模型的名称。messages
:消息对象数组,每个对象包含一个role
(system
、user
、assistant
或tool
)和content
(文本或图像)。frequency_penalty
,presence_penalty
:控制重复。response_format
:指定输出格式(例如json
)。seed
:用于可重复的输出。stop
:停止生成的序列。stream
:启用/禁用流媒体。stream_options
:流媒体的附加选项。include_usage
:包括流中的使用信息。
temperature
:控制随机性。top_p
:控制多样性。max_tokens
:生成的最大令牌数量。tools
:模型可以访问的工具列表。
-
/v1/completions
- 目的:生成文本补全。
- 支持的功能:
- 文本完成(单轮生成)。
- 流式响应。
- JSON 模式
- 可重复的输出。
- 支持的请求字段:
model
:Ollama 模型的名称。prompt
:输入文本。frequency_penalty
,presence_penalty
:控制重复。seed
:用于可重复的输出。stop
:停止序列。stream
:启用/禁用流媒体。stream_options
:流媒体的附加选项。include_usage
:包括流中的使用信息。
temperature
:控制随机性。top_p
:控制多样性。max_tokens
:生成的最大令牌数量。suffix
:模型响应后附加的文本
-
/v1/models
-
/v1/models/{model}
-
/v1/embeddings
如何将 Ollama 与 OpenAI 客户端一起使用
以下是如何配置流行的 OpenAI 客户端以与 Ollama 配合使用:
-
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")
-
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")
-
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
监视模型所使用的资源。 - 您可以调整
temperature
、top_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) 的研究工具等等。
我已经撰写了许多关于进一步探索这些模型的指南,例如:
-
使用 Docker 设置 Postgres 和 pgvector 以构建 RAG 应用程序- 在本分步指南中了解如何使用 Docker 设置 Postgres 和 pgvector 以用于 RAG(检索增强生成)。
-
深入探究 Postgres 和 pgvector 中的向量相似性搜索- 了解如何使用 pgvector 简化 Postgres 中的向量相似性搜索。探索用于创建索引、查询向量等函数。
-
使用 AI SDK 在 Node 中创建 AI 代理- 了解如何使用 AI SDK 在 Node 中创建 AI 代理来自动化工作流程和任务。
-
如何使用 LLM 和 Web 爬取丰富客户数据- 了解如何使用 LLM 和 Puppeteer 爬取客户网站并在您的 SaaS 产品中丰富他们的数据。
结论
希望本指南能帮助您轻松上手 Ollama,并在自己的计算机上运行最先进的语言模型。请记住,您不仅限于使用 DeepSeek 模型,还可以使用 Ollama 上的任何模型,甚至可以直接从 Hugging Face 等其他平台上的模型中获取。
如果您有任何问题或反馈,请在下面的评论中告诉我。
文章来源:https://dev.to/shayy/run-deepseek-locally-on-your-laptop-37hl