乐于分享
好东西不私藏

为什么需要 AI Infra?

为什么需要 AI Infra?
过去两年,大家谈大模型,最容易看到的是模型能力:参数规模、评测分数、上下文长度、推理能力。

但是,要将模型要变成产品,还需要解决很多问题:

模型能不能在有限显存里运行?用户多久看到第一个字?同时来一万个请求会不会崩?一次调用到底花多少钱?模型升级后,原来的机器还能不能继续用?

这些问题不决定模型“聪不聪明”,却决定模型能力能不能送到用户手里,也决定这门生意能不能成立。要解决这些问题,就需要 AI Infra。

模型负责生产智能,Infra 负责把智能变成一种可以稳定、快速、规模化交付的服务。

对于产品经理来说,AI Infra 是很重要的工程:延迟会影响用户体验,吞吐会影响服务容量,显存会影响并发上限,GPU 利用率会影响毛利率。许多看起来像模型问题的产品选择,最后都要回到 Infra。

但是,AI Infra 又确实很难理解,主要有四个原因:

  1. 跨度太广:从晶体管、芯片封装、高带宽显存 HBM,一路跨到多卡网络、编译器、Kernel 和在线调度。
  2. 过程不可见:真正决定性能的数据移动是看不见的。页面上只出现一句回答,机器内部却在寄存器、片上缓存、HBM 和多张 GPU 之间搬运海量数字。
  3. 问题会动态变化:同一个模型,处理长输入的 prefill 阶段可能缺算力,逐个生成 token 的 decode 阶段可能缺带宽。Batch、精度或硬件一变,昨天的结论今天就不一定成立。
  4. 名词太多:BF16、SM、Tensor Core、FSDP、TP、PagedAttention 接连出现,大家记住了缩写,却不知道它们分别解决了哪个物理问题。

这篇文章的目标,就是想办法以产品经理的视角,把 AI Infra 讲清楚。全文会跟着一份模型数据走完整条路:它怎样被表示成数字,怎样存进显存,怎样被送到计算单元,为什么一张卡会堵,为什么加卡后又会产生通信,最后怎样影响延迟、并发和成本。

全篇试图解释的矛盾是:计算电路越来越快、越来越多,但数据的存放和搬运受物理限制没有同比例变快。于是昂贵的计算单元经常不是不会算,而是在等数据。

下面我们直接走进机器内部,看真实发生的物理机制。


一、先把模型装进机器:一张 GPU 里面究竟有什么

先把“大模型”三个字放下。对机器来说,模型首先是一张极其巨大的数字表。

所谓参数,就是这张表里的数字。训练的过程,是不断调整这些数字;推理的过程,是把输入和这些数字做一层层矩阵运算。

数字必须占存储空间。计算机用 bit(0 和 1)保存数据,8 个 bit 组成 1 个字节(Byte)。

模型参数通常不是整数,为了同时表示正负以及大小差异极大的数字,计算机会使用浮点格式。可以把浮点数理解为科学计数法的二进制版本:

  • 1 bit 记录正负号;
  • 一部分 bit 记录小数点应该移动多少位(指数);
  • 剩下的 bit 记录具体数值有多精细(尾数)。

精度格式决定每个参数占多少 bit,并同时影响显存容量、带宽占用、计算速度与模型误差,常见的精度格式有这几种:

  • FP32 用 32 个 bit 保存一个数,因此一个参数占 4 字节。它记录得细、范围大,代价是占空间,搬运和计算电路也更大。
  • BF16是用 16 个 bit 保存一个数,因此一个参数占 2 字节。包含 1 bit 符号、8 bit 指数、7 bit 尾数。它保留了和 FP32 相同的指数位数,覆盖相近的数值范围,仅牺牲了部分尾数精细度。

为什么深度学习偏爱 BF16?因为神经网络计算通常能容忍一定的小数精度损失,但不能容忍数值范围不够导致上溢或下溢。BF16 牺牲部分精细度,换取了较大的动态范围,同时把存储和搬运量直接减半。

现在来看一个 70B 模型:70B 表示约 700 亿个参数。如果使用 BF16,每个参数 2 字节,光权重就大约占 140 GB。一张 80 GB 的 GPU 显存,连完整的模型都放不下。

所以 PM 讨论模型部署时,不能只问“多少 B”,必须同时问使用什么精度。

