手把手教程,让开发者在笔记本上免费部署开源推理模型,建立本地 AI 编程环境。
昨天,DeepSeek 发布了一系列非常强大的语言模型,其中包括 DeepSeek R1,以及多个基于 Qwen 和 Llama 架构的蒸馏(小型)模型。这些模型凭借其性能、推理能力,以及最重要的——采用 MIT 许可证开源,在 AI 社区引起了巨大反响。
我已经通过 DeepSeek 自己的 API 以及在我的 MacBook Pro 本地测试了这些模型。不得不说,即使是 8B 和 14B 等较小的模型,其性能也非常出色。下面是一项将 DeepSeek R1 与 OpenAI 和 Anthropic 的其他先进模型进行对比的基准测试。
在本指南中,我将带你完成 Ollama 的设置,并在你自己的计算机上本地运行最新的 DeepSeek R1 模型。但在开始之前,我们先来了解一下这些模型本身。
DeepSeek R1 是一个专注于推理的大语言模型。它可以处理需要多步骤问题求解和逻辑思考的任务。该模型采用了一种特殊的训练方法,相比监督微调(Supervised Fine-Tuning,SFT),它更强调强化学习(Reinforcement Learning,RL)。这种方法有助于提升模型独立解决问题的能力。
该模型是开源的,这意味着它的权重以 MIT 许可证发布。人们可以将其用于商业用途、对其进行修改,并基于它创建新的版本。这与许多不开源的大语言模型有所不同。
蒸馏模型:体积更小,但依然强大
DeepSeek AI 还发布了该模型的多个小型版本。这些蒸馏模型具有不同的参数规模,包括 1.5B、7B、8B、14B、32B 和 70B,并基于 Qwen 和 Llama 架构构建。这些小型模型保留了大型模型的大部分推理能力,同时更容易在个人计算机上运行。
这些小型模型,尤其是 8B 及更小规模的模型,可以在配备 CPU、GPU 或 Apple Silicon 的普通计算机上运行。这让人们能够轻松地在家中进行实验。
Ollama 是一个可以让你在自己的计算机上运行和管理大语言模型(LLM)的工具。它简化了模型的下载、运行和使用过程,无需强大的服务器。Ollama 支持多种操作系统,包括 macOS、Linux 和 Windows。它以简单易用为设计目标,只需使用一些基础命令即可拉取、运行和管理模型。
Ollama 还提供了通过 API 使用模型的方式,让你能够将模型集成到其他应用程序中。重要的是,Ollama 提供了一个实验性的 OpenAI API 兼容层。这意味着,你通常可以让原本为 OpenAI 设计的现有应用程序和工具连接到本地 Ollama 服务器。你可以配置 Ollama 使用 GPU 来提高处理速度,它还提供自定义模型创建和模型共享等功能。Ollama 是一种无需依赖云端服务即可探索和使用 LLM 的绝佳方式。
在使用 DeepSeek 模型之前,你需要先安装 Ollama。以下是在不同操作系统上安装 Ollama 的方法:
前往 Ollama 网站,下载 macOS 安装程序。
打开下载的文件,然后将 Ollama 应用程序拖入 Applications 文件夹。
启动 Ollama 应用程序。它将在后台运行,并显示在系统托盘中。
打开终端并输入 ollama -v,检查安装是否成功。
打开终端并运行以下命令安装 Ollama:curl -fsSL https://ollama.com/install.sh | sh
打开终端并运行以下命令安装 Ollama:
curl -fsSL https://ollama.com/install.sh | sh
如果你希望手动安装,请从 Ollama 网站下载正确的 .tgz 软件包。然后,使用以下命令将软件包解压到 /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 网站下载正确的 .tgz 软件包。然后,使用以下命令将软件包解压到 /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,检查它是否正常运行。
要启动 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)
为了获得更可靠的配置,请创建一个 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
然后,在 /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
最后,启动该服务并将其设置为开机启动:
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.5b、7b、8b、14b、32b、70b 和 671b。字母“b”表示十亿参数。较大的模型通常表现更好,但也需要更多资源。
量化版本:部分模型提供量化版本(例如 q4_K_M、q8_0)。这些版本占用的内存更少,运行速度也可能更快,但模型质量可能会略有下降。
蒸馏版本:DeepSeek 还提供蒸馏版本(例如 qwen-distill、llama-distill)。这些小型模型经过训练,可以模拟大型模型的行为,从而在性能和资源占用之间取得平衡。
标签:每个模型都有一个 latest 标签,以及用于表示模型规模、量化方式和蒸馏方法的特定标签。
使用 DeepSeek 模型
以下是通过 Ollama 使用 DeepSeek 模型的方法:
要下载 DeepSeek 模型,请使用以下命令:
ollama pull deepseek-r1:<model_tag>
将 <model_tag> 替换为你想使用的模型的具体标签。例如:
下载最新的 7B 模型:ollama pull deepseek-r1:7b
下载最新的 7B 模型:
ollama pull deepseek-r1:7b
下载采用 q4_K_M 量化的 14B Qwen 蒸馏模型:ollama pull deepseek-r1:14b-qwen-distill-q4_K_M
下载采用 q4_K_M 量化的 14B Qwen 蒸馏模型:
ollama pull deepseek-r1:14b-qwen-distill-q4_K_M
下载采用 fp16 精度的 70B Llama 蒸馏模型:ollama pull deepseek-r1:70b-llama-distill-fp16
下载采用 fp16 精度的 70B Llama 蒸馏模型:
ollama pull deepseek-r1:70b-llama-distill-fp16
以下是部分可用标签:
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-q4_K_M
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
运行最新的 7B 模型:
ollama run deepseek-r1:7b
运行采用 q4_K_M 量化的 14B Qwen 蒸馏模型:ollama run deepseek-r1:14b-qwen-distill-q4_K_M
运行采用 q4_K_M 量化的 14B Qwen 蒸馏模型:
ollama run deepseek-r1:14b-qwen-distill-q4_K_M
以 fp16 精度运行 70B Llama 蒸馏模型:ollama run deepseek-r1:70b-llama-distill-fp16
以 fp16 精度运行 70B Llama 蒸馏模型:
ollama run deepseek-r1:70b-llama-distill-fp16
这将启动一个交互式聊天会话,你可以在其中向模型提问。
你也可以将 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 密钥。通常可以在客户端的 api_key 参数中使用类似 "ollama" 的占位值。
部分兼容: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:要生成的最大 token 数。tools:模型可以访问的工具列表。
用途:生成聊天形式的响应。
支持的功能:聊天补全(多轮对话)。流式响应(实时输出)。JSON 模式(结构化 JSON 输出)。可复现输出(使用 seed)。视觉能力(可以处理图像的 llava 等多模态模型)。工具(函数调用)。
聊天补全(多轮对话)。
流式响应(实时输出)。
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:要生成的最大 token 数。tools:模型可以访问的工具列表。
model:要使用的 Ollama 模型名称。
messages:消息对象数组,每个对象都包含 role(system、user、assistant 或 tool)和 content(文本或图像)。
frequency_penalty、presence_penalty:控制重复。
response_format:指定输出格式(例如 json)。
seed:用于生成可复现的输出。
stop:停止生成的序列。
stream:启用或禁用流式传输。
stream_options:流式传输的其他选项。include_usage:在流中包含用量信息。
include_usage:在流中包含用量信息。
temperature:控制随机性。
top_p:控制多样性。
max_tokens:要生成的最大 token 数。
tools:模型可以访问的工具列表。
/v1/completions 用途:生成文本补全。支持的功能:文本补全(单轮生成)。流式响应。JSON 模式。可复现输出。支持的请求字段:model:Ollama 模型的名称。prompt:输入文本。frequency_penalty、presence_penalty:控制重复。seed:用于生成可复现的输出。stop:停止序列。stream:启用或禁用流式传输。stream_options:流式传输的其他选项。include_usage:在流中包含用量信息。temperature:控制随机性。top_p:控制多样性。max_tokens:要生成的最大 token 数。suffix:附加在模型响应之后的文本
用途:生成文本补全。
支持的功能:文本补全(单轮生成)。流式响应。JSON 模式。可复现输出。
文本补全(单轮生成)。
可复现输出。
支持的请求字段:model:Ollama 模型的名称。prompt:输入文本。frequency_penalty、presence_penalty:控制重复。seed:用于生成可复现的输出。stop:停止序列。stream:启用或禁用流式传输。stream_options:流式传输的其他选项。include_usage:在流中包含用量信息。temperature:控制随机性。top_p:控制多样性。max_tokens:要生成的最大 token 数。suffix:附加在模型响应之后的文本
model:Ollama 模型的名称。
prompt:输入文本。
frequency_penalty、presence_penalty:控制重复。
seed:用于生成可复现的输出。
stop:停止序列。
stream:启用或禁用流式传输。
stream_options:流式传输的其他选项。include_usage:在流中包含用量信息。
include_usage:在流中包含用量信息。
temperature:控制随机性。
top_p:控制多样性。
max_tokens:要生成的最大 token 数。
suffix:附加在模型响应之后的文本
如何将 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 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")
OpenAI JavaScript 库:
import OpenAI from 'openai';
```javascript
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1/',
apiKey: 'ollama', // 必需但被忽略
});
// 示例:聊天完成
const chatCompletion = await openai.chat.completions.create({
messages: [{ role: 'user', content: 'Say this is a test' }],
model: 'deepseek-r1:7b',
});
// 示例:文本完成
const completion = await openai.completions.create({
model: "deepseek-r1:7b",
prompt: "Say this is a test.",
});
// 示例:列出模型
const listCompletion = await openai.models.list()
// 示例:获取模型信息
const model = await openai.models.retrieve("deepseek-r1:7b")
curl(直接 API 调用):
# 聊天完成
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1:7b",
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}'
# 文本完成
curl http://localhost:11434/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1:7b",
"prompt": "Say this is a test"
}'
# 列出模型
curl http://localhost:11434/v1/models
# 获取模型信息
curl http://localhost:11434/v1/models/deepseek-r1:7b
# 嵌入向量
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 日志:
~/.ollama/logs/server.logjournalctl -u ollama --no-pager%LOCALAPPDATA%\Ollama\server.log你也可以使用 OLLAMA_DEBUG=1 环境变量获取更详细的日志。
当然,在本地运行这些模型只是开始。你可以使用 API 将这些模型集成到自己的应用程序中,构建自定义应用程序,例如聊天机器人、带有检索增强生成(RAG)的研究工具等。
我写过许多指南来进一步探索这些模型,例如:
使用 Docker 设置 Postgres 和 pgvector 以构建 RAG 应用程序 - 学习如何在这个循序渐进的指南中使用 Docker 为 RAG(检索增强生成)设置 Postgres 和 pgvector。
使用 Docker 设置 Postgres 和 pgvector 以构建 RAG 应用程序 - 学习如何在这个循序渐进的指南中使用 Docker 为 RAG(检索增强生成)设置 Postgres 和 pgvector。
Postgres 和 pgvector 中的向量相似度搜索深度探讨 - 了解如何使用 pgvector 在 Postgres 中简化向量相似度搜索。发现用于创建索引、查询向量等的函数。
Postgres 和 pgvector 中的向量相似度搜索深度探讨 - 了解如何使用 pgvector 在 Postgres 中简化向量相似度搜索。发现用于创建索引、查询向量等的函数。
使用 AI SDK 在 Node 中创建 AI 智能体 - 学习如何使用 AI SDK 在 Node 中创建 AI 智能体以自动化工作流和任务。
使用 AI SDK 在 Node 中创建 AI 智能体 - 学习如何使用 AI SDK 在 Node 中创建 AI 智能体以自动化工作流和任务。
如何使用 LLM 和网络爬虫来丰富客户数据 - 了解如何使用 LLM 和 Puppeteer 爬取客户网站并在 SaaS 产品中丰富他们的数据。
如何使用 LLM 和网络爬虫来丰富客户数据 - 了解如何使用 LLM 和 Puppeteer 爬取客户网站并在 SaaS 产品中丰富他们的数据。
希望本指南能帮助你了解使用 Ollama 和在自己的计算机上运行最先进的语言模型是多么容易。请记住,你不仅限于 DeepSeek 模型,你可以使用任何在 Ollama 上可用的模型,甚至可以直接使用来自 Hugging Face 等其他平台上可用的模型。
如果你有任何问题或反馈,请在下面的评论中告诉我。