自托管 LLM 与 API 之争:什么时候自托管才划算
Self-Hosted LLM vs API: When Does Self-Hosting Pay Off
OpenRouter 按 2026 年 10 月 8 日价格测算,自托管 LLM 只有在 GPU 负载超过盈亏平衡点时才比 API 便宜:Qwen3.8 27B 在单张租用 RTX 3090($0.50/小时)上约 6% 至 12% 负载即可打平,但每用户仅约 15 tokens/秒。
如果你为开放权重模型支付 API 账单,你可能会想,用自己的 GPU 是不是成本更低。GPU 租金按小时计费,无论忙闲,而 API 只按你使用的 token 收费。
只有当你的流量能让 GPU 在足够长的时间内保持忙碌时,自托管 LLM 才更便宜。按 2026 年 10 月 8 日的价格,一个 27B 模型跑在一张租用的 RTX 3090 上,盈亏平衡点约为 12% 负载;而一个大型混合专家模型跑在租用的 H200 上,永远无法胜过最便宜的零数据保留(ZDR)API 端点。
本文用我们 API 中各家提供商的实时价格算出盈亏平衡点,然后说明我们的数据控制如何覆盖隐私需求。
TL;DR
-
盈亏平衡负载等于 GPU 每小时租金除以同样一小时 token 通过 API 的费用。低于该负载时,API 更便宜。
-
DeepSeek V4.1 Flash 跑在四张租用的 H200 上,永远无法胜过最便宜的 ZDR 端点。跑在两张 B200 上时,按我们找到的最低租金,需要 76% 负载。
-
按 10 月 8 日的价格,Qwen3.8 27B 跑在一张每小时 0.50 美元的 RTX 3090 上,盈亏平衡点为 6% 到 12% 负载,但每个用户只能获得约每秒 15 个 token。
-
已公布的自托管成本约为每百万 token 一美分,这主要计入的是缓存输入 token,而这类 token 通过 API 也几乎免费。
-
大多数隐私要求并不需要自托管。provider.zdr 会把请求限制在零数据保留端点上,我们的欧盟和美国域名则让请求留在区域内。
如何判断自托管是否划算?
取 GPU 一小时的时间,用两种方式定价。一边是租金。另一边是 API 为这张 GPU 一小时内能服务的 token 所收取的费用,速度要能被你的用户接受。
break-even load = GPU rent per hour / API cost of one fully loaded GPU-hour of tokens30% 的盈亏平衡意味着,在你租用 GPU 的时间里,它必须有 30% 的时间处于忙碌状态,成本才会低于 API。任何高于 100% 的值都意味着,即使 GPU 从不休息,API 也胜出。
两边必须按相同的 token 组合定价,因为输入、缓存输入和输出 token 的 API 价格差异很大。我们还排除了工程时间和为流量峰值保留的备用容量,因此本文中每个盈亏平衡点都是下限。
同一个开放权重模型的 API 费用是多少?
大多数开放权重模型由多家提供商服务。每家都在自己的硬件上运行自己的权重副本,并设定自己的价格。我们的端点 API(GET /api/v1/models/{author}/{slug}/endpoints)会返回某个模型每家提供商的价格和精度,GET /api/v1/endpoints/zdr 则列出具有 ZDR 策略的端点。截至 2026 年 10 月 8 日,它们返回:
| 模型 | 端点(ZDR) | 输入 $/M | 缓存输入 $/M | 输出 $/M |
|---|---|---|---|---|
| qwen/qwen3.8-27b | 18 (14) | 0.024 至 0.99 | 0.02 至 0.99 | 1.49 至 5.25 |
| deepseek/deepseek-v4.1-flash | 31 (24) | 0.016 至 0.45 | 0.0007 至 0.20 | 0.14 至 1.80 |
对于相同的权重,Qwen3.8 27B 输出最贵的提供商收费是最便宜提供商的 3.5 倍,DeepSeek V4.1 Flash 则接近 13 倍。按单一标价算出的盈亏平衡点可能偏差很大。提供商提供的精度也不同,从 fp4 到 bf16,我们的LLM 量化文章测量了这会在多大程度上改变答案。
我们为真实工作负载支付了多少
推理模型在回答前会花费输出 token 进行思考,而智能体每一轮都会重新发送其完整上下文。因此,我们对每个模型运行了两个工作负载,并强制启用 ZDR,同时通过 GET /api/v1/generation 为每个请求定价,该接口会报告提供商实际计费的 token 和成本:
| 工作负载 | 模型 | 请求数 | 输入 token(缓存占比) | 输出 token(推理占比) | 成本 | 每 100 万输出 token |
|---|---|---|---|---|---|---|
| 基于 5k token 文档的对话 | DeepSeek V4.1 Flash | 10 | 53,330 (68%) | 12,476 (97%) | $0.0110 | $0.88 |
| 8 轮智能体,60k token 上下文 | DeepSeek V4.1 Flash | 8 | 504,747 (75%) | 28,509 (83%) | $0.0243 | $0.85 |
| 基于 5k token 文档的对话 | Qwen3.8 27B | 10 | 72,329 (56%) | 25,084 (97%) | $0.0694 | $2.77 |
| 7 轮智能体,85k token 上下文 | Qwen3.8 27B | 7 | 595,223 (100%) | 81,870 (99%) | $0.1900 | $2.32 |
最后一列将包含输入在内的总成本除以输出 token。几乎每个输出 token 都是推理,而自托管副本在生成这些 token 时会花费相同的 GPU 时间。Qwen3.8 27B 在其 7 轮智能体回合中还有 3 轮在思考时触及了我们 16,000 token 的上限。本文的所有 API 运行总计花费 $0.49。
自托管 LLM 的运行成本是多少?
这些 GPU 并非由我们自己租用。自托管部分使用已发布的基准测试和租赁价格,因此请将每一行视为一个假设:
| 配置 | 每 GPU 吞吐量 | 来源 | 每 GPU 小时租金 |
|---|---|---|---|
| DeepSeek V4.1 Flash,4x H200,vLLM fp4,32 个并发会话 | 35,084 输入 + 231 输出 tok/s,95% 输入已缓存,每用户 71 tok/s | InferenceX 智能体轨迹,2026-09-21 | $2.90(InferenceX 零售档),$4.59(RunPod) |
| DeepSeek V4.1 Flash,2x B200,vLLM fp4,32 个并发会话 | 117,225 输入 + 683 输出 tok/s,96% 已缓存,每用户 232 tok/s | InferenceX,2026-10-03 | $3.70(InferenceX 零售),$6.79(RunPod),$6.89(Lambda) |
| Qwen3.8 27B,1x RTX 3090,vLLM W4A16,64 并发 | 128 token 输入 / 512 输出时 942 输出 tok/s,每用户约 15 tok/s | HyperQwen 基准测试 | $0.50(RunPod),或自有显卡约 $0.05 电费(250 W,按 EIA 2026 年 7 月美国居民电价) |
DeepSeek V4.1 Flash 拥有 552B 骨干参数,因此需要多 GPU 节点。Qwen3.8 27B 是稠密模型,4 位量化下可容纳于单张 24 GB 显卡。
吞吐量按 InferenceX 的报告方式为每 GPU 计,因此本文中每项成本均为每 GPU 小时。每用户速度仅计算响应生成时间,而这些智能体会话大部分时间花在预填充上,因此不能相乘得出总量。3090 的数据来自 HyperQwen 大幅修补的 vLLM 构建,请将其视为最佳情况。
我们采用了其包含预填充的端到端数据,而非其 1,035 tok/s 的仅解码标题数据。HyperQwen 基准测试使用 128 token 提示,而我们的聊天提示要长得多,因此针对我们的聊天组合,我们根据其测得的预填充和解码速率估算出每秒 565 个输出 token。
自托管何时划算?
对于每种配置,我们取基准测试测得的一小时 token 量,将其拆分为未缓存输入、缓存输入和输出,并按该模型每个 ZDR 端点为此组合定价,然后用租金除以结果。API 价格来自 2026 年 10 月 8 日:
| 配置 | 每 GPU 小时租金 | 同一小时的 API 成本,最便宜 ZDR / 中位 ZDR | 相对最便宜 ZDR 的盈亏平衡负载 | 相对中位 ZDR 的盈亏平衡负载 |
|---|---|---|---|---|
| DeepSeek V4.1 Flash,4x H200 | $2.90 | $1.70 / $3.54 | 从不 | 82% |
| DeepSeek V4.1 Flash,4x H200 | $4.59 | $1.70 / $3.54 | 从不 | 从不 |
| DeepSeek V4.1 Flash,2x B200 | $3.70 | $4.87 / $9.95 | 76% | 37% |
| DeepSeek V4.1 Flash,2 块 B200 | $6.79 | $4.87 / $9.95 | 从不 | 68% |
| Qwen3.8 27B,1 块 RTX 3090,短提示词 | $0.50 | $5.89 / $8.35 | 8% | 6% |
| Qwen3.8 27B,1 块 RTX 3090,我们的聊天混合负载(估算) | $0.50 | $4.33 / $6.14 | 12% | 8% |
| Qwen3.8 27B,自有 RTX 3090,仅电费 | $0.05 | $5.89 / $8.35 | 1% | 1% |
“从不”意味着即使 100% 负载,租用成本也高于 API 成本。价格变动很快。10 月 19 日,Qwen3.8 27B 的一个新 ZDR 端点每百万输出 token 收费 $0.50,这使短提示词的盈亏平衡点降至约 29%。