FP8 用 8 bit 保存一个数;4-bit 量化是用约 4 bit 表示一个权重。70B BF16、70B FP8 和 70B 4-bit 需要的显存完全不同,换来的数值误差和硬件要求也不同。

但这只回答了模型容量的问题。为了理解后面的运行机制,我们需要走进 GPU 内部,看数据到底经过哪些物理位置。

从晶体管到计算单元

GPU 芯片是一块硅片,上面刻着海量晶体管。

晶体管本质上是由电压控制的开关。控制端电压变化决定电流能否通过。多个晶体管组合成逻辑门,逻辑门再组合成加法器、乘法器和存储电路。数据(0 和 1)物理上就是电路中稳定的两种高低电压状态。

大模型最核心的计算是矩阵乘法。把文本转换成向量后,每一层都要拿输入矩阵和权重矩阵相乘并累加。

CPU 依靠少量复杂核心,擅长处理逻辑分支多、步骤不一的串行任务。

GPU 选择了另一条路:堆叠大量结构相似的计算单元,让同一种运算同时作用在海量数字上。

GPU 芯片被划分成许多重复的计算区域,NVIDIA 称之为SM(Streaming Multiprocessor,流多处理器)

把一个 SM 理解为芯片上的一个独立计算核心区。它负责接收一批线程任务、安排它们执行,并提供这批任务所需的计算电路和近端存储。

线程可以理解为一份最小工作单(例如“把矩阵某位置的几个数相乘并累加”)。GPU 会把海量线程分组调度,让许多位置并行计算。

SM 里面既有普通算术单元,也有Tensor Core。Tensor Core 不是独立芯片,而是一组专门为矩阵乘加(A × B + C)设计的专用硬件电路。普通单元一次处理几个标量,而 Tensor Core 一条指令就能完成一个小矩阵块的乘加。专用电路不需要照顾所有通用逻辑,直接把深度学习高频运算做成硬件数据通路,极大地提升了计算效率。

SM 内部还配有寄存器片上缓存。矩阵数字必须先送到这些近端存储中,计算电路才能读取并执行运算。

精度的降低会直接提升物理效率:一个 BF16 数只有 16 bit,比 FP32 少一半。相同带宽下一次可搬运两倍数量的数据;乘法器电路更小、更省电,相同芯片面积就能布置更多并行乘法器。

FP8、FP4 沿着这个方向继续压缩,但精度越低,数值误差控制难度越大,需要硬件速度与模型质量综合评估。

至此,“算力”可以定义得更具体:它来自芯片上有多少 SM,每个 SM 里有多少计算电路,这些电路每个时钟周期能处理多少数据,以及软件能否持续给它们喂饱数据。

数据离计算电路有多远

GPU 并没有一块既无限大又无限快的存储。原因很物理:存储电路越追求极致速度和直接访问,占用的硅片面积就越大、成本越高;基于尺寸和成本的考量,想把容量做大,就必须采用结构更密集但访问步骤更多的方案。

因此,GPU 将存储设计成多层金字塔结构:

  1. 寄存器(Register):位于 SM 内部,紧贴计算电路。正在参与计算的输入、地址和中间结果放在这里,读取路径极短、速度极快。但容量极其有限,如果每个线程占用过多寄存器,同时驻留在 SM 中的线程数量就会减少。
  2. 共享内存(Shared Memory)/ L1 Cache:位于 SM 附近,由片上 SRAM 构成。SRAM 用多个晶体管维持 1 bit 状态,无需刷新,响应极快,但占面积大。L1 Cache 由硬件自动缓存数据,共享内存由程序员显式调度。
  3. L2 Cache:位于 GPU 计算芯片上,由所有 SM 共享。某个 SM 用过的数据若留在 L2,其他 SM 访问时即可避免读取 HBM。
  4. HBM(高带宽显存):显存的主体,采用 DRAM。DRAM 依靠微小电容里的电荷表示 0 和 1,电荷会泄漏需定期刷新,读取时还需经过内存控制器。DRAM 每 bit 占用面积小、适合做大容量,但延迟较高。
  5. 跨机存储:另一张 GPU 的 HBM(走 NVLink/PCIe);跨机 GPU 的 HBM(走网卡和 InfiniBand/RoCE 网络);CPU 内存及 SSD。

