【推理优化】超详细!AIGC面试系列 大模型推理系列(2)-程序员宅基地

技术标签: 面试  AIGC面试  人工智能  AIGC  gpt  

本期问题聚焦于大模型的推理优化技术

有哪些常见的大模型推理优化技术

  1. 混合精度:通过结合FP16+FP32或BF16+FP32进行训练,可以减少模型在显存中占用的空间,从而加速推理过程。
  2. DeepSpeed分布式:使用ZeRO-1、ZeRO-2、ZeRO-3等技术,可以在多张GPU上分布式存储权重、梯度和优化器状态,降低单个GPU的显存占用。
  3. Torch FSDP + CPU Offloading:通过在推理时将部分数据从GPU转移到CPU,可以有效地管理显存使用。
  4. 3D并行:结合数据并行、模型并行和流水线并行,可以在多个维度上优化模型的训练和推理。
  5. INT8模型量化:通过对模型进行量化,使用更低的精度来存储和计算,从而减少模型大小和加速推理。
  6. 混合专家训练(Mixed-of Experts,MoE):每次只对部分参数,可以减少训练和推理时的计算量。
  7. Flash Attention:一种优化的注意力机制,可以减少推理时的计算量。

References

  1. 太通透了!大模型训练和推理优化技术最全汇总! - 知乎
  2. 大模型常见推理框架简介:vLLM、Tensorrt-LLM、DeepSpeed、Text Generation Inference | 数据 …
  3. 大模型推理加速常用手段 - 百度文库
  4. 大语言模型推理加速技术:模型压缩篇 - 知乎 - 知乎专栏
  5. LLM 大模型推理加速:技术解析与实践 - InfoQ 写作社区

介绍下通过流水线处理技术来加速大模型推理方案

流水线处理技术通过将模型推理过程分解成多个阶段,并行执行,从而提高整体的处理速度和效率。一些关键点:

  1. 分布式并行:大模型推理通常依赖于分布式并行技术,包括数据并行、模型并行、流水线并行和张量并行。这些技术通过在多个计算节点上分配任务来提高计算效率。

  2. 流水线并行(Pipeline Parallelism):这种方法将模型纵向拆分,每个GPU只包含模型的一部分层,数据在一个GPU完成运算后,传给下一个GPU继续计算。这样可以在多个GPU上同时进行不同阶段的计算,提高资源利用率。

  3. 张量并行(Tensor Parallelism):将模型横向拆分,每一层的计算都需要多个GPU合作完成。这种方式适用于单个GPU无法容纳整个模型的情况。

  4. 优化技术:包括层融合(Layer Fusion),减少数据传输并增加数学密度,以及自回归模型的推理优化,例如激活缓存(Activation Caching),以减少重复计算的成本。

  5. 推理过程:大模型推理分为prefill和decoding两个阶段。Prefill阶段计算用户输入并生成KV缓存,decoding阶段则基于已知输入序列和上一步预测出来的词计算下一个最可能的词汇的概率分布。

  6. 性能评价指标:评价大模型推理性能的指标包括吞吐量(Throughput)、首字延迟(First Token Latency)、延迟(Latency)和每秒请求数(QPS)。

通过这些技术和优化方法,可以显著提升大模型推理的速度和效率。例如,NVIDIA的FasterTransformer就是一个专门为Transformer架构设计的推理加速引擎,它利用了流水线并行和张量并行技术来加速大模型的推理过程。

References

  1. 大模型训练与推理优化技术详解 - 百度智能云
  2. AI大模型推理过程和优化技术 - 知乎 - 知乎专栏
  3. 大模型推理学习记录 - 51CTO博客
  4. 目前业界大模型推理框架很多,各有什么优缺点,应该如何选择? - 知乎
  5. 大模型推理速度飙升3.6倍,「美杜莎」论文来了,贾扬清:最优雅加速推理方案之一 - 知乎

介绍下并行计算技术来加速大模型推理的方案

一些主要的并行计算策略:

  1. 数据并行技术(Data Parallelism):这种技术将每批输入的训练数据在多个工作器(worker)之间平分,不同的样本在不同的GPU设备上完成前向推理和反向传播计算。在传播后,需要通信并规约梯度,以保证在各个工作器上进行相同的更新。

  2. 模型/张量并行技术(Model/Tensor Parallelism):在多个工作器之间划分模型的各个层,即不同层分配到不同的GPU设备上分别完成计算。模型并行性的计算和通信方法因模型结构而异,实际实现上有很大工作量,针对不同的大型语言模型(LLM)需要分别适配。

  3. 流水并行技术(Pipeline Parallelism):流水线并行通过分阶段运行模型,不同阶段之间可以流水化执行,以提高GPU利用率并减少内存消耗。

  4. 混合并行训练:结合以上几种并行技术,可以进一步优化大模型的推理和训练过程。例如,DeepSpeed框架就提供了多种并行策略来加速大模型的推理。

  5. 推理自适应并行性(Inference-adapted parallelism):允许用户通过适应多GPU推理的最佳并行策略来有效地服务大型模型,同时考虑推理延迟和成本。

  6. 推理优化的CUDA内核(Inference-optimized CUDA kernels):通过深度融合和新颖的内核调度充分利用GPU资源,从而提高每个GPU的效率。

