AI架构设计6:vLLM

news/2024/7/22 1:02:45/文章来源:https://blog.csdn.net/Janexjy/article/details/139240271

训练大型语言模型以及微调的教程比比皆是,但关于在生产环境中部署它们并监控其活动的资料相对稀缺。上个章节提到了未来云原生的AI是趋势,然而涉及到云原生会比较偏技术。而在此之前为了解决大模型部署量产的问题,社区也一直在探索,目前已经有不少的工具可用于这个领域。

今天挑选几个颇具特色的主流部署工具来谈谈,例如vLLM、LLAMA.cpp 和TGI等工具,它们各自都提供各自的部署模式,本文对于数据分析师乃至数据科学家,还是刚接触AI部署的新兵,相信可以为读者打开一扇窗户进行快速的了解。

vLLM

LLM具有大量参数来执行预测,可能从3B参数量开始,然后增加到 300B,因此部署该模型需要大量资源和大量的优化工作以便于提高整体的负载,当然不是使用传统方法部署机器学习模型。

该项目来自加州大学伯克利分校的研究团队,它们对优化LLM的服务性能有着浓厚的兴趣,重点研究如何高效简洁的解决大模型的部署问题。vLLM采用了一种新的方法来解决这个问题,即巧妙的利用操作系统的虚拟内存,这种设计与传统方法相比,这可以将LLM的服务性能提高约24倍,同时仅使用GPU内存的一半。

至于如何集成,vLLM提供了一个简单的接口,让工程师可以便捷的使用Python进行开发,而无需花哨的依赖包即可将其集成。

vLLM的几项关键技术:

  • PagedAttention:核心创新,这是一种新颖的注意力机制,通过分块处理注意力键和值而不是一次性处理,当然可以配合FlashAttention协同工作。

使用 PagedAttention 将输入文本分页,生成多个较小的“页”。在每一页内,应用 FlashAttention 进行高效的注意力计算。PagedAttention 处理跨页的信息传递和聚合,减少了 KV 缓存的碎片化,确保模型能够理解跨页的全局上下文信息。FlashAttention 的高效计算方法则确保了在每一页内的计算过程快速且内存使用高效。

  • 张量并行支持:vLLM支持张量并行,将模型拆分到多个GPU上进行训练和推理的技术。

  • 易用且能立即投产:vLLM使模型部署变得非常容易,并且涵盖了实际生产中的大多数用例。计算指标以跟踪性能也很容易。

  • 广泛的模型支持:虽然添加一种的新模型可能会相当困难,但目前支持许多架构。

  • 量化和Lora支持:vLLM支持各种量化技术,如GPTQ、AWQ和 SqueezeLLM,这些技术可以非常轻松地推出,并大大优化速度和内存占用。

  • 连续批处理:批处理的大小可以动态设定,因此可应付各种负载场景。

注意力机制的计算瓶颈

目前的大模型都是基于注意力机制,它的运算则成为计算瓶颈,需要耗费大量的计算资源和计算内存。之前曾经完整的介绍了FlashAttentionv1FlashAttentionv2也是在于如何优化注意力机制的运算效率。

而在推理侧,解码器领域还有围绕着注意力机制的KV Cache优化,由于解码器是因果(即某个Token的注意力仅取决于其前面的Token),因此在每个生成步骤中都在重新计算相同的先前标记的注意力,而实际上只需要计算新标记的注意力即可。

这里就是KV Cache发挥作用的地方,通过缓存以前的Keys和Values就可以专注于计算新token的注意力。下图为一个例子,当第三个Token进来的时候可以利用缓存中的数据(紫色的数据块)。

值得注意的是这种机制需要更多的GPU HBM(若不使用GPU,则需要 CPU RAM)来缓存Key和Value的状态。

然而每个请求的KV CacheKV缓存)内存占用巨大,且会动态增长和缩减。若管理不当,这些内存会因碎片化和冗余重复而被大量浪费,从而限制批处理的大小。

PagedAttention

vLLM研发了一种名为PagedAttention的新注意力算法,该算法的灵感来自悠久的操作系统虚拟内存和分页技术。在此算法的基础上,vLLM实现了(1)KV缓存内存几乎零浪费,(2)在大模型量产过程中的服务请求之间实现灵活的KV缓存共享,从而达到节省内存的开销。

通过以后的实验进行评估,与最先进的系统(如FasterTransformer和Orca)相比,vLLM在相同延迟水平下,将流行LLM的吞吐量提高了2-4倍。对于更长序列、更大模型和更复杂的解码算法,改进更加显著。