从你实际拥有的负载出发。只在工作时间到达的流量,即一周 168 小时中的 40 小时,最多让 GPU 忙碌 24% 的时间。按 10 月 8 日的价格,这排除了所有 DeepSeek 行,只剩下 3090。对照 10 月 19 日的端点,3090 需要约 29%,所以购买前请核对当前价格。全天候运行的批处理流水线可以达到 70%,这使两个 B200 行都进入相对于 ZDR 中位价格的范围内,但两者都无法低于最低价。
按月计算,租用的 3090 成本为 $365,在我们聊天混合负载下约 1.7 亿输出 token 后即可回本。双 B200 节点按零售租金每月成本 $5,402,必须服务 27 亿输出 token 才能胜过最便宜的 ZDR 端点。
小模型胜出,是因为其 API 价格相对于所需硬件而言较高。提供商对 Qwen3.8 27B 每百万输出 token 收费 $1.49 至 $5.25,而每小时 $0.50 的显卡每小时可产出约 340 万个输出 token。DeepSeek V4.1 Flash 则相反。24 个 ZDR 端点争夺其流量,最便宜的每百万输出 token 收费 $0.18。
3090 的低成本伴随着速度上的取舍。它通过同时服务 64 个请求达到该吞吐量,每个请求约 15 token/秒。这对聊天界面来说很慢,对在给出答案前要写数千个隐藏 token 的推理模型来说更慢。在 Qwen3.8 27B 的 18 个 API 端点中,在我们拉取前 30 分钟内,中位速度为 45 token/秒,最快为 474。
为什么公开的自托管成本看起来这么低?
如果你看到自托管报价约为每百万 token 一美分,token 构成通常是原因。InferenceX 按超大规模厂商定价,将 DeepSeek V4.1 Flash 在 H200 上的成本列为每百万 token $0.012。该数字是按每百万总 token 计,在其代理工作负载中,99% 的 token 是输入,其中 95% 由前缀缓存提供。通过 API,该模型的缓存输入成本为每百万 $0.0007 至 $0.20,所以这些 token 无论哪种方式都很便宜。
按输出 token 计价,同一块 H200 在 $2.90 零售租金下,在计入任何输入之前,成本为每百万 $3.49。最便宜的 ZDR 端点收费 $0.18。
你需要为了隐私而自托管吗?
隐私是自托管的另一个常见原因,而你可以通过 API 获得其中大部分。在请求上设置 provider.zdr 会将其限制在提供商不存储你的提示词或补全内容的端点。如果你的 ZDR 设置还允许 Safety Retention 端点,这些端点可能会保留提示词和响应以检测滥用,因此仅当你完全不需要保留时才选择 ZDR。具有隐式缓存的提供商还可能短时间保留派生的 KV 缓存数据,正如我们的隐式缓存说明所述。你还可以强制 ZDR,范围可以是整个账户、按模型组,或在覆盖特定 API 密钥的护栏中。在 Business 和 Enterprise 计划中,发送到 eu.openrouter.ai 或 us.openrouter.ai 的请求仅在该区域的端点上运行,且它们会失败而不是离开该区域。
这个脚本对两者都做了尝试,其中包括两个我们预期会失败的请求:
"""The privacy paths: ZDR per request, a ZDR conflict, and EU in-region routing."""
import os
import requests
KEY = {"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"}
MSG = [{"role": "user", "content": "Reply with the word ok."}]
def ask(base, model, provider=None):
body = {"model": model, "messages": MSG, "max_tokens": 400, "provider": provider or {}}
r = requests.post(f"{base}/api/v1/chat/completions", json=body, headers=KEY, timeout=120)
data = r.json()
if r.status_code == 200:
return f"{r.status_code} served by {data['provider']}"
return f"{r.status_code} {data['error']['message']}"
GLOBAL, EU = "https://openrouter.ai", "https://eu.openrouter.ai"
print("1. ZDR on, any provider: ", ask(GLOBAL, "deepseek/deepseek-v4.1-flash", {"zdr": True}))
print("2. ZDR on, only DeepSeek API:", ask(GLOBAL, "deepseek/deepseek-v4.1-flash", {"zdr": True, "only": ["deepseek"]}))
print("3. EU domain, DeepSeek: ", ask(EU, "deepseek/deepseek-v4.1-flash"))
print("4. EU domain, GLM 5.3 + ZDR: ", ask(EU, "z-ai/glm-5.3", {"zdr": True}))
eu_models = requests.get(f"{GLOBAL}/api/v1/models", params={"region": "eu"}, timeout=60).json()["data"]
print(f"5. models eligible for EU in-region routing: {len(eu_models)}")输出记录于 2026 年 10 月 8 日:
1. ZDR on, any provider: 200 served by Decart
2. ZDR on, only DeepSeek API: 404 No endpoints found matching your data policy (Zero data retention). Configure: https://openrouter.ai/settings/privacy
3. EU domain, DeepSeek: 404 No endpoints found supporting your data region.
4. EU domain, GLM 5.3 + ZDR: 200 served by Inceptron
5. models eligible for EU in-region routing: 72两个过滤器都在我们选择提供商之前运行,因此它们会缩小候选端点的列表,而不是在事后重新路由。开启 zdr 后,DeepSeek 自己的 API 会被排除,因为它会保留数据。仅用 将请求固定到该提供商,就完全没有端点可用,这会返回第一个 404。EU 域只保留我们在欧洲接入的端点。DeepSeek V4.1 Flash 没有任何 EU 端点,因此第三个请求失败了,而不是悄悄转到美国。要使用 EU 路由,请从 GET /api/v1/models?region=eu 中选择带有 EU 端点的模型,该接口列出了 72 个模型,包括 GLM 5.3。
ZDR 有一个限制。你的提示词仍然会在提供商的 GPU 上处理,因此它并不能让你控制硬件。如果你的策略要求模型在你控制的部署上运行,Private Endpoints(Enterprise 计划)会将你自己的专用或微调部署添加到目录模型提供商的列表中。它必须托管在我们支持 BYOK 的提供商上,你的团队用相同的 slug 调用它,并且如果你列出公共端点,它们仍可作为回退使用。如果数据绝不能离开你运营的硬件,请自行托管,并根据上面的盈亏平衡表来确定硬件规模。我们的 ZDR 说明和数据驻留指南更详细地比较了这些选项。
可以同时自行托管并使用 API 吗?
可以,而且对大多数团队来说,盈亏平衡表指向的就是这种设置。GPU 只有在高负载下才划算,因此请为你流量的稳定基础部分配置自己的 GPU,让它保持忙碌,并将峰值发送到 API,在那里你只需为实际使用的部分付费。
这之所以可行,是因为 vLLM 和 SGLang 暴露的 OpenAI 兼容聊天 API 与我们相同。客户端只需更改基础 URL、密钥和模型名称,就能在它们之间切换。在连接错误时回退到 API,或在你的服务器队列已满而返回 429 或 503 时回退。在 API 侧设置 provider.zdr,以便溢出流量保持零数据保留。如果你的策略要求提示词留在你控制的硬件上,请不要溢出到 API。
这种设置可能出两个问题。如果你的本地副本以与 API 端点不同的精度运行,相同的提示词可能会得到不同的答案,因此请使用 provider routing 将 API 侧固定到匹配的量化。而一个在对话中途切换后端的对话会丢失其提示词缓存,因此一旦对话开始,就让每个对话保持在同一边。
常见问题
自行托管 LLM 值得吗?
仅从成本来看,只有当你能让 GPU 保持忙碌时才值得。在我们的数据中,Qwen3.8 27B 在租用的 RTX 3090 上达到 6% 到 12% 的负载即可实现盈亏平衡。DeepSeek V4.1 Flash 在租用的数据中心 GPU 上需要 37% 或更高的负载,而相对于最便宜的零数据保留端点,它往往永远无法实现盈亏平衡。隐私和控制可以在任何负载下证明自行托管是合理的。
哪个 LLM 最适合自行托管?
能放在单块 GPU 上的模型是最合适的,因为它们避免了多 GPU 服务器,而且它们的 API 价格留下了最大的节省空间。例如,Qwen3.8 27B 以 4 位精度在一块 24 GB 显卡上运行。我们的排名和开放权重与封闭权重对比展示了开发者最常使用哪些模型。
最便宜的自托管 LLM 选项是什么?
你已拥有的一块 GPU。一块限制在 250 W 的 RTX 3090,按 2026 年 7 月美国居民平均电价计算,每小时电费约 0.05 美元,因此只要它大约有 1% 的时间处于忙碌状态,就比 Qwen3.8 27B 最便宜的零数据保留端点更划算。代价是每个用户的响应更慢,而且你需要自己花时间维护。
我可以托管自己的模型,同时仍通过 OpenRouter 使用它吗?
可以,在 Enterprise 套餐上。Private Endpoints 会把目录模型的 slug 路由到你自己的专用或微调部署,该部署托管在我们为 BYOK 支持的提供商处。只有你批准的用户和组织才能看到或调用它。
后续步骤
-
零数据保留:按请求、按模型组、在护栏中或账户范围内强制执行 ZDR。
-
区域内路由:通过 EU 和 US 域发送请求,并用护栏强制指定区域。
-
DeepSeek V4.1 Flash 和 Qwen3.8 27B 的模型页面列出了各提供商当前的价格和吞吐量。
来源:OpenRouter Announcements · openrouter.ai