存储路径总览:寄存器 → 共享内存/L1 → L2 → 本卡 HBM → 另一张 GPU → 跨机网络 → CPU 内存/存储,越靠左,容量越小、访问越快;越靠右,容量越大、路径越长、延迟和能耗越高。

这个物理层级图是 AI Infra 最底层的架构图。FlashAttention 试图让数据在片上 SRAM 停得更久;PagedAttention 减少 HBM 空间浪费;张量并行(TP)和专家并行(EP)则不得不让数据跨卡传输,因而极度依赖高速互联通道。

遇到任何 Infra 新技术,都可以先问三个问题:它减少了哪一段的数据搬运?让哪份数据在近处多停了一会儿?还是为了扩展容量,反而让数据走了更远的路?

HBM 为什么又高又宽

普通内存条(DDR)离 GPU 太远、通道太窄。AI 加速卡采用 HBM,是为了让大容量内存贴近计算芯片,并提供极宽的并行数据通道。

一摞 HBM 由多层 DRAM die 垂直堆叠而成。上下层之间通过 TSV(硅通孔) 连接,即穿透硅片的垂直金属通道,信号可直接上下穿行。

整摞 HBM 与 GPU 芯片一起安放在 Interposer(中介层) 上。Interposer 是一层布线极密的底板,用大量超短导线将 GPU 和几摞 HBM 紧密相连。台积电的 CoWoS 就是此类先进封装技术:把 GPU 计算芯片和 HBM 封装在同一个底座上,实现超高速互联。

HBM 的“高”解决了容量问题(垂直堆叠),“宽”解决了带宽问题(上千条并行线路同时传输数据)。

这里还需要澄清两个概念:

  • 延迟(Latency):发出读取请求后,第一批数据多久到达。
  • 带宽(Bandwidth):传输稳定后,每秒总共能搬运多少数据。

大模型需要连续搬运海量权重,因此带宽通常比单次访问延迟更早成为系统瓶颈。但在多卡频繁同步小结果时,等待每一轮通信开始的延迟又变得至关重要。

2026 年的HBM4 将数据接口扩展到 2048 条连接,单堆栈带宽突破 2.8 TB/s。但接口越密、走线越紧,封装、信号完整性、供电、散热和良率的挑战也呈指数级上升。

算力与带宽的物理失衡

行业里常用一句话总结内存墙:算力是面积游戏,带宽是周长游戏。

计算单元可以铺在二维硅片面积上,面积增大,乘法器和缓存成倍增加;但数据进出计算单元,必须经过芯片边缘的内存接口、走线和控制器,物理边界和接线资源无法像内部计算单元那样无限制扩展。

先进封装正在不断拓宽这个“边界”,但修路的代价是更高的面积占用、功耗和成本。算力与数据供给能力的增长不对称,是贯穿 AI Infra 的根本物理矛盾。

判断工具:算术强度(Arithmetic Intensity)

如何判断一个具体任务到底卡在哪里?引入算术强度

如果 GPU 的峰值算力为 C(FLOPs/s),显存带宽为 B(Bytes/s),那么比例 C / B 就是该硬件的物理分界线(Roofline 模型):

  • 任务算术强度 < C / B:属于 带宽瓶颈(Memory-bound),计算单元大量时间在空等数据;
  • 任务算术强度 > C / B:属于 计算瓶颈(Compute-bound),计算单元全速运转,显存带宽有富余。

对 PM 来说,它的价值在于帮你问对问题:现在的慢,是因为计算做不过来(算力不够),还是因为数据送不过来(带宽不够)?如果判断错了,买再多算力也解决不了问题。


二、模型装进去了,用户为什么还在等

通过前面对单卡硬件结构的拆解,我们知道了如何计算模型权重的静态占用。但把模型“静态”装进显存只是第一步。当真实用户请求涌入、模型开始动态跑起来时,数据开始在寄存器、缓存与 HBM 之间剧烈流动,系统的瓶颈会立刻从“能否装下”变成“动态算力与带宽的供给问题”。

单人测试时速度很快,但接入真实流量后,产品上出现了两种“慢”:

  1. 有些用户很久才看到第一个字;
  2. 另一些用户很快看到开头,但后面一字一字蹦得很慢。

同一个模型,为什么会有两种不同的卡顿?因为推理在物理上天然分为两个阶段。

