
推理加速
文章平均质量分 91
记录推理加速的学习
梦星辰.
本科北航数学专业信息安全方向,硕士北航计算机专业人工智能方向
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深度解析:CPU 与 GPU 上的张量运算,为何“快”与“慢”并非绝对?
在深度学习和科学计算领域,GPU 因其强大的并行计算能力而被奉为加速的利器。一个普遍的认知是“GPU 比 CPU 快”。然而,这个看似简单的结论在实践中却充满了微妙的细节和重要的反转。当计算任务的数据规模发生变化时,“快”与“慢”的定义也会随之改变。for我们测试了三种截然不同的数据规模:极小规模 (2x2)、中等规模 (128x128) 和大规模 (4096x4096实验结果揭示了计算效率背后深刻的权衡,并对我们如何选择合适的计算硬件提供了宝贵的洞见。(完整测试代码在文末)原创 2025-08-05 00:07:25 · 329 阅读 · 0 评论 -
深度剖析PyTorch torch.compile的性能曲线与优化临界点
橙色的静态编译线和绿色的动态编译线在初始波动后,几乎保持为水平直线,远低于Eager模式。: 在模型极其简单时,编译的固定框架开销(投资)超过了它节省下来的(少量)核函数启动开销(回报)。当操作链很长时,这种“死亡千纸割”式的累积开销变得无法忽视,构成了性能的主要瓶颈。都将其视为一个整体进行优化,其执行时间几乎与操作数量无关,彻底消除了核函数启动次数带来的性能瓶颈。)组成的模型,系统性地将其操作语句数量从1增加到30,并在GPU上精确测量每次调用的平均延迟。的性能曲线则讲述了一个关于“投资回报”的故事。原创 2025-08-02 18:33:42 · 964 阅读 · 0 评论 -
深入torch.compile的黑匣子:守卫(Guards)如何决定你的代码性能
而一次因守卫失效导致的重新编译,其延迟则会飙升到毫秒(ms)级别,产生数十倍甚至上百倍的性能差异。因此,我们设计了一个高精度的计时函数,来精确测量每一次关键调用的延迟,并以此作为判断“是否发生重新编译”的黄金标准。有时,一次看似无害的外部状态变更,就可能让已编译好的、风驰电掣的代码瞬间“缓存失效”,退化到代价高昂的重新编译。得益于守卫的精确性,可以放心地修改一个对象的未被特定编译函数使用的部分,而不用担心会导致该函数的缓存失效。首先,我们需要证明守卫是真实存在的,并且它的失效会带来巨大的性能代价。原创 2025-07-31 23:58:55 · 537 阅读 · 0 评论 -
pytorch程序语句固定开销分析
然而,在这些宏观优化的背后,构成我们代码的每一条基础语句——无论是PyTorch的张量操作还是纯Python的“胶水代码”——都存在其固有的、微小的性能开销。GPU的威力在于其大规模并行性,这点开销在处理大型张量时会被完全摊销,但对于小规模、高频率的操作,延迟是必须考虑的因素。然而,普遍共识和大量测试表明,对于中到大规模的迭代,列表推导式因其在C层面的优化,性能通常会显著优于显式循环。通过量化这些基础操作的固定开销,我们能更深刻地理解代码的真实成本,从而做出更明智的决策,打造出极致性能的AI系统。原创 2025-07-31 19:59:32 · 786 阅读 · 0 评论 -
PyTorch数据选取与索引详解:从入门到高效实践
在PyTorch中,从现有张量(Tensor)中高效、准确地选取所需的数据子集是日常操作的核心。无论是准备数据批次、提取模型输出的特定部分,还是根据条件过滤数据,都离不开强大的索引机制。基础索引与切片是最直观、最常用的数据选取方式,其语法与Python的NumPy和列表非常相似。是一个非常强大的函数,常用于根据索引从源张量中“收集”数据。通过传入一个包含索引值的张量,可以一次性地从目标张量中选取多个、非连续的元素。(布尔张量)作为索引。此函数将输入张量视为一个一维张量,然后根据提供的索引选取元素。原创 2025-07-24 17:51:17 · 864 阅读 · 0 评论 -
PyTorch常用Tensor形状变换函数详解
是最常用的两个用于重塑张量形状的函数。它们都可以改变张量的维度,但前提是新旧张量的元素总数必须保持一致。函数则提供了更强大的维度重排能力,可以一次性对所有维度进行任意顺序的重新排列。这个组合会创建数据的完整物理副本,适用于需要一个独立的、可修改的新张量的场景。除了改变张量的形状,有时还需要沿着某些维度复制数据,以生成一个更大的张量。函数通过扩展长度为 1 的维度来创建一个新的、更高维度的张量。函数不复制数据、只创建视图的特性,是实现广播操作的首选。函数返回一个具有新形状的张量,这个新张量与原始张量。原创 2025-07-24 17:29:23 · 888 阅读 · 0 评论 -
PyTorch C++扩展:集成自定义CUDA内核的简明指南
PyTorch提供了卓越的性能,但为了实现极致优化或非标准操作,编写自定义CUDA C++内核是必经之路。PyTorch强大的C++扩展机制可以无缝地将自定义CUDA代码集成到Python工作流中。本指南将通过一个简单的向量加法示例(c = a + b),分步展示如何正确地构建、编译并调用一个自定义的CUDA C++内核,并特别强调避免常见编译错误的关键文件组织方法。原创 2025-07-22 00:40:49 · 806 阅读 · 0 评论 -
Triton的核心概念与简单入门
网格 (Grid)是在启动Triton核函数之前,在主机端(CPU)定义的。它告诉Triton:“对于即将开始的这项庞大任务,需要启动多少个‘工人’(程序实例)来并行处理?继续建墙的比喻,工头(CPU)在开工前会做出规划:“这堵墙总长1000米,每个工人负责建造10米。因此,我需要个工人。这个“需要100个工人”的规划,就是网格。# 在主机端 (Host/CPU) 的代码# N 是总任务量 (墙的总长度)# BLOCK_SIZE 是每个程序实例处理的数据块大小 (每个工人负责的长度)原创 2025-07-19 21:25:53 · 1289 阅读 · 0 评论 -
SGLang 推理框架深度解析:请求的调度与生命周期
它像一位经验丰富的指挥家,确保了计算密集型和访存密集型任务能够和谐共存、交错执行,从而在复杂的并发场景下,依然能够提供卓越的推理性能。SGLang 作为先进的推理框架,其内部的调度器(Scheduler)通过一套精密设计的机制,系统化地管理着每一个请求从进入到完成的完整生命周期。SGLang 允许根据不同策略对该队列进行排序,例如默认的 “lpm”(Longest Prefix Match,最长前缀匹配)策略会优先处理那些与其他请求有更长公共前缀的请求,以最大化 KV 缓存的复用率。原创 2025-07-18 21:18:27 · 837 阅读 · 0 评论 -
SGLang 推理框架核心组件解析:请求、内存与缓存的协同工作
在多用户、多请求的服务场景中,不同请求的输入(prompt)往往有重叠的前缀。一旦找到匹配的前缀,该前缀对应的所有 token 的 KV 缓存就可以被直接复用,无需重新计算。)、输入的文本序列(prompt)、生成的配置参数(如温度、最大新 token 数)以及请求当前的状态(如等待中、运行中、已完成)。这四个关键字段,分别代表了从请求到底层缓存管理的不同层面,它们之间的协同关系构成了 SGLang 高效推理的基石。这个对象是请求在系统内流转的基本单位,包含了与该请求相关的所有信息,例如请求的唯一标识符(原创 2025-07-18 21:07:31 · 919 阅读 · 0 评论 -
深入解析:Chunked Prefill 与 FlashAttention/FlashInfer 如何协同工作
分块预填充”(Chunked Prefill)是一种先进的调度策略,它通过将大型预填充任务分解,并与解码任务混合在同一个计算批次中,从而显著提升GPU利用率和系统整体吞吐量。传统的连续批处理(Continuous Batching)在处理新请求时,会执行一个完整的预填充操作,这个操作的耗时由最长的输入序列决定。在现代大语言模型(LLM)推理服务中,为了同时满足低延迟和高吞吐的需求,系统必须高效处理两种截然不同的计算负载:用于处理输入提示(Prompt)的。这类函数来处理打包好的(packed)变长序列。原创 2025-07-17 18:01:05 · 717 阅读 · 0 评论 -
SGLang 推理框架中的 ForwardMode 深度解析
在预填充期间,已经在进行解码的旧请求要么暂停,要么只能生成一个词元,这导致了解码请求的有效吞吐量下降,特别是遇到那些特别长的Prefill任务,那将会大大增加其他请求解码速度。当一个新的请求(例如,用户的提问)进入系统时,模型需要一次性处理整个输入序列(prompt),并计算出每个 token 对应的键值缓存(KV Cache)。它会生成第一个 token “北”,然后将“北”的 KV Cache 添加到已有的缓存中,接着生成“京”,循环往复,直到生成完整的答案并遇到终止符。这个过程是计算密集型的。原创 2025-07-17 17:59:24 · 1133 阅读 · 0 评论 -
大模型投机推理专业基础(2023年+2024年)
大模型投机推理(或称投机解码、投机采样)是一种用于加速大规模语言模型推理过程的技术,它通过利用多个模型的协同作用来优化推理效率。在大模型推理中,由于模型的参数量庞大,推理过程通常需要大量的计算资源和时间,而投机推理的目标是尽可能减少这种计算开销,提高推理速度。其基本原理是使用一个“草稿模型”(通常是一个相对较小且计算高效的模型)来初步生成结果,然后利用“目标模型”(即实际的大规模语言模型)对草稿结果进行验证和修正。这个过程可以分为草稿阶段和验证阶段。原创 2025-07-13 13:08:46 · 574 阅读 · 0 评论 -
CUDA Graph与torch.compile推理计算图捕获详解
首先,分析数据特征,确定几个典型或常见的张量形状。例如,在自然语言处理中,你可以为不同的序列长度定义几个桶,如。原创 2025-07-12 20:56:24 · 606 阅读 · 0 评论 -
GPU硬件资源分配举例
这意味着,一个线程块在其整个生命周期中,无论其内部的Warp是正在计算还是在等待访存,它都在持续地占用着宝贵的SM资源。这也解释了为什么单个线程块的资源消耗对整个GPU的吞吐量至关重要。如果一个线程块设计不当,消耗了过多的共享内存或寄存器,导致SM只能容纳一个块,那么该SM的硬件并行能力将无法被充分利用,从而限制了最终的性能。原创 2025-07-10 01:57:31 · 377 阅读 · 0 评论 -
GPU里面数据的迁移路径
想象一下矩阵乘法,一个数据元素会被多次使用,现在所有的重复访问都发生在这块超高速的共享内存上,完全避免了对慢速全局显存的重复请求。这是数据离开全局显存后的第一站。要理解这个现象,我们必须深入GPU内部,探索数据从海量的全局显存(HBM)流入到微小的计算核心(寄存器)所经过的两条核心路径。它的容量以GB计,带宽极高,但延迟也是最高的。它的效率高度依赖于你的访存模式是否“友好”(例如,线程块内的线程连续访问连续的内存,即。这是一个屏障,它确保了共享内存中的数据块是完整且一致的,之后所有线程才能安全地从中读取。原创 2025-07-10 01:27:36 · 279 阅读 · 0 评论 -
FlashAttention 深入浅出
标准Attention(注意力)机制是深度学习,尤其是在自然语言处理领域中一项革命性的技术,它允许模型在处理序列数据时,动态地将焦点放在输入序列的不同部分,从而赋予模型更强的表征能力。其核心思想源于人类的视觉注意力,即我们关注信息的特定部分,而非一次性处理所有信息。在模型中,这意味着在生成一个输出时,可以有选择地关注输入序列中与之最相关的部分。标准Attention,特别是。我们可以将这个过程类比于一个信息检索系统。原创 2025-07-08 20:47:13 · 600 阅读 · 0 评论 -
PagedAttention深入浅出
我们继续借助“学者与办公室”的比喻,深入探讨PagedAttention这一精妙的技术,看它是如何彻底解决先前讨论的KV Cache管理困境的。面对工作台上堆满的、大部分空白的厚重笔记本所造成的巨大浪费,一位聪明的办公室主任(vLLM框架的设计者)从计算机科学的基石——操作系统中的虚拟内存管理中获得了灵感,并提出了。其核心思想是颠覆性的:我们不再给学者分发完整的、笨重的笔记本,而是将整个办公室的“草稿纸”(GPU显存)预先统一裁切成标准大小的、独立的“便签纸”(物理块。原创 2025-07-08 15:10:00 · 597 阅读 · 0 评论 -
大模型Decoder-Only深入解析
我们以模型。原创 2025-07-04 01:30:54 · 406 阅读 · 0 评论 -
主流的Attention Backend介绍
与传统的PyTorch或TensorFlow实现不同,Triton允许开发者直接编写高度定制化的内核代码,针对注意力计算中的矩阵乘法、softmax操作等关键步骤进行优化,减少不必要的内存拷贝和计算冗余,尤其适合处理Transformer模型中长序列的注意力操作。为了解决这一瓶颈,研究者们提出了“Attention Backend”这一概念,即在计算框架之外,专门设计高效的底层实现和调度策略,以充分利用硬件资源,实现更快、更省内存的注意力运算。原创 2025-06-28 20:33:25 · 926 阅读 · 0 评论 -
Attention Backend的认识
在人工智能领域,注意力机制(Attention Mechanism)的提出标志着深度学习模型对信息处理方式的革命性转变。这种模拟人类选择性关注能力的技术,通过动态分配计算资源,使模型能够聚焦于输入数据的关键部分。随着Transformer架构的普及,注意力机制逐渐成为自然语言处理、计算机视觉等领域的核心组件。然而,当模型规模突破万亿参数量级时,传统注意力计算方式暴露出内存占用高、计算效率低等瓶颈,催生了以FlashInfer、FlashMLA为代表的专用注意力后端技术。原创 2025-06-16 19:50:04 · 907 阅读 · 0 评论 -
GPU存储计算体系,推理加速技术与传输瓶颈分析
当前主流大模型均使用KV Cache加速技术,这导致解码阶段的每次矩阵-矩阵乘法运算被简化矩阵-向量乘法,计算复杂度也由o(n^2)降低为o(n)。但是这个改进也带来了另一个问题:矩阵-向量乘法相对矩阵-矩阵乘法,计算访存比更低,传输的数据量只降为原来一半,但是计算的数据量却急剧降为几千分之一,整个运算过程的性能瓶颈卡在数据传输上面。每个层级都有其独特的存储特性以及典型的容量范围。GPU 强大的计算能力在这种情况下无法得到充分发挥,因为它受限于从相对较慢的显存中获取数据的速度。对于矩阵向量乘法这种典型的。原创 2025-04-10 11:25:46 · 876 阅读 · 0 评论 -
EAGLE-3投机采样论文阅读
EAGLE-1论文链接EAGLE-2论文链接EAGLE-3论文链接EAGLE-github链接Training-Time Test (训练时测试),顾名思义,指的是在模型训练过程中进行测试的技术。它与传统的训练后测试 (Post-Training Test) 相对应,后者是在模型训练完成后,使用独立的测试数据集评估模型的性能。通过在训练过程中引入测试,能够更早地发现问题,从而更好地指导训练过程,提高模型性能和效率。它试图将测试环节融入到模型的学习循环中,而不是仅仅作为最后验证的手段。原创 2025-04-02 19:02:31 · 1889 阅读 · 0 评论 -
模型的在线量化和离线量化
模型的离线量化 (Offline Quantization) 和在线动态量化 (Online Dynamic Quantization) 是两种不同的模型量化方法,它们在量化的时间和方式上存在显著差异。量化的目的是将模型中的浮点数参数 (例如,FP32) 转换为较低精度的整数 (例如,INT8),以减小模型大小、降低计算复杂度并加速推理。选择哪种量化方法取决于具体的应用场景和性能要求。原创 2025-02-28 19:24:34 · 997 阅读 · 0 评论 -
投机采样EAGLE-2深入研究
现代大型语言模型(LLMs)的推理计算成本高昂且耗时,而投机采样已被证明是一种有效的解决方案。大多数投机采样方法(如 EAGLE)使用静态草稿树,隐含地假设草稿 token 的接受率仅取决于它们的位置。有趣的是,作者发现草稿 token 的接受率也依赖于上下文。在论文中,作者基于 EAGLE 提出了 EAGLE-2,它在草稿建模中引入了一种新的上下文感知动态草稿树技术。这一改进利用了 EAGLE 的草稿模型具有良好校准性的事实:来自草稿模型的置信度分数能够以较小的误差近似接受率。原创 2025-01-07 11:55:34 · 1353 阅读 · 0 评论 -
投机采样EAGLE-1详解精读
自回归解码是指模型逐个生成词语(token),每个词语的生成都依赖于之前生成的所有词语。当使用KV Cache加速技术后,解码阶段的每次矩阵-矩阵乘法运算被简化矩阵-向量乘法。矩阵-向量乘法相对矩阵-矩阵乘法,计算访存比更低,这导致整个运算过程的性能瓶颈卡在数据传输上面。因此,自回归解码这种串行的生成方式是 LLM 推理速度慢的主要瓶颈。原创 2025-01-06 14:27:44 · 2560 阅读 · 0 评论 -
推理加速:投机采样经典方法
SpecInfer 投机采样利用多个小型模型(SSM)快速生成“草稿”(Draft),然后由大型模型(LLM)验证并选择,从而加速文本生成。SSM1matSSM1核心思路为:通过一系列小模型 SSM(Small Speculative Model)联合预测 LLM 输出,并将这些小模型的预测输出组织为 Token 树,树中每个分支表示一个候选 Token 序列。原创 2025-01-02 22:00:41 · 1303 阅读 · 0 评论 -
深度学习模型压缩技术分析
模型压缩是指通过各种技术手段来减小机器学习模型的大小,以减少存储空间、加快推理速度和降低计算成本的过程。这种技术可以帮助在资源受限的设备上部署更大的模型,提高模型的效率和性能。模型压缩有多种方法,包括等。剪枝是去除冗余参数或结构;量化是减少模型参数的位数以减小内存占用;知识蒸馏是将一个复杂模型的知识传递给一个简化的模型。这些技术的意义在于,通过模型压缩可以使得大型深度学习模型更适合在移动设备、边缘设备上部署,提高模型的效率和速度。原创 2024-05-25 16:39:55 · 684 阅读 · 0 评论 -
大型模型运行过程概述
和。这两个过程有着不同的目标、资源需求和技术挑战。大模型的训练是一个复杂且资源密集的过程,它首先需要收集和准备大量的高质量数据,这些数据经过清洗和预处理后将被用来指导模型学习。在模型设计阶段,工程师们会选择或开发适合任务需求的神经网络架构,对于大型语言模型来说,这通常意味着采用深度多层的解码器结构如Transformer。初始化之后,模型开始接受数据输入,在前向传播过程中生成预测输出,并通过损失函数对比预测与真实标签之间的差异来计算误差;原创 2025-01-02 14:31:02 · 664 阅读 · 0 评论 -
大模型推理加速的基础
启动阶段是大型语言模型推理过程的开端,它为解码阶段准备了必要的输入和内部状态。这个阶段涉及将用户提供的上下文或提示(prompt)转换成模型可以处理的形式,并初始化一些关键的数据结构和参数。下面是启动阶段更详细的计算细节和过程:首先,当用户向模型提供一个任务或问题时,这段文本需要被预处理。预处理包括分词(tokenization),即将文本分解为模型能够理解的最小单元——词元(tokens)。这些词元可以是单词、子词或者字符,具体取决于所使用的分词策略。原创 2025-01-02 15:13:16 · 562 阅读 · 0 评论 -
大型模型推理加速入门
除此之外,Transformer 模型中的另一个关键组件 FFN 中主要也包含两个矩阵乘法操作,但是 Token 之间不会交叉融合,也就是任何一个 Token 都可以独立计算,因此在 Decoding 阶段不用 Cache 之前的结果,但同样会出现矩阵乘矩阵操作降级为矩阵乘向量。推理加速技术是提升大型语言模型(LLM)和其他深度学习模型性能的关键,旨在减少生成预测所需的时间和计算资源,同时保持或尽量减少对输出质量的影响。这些技术覆盖了从硬件层面的优化到软件算法的改进,以及两者之间的协同工作。原创 2025-01-02 17:03:39 · 1105 阅读 · 0 评论