点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

免责声明~

任何文章不要过度深思!

万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」

不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人

怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」


本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者

  • 🔧 大厂分布式系统/数据中台实战专家

  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构

  • 🧠 AIGC应用开发先行者 | 区块链落地实践者

  • 🌍 以技术驱动创新,我们的征途是改变世界!

  • 👉 实战干货:编程严选网

1 推理引擎是啥?

从熟悉的“服务器”说起,想象你用Java写好了一个业务应用,如订单处理服务,打成一个JAR或WAR包。这包能直接运行吗?显然不能。你需要一个“东西”来运行它:

  • Java应用,这就是JVM。JVM负责解释执行你的Java字节码,管理内存,处理线程等等

  • Web应用,你可能还需一个应用服务器,如Tomcat或WebLogic。它在JVM基础,提供HTTP服务、Servlet容器、连接池等一系列能力,让你的Web代码能对外提供服务

现在我们把主角换成大模型。AI科学家们通过海量“学习资料”(数据)和复杂“学习方法”(训练算法),最终“毕业”得到一个成果——模型文件。这个模型文件,好比打包好的order-service.jar,包含庞大网络结构和数以百亿计的参数(权重),记录模型学到的所有“知识”。

这个模型文件能直接响应我们的请求,如回答“今天天气怎么样”吗?同样不能。它也需要一个“运行环境”来加载它、管理它、并高效地执行它,最终把结果(答案)输出给我们。

这专门用来运行LLM的“超级应用服务器”,就是——**推理引擎 (Inference Engine)**。

小结

把训练好的大模型比作“应用程序包(JAR/WAR)”,推理引擎就是运行这个包的“应用服务器(Tomcat/WebLogic)+ JVM”的组合体。其核心任务,就是让模型高效、稳定、经济地对外提供服务。这过程,在AI领域叫“推理(Inference)”。

2 没有推理引擎又如何?直接Python跑不行?

Q:我看到很多AI工程师直接用Python+PyTorch/TensorFlow就能加载模型跑,为啥非搞个这么复杂推理引擎?

A:好问题!这就像我们也能用main方法,直接new一个HttpServer启动一个Web服务,但这能直接上生产?你会遇到:

  • 性能极差: 一个请求就把CPU打满了,并发能力几乎为零

  • 资源浪费: 内存占用巨大,无法精细化管理

  • 功能缺失: 没有日志、没有监控、没有高可用、没有动态扩缩容

直接用Python框架(如PyTorch)运行模型,就面临类似问题,而且在AI场景下,这些问题会被指数级放大:

2.1 “慢”得离谱(高延迟)

业务场景: 用户在智能客服里问个问题,等了30秒才看到第一个字蹦出来。

技术原因: 大模型的计算量是天文数字。一个请求过来,逐层计算,不经任何优化,就像开着一辆家用小轿车去拉一整火车的货。

2.2 “吞”得吓人(低吞吐)

业务场景: 数据中心支撑全集团业务,现要上线一个基于大模型的报告自动生成功能。结果发现,系统同时只能服务3、5个人,再多请求就全部卡死排队。

技术原因: 模型会独占一块或多块GPU显卡,而GPU显存非常宝贵且昂贵。一个请求就把显存用完了,其他请求只能干等着。这就像一个只有一个窗口的银行,办完一个才能叫下一个。

2.3 “贵”得心疼(高成本)

业务场景: 为支撑业务,不得不堆砌大量顶级GPU卡(一张A100/H100几十万)。年终汇报时,老板一看电费和硬件采购单,脸都绿了。

技术原因: 资源利用率极低。GPU大部分时间可能在空闲等待,或者显存被大量浪费。花了大价钱买来的“法拉利”,却一直在市区里堵着车,油耗还高得惊人。

所以,直接用原生框架跑模型,只适合实验室里做研究、发论文。一旦进入生产,推理引擎就成了必选项

3 推理引擎的最佳实践

推理引擎之所以能解决上述问题,是因为它在“运行”模型这件事,做大量优化和工程化工作。

3.1 模型“瘦身术”

就像做Java应用性能优化时,会对代码重构,优化数据结构,减少不必要的对象创建。