Prefill 阶段:模型一次性读完 Prompt

用户输入 Prompt 后,模型必须先一次性处理全部输入 Token。这叫Prefill(预填充 / 读题阶段)

所有的输入 Token 可以并行进入矩阵计算。同一份模型权重从 HBM 搬到片上后,可以同时服务这批 Token,数据复用率极高,算术强度也很高。

Prefill 是标准的计算密集型任务,它直接决定了TTFT(首字延迟,Time to First Token)。上下文越长,Prefill 越重。长上下文不仅意味着读入更多文字,Attention 还要处理呈平方级增长的 Token 关系。

Decode 阶段:逐字生成答案

首字生成后,模型进入Decode(解码 / 逐字作答阶段)

生成下一个 Token 必须依赖上一个 Token 的输出,这种自回归过程在时间轴上无法并行。在 Batch 较小(如单用户)时,每一步计算量极小,但整套海量模型权重仍然需要从 HBM 完整搬运到计算单元一次。读取了数百 GB 的参数,仅仅为了产生一个 Token。

此时权重复用率极低,算术强度极低。Tensor Core 根本没吃满,HBM 带宽却已经顶格。因此,低 Batch Decode 主要是慢在“读显存”,而不是慢在“算力不足”。

因此,在产品评审中,脱离条件的“每秒多少 Token”没有任何意义。必须追问:输入多长、输出多长、Batch 多大?测的是 Prefill 还是 Decode?是单用户延迟还是整机吞吐?

KV Cache:用显存换时间的必然产物

Decode 时需要关注历史所有 Token。如果每一步都重新计算历史 Token 的表示,开销不可接受。

Transformer 架构将历史 Token 在每一层生成的 Key 和 Value 向量保存下来,下一步直接复用,这就是KV Cache。前面的计算结果被保存下来避免重算,但这些记录本身要一直占用昂贵的显存空间。

Key 是历史 Token 的索引特征,Value 是对应的提取内容。当前 Token 生成 Query,与历史 Key 计算相关性,再加权汇总 Value。

KV Cache 显存占用计算公式:

(乘以 2 是因为要同时保存 Key 和 Value)

这个公式解释了几个关键产品现象:

  • 注意力机制演进
  •     标准多头注意力(MHA)中每个 Query Head 拥有独立的 KV Head;
  •     分组查询注意力(GQA)让一组 Query Head 共享一份 KV Head;
  •     多查询注意力(MQA)让所有 Query Head 共享一份 KV Head。
共享程度越高,KV Head 数越少,KV Cache 显存占用越低。模型权重占用的显存是固定的,而 KV Cache 随实时流量动态剧烈波动。线上的 OOM(显存耗尽崩溃),绝大多数不是因为模型变大,而是因为高并发下的长上下文请求挤爆了显存。

吞吐与用户体验的博弈

增加 Batch 可以提高权重复用率和系统总吞吐,但请求需要排队凑 Batch,等待时间变长;长 Prompt 的 Prefill 还会抢占算力,导致正在 Decode 的用户遭遇严重卡顿。

线上推理评估必须看综合指标矩阵:

  • TTFT(Time to First Token):首字延迟,用户等多久看到第一个字。
  • ITL(Inter-Token Latency):Token 输出间隔,文本流式吐出的顺滑度。
  • 吞吐量(Throughput):整套系统每秒交付的总 Token 数。
  • 并发数(Concurrency):单卡/单集群同时支持的活请求数。
  • P95 / P99 延迟:保障最慢 5% 或 1% 用户的服务质量。
  • 单位成本:满足延迟 SLO 前提下,每百万 Token 的成本。

极致追求吞吐会导致单用户体验变差;极致追求低延迟会导致 GPU 算力闲置、成本飙升。

理解了推理时 Prefill 和 Decode 的动态博弈之后,我们再来看另一个常见的业务场景:模型微调与训练。


三、产品要微调模型,为什么显存突然翻了许多倍

在推理场景中,显存的主要矛盾在于“动态 KV Cache 随并发膨胀”。但当业务需要对模型进行定制微调或持续训练时,显存消耗会再次发生质的飞跃。因为推理只需要“只读参数”并记录过程激活,而训练必须在正向和反向传播中“更新参数、计算梯度并保存优化器状态”。

