推理延迟:解决PyTorch模型Inference阶段的RuntimeError ⏳⚡ 摘要 大家好,我是默语,擅长全栈开发、运维和人工智能技术。 在PyTorch模型的推理阶段,RuntimeError是常见的问题之一。这类错误通常会导致模型推理延迟,严重影响模型的实时性能和用户体验。 然而,在模型推理阶段,我们常常会遇到各种RuntimeError,这些错误会导致推理过程延迟甚至失败。本文将详细分析这些错误的常见原因,并提供一系列有效的解决方法。 这类错误在模型推理阶段尤为常见,因为推理过程对时间要求较高,任何小的错误都可能导致显著的延迟。 model = MyModel().to(device) data = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9]).to(device) # 推理过程 output
1.3 多对多关系 双向的1对多既是多对多关系 2 延迟加载 延迟查询是一对一和一对多查询的延续。 在默认的一对一和一对多中,一条SQL就能够查询到所有数据,但是,有的数据有时候一时半会用不上,例如查询员工,捎带获取员工的部门数据,但是部门数据使用的频率很低,这种时候可以使用延迟查询,首先获取到所有的员工数据 当需要使用数据的时候才去加载既是延迟加载 2.1开启延迟加载 全局配置文件中配置 ? <?xml version="1.0" encoding="UTF-8" ?> <! -- 开启延迟加载 --> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading -- 需要<em>延迟</em>加载的数据 --> <select id="queryDeptById" parameterType="int" resultType="department"> select *
3、推理服务层 :模型服务的“前线阵地”推理平台是直接承接业务请求、完成模型推理计算的节点,具备以下特点:分布广泛,通常部署在全国多个地域,贴近用户或边缘节点;每次计算轻量,但请求量巨大、波动频繁,对响应延迟敏感 4、训练算力层:模型训练的强力引擎相比推理平台,训练任务通常对资源有更高要求,训练平台需要具备:大规模 GPU 资源,通常集中部署在少数几个高性能算力集群;高带宽、低延迟的内网传输能力,以支撑海量训练数据读写 以一家专注于文生图的AI初创企业为例,在产品上线前夕突遇训练节点调度不稳定的问题,溯源发现是网络在多云资源池间连接延迟过高。 02、一张融合又隔离的网络训练和推理虽然共享底层架构,但对带宽、延迟、合规等网络指标要求迥异:■ 训练任务:带宽大、持续时间长、容忍延迟,重数据一致性与吞吐;■ 推理服务:请求频繁、对响应延迟敏感,要求链路尽可能短 尤其在推理服务爆发式增长后,企业面临以下挑战:■ 难以监控整条链路(从端侧 → 中台 → 推理节点)的请求响应时延;■ 当推理响应变慢时,无法快速定位是网络问题、调度延迟,还是推理节点负载过高;■ 大量请求突发时
在深度学习落地过程中,有一个常见的误区:一旦推理速度不达标,大家的第一反应往往是拿着模型开到,比如:做剪枝、搞蒸馏、甚至牺牲精度换小模型。 以下是 8 个经过实战验证的低延迟优化策略,专治各种“莫名其妙的慢”。 5、开启全图优化并验证 这一步很简单但容易被忽略。开启 ORT_ENABLE_ALL,让 ORT 帮你做算子融合、常量折叠和内存规划。 statistics as stats import numpy as np, onnxruntime as ort def bench(sess, x, iters=100, warmup=5) providers=providers) x = np.random.rand(1, 3, 224, 224).astype(np.float32) print(bench(sess, x)) 总结 做低延迟推理没有什么黑科技
没人愿意在关键时刻遇到延迟或断线。无论是保存重要的工作文档还是玩在线游戏,延迟都会降低工作效率。缓慢的连接会导致游戏延迟量令人无法接受。这可能会破坏流媒体服务或视频会议,并通常会给每个人带来烦恼。 了解延迟区分导致连接缓慢的三个可能原因非常重要。这些原因通常被视为可以互换 – 吞吐量、带宽和延迟。吞吐量是指在给定时间段内可以通过连接传输的数据量。它由连接的带宽和延迟决定。 解决延迟问题延迟是指数据从客户端传输到服务器并通过可用连接返回所需的时间。高延迟和/或低带宽会导致吞吐量低,从而导致连接问题和延迟。 关闭占用带宽的程序如上所述,延迟和带宽密不可分。如果您使用的连接带宽接近甚至超过最大带宽,则延迟会增加。传输如此大量的数据需要更长的时间。尝试减少任何给定时刻使用的带宽量可能会对延迟产生积极影响。 如果您可以将数据托管在更靠近用户或检索点的位置,则可以大幅减少延迟。5.添加CDN内容分发网络 (CDN) 可以帮助您在多个位置托管数据副本。
micro-batch 在 GPU 上效果明显 单条请求跑推理简单,但硬件利用率往往上不去。打包成 4-8 个请求一起跑,能在保持低延迟的同时提升吞吐。 不过如果 SLA 本身就很紧(p50 要求 5ms 以内),micro-batch 带来的收益可能不如下面要说的 CUDA Graph。 CUDA Graph 能把整个推理过程录制下来,replay 时几乎没有 CPU 开销。 这里可以理解成在 GPU driver 层面把推理编译成一个可重放的宏。 后面再加上 CUDA Graph、micro-batch 和固定 shape,能把延迟压到很低,基本上拿来就可以用了 几个容易踩的坑 延迟指标一定要看 p50/p90/p95,别只盯平均值。
随着模型规模的不断扩大(从数亿参数到数千亿甚至万亿参数),即使在最先进的硬件上,推理延迟也常常成为用户体验和系统吞吐量的主要瓶颈。 1.1 推理时延优化的重要性 大语言模型的推理延迟直接影响着: 用户体验:实时应用场景(如聊天机器人、客服系统)要求响应时间通常在几百毫秒以内 系统吞吐量:延迟优化可以显著提升单位时间内处理的请求数量 成本效益比:相同硬件条件下,更低的延迟意味着更高的资源利用率 扩展能力:优化的推理性能使得模型能够在更多样化的硬件平台上部署 在当前的大模型生态中,即使是微小的延迟优化(例如降低10%的推理时间)也能带来显著的商业价值 1.1.1 延迟(Latency) 延迟是指从输入请求到获得输出结果的总时间。 对于大语言模型,我们通常关注: 端到端延迟:完整推理过程的总时间,包括数据预处理、模型计算和后处理 推理延迟:仅模型计算部分的时间 Token生成延迟:生成单个Token所需的时间(在自回归生成中尤为重要
(3)通过RocketMQ的延迟消息解决不停扫描的问题针对这种需求场景,可以使用RocketMQ的延迟消息来解决。 9.RocketMQ的延迟消息的代码实现(1)生产者发送延迟消息的代码示例(2)消费者消费延迟消息的代码示例(1)生产者发送延迟消息的代码示例public class ScheduledMessageProducer }上述代码中,发送延迟消息的核心就是设置消息的delayTimeLevel,也就是延迟级别。 RocketMQ默认支持如下的延迟级别:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h上述代码中置的延迟级别为3,意思就是延迟10s 因此如果是订单延迟扫描的场景,可以设置延迟级别为16,对应30分钟后才能被获取到。
作者: 洪志国 超时问题 客户反馈从pod中访问服务时,总是有些请求的响应时延会达到5秒。正常的响应只需要毫秒级别的时延。 DNS 5秒延时 在pod中(通过nsenter -n tcpdump)抓包,发现是有的DNS请求没有收到响应,超时5秒后,再次发送DNS请求才成功收到响应。 为什么是5秒? man resolv.conf可以看到glibc的resolver的缺省超时时间是5s。 丢包原因 经过搜索发现这是一个普遍问题。 根本原因是内核conntrack模块的bug。 search default.svc.cluster.local svc.cluster.local cluster.local ec2.internal options ndots:5 不过还是有不方便的地方: 每个工作负载的yaml都要做修改,比较麻烦 对于通过helm创建的工作负载,需要修改helm charts 方法5)对集群使用者最省事,照常提交工作负载即可。
HT for Web的HTML5树组件有延迟加载的功能,这个功能对于那些需要从服务器读取具有层级依赖关系数据时非常有用,需要获取数据的时候再向服务器发起请求,这样可减轻服务器压力,同时也减少了浏览器的等待时间 http://www.hightopo.com/guide/readme.html 进入正题,今天用来做演示的Demo是,客户端请求服务器读取系统文件目录结构,通过HT for Web的HTML5树组件显示系统文件目录结构 整体的思路是这样子的,当然这离我们要实现的树组件的延迟加载技术还有些差距,那么,HT for Web的HTML5树组件的延迟加载技术是怎么实现的呢?不要着急,马上开始探讨。 createData(file, parent); n.a('loaded', true); dm.add(n); }); } 如此,HT for Web的HTML5树组件延迟加载技术就设计完成了 ,我在服务器的控制台打印出请求路径,看看这个延迟加载是不是真的,如下图: ?
Kubernetes 的关键特性如何自然地满足 AI 推理的需求,以及它们如何使推理工作负载受益。 译自 5 Reasons To Use Kubernetes for AI Inference,作者 Zulyar Ilakhunov。 Kubernetes 的许多关键特性自然适合 AI 推理的需求,无论是 AI 驱动的 微服务 还是 ML 模型,几乎像是专门为这个目的而设计的。让我们来看看这些特性以及它们如何使推理工作负载受益。 以下是 K8s 可移植性的主要优势: 在不同环境中一致的 ML 模型部署 更轻松地迁移和更新 AI 工作负载 选择云提供商或本地基础设施的灵活性 5. 这有助于维护运行 AI 推理的集群的整体健康状况和可用性。
HT for Web的HTML5树组件有延迟加载的功能,这个功能对于那些需要从服务器读取具有层级依赖关系数据时非常有用,需要获取数据的时候再向服务器发起请求,这样可减轻服务器压力,同时也减少了浏览器的等待时间 http://www.hightopo.com/guide/readme.html 进入正题,今天用来做演示的Demo是,客户端请求服务器读取系统文件目录结构,通过HT for Web的HTML5树组件显示系统文件目录结构 整体的思路是这样子的,当然这离我们要实现的树组件的延迟加载技术还有些差距,那么,HT for Web的HTML5树组件的延迟加载技术是怎么实现的呢?不要着急,马上开始探讨。 createData(file, parent); n.a('loaded', true); dm.add(n); }); } 如此,HT for Web的HTML5树组件延迟加载技术就设计完成了 ,我在服务器的控制台打印出请求路径,看看这个延迟加载是不是真的,如下图: 看吧,控制台打印的是4条记录,第一条是请求跟目录时打印的,我在浏览器中展开里三个目录,在控制台打印了其对应的目录路径。
算力资源弹性调度:结合全球虚拟网络分层管理和区域自治能力,实现算力资源的多级弹性扩缩容,支持百万级并发,推理实例启动时间缩短到5秒内。 高并发处理能力:AI算力网络通过分布式计算和资源弹性调度,支持大规模并发推理请求。例如,白山云发布的"大模型API"产品利用异构算力弹性调度技术,支持百万级并发,推理实例启动时间缩短到5秒内。 以下是未来可能的技术融合与创新方向: 边缘计算与5G/6G网络的融合 5G/6G网络的高速、低延迟特性与边缘计算的分布式架构相结合,将为实时推理系统提供更强大的网络支持: 超低延迟通信:5G/6G网络的超低延迟特性 高带宽传输:5G/6G网络的高带宽特性,可以支持更大规模的数据传输,满足实时推理系统对大数据处理的需求。例如,可以实时传输高清视频流,支持更复杂的视频分析任务。 边缘计算节点:5G/6G网络中的边缘计算节点,可以提供更强大的计算能力,支持更复杂的AI模型。例如,可以将边缘计算节点部署在5G基站附近,提供低延迟、高带宽的AI推理服务。
前言 前两篇博文分别讨论了YOLOv5检测算法的两种加速思路:采用多进程或批量检测,不过效果均收效甚微。本问将讨论使用TensorRT加速以及半精度推理/模型量化等优化策略对检测加速的实际影响。 YOLOv5最新版本可以将检测前后三个步骤(预处理、推理、非极大化抑制)分别统计时间,yolov5s.pt和yolov5s.engine的时间如下: yolov5s.pt Speed: 1.0ms 270.5ms pre-process, 3.0ms inference, 2.0ms NMS per image at shape (1, 3, 1280, 1280) 可以看到,转成TensorRT之后,推理 在转TensorRT模型过程中,有一些其它参数可供选择,比如,可以使用半精度推理和模型量化策略。 半精度推理即FP32->FP16,模型量化策略(int8)较复杂,具体原理可参考部署系列——神经网络INT8量化教程第一讲!
这个框架为本文设计的基础模型 “YingLong” 实现了最先进的性能,并揭示了一种新的尺度效应:由于非因果方法中延迟的思维链推理,更长的输出显著提高了模型精度。 Chronos:基于T5架构的编码器-解码器模型。 TimesFM:基于解码器的模型,适用于时间序列预测。 延迟链式推理(Delayed Chain-of-Thought, DCoT) 延迟链式推理:论文发现了一个新的现象,即通过延长输出序列(即增加延迟链式推理的长度),可以显著提高模型的预测精度。 这种现象被称为延迟链式推理(DCoT)。在DCoT中,未来的token(即链式推理token)可以影响过去的token,从而提供更多的上下文信息,增强模型的推理能力。 延迟链式推理(DCoT)的影响实验 实验目的:验证延迟链式推理(DCoT)对模型性能的影响。 实验方法:通过改变DCoT的长度,观察模型在GIFT-Eval基准测试中的性能变化。
目录 应用场景 消息延迟推送的实现 测试结果 ---- 应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货。 这种解决方案相较于消息的延迟推送性能较低,因为我们知道 redis 都是存储于内存中,我们遇到恶意下单或者刷单的将会给内存带来巨大压力。 消息延迟推送的实现 在 RabbitMQ 3.6.x 之前我们一般采用死信队列+TTL过期时间来实现延迟队列,我们这里不做过多介绍,可以参考之前文章来了解:TTL、死信队列 在 RabbitMQ 3.6 .x 开始,RabbitMQ 官方提供了延迟队列的插件,可以下载放置到 RabbitMQ 根目录下的 plugins 下。 延迟队列插件下载 ? 首先我们创建交换机和消息队列,application.properties 中配置与上一篇文章相同。
结合使用窗口和稀疏性预测可以为每个推理查询仅加载 2% 的闪存 FFN 层。他们还提出了静态内存预分配,最大限度减少了 DRAM 内的传输并减少了推理延迟。 与 CPU 和 GPU 中的 naive 实现相比,优化该成本模型并有选择地按需加载参数的闪存策略可以运行两倍于 DRAM 容量的模型,并将推理速度分别提升 4-5 倍和 20-25 倍。 闪存和 LLM 推理 带宽和能量限制 虽然现代 NAND 闪存提供了高带宽和低延迟,但仍达不到 DRAM 的性能水准,尤其是在内存受限的系统中。下图 2a 说明了这些差异。 研究者评估各种闪存加载策略的主要指标是延迟,延迟分为三个不同部分:从闪存加载的 I/O 成本、管理新加载数据的内存开销以及推理操作的计算成本。 延迟分析。当窗口大小为 5 ,每个 token 需要访问 2.4% 的前馈网络(FFN)神经元。
HT for Web的HTML5树组件有延迟加载的功能,这个功能对于那些需要从服务器读取具有层级依赖关系数据时非常有用,需要获取数据的时候再向服务器发起请求,这样可减轻服务器压力,同时也减少了浏览器的等待时间 进入正题,今天用来做演示的Demo是,客户端请求服务器读取系统文件目录结构,通过HT for Web的HTML5树组件显示系统文件目录结构。 整体的思路是这样子的,当然这离我们要实现的树组件的延迟加载技术还有些差距,那么,HT for Web的HTML5树组件的延迟加载技术是怎么实现的呢?不要着急,马上开始探讨。 createData(file, parent); n.a('loaded', true); dm.add(n); }); } 如此,HT for Web的HTML5树组件延迟加载技术就设计完成了 ,我在服务器的控制台打印出请求路径,看看这个延迟加载是不是真的,如下图: ?
点击这里可以查看之前的推文: OpenCV4.5.4 直接支持YOLOv5 6.1版本模型推理 OpenC4 C++部署YOLOv5 我把测试代码封装成一个工具类了,可以直接用,方便大家(生手党)直接部署调用 onnx格式模型,完成对图象预处理,模型推理,后处理返回等操作! 代码实现如下: #include <yolov5_dnn.h> void YOLOv5Detector::initConfig(std::string onnxpath, int iw, int ih roi)); float x_factor = image.cols / 640.0f; float y_factor = image.rows / 640.0f; // 推理 std::shared_ptr<YOLOv5Detector> detector(new YOLOv5Detector()); detector->initConfig("D:/python/yolov5
作者 | James Le 译者 | 陆离 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 【导读】文中为AI实践者和研究者们介绍了5种高效模型推断算法,希望这篇文章能够帮助大家更清楚地认识到 有哪些可以有效地进行推理的最先进算法呢? 1、修剪神经网络 在机器学习中,模型的修剪包括去除不重要的权值以得到更小更快的网络。 然后量化过程将表示每个连接的比特数从32减少到了5。 在ImageNet上,这个方法将AlexNet所需的存储空间减少了35倍(从240 MB减少到了6.9 MB),而不会造成精确度方面的损失。 事实上,与AlexNet相比,他们的加速模型的推理速度相对较快,而准确率则提高了4.7%。 5、训练三元量化 另外一种可以解决在资源有限的移动设备上部署大型神经网络模型的算法是训练三元量化(Trained Ternary Quantization),它可以将神经网络中的权值精确度降低到由三个部分组成的值