3.1.1 量化 (Quantization)

原始的模型参数通常32位浮点数(FP32),精度高但占空间大,计算也慢。量化就是把这些参数“降级”成16位(FP16/BF16)甚至8位整数(INT8)。好比把一个需要用double类型存储的数字,发现用float甚至int就够,精度损失不大,但存储空间和计算速度大大提升。

3.1.2 剪枝 (Pruning)

科学家发现,模型里很多参数(神经元连接)其实“冗余”,对最终结果影响不大。把这些“细枝末节”砍掉,进一步减小模型体积。

3.1.3 最佳实践

场景:你们需要在一个边缘设备或者性能没那么强的服务器上部署一个模型,用于内部的文档识别或人脸识别。

推理引擎咋做:像NVIDIA的TensorRT-LLM、开源的llama.cpp等推理引擎,都内置了强大的量化工具。你只需要把原始的FP32模型丢给它,配置好量化参数(比如INT8),它就能自动帮你生成一个“瘦身”后的模型。这个新模型体积可能只有原来的1/4,推理速度提升好几倍,而识别准确率可能只下降了不到1%。对于很多业务场景来说,这种性价比极高。

3.2 请求“拼车”大法

批处理 (Batching)如数据库操作,我们会把多个单条INSERT合并成一个batch insert,减少网络和数据库IO开销。

3.2.1 理论概念

GPU是并行计算神器,它最喜欢“干大事”:一次处理一大批相似任务。若一个一个请求喂给它,就像让一个128车道高速公路,每次只跑一辆车,巨大浪费。批处理就是把在短时间内收到的多个用户请求,“攒”成一个大大的批次(Batch),再一次性丢给GPU去计算。

3.2.2 最佳实践
① 挑战

简单的批处理(静态批处理)会引入延迟,须等到凑够一个批次或超时才处理。但用户请求是动态到达的,有的长有的短。

② 推理引擎的进化(Continuous Batching)

假设有3个用户同时请求。

  • 用户A:请求生成一篇500字短文

  • 用户B:请求生成一句10个字的诗

  • 用户C:请求生成一份2000字的报告

传统方式: 须等最长的C请求(2000字)全部生成完毕,这个批次才算结束。A和B早就生成完了,但它们的GPU资源必须被占用着,干等着,造成巨大的浪费(显存空泡)。

最佳实践:vLLM引擎的PagedAttention技术。近两年最火的优化技术了!它的思想借鉴了操作系统的虚拟内存分页(Paging)。把GPU显存划分成一个个固定大小“块(Block)”,一个请求来了,按需分配块,而非一次性预分配一个巨大的连续空间。当用户B的请求(10个字)生成完毕后,它占用的“块”会立刻被释放,并马上可以分配给新的等待请求。

效果:这种“持续批处理”或“动态批处理”技术,将吞吐量提升2-4倍甚至更高!目前业界顶级的开源推理引擎,如vLLMHuggingFace TGI (Text Generation Inference)TensorRT-LLM都将此作为核心能力。作为架构师,在选择推理引擎技术栈时,支持Continuous Batching是关键考量点。

3.3 计算“流水线”

和Java多线程、微服务拆分异曲同工。一个大任务,一个人干不过来,就拆成小任务,多个人/多个服务一起干。

张量并行

TP,Tensor Parallelism。

一个模型的某层(如一个巨大的矩阵乘法)计算量太大,一张GPU卡都扛不住。就把这大矩阵“切”成几块,分给多张卡,每张卡算自己那一小块,最后再把结果合并。好比用Fork/Join框架处理一个大集合。

流水线并行

PP,Pipeline Parallelism。

把模型不同层(Layer)放到不同GPU。如一个模型有80层,1号GPU负责1-20层,2号GPU负责21-40层... 数据像在流水线一样,流过一张张GPU,每张GPU只做自己那部分工作。这完全就是微服务架构的思想,每个GPU就是一个“微服务”。

最佳实践
场景

部署一个像Llama3-70B(700亿参数)巨型模型,单张GPU卡装不下。

推理引擎咋做?