PagedAttention是vLLM性能提升的核心,通过将KV缓存划分为块,允许在内存中不连续地存储键和值,解决了LLM 服务中内存管理的关键问题。这种方法不仅可以优化内存使用,减少高达96%的浪费,还可以实现高效的内存共享,大大降低复杂采样算法的内存开销。

计算中使用到的虚拟块会被映射到实际的物理块

多个请求同时进行,每个请求都会拥有自己的物理块

若在一次的请求中需要多次抽样,那么只需要简单的复制物理块即可。

vLLM架构

vLLM的架构如下图所示,它利用集中调度器采用分布式的方法协调GPU集群的工作执行。KV缓存管理器通过PagedAttention以分页方式有效地管理KV缓存。具体来说,KV缓存管理器通过集中调度器发送的指令来管理GPU Worker的物理KV缓存。

换句大白话,vllm通过合理且高效的内存管理实现了大模型在推理侧的性能提升。

性能对比

下面有研究人员演示通过vLLM提供LLM服务,GPU卡为A100 40g,用于使用Llama-2–13b-hf-chat进行测试。为了测试vLLM和Hugging Face之间的内存使用情况, 此示例将测试一个示例请求,然后监视GPU 使用情况。这表明 GPU 内存即将耗尽,因此Hugging Face比vLLM使用的CPU内存更多,这导致由于预留而导致GPU内存泄漏。

上图为vLLM,下图为HuaggingFace

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

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

相关文章

HNU-计算机体系结构-实验3-缓存一致性

计算机体系结构 实验3 计科210X 甘晴void 202108010XXX 文章目录 计算机体系结构 实验31 实验目的2 实验过程2.0 预备知识2.0.1 多cache一致性算法——监听法2.0.1.1 MSI协议2.0.1.2 MESI协议2.0.1.3 本题讲解 2.0.2 多cache一致性算法——目录法2.0.2.1 有中心的目录法2.0.2…

二区5分纯生信|单细胞+非负矩阵+AlphaFold+机器学习组合

说在前面 学文不看刊 这篇分析总体来说工作量不算大,scRNA联合bulkRNA分析,多种机器学习组合预测模型,最后用了AlphaFold2预测蛋白及AutoDock分子对接 非常适合小白学习和模仿,其次在筛选出核心基因后可以再加几个外部数据集观…

win10如何查看本机ip地址?三招搞定,快来试试吧

在数字化时代,IP地址作为网络设备的唯一标识,对于计算机使用者来说具有重要意义。无论是为了进行网络设置、远程连接,还是解决网络问题,了解如何查看本机IP地址都是一项必备技能。对于使用Windows 10操作系统的用户来说&#xff0…

脑机接口:是现代医学的外挂,更是瘫痪病人的豪赌

5 月 17 日,马斯克公开表示,继今年年初首次成功将大脑芯片植入患者大脑后,Neuralink 正在寻找第二位受试者接受这项手术。 5 月 20 日,美国食品药品监督管理局 (FDA) 批准了马斯克的 Neuralink 公司为第二位患者植入脑芯片&#…

算法学习笔记(7)-贪心算法

##什么是贪心算法 一种常见的解决优化类型的问题,基本的思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优解的决策,以期待获得全局最优解。 ##贪心算法与动态规划的区别(二者都为解决优化…

Android Ktor 网络请求框架

Ktor 是一个由 JetBrains 开发的用于 Kotlin 编程语言的应用框架,旨在创建高性能的异步服务器和客户端应用程序。由于完全基于 Kotlin 语言,Ktor 能够让开发者编写出简洁、可读性强且功能强大的代码,特别适合那些已经熟悉 Kotlin 的开发人员。…

mysql内存和磁盘的关系

mysql内存和磁盘的关系 1.MySQL的内存和磁盘之间的关系是密切的。MySQL的数据存储在磁盘上,但为了高效地执行查询操作,它也会将数据页(每个页通常为16KB)读入内存。MySQL的缓冲池(buffer pool)是在内存中的…

OpenMV的VisionBoard视觉识别开发板学习记录

此篇博客仅用于对VisionBoard的开发板的学习研究记录,没有教学内容。 一、资料来源 开发板资料链接 开发板环境搭建手册 开发板视频教程 板子的资料网站 openmv官方的网站 目录 一、资料来源二、针对 VisionBoard的目标识别和定位总结1. 目标识别功能1.1 物体检测…

vue 表格表头展示不下,显示。。。;鼠标悬浮展示全部

vue 表格表头展示不下&#xff0c;显示。。。&#xff1b;鼠标悬浮展示全部 <templateslot-scope"scope"slot"header"><span:title"临时证券类型"style"white-space:nowrap">{{ 临时证券类型 }}</span></templa…