如果直接用推理的账本估算训练显存,项目一定会崩溃。除了模型参数本身,训练过程还要在显存中保存三类东西:

  1. 梯度(Gradients):记录每个参数应该向哪个方向调整。
  2. 优化器状态(Optimizer States):以最常用的 AdamW 为例,为了决定更新步幅,需要保存梯度的“一阶动量”(移动平均)和“二阶动量”(平方移动平均)。混合精度训练中通常还会保留一份 FP32 的主权重。
  3. 激活值(Activations):前向传播在每一层留下的中间结果,反向传播计算梯度时必须用到它们。

在常见配置下,参数 + 梯度 + 优化器状态的显存占用高达14 ~ 16 字节 / 参数(甚至更高)。按此估算,一个 7B 模型的静态模型状态显存就高达近 100 GB ~ 112 GB,这还没算激活值和临时缓冲区。

这就是为什么“十几 GB 的模型文件,训练却需要好几张大显存卡”的原因。

激活值在长上下文中的危险性

激活值占用随 Batch Size、序列长度、层数和隐藏维度线性甚至平方级增长。上下文从 4K 扩展到 32K,激活值显存会呈剧烈爆表。

解决办法是激活检查点(Activation Checkpointing / 重计算):前向传播时只保留少量关键层的激活值,其余丢弃;反向传播需要时,再重新做一次前向计算补齐。

片上存储放不下半成品时,就先丢弃,需要时重新计算这体现了典型 AI Infra 的折衷思维:用计算时间换显存空间。

然而,重计算也是有极限的。当单卡用尽了量化、重计算等所有单卡优化手段,显存依然放不下时,堆叠多张 GPU 就成了唯一的选择。

但从这一刻起,系统的核心瓶颈正式从“单卡内部的数据搬运”演变成“跨卡、跨网络的物理通信”。


四、一张卡不够,为什么加卡不能直接线性加速

多张 GPU 在物理上是独立的,各有自己的计算单元和 HBM。单板内、机架内、跨机架的通信通道不同,带宽和延迟有天壤之别。

并行策略必须严格服从物理网络拓扑。拆分模型不是在架构图上画框,而是决定哪些数据在每一层需要跨越哪一段真实物理链路。

1. 数据并行与 FSDP

  • 标准 DDP(分布式数据并行):每张卡都复制一份完整的模型权重,各自处理不同的数据小批次(Mini-batch),反向传播结束后同步梯度。
    • 核心痛点:每张卡都要保存完整的模型状态,完全不节省模型状态显存
  • FSDP(Fully Sharded Data Parallel,全分片数据并行 / ZeRO-3):将参数、梯度和优化器状态完全切块分摊到各个 GPU 上。
    • 工作机制:平时每张卡只保留自己的分片。计算某一层前,执行 All-Gather(各出碎片,收齐完整参数),临时拼出该层完整权重,算完立即释放;反向传播后执行 Reduce-Scatter(累加梯度并切块),每张卡只保留属于自己的梯度分片。
    • FSDP 没有让显存需求消失,而是用“动态传输与临时聚合”替代了“静态常驻”,用增加通信的代价换取了显存开销的大幅下降

2. 张量并行(TP,Tensor Parallelism)

如果模型的单层矩阵太大,连单卡都放不下,就必须把单层权重矩阵拆开到多张 GPU 上。

  • 计算时,各卡只计算矩阵的一部分,随后在层内部进行高频同步(如 All-Reduce)。
  • 物理约束:通信发生在每一个 Transformer 层的内部,频率极高、处于关键路径上。因此,TP 必须放置在带宽最高、延迟最低的高速互联域(如 NVLink / NVSwitch)中。如果跨慢速网络做 TP,整机性能会被通信延迟吞干。

3. 流水线并行(PP,Pipeline Parallelism)

将模型的不同层按深度顺序切分到不同 GPU 组上。第一组卡算前几层,把中间激活值传给下一组;反向传播时沿相反方向传回。

  • 优点:只在流水线阶段交界处传输激活值,通信量小,适合跨节点连接。
  • 缺点:存在 流水线气泡(Pipeline Bubble)——刚开始时后面的卡在空等,快结束时前面的卡已空闲。可以通过微批次(Micro-batch)切分减少气泡比例,但会增加调度复杂度和激活显存。

4. 专家并行(EP,Expert Parallelism)