DeepSpeed InferenceTensorRT-LLM这类引擎,提供成熟分布式推理能力。无需手动实现复杂的卡间通信(All-Reduce、All-Gather等),只需在配置文件中声明:“我要用4张卡跑这个模型,使用2路张量并行和2路流水线并行”。推理引擎会自动帮你完成模型的切分、部署和协同工作。

这就屏蔽了底层的分布式计算复杂性,让你能像管理一个逻辑上的“大GPU”一样,去管理一个GPU集群。你的关注点,从如何实现并行,变成了如何规划并行策略以达到最佳性价比。

4 推理引擎选型

选型通常考虑稳定性、社区活跃度、技术支持和国产化替代等。

4.1 NVIDIA TensorRT-LLM,重量级选手,性能标杆

NVIDIA官方出品,性能优化到极致。深度绑定NVIDIA硬件生态,能最大化榨干A100/H100等显卡的性能。支持前面提到的所有高级优化。

适用场景:对性能有极致要求,不差钱,且技术栈以NVIDIA为主的场景。追求业界SOTA(State-of-the-Art)性能。

类比:像是Oracle数据库,性能强悍,但有厂商锁定风险。

4.2 vLLM,开源新贵,吞吐量之王

凭借其创新的PagedAttention技术,在吞吐量方面表现极其出色,迅速成为开源社区的明星项目。易用性好,Python接口友好。

适用场景:高并发的在线服务场景,如智能客服、AI聊天机器人。希望快速部署,获得极高吞吐量的首选。

类比:像是Nginx,轻量、高效,专注于解决高并发问题。

4.3 Hugging Face TGI(Text Generation Inference)社区宠儿,生态完善

来自最大的AI开源社区Hugging Face,对Hugging Face生态中的海量模型支持最好。功能全面,工程化成熟度高,易于部署和监控。

适用场景:需要快速验证和部署多种不同类型的开源大模型。企业内部的AI中台、模型即服务(MaaS)平台的理想底座。

类比:像是Spring Boot,开箱即用,生态整合能力强,能快速构建应用。

4.4 国产推理引擎

如TNN, MindSpore Lite等。

特点: 国内厂商(如腾讯、华为)主导,更侧重于国产芯片(如昇腾、寒武纪)的适配和优化,在信创和国产化替代方面有天然优势。

适用场景: 国企中对软硬件自主可控有强要求的项目。

类比: 像是TongWeb、Kingdee,在特定政策和生态环境下是必然选择。

4.5 建议

  • 初次接触和探索的项目,强烈推荐 vLLM 或 Hugging Face TGI 入手。都提供Docker镜像,方便在现有数据中心K8s集群拉起一个服务。可以像部署一个普通的Java微服务一样,通过RESTful API或gRPC来调用它,无缝集成到现有的Java技术栈中

  • 核心业务和性能要求极高的场景,可深入研究 TensorRT-LLM,它能带来极致的性能回报

  • 务必关注信创和国产化要求,提前了解和测试国产推理框架与硬件结合方案

5 总结

跳出繁杂技术细节,站在架构师高度审视:

  • 它是一种资源虚拟化和池化技术: 它将昂贵、稀缺的GPU计算资源,通过批处理、并行计算等技术,池化成一个可以被多个业务方高效共享的服务。这与我们用K8s管理CPU和内存资源,用数据库连接池管理数据库连接,在思想上是完全一致的。

  • 它是一个标准的“中间件”: 它解决了大模型这个“特殊应用”在生产环境运行时的通用问题(性能、并发、稳定性),将AI研究人员和我们业务开发人员解耦。研究员专注于模型算法,我们专注于业务逻辑和系统集成,大家各司其职。

  • 它是未来AI应用的核心基础设施: 就像JVM之于Java,K8s之于云原生,推理引擎将成为企业“AI中台”或“MaaS平台”不可或缺的基石。

虽无需直接写CUDA,不直接研究Attention机制,但理解推理引擎的原理、价值和选型策略,将是我们在AI时代保持核心竞争力的关键。它能帮助我们更好地规划企业级的AI基础设施,设计出更健壮、更高效、更具扩展性的AI赋能业务系统。