YOLOV10阅读总结

GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection YOLOv10 - Ultralytics YOLO Docs https://arxiv.org/pdf/2405.14458 论文地址 最近yolo又出了个yolov10了&#xff0c;不得不感慨CV是真卷&#xff0c;毕竟yolov9也才没多久。记录一下阅读笔记。…

2024/5/28 P1247 取火柴游戏

取火柴游戏 题目描述 输入 k k k 及 k k k 个整数 n 1 , n 2 , ⋯ , n k n_1,n_2,\cdots,n_k n1​,n2​,⋯,nk​&#xff0c;表示有 k k k 堆火柴棒&#xff0c;第 i i i 堆火柴棒的根数为 n i n_i ni​&#xff1b;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下&…

【Qt】Qt框架文件处理精要:API解析与应用实例:QFile

文章目录 前言&#xff1a;1. Qt 文件概述2. 输入输出设备类3. 文件读写类3.1. 打开open3.2. 读read / readline/ readAll3.3. 写write3.4. 关闭close 4. 读写文件示例5. 文件件和目录信息类总结&#xff1a; 前言&#xff1a; 在现代软件开发中&#xff0c;文件操作是应用程序…

gif帧数修改怎么操作?一键掌握GIF帧数修改技巧!

gif帧数修改怎么操作&#xff1f;在数字化信息爆炸的时代&#xff0c;GIF动图因其生动有趣的特性而备受广大网友喜爱。然而&#xff0c;很多时候我们可能会遇到GIF动图帧数过多或过少&#xff0c;导致动画效果不尽如人意的情况。那么&#xff0c;如何对GIF动图的帧数进行修改呢…

如何创建一个vue项目?详细教程,如何创建第一个vue项目?

已经安装node.js在自己找的到的地方新建一个文件夹用于存放项目&#xff0c;记住文件夹的存放路径&#xff0c;以我为例&#xff0c;我的文件夹路径为D:\tydic 打开cmd命令窗口&#xff0c;进入刚刚的新建文件夹 切换硬盘&#xff1a; D: 进入文件夹&#xff1a;cd tydic 使…

qq音乐sign逆向

qq音乐sign参数逆向 1.概览 参数sign长度40 多次调试发现&#xff0c;前缀zzb不变 2.打日志 跟站发现是vpm&#xff0c;在apply调用打上日志断点&#xff1a; 连蒙带猜知道&#xff0c;最终字符串四部分构成&#xff0c;zzb 24DC2798 HI0TvE4tOMqzN4w88oZCjQ EE0A88FE 1.把…

pelican,一个超强的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - pelican。 Github地址&#xff1a;https://github.com/getpelican/pelican 在当今数字化时代&#xff0c;博客已经成为个人和企业分享信息、展示成果的重要途径。静态网站…

ROS基础学习-话题通信机制研究

研究ROS通信机制 研究ROS通信机制 0.前言1.话题通信1.1 理论模型1.2 话题通讯的基本操作1.2.1 C++1.2.2 Python中使用自己的虚拟环境包1.2.2.1 参考11.2.2.2 参考21.2.2.3 /usr/bin/env:“python”:没有那个文件或目录1.2.3 Python1.2.2.1 发布方1.2.2.2 订阅方1.2.2.3 添加可执…

使用 Spring HATEOAS 开发 REST 服务-浅显的理解

随笔&#xff0c;简单理解 一、restful是什么 1、第一层次&#xff08;Level 0&#xff09;的 Web 服务只是使用 HTTP 作为传输方式&#xff0c;实际上只是远程方法调用&#xff08;RPC&#xff09;的一种具体形式。 SOAP 和 XML-RPC 都属于此类 2、第二层次&#xff08;Lev…

网络原理-HTTPS协议

在前面说到HTTP中,我们通过抓包,可以看到许多信息内容,其中往往会包含一些敏感信息,这些都是明文传输,当我们的请求被黑客或者不法分子截获后,那就很危险了,因此衍生出了HTTPS协议来对传输数据进行加密。 一、加密原理 基本原理如下&#xff1a; 明文 密钥 > 密文 密文…

Java日志体系概述

一. 日志体系分类 1.1 功能分类 1.2 jar包分类 二. 以log4j2为例 2.1 slf4j-api的初始化动态绑定过程 一. 日志体系分类 1.1 功能分类 门面类 slf4j&#xff1a;Simple Logging Facade for Java&#xff0c;为java提供的简单日志Facade具体实现类 logbacklog4j1log4j2jul&…