References

  1. DeepSpeed 通过系统优化加速大模型推理 - 知乎 - 知乎专栏
  2. 大语言模型推理加速技术:计算加速篇 - 知乎 - 知乎专栏
  3. 大模型训练与推理优化技术详解 - 百度智能云
  4. 大模型分布式并行技术:从理论到实践-百度开发者中心
  5. 大模型推理加速调研(框架、方法) - 知乎 - 知乎专栏

有哪些通过硬件来加速大模型推理的方式?

加速大模型推理的硬件方法有多种,以下是一些主要技术及其简介:

  1. vLLM (Virtual Large Language Model)

    • 开发者:Nvidia
    • 核心思想:将模型的一部分保存在内存或硬盘上,只将当前计算所需的部分加载到GPU显存中,打破GPU显存限制。
    • 优势:支持PyTorch和FasterTransformer后端,可无缝适配现有模型。
  2. Tensorrt-LLM

    • 开发者:Nvidia
    • 特点:在TensorRT推理引擎基础上,针对Transformer类大模型推理优化。
    • 优势:支持多种优化技术,如kernel融合、矩阵乘优化、量化感知训练等,提升推理性能。
  3. DeepSpeed-Inference

    • 开发者:微软
    • 特点:提供推理加速能力,通过内存优化、计算优化、通信优化降低推理延迟和提升吞吐。
    • 优势:支持多GPU横向扩展,单卡可推理数百亿参数模型。
  4. Text Generation Inference (TextGen)

    • 开发者:Hugging Face
    • 特点:为自然语言生成模型提供高性能推理。
    • 优势:高度优化的核心代码,支持多GPU多节点扩展。

这些技术在降低显存占用、提升计算效率、简化开发流程等方面各有侧重,为大模型推理提供了多样化选择。软硬件协同设计、定制化推理芯片等也是值得关注的发展方向。

References

  1. 大模型常见推理框架简介:vLLM、Tensorrt-LLM、DeepSpeed、Text Generation Inference | 数据 …
  2. 进我的收藏夹吃灰吧:大模型加速超全指南来了 | 机器之心
  3. 迈向100倍加速:全栈Transformer推理优化 - 知乎 - 知乎专栏
  4. 在 CPU 上高效执行大语言模型的推理任务[译] | 宝玉的工程技术分享

模型量化是如何加速大模型推理的?

模型量化通过将模型的浮点数参数转换为低比特的整数来减少模型的大小和计算需求。这样做可以减少内存占用、降低功耗,并在支持整型计算优化的硬件上提高推理速度。具体来说,模型量化通常涉及以下几个方面:

  1. 参数减少:通过使用更少的位来表示每个权重,例如从32位浮点数(float32)转换为8位整数(int8),模型的大小可以显著减小。
  2. 计算优化:整数运算通常比浮点运算要快,特别是在专门为低比特运算设计的硬件上。
  3. 内存带宽降低:量化模型需要的内存带宽更小,因此数据传输更快,可以提高整体的推理速度。
  4. 功耗降低:由于内存访问和计算需求的减少,量化模型在运行时消耗的能量更少。

量化可以是对称的,也可以是非对称的,并且可以通过量化感知训练来进一步优化,以最小化量化过程中的精度损失。在某些情况下,量化可能会导致推理速度降低,尤其是当底层硬件没有针对整型计算进行优化时。但通常情况下,量化能够在不牺牲太多精度的情况下提高推理速度。

此外,还有一些其他技术可以与量化结合使用,例如混合精度训练分布式训练参数有效性学习等,以进一步提高大模型在有限计算资源下的推理效率。

References

  1. LLM推理加速方案介绍和实验总结 - 知乎 - 知乎专栏
  2. 目前针对大模型进行量化的方法有哪些? - 知乎
  3. 太通透了!大模型训练和推理优化技术最全汇总! - 知乎
  4. 目前业界大模型推理框架很多,各有什么优缺点,应该如何选择? - 知乎
  5. 2080 Ti就能跑70B大模型,上交大新框架让LLM推理增速11倍-腾讯云开发者社区-腾讯云