希望本文帮你把“推理引擎”这个概念,从一个模糊的术语,变成一个你工具箱里清晰的、可以评估和使用的架构组件!

加我好友,一起AI探索交流!

点击文末阅读原文,限时免费在线学习海量技术最佳实践!

写在最后

编程严选网http://www.javaedge.cn/

专注分享AI时代下软件开发全场景最新最佳实践,点击文末【阅读原文】即可直达~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86915.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86915.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86915.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《从0到1:C/C++音视频开发自学完全指南》

从0到1:C/C音视频开发自学完全指南 一、开篇:为什么选择C/C切入音视频开发? 当你刷着抖音短视频、参加腾讯会议、观看B站直播时,背后都是音视频技术在支撑。根据艾瑞咨询数据,2024年中国音视频相关产业规模已突破5000…

微信小程序之单行溢出隐藏和双行溢出隐藏

首先&#xff0c;我们做个text&#xff0c;加入了一个长文本&#xff0c;就像下面那样&#xff1a; wxml : <view class"container"><text>刘德华&#xff08;Andy Lau&#xff09;&#xff0c;1961年9月27日出生于中国香港&#xff0c;华语影视男演员、…

PHP安装使用教程

一、PHP 简介 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛应用的开源服务器端脚本语言&#xff0c;尤其适用于 Web 开发&#xff0c;可嵌入 HTML 中使用。其运行速度快、易学易用&#xff0c;支持多种数据库和平台。 二、PHP 安装教程 2.1 支持平台 PHP 支…

ThreadLocal、InheritableThreadLocal与TransmittableThreadLocal深度解析

文章目录 一、概念说明1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 二、使用场景1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 三、存在的问题1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 四、示例…

ERP系统Bug记录

2025.06.30 2025/06/30-10:51:02 [http-nio-9999-exec-3] com.yxx.jsh.erp.service.LogService - 异常码[300],异常提示[数据查询异常],异常[{}] java.lang.NullPointerException: nullat com.yxx.jsh.erp.base.TableSupport.getBuildPageRequest(TableSupport.java:46)at com…

C# Avalonia 的 Source Generators 用处

C# Avalonia 的 Source Generators 用处 文章目录 **1. 自动生成 MVVM 绑定代码****2. 强类型 XAML 数据绑定****3. 自动注册视图&#xff08;View&#xff09;与视图模型&#xff08;ViewModel&#xff09;****4. 资源文件与本地化的强类型访问****5. 路由事件与命令的自动化处…

stm32之测量占空比

#include "tim4.h"void TIM4_Init(void) {// 开启时钟RCC->APB1ENR | RCC_APB1ENR_TIM4EN;RCC->APB2ENR | RCC_APB2ENR_IOPBEN; // 使用 TIM4 的 GPIOB 时钟// 配置 PB6 为浮空输入 CNF 01 MODE 00GPIOB->CRL & ~GPIO_CRL_MODE6;GPIOB->CRL & ~G…

工厂模式 - Flutter中的UI组件工厂,按需生产各种“产品

想要动态创建不同风格的按钮&#xff1f;想一键切换整个主题&#xff1f;工厂模式就是你的"生产流水线"&#xff01; 想象一下这个场景&#xff1a; 你决定扩大奶茶店业务&#xff0c;推出两个品牌系列&#xff1a; 经典系列&#xff1a;传统珍珠奶茶&#xff0c;红…

基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 论坛设计与实现7000字论文

基于 SpringBootVue.jsElementUI 的 Cosplay 论坛设计与实现 摘要 本论文设计并实现了一个基于 SpringBoot、Vue.js 和 ElementUI 的 Cosplay 论坛平台。该平台旨在为 Cosplay 爱好者提供一个集作品展示、交流互动、活动组织于一体的综合性社区。论文首先分析了 Cosplay 论坛…

超标量处理器11-Alpha21264 处理器

1. 简介 21264处理器是一款4-way&#xff0c;乱序执行的超标量处理器&#xff0c;采用0.35um的CMOS工艺&#xff0c;工作电压是2.2V, 工作频率是466-667MHz; 处理器能支持60条指令&#xff0c;也即ROB的深度是60; Load/Store指令也采取乱序执行, 总共7级流水。I-CACHE和D-CACH…

