← 返回
IT技术

视觉语言模型在生产规模下的服务成本

✍️ zhirenhun 📅 2026/9/27 👁 190 阅读 ⏱ 29 分钟
视觉语言模型在生产规模下的服务成本

在对话请求里附上一张照片,模型还没写出回答的第一个字,这次调用的 token 数量就可能暴涨上千。这个涨幅不只是计费问题——在语言模型开始琢磨你的问题之前,视觉编码器就先干了一轮实打实的活:把图像切成图块,再把每个图块转换成一个 token。本文将带你弄清这笔开销究竟从何而来、如何针对自己的业务负载算出具体数字,以及在它变成账单上的“意外支出”之前该如何应对。

核心要点

几个术语的简明解释

为什么图片的成本比看上去的要高

图片

一句“总结一下”的文字提示,只有寥寥几个token。图片可就远不止了。

LLaVA、Qwen-VL以及NVIDIA的Nemotron Nano VL这类视觉语言模型(VLM),基本原理都如出一辙:视觉编码器先把图片切分成网格状的patch,每个patch再转换成一个或多个token,连同文字提示一起送入语言模型。具体的token数量取决于所用模型和图片尺寸,可千万别凭感觉去猜。

图片

包括 DigitalOcean 在内,大多数推理 API 都会在每次响应中附带一个用量对象。在 DigitalOcean 的 Chat Completions API 上,这个对象长这样:{“prompt_tokens”: 43, “completion_tokens”: 8, “total_tokens”: 51},具体可参阅 Chat Completions API 文档。这些数字精确记录了本次调用消耗的输入和输出 token 数量,而这正是你实际计费的依据。无论用哪个 SDK,你都可以直接从响应对象里读到这些值;本文后面“调用托管视觉模型”一节会给出具体的代码行。

这对成本有三方面的直接影响:

如果你只用不含图片的简短提示词做测试,上述成本完全不会显现。可一旦真实用户开始上传照片、截图和 PDF,问题很快就会浮出水面。

真正决定账单的是什么

以下四个因素决定了每次请求的费用:

决定账单的四个因素

算一笔实际请求的账

假设你正在运行一个 12B 的视觉语言模型,发送一张图片和一段简短的提示词,得到一个 200 token 的回答。图片本身要消耗多少 token?这因模型而异,也不该单凭像素尺寸去估计——与其凭空猜测,不如先做一次测试调用,再从 API 响应的 usage 字段里取出真实数字。在本例中,假设那次测试调用显示图片耗用 900 token,提示词耗用 50 token:这些数字只是为了演示计算过程,并不代表任何具体模型的真实情况。

def calculate_request_cost(image_tokens, prompt_tokens, output_tokens,
                            input_price_per_million, output_price_per_million):
    input_tokens = image_tokens + prompt_tokens
    input_cost = (input_tokens / 1_000_000) * input_price_per_million
    output_cost = (output_tokens / 1_000_000) * output_price_per_million
    return input_cost + output_cost, input_tokens

cost, total_input = calculate_request_cost(
    image_tokens=900,     # from your API response's usage field, not estimated
    prompt_tokens=50,
    output_tokens=200,
    input_price_per_million=0.20,   # DO-hosted Nemotron Nano 12B VL input rate
    output_price_per_million=0.60,  # same model, output rate
)

print("total input tokens:", total_input)
print("cost per request: $%.6f" % cost)
print("cost per 100,000 requests: $%.2f" % (cost * 100_000))

$0.20 / $0.60 的每百万 token 费率,是 DigitalOcean 为 NVIDIA Nemotron Nano 12B VL 官方公布的 serverless 价格,来自Inference 定价页面(最后核对于 2026 年 9 月)。运行脚本得到的结果如下:

单看每次请求,这个价格确实便宜。可一旦乘上每月数百万次的请求量,再加上更大的图片、多图提示,或者换成更大的模型,它就没那么便宜了。确切的放大倍数取决于你的真实数据——这也正是要从 API 响应中读取这些数字、而不是凭空假设的原因。

这个练习的意义不在算出的具体数字,而在于养成习惯:上线之前就估算好单次请求的成本,而不是等账单寄到再算。

真正把模型跑起来的三种方式,以及各自的成本

VLM 并没有一个统一的“成本”——花多少钱取决于你怎么部署。DigitalOcean 的Inference 定价文档给出了三条路径,分别适合产品的不同阶段:

Serverless 推理。按 token 计费,没有闲置 GPU 的开销。DigitalOcean 托管着 NVIDIA Nemotron Nano 12B VL 这类模型,输入每百万 token $0.20、输出每百万 token $0.60。对大多数团队来说,这是最合适的起点:无需容量规划,没有白白烧掉的 GPU 时长,处理多少、付多少。等调用量大到、也稳定到专用 GPU 摊到每个 token 上更划算时,再考虑切换。

专用推理。按 GPU 小时计费,而不是按 token,机器开着多久,GPU 就归你用多久。在 DigitalOcean 上,价格从 AMD MI300X 的每小时 $2.59 到 NVIDIA B300 的每小时 $10.39 不等。单卡 MI300X 和 H100 的费率与 DigitalOcean 同规格硬件的按需GPU Droplets 定价一致,自 2026 年 8 月 1 日起生效。多卡节点单独定价,并不总按单卡费率线性叠加:一台 8×H100 节点总价为每小时 $30.32,折合每张卡约 $3.79,反而低于单卡 $4.41/小时的费率。当请求量足够大、也足够稳定,GPU 小时成本除以实际吞吐量后低于 serverless 的按 token 费率时,选它就划算了。

在 GPU Droplet 上自行托管。你可以在 GPU Droplet 上运行自己的推理服务器(vLLM 是常见选择),底层算力按秒计费,GPU 定价与专用推理方案一致。批处理、量化、模型选择都由你全权掌控,代价则是需要自己维护整套服务栈。DigitalOcean 的推理优化镜像已预装 vLLM,只需一条命令即可启动模型服务:

vllm serve Qwen/Qwen3-VL-8B-Instruct --port 8000

这三种方案的取舍逻辑很简单:Serverless 用控制权换来零闲置成本,专用实例和自托管则用固定的按小时计费换来完全的控制权,而两者的成本交叉点取决于你的实际请求量,不是拍脑袋猜出来的。

在 DigitalOcean 上算一笔真实的成本账

数字放到规模化场景里,就和单次请求时大不一样了。下面用一个具体案例来算笔账,价格取自 DigitalOcean 官方公布的 Inference 定价页和GPU Droplets 定价页(两处价格均核实于 2026 年 9 月)。token 数量沿用上文那组示例数据(每张图 900 个图像 token、50 个提示词 token、200 个输出 token,每次请求共 950 个输入 token):正式做预算前,记得换成你自己实测的数据。

场景设定:一个视觉 QA 功能,每月 50 万次请求。

方案一:用 Serverless 推理来跑,选用 DigitalOcean 托管的 Nemotron Nano 12B VL,输入 token 每百万 $0.20、输出 token 每百万 $0.60:

方案二:换成专用 H100 来跑,按 DigitalOcean 的按需价 $4.41/小时计费,而且不管 GPU 忙不忙,都照常收费:

请求量低时,Serverless 更便宜;当每月请求量超过约 1,020 万次后,满负荷运转的专用 H100 反而成本更低。

想知道这块 GPU 的时间究竟用在了哪里,你得先弄清它的实际吞吐量:在你真实的批处理配置下,它每秒能处理多少个 token。这个数字不能靠假设,而要对你自己的模型和推理服务配置做基准测试才能得出,因为它取决于模型规模、批大小(batch size)和序列长度。没有实测验证过的吞吐量,你就说不清在每月 50 万次请求的负载下,$3,175.20 的月度成本里到底有多大比例变成了 GPU 的闲置时间——只能确定,其中确实有一部分是。