有哪些通过缓存来加速大模型推理的方式?

通过缓存来加速大模型推理的方式主要包括以下几种技术:

  1. KV Cache
    KV Cache是一种通过缓存Attention中的Key(K)和Value(V)来实现推理优化的方法。在生成过程中,仅使用输入序列中的最后一个token的注意力表示来预测下一个token,而模型会并行计算所有token的注意力表示,产生大量冗余计算。KV Cache通过缓存历史输入的token的K和V,避免每步生成都重新计算历史token的K和V以及注意力表示,从而提升推理速度。

  2. PagedAttention
    PagedAttention是vLLM推理框架中的核心技术,它通过高效地管理attention中缓存的张量来解决LLM服务中内存的瓶颈问题。传统的注意力算法需要将所有输入Token的注意力键和值张量存储在GPU内存中以生成下一个Token,而PagedAttention通过对KV Cache的有效管理,减少了内存压力并提高了推理性能。

  3. FlashAttention
    FlashAttention是一种用于优化Transformer模型推理的技术,它通过改进attention计算来减少内存占用和提高计算效率。这种方法特别适用于处理大规模的模型和数据集。

  4. MQAGQA
    这些技术也是针对大模型推理优化的方法,但具体细节较少。它们可能涉及到更高效的内存管理和计算优化策略。

这些技术通过不同的方式减少了在推理过程中的冗余计算和内存占用,从而加快了大模型的推理速度。

References

  1. 社区供稿 | 图解大模型推理优化之 KV Cache - Hugging Face - OSCHINA - 中文开源技术交流社区
  2. 目前业界大模型推理框架很多,各有什么优缺点,应该如何选择? - 知乎
  3. 大模型——推理优化——KV Cache-程序员宅基地
  4. 大模型推理加速调研(框架、方法) - 知乎 - 知乎专栏

vLLM 如何优化大模型并行推理加速

在优化大模型并行推理加速方面,vLLM采用了多种策略来提高效率和速度。以下是一些关键的优化方法:

  1. 模型压缩:通过模型参数量化,减少内存容量与带宽占用,从而提高推理速度。量化可以在训练过程中(QAT),微调阶段(QAF),或训练后(PTQ)进行。

  2. KV cache量化:在推理时,将中间结果的key和value量化后压缩存储,以增加样本吞吐。

  3. 底层优化:包括算子融合以减少kernel调用,以及使用C++实现模型推理来提高运行速度。

  4. 分布式并行推理:通过张量并行(TP)、流水线并行(PP)等技术,降低Latency并提高Throughput。

  5. 解码方式优化:如Medusa、SpecInfer、Lookahead Decoding等方法,通过并行计算和推理预测来提高解码速度。

  6. CUDA核心优化:vLLM针对CUDA核心进行了优化,确保了速度与效率。

  7. 推理内核引擎:vLLM实现了一个推理内核引擎(LLMEngine),在此基础上封装了离线批处理和在线推理服务的调用方法。

References

  1. LLM推理加速方案介绍和实验总结 - 知乎 - 知乎专栏
  2. 揭秘大模型推理加速工具:vLLM的实践与应用
  3. 图解大模型计算加速系列:vLLM源码解析1,整体架构 - 知乎
  4. LLM大模型推理加速实战:vllm、fastllm与llama.cpp使用指南
  5. LLM大模型推理加速实践:vLLM与Docker的完美结合

什么是 PagedAttention?

PagedAttention是一种创新技术,旨在显著减少大型语言模型(LLM)键值(KV)缓存的内存占用,从而使LLM更加内存高效和易于访问。这项技术由Kwon等人在他们的论文《Efficient Memory Management for Large Language Model Serving with PagedAttention》中提出。它通过将每个序列的KV缓存分割成更小、更易管理的“页面”或块来实现,每个块包含固定数量的令牌的键值向量。这样,KV缓存可以在注意力计算期间更有效地加载和访问。

简而言之,PagedAttention通过分区KV缓存到更小的块,并利用查找表进行高效访问,解决了在服务LLM时面临的显著内存挑战。这种方法不仅提高了内存效率,还增加了GPU在内存受限工作负载上的利用率,从而支持更多的推理批次。

References

  1. What is PagedAttention? - Hopsworks
  2. PagedAttention - Hugging Face

PagedAttention 技术细节

PagedAttention 是一种用于大型语言模型服务的高效内存管理技术。它的设计灵感来自操作系统中的虚拟内存分页管理技术,允许在非连续空间存储连续的KV张量。这项技术通过将自注意力机制的计算过程分解为多个较小的计算任务,实现了计算资源的有效利用。同时,采用分页技术避免了在计算过程中产生过多的中间结果,从而降低了内存消耗。