专为 MoE(混合专家模型)设计。Top-k 路由器将每个 Token 分发给最匹配的 $k$ 个专家,EP 将不同的专家分散在不同的 GPU 上。

  • 工作机制:路由决定 Token 去向后,通过 All-to-All 集合通信将 Token 发送到对应 GPU,计算完后再送回。
  • 物理痛点:若大量 Token 集中选中某几个热门专家,会导致热门 GPU 排队爆满、其余 GPU 闲置,整机速度取决于最慢的热点卡。

混合并行策略(3D / 4D 并行)

实际大模型系统通常混合使用上述策略,原则极其清晰:

  • 模型状态太大 : 用 FSDP / ZeRO;
  • 单层太宽放不下 : 用 TP(限定在机架内 / NVLink 高速域);
  • 模型太深或跨节点 : 用 PP;
  • MoE 模型: 叠加 EP;
  • 扩大总吞吐 :外层叠加 DP。
协作方式
实际拆了什么
卡间主要搬运什么
解决的核心问题
主要代价
DP / 标准 DDP
训练数据批次
梯度
扩大训练总吞吐
不省模型显存
FSDP / ZeRO
模型状态(参数/梯度/状态)
临时聚合参数、分片梯度
大幅节省单卡模型显存
增加层级聚合通信
TP(张量并行)
单层内的矩阵
层内局部计算结果
突破单层矩阵的显存极限
通信极频发,强依赖 NVLink
PP(流水线并行)
模型连续层深度
阶段边界激活值
跨节点拆分超深模型
存在流水线气泡与负载不均
EP(专家并行)
MoE 专家模块
被路由的 Token 向量
承载超大规模 MoE 专家
All-to-All 全打乱通信与热点排队

五、针对这些问题,人们提出的四项技术

总结前面的分析,我们发现不管在单卡还是多卡场景下,系统都在频繁遭遇物理级别的“数据堵车”:

  1. 单卡算子层:N*N注意力中间矩阵在 SRAM 与 HBM 之间频繁来回搬运,挤爆显存带宽;
  2. 内存管理层:动态 KV Cache 预留过大,产生大量显存碎片,挤占并发容量;
  3. 在线调度层:长 Prompt Prefill 霸占 GPU,导致 Decode 逐字吐出严重卡顿;
  4. 多卡通信层:数据并行广播梯度时,中心节点网络带宽瞬间瘫痪。

业内最著名的四大明星技术,正是针对这四个物理堵车点精准设计的解法。

1. FlashAttention:把数据留在离计算电路最近的地方

标准 Attention 计算公式:

在序列长度为 N 时,S 和 P 是 N*N 的庞大中间矩阵。朴素实现会把计算出的 S 写入 HBM,Softmax 读取 S 写回 P,最后乘 V 时再从 HBM 读取 P。大部分时间都浪费在片上 SRAM 与显存 HBM 之间反复搬运中间矩阵上。

FlashAttention 采用Tiling(分块)Online Softmax(在线归一化)技术:

  • 将 Q, K, V 切成能装进片上共享内存(SRAM)的小块;
  • 在 SRAM 内部连续完成矩阵乘法、Softmax 局部累加与输出更新,直接吐出最终结果 O 存回 HBM;
它没有减少 O(N^2) 的数学计算量,但将显存 HBM 读写流量降低了一个数量级。代价是 Kernel 开发极度复杂,必须精细调控 Warp(线程束)调度、Register 分配与 SRAM 布局。

2. PagedAttention:把动态 KV Cache 变成固定页管理

传统 KV Cache 必须申请连续显存,为了应对不确定的生成长度,系统不得不预留大量空间,造成严重的内部内存碎片

vLLM 提出的 PagedAttention 借鉴了操作系统的虚拟内存分页机制:

  • 将 KV Cache 划分为固定大小的 Block(物理块)
  • 通过 Page Table(页表) 将逻辑上连续的 KV Cache 映射到物理上分散的 Block 中;
  • 支持 Copy-on-Write(写时复制):多请求共享 System Prompt 前缀时,只需指向同一份物理块,写入个性化内容时才复制。

它极大地消除了显存碎片,使得同一张 GPU 能容纳多倍的并发请求,间接拉高了资源利用率与吞吐。