在这个请求量级下,Serverless 显然是更合理的起点:月成本更低,而且既不用规划容量,也不会有资源闲置。随着请求量增长,两种方案的成本会逐渐趋近。按同样的单次请求费用计算,月请求量一旦跨过约 1020 万次(即用 $3,175.20 除以上文 $0.00031 的单次请求成本),专用 H100 就会比 Serverless 更划算——前提是 GPU 全程保持满负荷运行。实际操作中,建议先对自己的吞吐量和利用率做基准测试,再做决定。如果达不到满负荷,真实的盈亏平衡点会高于 1020 万次。

这是大多数团队真正需要面对的决策,而不是假想中的选择题:估算自己的月请求量,实测真实的吞吐量,然后根据产品今天的实际情况来选择,而不是寄希望于一年后它可能达到的规模。从 Serverless 起步,等流量和成本的历史数据足以支撑时再切换到专用 GPU,这样做完全没问题,而且往往更明智。

调用托管视觉模型

下面借助 DigitalOcean 的 OpenAI 兼容端点,看看一次真实的 Serverless 调用是什么样子:

import base64
from openai import OpenAI

client = OpenAI(
    base_url="https://inference.do-ai.run/v1",
    api_key="YOUR_DO_API_KEY",
)

with open("screenshot.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
    model="nvidia-nemotron-nano-12b-vl",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What error is shown in this screenshot?"},
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/png;base64,{image_b64}"},
                },
            ],
        }
    ],
)

usage = response.usage
print("input tokens:", usage.prompt_tokens)
print("output tokens:", usage.completion_tokens)

每次调用时读取并记录 response.usage,是成本控制中最有用的一个习惯。无法度量,就无法管理——而且一旦真实用户的图片开始流入,单次请求消耗的 token 数波动之大,往往超出大多数团队的预期。

降成本,不降质量

搞清楚成本从何而来之后,下面几处改动能带来立竿见影的效果:

结语

多模态推理之所以比文本推理更贵,是因为在模型真正开始干活之前,一张图片就已经转化成数百甚至数千个额外的 token。在本文前文的示例中,一张图片加上一段简短提示词共计 950 个输入 token,单次请求成本为 $0.00031。这个数字单看并不大,但按每月 50 万次请求计算,无服务器推理的费用将达到 $155;而同样的负载放到一台全天候运行的专用 H100 上,成本则是 $3,175.20,且与实际请求量多少无关。

这笔开销其实是可以预测的——只要你去实测。决定账单高低的有四个变量:模型大小、图片的分辨率与数量、输出长度,以及批处理效率。这四项没有哪项是玄学:只要从 API 响应的 usage 字段里取出真实数据,而不是凭感觉估算,就完全不必靠猜。Serverless 与专用方案的取舍也遵循同样的逻辑:请求量不大或中等时,Serverless 更划算;只有当每月请求量突破约 1020 万、且假设 GPU 满载运转的前提下,两条成本曲线才会交叉。低于这条线,一台专用 GPU 花掉的钱,大半都在为闲置时间买单。

被坑惨的,往往是那些上线前从没算过这笔账的团队。而毫发无损的团队,会把 token 统计当作开发过程中的一环:提前算清单次请求的成本,并随着实际请求量的变化重新权衡 Serverless 与专用方案的取舍,而不是等到账单寄来才临时补救。

参考资料

以上价格均核验于 2026 年 9 月,可能随时调整。编制预算前,请查看链接页面获取最新价格。文中示例所用的 token 数量是为演示计算过程而选取的示意数字,并非来自任何具体模型的实测;做预算之前,请从你自己 API 响应的 usage 字段中提取真实数据。

——

广告 广告
🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。