大模型的“Tomcat”:一文讀懂AI推理引擎(Inference Engine)

?點擊下方“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__ 的值會被…