返回博客

成本优化对比

本地运行 DeepSeek 还是使用 API?硬件、速度、成本

检查你的 GPU 和内存能否运行 DeepSeek V4-Flash,预期速度是多少,以及何时修改 base_url 更简单。包含成本表。

作者:CheapTokens Team发布于 更新于 6 分钟阅读

两栏,本地和 API,比较在自己的硬件上运行 DeepSeek 与通过修改 base_url 调用托管 API
本页内容
  1. DeepSeek 能装进你的内存吗?
  2. 它有多快?
  3. 同样的工作负载通过 API 要花多少钱
  4. 自己的硬件什么时候才划算?
  5. 从本地迁移到托管 API
  6. 如果它不工作
  7. 该选哪个

大概率不行,除非你拥有 128 GB 内存或 Mac Studio 级别的机器,或者你有理由把每个 token 都留在自己的磁盘上。仅 DeepSeek V4-Flash 一个文件就约 100 GB,而一份社区指南报告称,即使在昂贵的硬件上,速度也只有大约每秒 6–10 个 token。对大多数应用和智能体循环来说,更短的路径是把 OpenAI 客户端指向托管 API:你只需修改 base_url 和密钥,代码中其他内容都不用动。

下面介绍:如何在五分钟内检查自己的机器、预期速度是多少,以及真实工作负载通过 API 的成本。

DeepSeek 能装进你的内存吗?#

这里的尺寸来自一份关于在本地运行 DeepSeek 的社区指南(GitHub 上的 deepseek-local-guide-ru,共 18 部分,CC BY 4.0,阅读于 2026 年 10 月 22 日)。它是非官方指南,与 DeepSeek 没有关联。该指南自己的页面在尺寸上并不完全一致,所以在开始 100 GB 下载之前,请先在 Hugging Face 模型卡上确认文件大小。

根据该指南,DeepSeek V4-Flash-0731 有 284B 参数,其中每个 token 激活 13B。文件如下:

量化 文件大小(指南中的数字)
Q3 约 103 GB
Q4 约 155 GB
Q8 约 162 GB

模型不必完全放在显存中。llama.cpp 可以把专家层保留在系统内存中,但指南的经验法则很直白:24 GB 的 GPU 旁边需要 128 GB 的内存。

假设你有一台不错的游戏 PC,配有 24 GB GPU 和 64 GB 内存。把两者相加,再与最小的文件比较:

24 + 64 = 88 GB,而 Q3 文件是 103 GB。

装不下,而且操作系统本身还需要内存。如果有 24 GB 显存和 128 GB 内存,你就有 152 GB,103 GB 的文件装得下还有余量。

更新的 DeepSeek-V4.1-Flash-1017 更大:根据同一份指南,约 552B 参数加上 196B 的 Engram,FP8 下约 510 GB,2-bit 下约 167 GB。支持是另一个问题。截至该指南(检查于 2026 年 10 月 22 日),它无法在 Ollama 中运行,因为不支持 deepseek_v41 架构,而 llama.cpp 和 LM Studio 的支持也不在其主分支中。这种情况变化很快,所以在围绕它做规划之前,请查看你所使用引擎的发布说明。

它有多快?#

该指南给出了两项测量结果,都是在重量化下,且都是社区数字,所以请把它们理解为数量级,而不是基准测试:

  • 配备 128 GB 的 DGX Spark,V4-Flash 在 IQ2 下:约每秒 6–7 个 token。
  • 配备 256 GB 的 Mac Studio M3 Ultra,V4.1-Flash 在 MLX 2-bit 下:约每秒 9.5 个 token。

该指南没有给出 RTX 4090 或 5090 的数字。

那是什么感觉?一个 1,000 token 的回答大约是文本的一页半:

1,000 ÷ 9.5 = 105.3 秒

1,000 ÷ 6 = 166.7 秒

对于边流式输出边阅读的聊天来说,这很慢但可用。对于每个任务要发起几十次调用的智能体来说,这会迅速累积。假设你的循环每天产生 2,000,000 个输出 token,而机器真的不间断地每秒生成 9.5 个 token:

2,000,000 ÷ 9.5 = 210,526 秒

210,526 ÷ 3,600 = 58.5 小时

一天的工作需要超过一天的生成时间。真实服务器会把多个请求批处理在一起,所以对团队来说情况没那么糟,但你会忙于调优引擎,而不是构建产品。

同样的工作负载通过 API 要花多少钱#

让我们把例子具体化。假设一个智能体循环每天发送 1000 万输入 token,得到 200 万输出 token。这些是假设数字,请用你使用日志中的数字替换。

DeepSeek 自己的定价页面(2026 年 10 月 22 日,页面本身未显示日期)列出了 deepseek-flash,由 DeepSeek-V4.1-Flash-1017 提供服务,每 1M token 的价格如下,非高峰 / 高峰:缓存未命中的输入 $0.15 / $0.30,输出 $0.60 / $1.20。高峰时段为 UTC 周一至周五 01:00–04:00 和 06:00–10:00,中国法定节假日除外;非高峰是高峰的一半。缓存命中的输入便宜得多($0.003 / $0.006),所以重复发送相同长前缀的循环会低于这里的数字。