3. 连续批处理(Continuous Batching)与 Chunked Prefill

  • 连续批处理:传统 Batching 必须等待整批请求全部结束才能翻台。连续批处理在每次 Decode 迭代后重新调度,结束的请求立即释放,新请求随时插入,动态维护 Batch。
  • Chunked Prefill(分块预填充):超长 Prompt 的 Prefill 会长时间霸占算力,导致 Decode 请求卡顿。Chunked Prefill 将长 Prompt 拆分成多个 Chunk,在 Token Budget(单次迭代算力预算)内,将 Prefill Chunk 与 Decode 请求混合调度,兼顾了高吞吐与流畅的 ITL。

4. Ring All-Reduce:让梯度沿环高效传递

在朴素的集中式梯度聚合方案中,中心节点容易成为通信瓶颈。若所有 GPU 都将梯度发给单台主节点汇总,主节点网卡会瞬间爆满。

Ring All-Reduce 将 N 张 GPU 连成环状,把大小为 M 的梯度切成 N 份:

  1. Reduce-Scatter 阶段(N-1 轮):每张卡向顺时针邻居发送一块并累加;
  2. All-Gather 阶段(N-1 轮):将累加好的最终梯度环传给所有卡。

每张卡的总通信量为:

当卡数 N 较多时,传输量趋近于 2M——总传输数据量与卡数无关,完美打通了所有卡的网卡带宽因此,它对大消息具有较高的带宽利用率。但通信轮次会随卡数增加,并且性能仍然受网络拓扑和消息大小影响。

5. 四项技术的对比

技术
原来浪费在哪里
主要收益
新代价转移到哪里
FlashAttention
中间矩阵 S, P 在 HBM 上反复读写
大幅减少显存带宽占用,提升速度
Kernel 开发极其复杂且深度绑定硬件
PagedAttention
动态 KV Cache 预留过大,产生大量碎片
显存利用率接近 100%,极大地提升并发
页表间接寻址开销与块大小调参
连续批处理 / Chunked Prefill
长短请求互等、长 Prompt 抢占导致卡顿
消除 GPU 空等,降低首字/流式卡顿
调度复杂度剧增,TTFT 与 ITL 需权衡
Ring All-Reduce
中心节点收发通信瓶颈
大消息下打满各卡带宽
通信轮次随卡数增加,对拓扑敏感

六、为什么极致优化会反过来绑定硬件

了解了上述明星技术的原理解法后,我们会发现像 FlashAttention 这样的优化,本质上是在做一件极其精细的事:重排指令和数据流,让数据在最快的位置停留更久。

但当这种优化做到极致时,它必然会走向与具体硬件架构的深度绑定,因为GPU 并不是一块均匀的“算力”:

  • 每个 SM 的寄存器和共享内存极其有限;
  • Tile 设得过大,寄存器爆掉导致并发下降;Tile 设得过小,数据搬运开销再次显现。

此外,片上共享内存存在Bank Conflict(存储体冲突)、Tensor Core 数据等待、指数计算单元 bottleneck 等物理细节,必须依赖硬件性能计数器逐项调优。

当硬件架构升级(如从 NVIDIA Hopper 跨越到 Blackwell)时,物理瓶颈会再次移动:

  • Hopper(H100/H200) 引入了 TMA(Tensor Memory Accelerator) 硬件搬运单元、异步 Tensor Core 与 Warp Specialization(分工流水线),催生了 FlashAttention-3
  • Blackwell(B200/GB200) 的 Tensor Core 算力增长远超 SRAM 带宽,不得不再次重排算子流水线,演进出 FlashAttention-4

追求通用性能时,代码只需跨平台跑通;追求极致性能时,代码必须是一份针对特定硬件流水线的物理动线图。软硬件高度协同(Co-design)已成为必然。


七、一个懂 Infra 的产品经理,最后会怎样做判断

从底层晶体管一路看到软硬件协同,我们贯通了 AI Infra 的完整物理逻辑。回到最开始的提问:产品经理了解这些,到底如何转化为实际的产品和商业决策?

1. 选型时,不只看效果榜单

同为 70B 模型,Dense 结构每个 Token 走全部网络,MoE 结构只激活部分专家;MHA/GQA/MQA 的 KV Cache 显存相差数倍;BF16/FP8/INT4 对带宽与质量影响迥异;100K 上下文与 8K 上下文对应完全不同的 Prefill 成本。模型能力接近时,架构是否契合目标硬件与流量形状,直接决定产品毛利。