Spring 中 Bean 的生命周期

一、什么是 Bean 生命周期&#xff1f; Spring 中的 Bean 生命周期是指一个 Bean 从 被容器创建到 最终销毁 所经历的一系列过程。 它体现了 Spring IOC 容器在管理 Bean 实例时所执行的各个钩子流程&#xff0c;包括初始化、依赖注入、增强处理、销毁等多个环节。 二、Bean 生…

C++ 中 std::string 与 QString 的深度剖析

在 C 编程领域&#xff0c;std::string 和 QString 是两种广泛应用的字符串类型&#xff0c;它们在设计理念、功能特性以及适用场景上都呈现出鲜明的特点。本文将从多个维度对这两种字符串类型进行深度剖析&#xff0c;并详细阐述它们之间的相互转化方法。 std::string 是 C 标…

不止于“修补”:我如何用Adobe AI重塑设计与视频叙事流程

最近我深度体验了一把来自英国Parvis School of Economics and Music的Adobe正版教育订阅&#xff0c;在把玩PhotoShop、Premiere Pro这些“老伙计”的新功能时&#xff0c;的确挖到了一些宝藏&#xff0c;觉得非常有必要与大家说道说道。首先得聊聊这个订阅给我的直观感受&…

重头开始学ROS(5)---阿克曼底盘的URDF建模与Gazebo控制(使用Xacro优化)

阿克曼底盘的URDF建模与Gazebo控制&#xff08;使用Xacro优化&#xff09; 阿克曼底盘建模 建模 我们使用后轮驱动&#xff0c;前轮转向的阿克曼底盘模型。 那么对于后轮只需进行正常的continous joint连接即可 对于前轮&#xff0c;有两个自由度&#xff0c;旋转和转向&…

RabbitMq中启用NIO

✅ 所属类 com.rabbitmq.client.ConnectionFactory&#x1f9e0; 使用背景 RabbitMQ Java 客户端默认使用传统的 阻塞 I/O (java.net.Socket) 实现。如果你希望&#xff1a; 更好地控制 线程数获得更好的 并发性能降低 每个连接的线程占用在高并发连接或消费者数量较多的系统…

[Dify]-基础篇2- 如何注册并快速上手 Dify 平台

在生成式 AI 应用开发新时代,如何快速搭建一个高效、可维护、易上线的 AI 工具,是每位开发者关注的核心。Dify,正是为此而生的一站式平台。本篇将以新手视角,带你从注册账号、配置环境,到构建应用、部署上线,手把手完成你的第一个 AI 项目。 注册并设置工作环境 1. 账号…

Java面试宝典:基础七

153. 如何实现对象克隆? 答: 对象克隆有两种主要方式: 浅克隆:实现Cloneable接口并重写Object.clone() class Person implements Cloneable {String name;Car car; // 引用类型@Override

spring-security原理与应用系列:requestMatchers和authorizeRequests

目录 简单示例 WebSecurityConfig requestMatchers ​​​​​​​requestMatchers ​​​​​​​antMatchers ​​​​​​​chainRequestMatchers ​​​​​​​setMatchers ​​​​​​​requestMatcher ​​​​​​​WebSecurity ​​​​​​​performBuild…

Bessel位势方程求解步骤

问题 考虑偏微分方程&#xff08;PDE&#xff09;&#xff1a; − Δ u u f , x ∈ R n , -\Delta u u f, \quad x \in \mathbb{R}^n, −Δuuf,x∈Rn, 其中 f ∈ L 2 ( R n ) f \in L^2(\mathbb{R}^n) f∈L2(Rn)。这是一个线性椭圆型方程&#xff0c;称为 Bessel 位势方…

if __name__ == ‘__main__‘:

基本概念 if __name__ __main__: 是一个条件判断语句&#xff0c;用于确定当前模块是作为主程序运行&#xff0c;还是被其他模块导入。 __name__ 变量 __name__ 是Python的一个内置变量&#xff0c;表示当前模块的名称当一个模块被直接运行时&#xff0c;__name__ 的值会被…