对于假设的工作负载,在缓存未命中的情况下:

非高峰:10 × $0.15 + 2 × $0.60 = 每天 $2.70

高峰:10 × $0.30 + 2 × $1.20 = 每天 $5.40

在 CheapTokens 上,对于同类智能体循环,采用 MiniMax-M2.7(minimax-m2.7):任何时段一个固定价格,没有高峰窗口,每个回答最多 8,192 个输出 token,180K 上下文,所有模型共用一个余额。同样的 1000 万输入和 200 万输出 token 每天花费 $0.80。总体而言,把输入和输出加在一起计算,它比 OpenRouter 便宜;以下是针对这个工作负载的实时表格:

模型 费用 OpenRouter
GLM-5.3-Flash $0.28 $0.565
DeepSeek-V4-Flash $0.35 $0.789
MiniMax-M2.7 $0.80 $5.40

总计 10,000,000 个输入 token 和 2,000,000 个输出 token。每 100 万 token 的价格为当前价格,会随我们的资费一同变动;OpenRouter 列显示相同工作负载的参考价格。

该表格每次显示时都会读取当前价格表,所以价格变化时它仍然正确。完整价格表在 CheapTokens 定价页面上,2026 年 DeepSeek API 定价解释了缓存命中和高峰时段如何改变账单。

自己的硬件什么时候才划算?#

本地 token 每次请求不花钱,但机器要花钱。一个简单的检查方法:

text
payback days = hardware price ÷ (daily API bill − daily electricity)

我这里不给出硬件价格,因为它变动太大;请填入你得到的报价。为了有个感觉,取上面 DeepSeek 定价页面的非高峰账单。每 $1,000 的硬件需要这么多天的 API 账单才能回本,还不算电费和你自己的时间:

1,000 ÷ 2.70 = 370.4 天

而且这还假设机器能承担这个量:在每秒 9.5 个 token 下它做不到(见上面的速度部分),所以对于智能体工作负载,回本算不过来。本地更有意义的情况是:

  • 数据不能离开你的网络,而且这比账单更重要;
  • 你已经拥有这台机器,且负载很轻,比如个人工具每天几百次请求;
  • 你想实验权重本身:量化、微调、自选引擎。

当工作负载是智能体或服务、当你需要几秒内得到答案、或者当你的硬件低于上述内存尺寸时,API 更有意义。如果你的机器连最轻的 DeepSeek 文件都太小,MiniMax-M2.7(180K 上下文,每个回答最多 8,192 个输出 token,总体比 OpenRouter 便宜)是一个可以通过同一客户端尝试的模型。

从本地迁移到托管 API#

业余项目通常从 Ollama 开始,然后超出它的能力。好消息是:本地引擎使用 OpenAI 协议。Ollama 的兼容性页面(docs.ollama.com,检查于 2026 年 10 月 22 日)显示了端点 http://localhost:11434/v1/;客户端需要某个 api_key 值,但 Ollama 会忽略它。流式传输、JSON 模式和工具都能用;logprobs 不行。

所以切换就是两行加上模型名称:

python
import os
from openai import OpenAI

# Local Ollama: the key is required by the client but ignored by the server
# client = OpenAI(base_url="http://localhost:11434/v1/", api_key="ollama")

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

reply = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",  # take the exact id from the CheapTokens docs
    messages=[{"role": "user", "content": "Summarize this ticket in one sentence: ..."}],
    max_tokens=200,
)
print(reply.choices[0].message.content)
print(reply.usage)

成功时你会看到一句话摘要和一个 usage 对象,包含提示和补全的 token 计数,也就是账单所依据的相同数字。CheapTokens API 也接受 Anthropic Messages 格式,文档逐步展示了第一个请求。如果你对 base_url 不熟悉,OpenAI 兼容 API:base_url 是什么只需两分钟。

如果它不工作#

  • Connection refused 出现在 localhost:11434 上:Ollama 没有运行,或者你仍然指向本地地址。
  • 401:密钥缺失或复制时带了空格;像示例中那样从环境变量读取它。
  • 404 或未知模型:模型 id 不匹配。本地名称和托管名称不同,所以请从文档中复制 id。

该选哪个#

如果你拥有 128 GB 或更多内存并且好奇,就在家里运行权重并享受控制权。如果你构建的智能体每天消耗数百万 token,或者构建用户等待答案的服务,请使用 API,并把本地设置留作实验。无论哪种方式代码都保持不变,所以你可以从一种开始,以后再迁移到另一种。关于自托管的更多内容,请参阅 DeepInfer 对自托管意味着什么;要通过 API 尝试 DeepSeek,请参阅 CheapTokens DeepSeek 模型。