PagedAttention 技术的核心是将KV序列切分成多个固定长度的block,并在内存空间中分开保存。在计算Attention时,PagedAttention Kernel能够高效地定位并获取这些block。这种方法不仅提高了服务吞吐率,而且在模型用同一个prompt生成多个输出时,能够共用一个缓存。不同sequence能够共享同一个block,PagedAttention会通过Copy-and-write机制来确保安全的共享。

具体到CUDA实现,PagedAttention在vLLM推理框架中使用了特定的CUDA代码来优化attention计算。这包括使用页式管理KVCache以增加服务吞吐率,并利用页式内存管理同时尽量降低其对延迟的负面影响。

References

  1. vLLM皇冠上的明珠:深入浅出理解PagedAttention CUDA实现 - 知乎
  2. 图解大模型计算加速系列之:vLLM核心技术PagedAttention原理 - 知乎
  3. PagedAttention - 知乎 - 知乎专栏
  4. vLLM框架原理——PagedAttention - 知乎
  5. vLLM:利用PagedAttention实现高效、快速且经济的LLM服务

什么是Flash Attention?

Flash Attention是一种用于加速注意力计算和减少内存占用的方法。它主要应用于大型语言模型(LLM),如GPT-3、GPT-4等。Flash Attention通过利用底层硬件的内存层次结构,例如GPU的内存层次,来提高计算速度和减少内存访问开销。

其核心原理是将输入数据分块,并在每个块上执行注意力操作,从而减少对高带宽内存(HBM)的读写操作。具体来说,Flash Attention使用平铺(tiling)和重计算(recomputation)等技术,将输入块从HBM加载到SRAM(快速缓存)中,在SRAM上执行注意力操作后,再将结果更新回HBM。这样做可以减少内存读写量,实现2-4倍的时钟时间加速。

Flash Attention的另一个优点是在计算softmax函数时,不需要全量输入数据,可以分段计算。在反向传播时,不存储attention matrix(N^2的矩阵),而是只存储softmax归一化的系数,从而进一步节省内存。这使得Flash Attention在处理大规模数据和自然语言处理任务中具有很大的潜力。

References

  1. Flash Attention原理详解(含代码讲解) - 知乎 - 知乎专栏
  2. 机器学习新模型:FlashAttention简介 | 数据学习者官方网站(Datalearner)
  3. Flash Attention:高效注意力机制的突破与应用-阿里云开发者社区
  4. 论文分享:新型注意力算法FlashAttention - 知乎 - 知乎专栏

Flash Attention 技术细节?

Flash Attention 是一种用于加速注意力计算并减少内存占用的技术。它已经被应用在多个大型语言模型上,如 GPT-3、GPT-4 等。这项技术的核心是利用底层硬件的内存层次结构,通过将输入数据分块并在每个块上执行注意力操作,从而减少对高带宽内存(HBM)的读写操作。具体来说,Flash Attention 使用平铺(tiling)和重计算(recomputation)等技术,将输入块从 HBM 加载到 SRAM(快速缓存)中,在 SRAM 上执行注意力操作后,再将结果更新回 HBM。这样做可以显著减少内存读写量,实现 2-4 倍的时钟时间加速。

Flash Attention 的计算过程可以用以下数学公式表示:

S = Q K ⊤ ∈ R N × N , P = s o f t m a x ( S ) ∈ R N × N , O = P V ∈ R N × d \mathbf{S} = \mathbf{Q}\mathbf{K}^\top \in \mathbb{R}^{N \times N}, \quad \mathbf{P} = \mathrm{softmax}(\mathbf{S}) \in \mathbb{R}^{N \times N}, \quad \mathbf{O} = \mathbf{P}\mathbf{V} \in \mathbb{R}^{N \times d} S=QKRN×N,P=softmax(S)RN×N,O=PVRN×d

其中, Q , K , V \mathbf{Q}, \mathbf{K}, \mathbf{V} Q,K,V 是输入序列, N N N 是序列长度, d d d 是 token 尺寸。Flash Attention 通过优化这些计算步骤,提高了处理长序列时的效率和速度。

References

  1. Flash Attention原理详解(含代码讲解) - 知乎 - 知乎专栏
  2. GitHub - Dao-AILab/flash-attention: Fast and memory-efficient exact …
  3. 机器学习新模型:FlashAttention简介 | 数据学习者官方网站(Datalearner)
  4. 人工智能 - FlashAttention算法详解 - deephub - SegmentFault 思否
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dfagag/article/details/137978567

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签