机器学习推理的延迟与成本怎么一起测:固定输入、批次和设备
机器学习推理的延迟与成本怎么一起测固定输入、批次和设备推理服务的“快”和“省”不能靠两个孤立的平均值判断。输入长度、Batch 组成、设备型号和并发到达方式不一致延迟与显存占用就没有可比性。1. 固定一次测量的输入先冻结模型与权重版本、精度、输入长度分布、Batch 策略和预热次数。延迟记录 TTFT、单请求完成时间和排队时间成本记录占用的设备时长、模型调用量或实际账单口径。无法采集的项直接标为空不用经验值补齐。2. 把调度器当成待验证对象动态组 Batch 会提高部分负载下的设备利用率也可能让短请求被长请求拖住。测试时固定请求集分别运行串行、固定 Batch 与 Token 预算调度每轮只改一种策略并检查输出是否一致。如果触发显存不足应保存输入长度摘要和调度决策缩小 Token 预算后重跑。下面的日志与参数是构造输入真正的边界必须由目标设备上的测试得到。3. Token 预算调度器utilization.gpu [%], memory.used [MiB] 12 %, 18452 MiB 18 %, 19200 MiB 98 %, 79820 MiB 99 %, 79850 MiB -- 触发 OOM 擦边抛错排队上下文被清空 5 %, 8192 MiBimport asyncio import time from typing import List, Dict, Any class TokenBudgetController: 基于 Token 预算与 KV Cache 预测的动态 Batch 调度器。 通过限制单 Batch 的最大 Token 总量避免显存溢出与长短请求相互阻塞。 def __init__(self, max_token_budget: int 8192, max_wait_ms: float 20.0): self.max_token_budget max_token_budget self.max_wait_ms max_wait_ms self.pending_queue: asyncio.Queue asyncio.Queue() self._is_running False async def submit_request(self, req_id: str, prompt_tokens: int, max_new_tokens: int) - Dict[str, Any]: future asyncio.get_event_loop().create_future() req_item { id: req_id, prompt_tokens: prompt_tokens, max_new_tokens: max_new_tokens, est_peak_tokens: prompt_tokens max_new_tokens, future: future, ts: time.time() } await self.pending_queue.put(req_item) return await future async def schedule_loop(self): self._is_running True while self._is_running: batch: List[Dict[str, Any]] [] current_budget 0 start_time time.time() while True: try: # 计算剩余等待超时时间 elapsed_ms (time.time() - start_time) * 1000 remaining_timeout max(0.0, (self.max_wait_ms - elapsed_ms) / 1000.0) if self.pending_queue.empty() and batch: break item await asyncio.wait_for(self.pending_queue.get(), timeoutremaining_timeout) # 检查预算约束 if current_budget item[est_peak_tokens] self.max_token_budget: batch.append(item) current_budget item[est_peak_tokens] else: # 预算超限放回队列头部待下次调度 await self.pending_queue.put(item) break except asyncio.TimeoutError: # 到达组包窗口超时阈值强制截断出队 break except Exception as err: # 捕获调度异常避免主循环异常退出 print(f[Scheduler Error] 调度过程发生未预期异常: {str(err)}) break if batch: asyncio.create_task(self._process_batch(batch)) else: await asyncio.sleep(0.005) async def _process_batch(self, batch: List[Dict[str, Any]]): 模拟 GPU 推理执行引擎 try: # 模拟推理延时与 Batch 内总 Token 数呈非线性关系 batch_tokens sum(x[est_peak_tokens] for x in batch) simulated_latency 0.05 (batch_tokens / 10000.0) * 0.1 await asyncio.sleep(simulated_latency) for item in batch: if not item[future].done(): item[future].set_result({ status: SUCCESS, latency_ms: (time.time() - item[ts]) * 1000, processed_tokens: item[est_peak_tokens] }) except Exception as e: for item in batch: if not item[future].done(): item[future].set_exception(e)4. 复核清单请求集是否固定模型、设备、预热与到达方式。TTFT、排队、完成时间和 Token 是否分别记录。调度方案是否使用相同输入并校验输出一致。OOM 或超时是否保留请求尺寸与调度决策。总结“延迟和成本怎么一起看”应以清晰的条件和脚本复核。先记录边界再解释结果。

相关新闻

游戏串流服务器搭建终极指南:Sunshine 免费方案让 PC 游戏无处不在

游戏串流服务器搭建终极指南:Sunshine 免费方案让 PC 游戏无处不在

游戏串流服务器搭建终极指南:Sunshine 免费方案让 PC 游戏无处不在 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 每个月为云游戏订阅掏钱,却还是被游戏库…

2026/10/24 1:49:56 阅读更多 →
动画别按帧加位移:用时间进度并尊重减少动效设置

动画别按帧加位移:用时间进度并尊重减少动效设置

动画别按帧加位移:用时间进度并尊重减少动效设置 requestAnimationFrame 每帧增加固定像素,会让速度随刷新率改变。用时间戳计算进度,并为减少动效偏好准备不依赖大位移的反馈。 用时间计算进度 浏览器会把时间戳传给 rAF。使用开始时间和总时…

2026/11/4 3:05:43 阅读更多 →
开源大模型部署实战:从Muse Glimmer 30B看Apache 2.0协议与本地化部署

开源大模型部署实战:从Muse Glimmer 30B看Apache 2.0协议与本地化部署

在实际 AI 模型开发和应用中,开源模型的选择与部署是决定项目成败的关键环节。一个模型的开源协议、参数量、架构设计以及部署成本,直接关系到其能否在团队内部快速验证、能否集成到现有产品线、以及未来是否会面临法律或技术上的限制。近期,…

2026/11/5 20:07:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/5 12:28:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/5 12:28:01 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/5 12:28:02 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/5 19:38:59 阅读更多 →

日新闻

周新闻

月新闻