2. 看性能数字时,需要明确被省略的条件

看到“性能提升 3 倍”时,追问:

  • 绝对值是多少?测的是单 Kernel 还是端到端服务?
  • 基线是弱实现还是强实现?
  • 在目标规模的真实 Prompt 和流量下是否依然成立?
  • 输入/输出长度、Batch Size、精度与并行度是多少?
  • 优化后 TTFT、ITL、P99 和单位 Token 成本如何变化?

3. 容量规划时,从请求形状(Request Shape)出发

规划容量时,只报 QPS 远远不够。100 QPS 下,平均输入 500 token 与 50K token 的 Prefill 负担完全不同;平均输出 20 token 与 2000 token 的 Decode 时间完全不同。

规划容量必须拿到:输入长度分布、输出长度分布、并发峰谷、模型精度和 SLO 目标。

4. 训练与推理的成本是有显著差异的

  • 训练是重型工厂模式:一次运行数周,关键看稳定性、故障恢复与集群扩展效率(MFU/HFU)。
  • 推理是零售餐饮模式:流量实时波动,围绕量化、PagedAttention、Chunked Prefill、推测解码(Speculative Decoding)等手段,看满足 SLO 约束下,每块钱能交付多少 Token

5. 关注技术进展

  1. 内存:HBM4 在进步,但长上下文与高并发增长更快,搬运依旧昂贵。
  2. 通信:从单卡扩展到机架(NVLink/NVSwitch),网络拓扑决定多卡能否像一台机器工作。
  3. 能源:电力供给、散热(液冷)与数据中心建设周期直接决定算力产能上限。
  4. 软件复杂度:极致性能需要跨模型、Kernel、调度与拓扑深度协同,工程复杂度与迭代成本剧增。

最后,让我们再回顾一遍

AI Infra 为什么重要?因为模型能力只有经过 Infra,才能成为用户及时拿得到、公司长期付得起的产品能力。

怎样把 AI Infra 讲明白?不要从名词开始,跟着数据走:它存放在哪里,要搬到哪里,搬一次做多少计算,为什么需要跨卡,哪一段物理链路让所有人等待。

整篇文章可以浓缩为五句话:

  1. 内存的问题在于计算能力与数据供给能力增长不对称,远不只是显存容量小。
  2. 数据离计算单元越远,容量越大,但访问与搬运成本越高;绝大多数优化都在提升近端数据复用率。
  3. Prefill 阶段属于计算密集型,Decode 阶段属于显存带宽密集型;同一个推理请求内部存在两种不同的资源需求。
  4. 标准数据并行不省模型显存;FSDP、TP、PP、EP 用不同方式拆分状态或计算,代价都是通信,且必须服从真实物理拓扑。
  5. FlashAttention、PagedAttention、连续批处理和 Ring All-Reduce,分别从算子、内存、调度和通信层减少 GPU 的无谓等待。

从基础数据结构到集群拓扑,AI Infra 的底层规律始终一致:优化永远围绕着数据的存储与搬运展开——让最昂贵的计算电路减少空等,让计算出来的每一个 Token 都能以更低延时、更低成本送到用户手中。


基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-07 02:06:18 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/908722.html
  2. 运行时间 : 0.115787s [ 吞吐率:8.64req/s ] 内存消耗:5,014.89kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7059e2929910375ffa8f9f1d59e1f0d6
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 4.22 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.11 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000808s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001422s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000695s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000957s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001382s ]
  6. SELECT * FROM `set` [ RunTime:0.000539s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001564s ]
  8. SELECT * FROM `article` WHERE `id` = 908722 LIMIT 1 [ RunTime:0.001296s ]
  9. UPDATE `article` SET `lasttime` = 1786039578 WHERE `id` = 908722 [ RunTime:0.005545s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000639s ]
  11. SELECT * FROM `article` WHERE `id` < 908722 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001191s ]
  12. SELECT * FROM `article` WHERE `id` > 908722 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001017s ]
  13. SELECT * FROM `article` WHERE `id` < 908722 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002642s ]
  14. SELECT * FROM `article` WHERE `id` < 908722 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003212s ]
  15. SELECT * FROM `article` WHERE `id` < 908722 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003957s ]
0.118986s