LLM 推理 服务

news/2024/9/12 12:50:02/文章来源:https://www.cnblogs.com/mudou/p/18373214

目录
  • vLLM
    • PagedAttention:解决内存瓶颈
    • vLLM 的安装与使用

vLLM

加州大学伯克利分校的研究者开源了一个项目 vLLM,该项目主要用于快速 LLM 推理和服务。

vLLM 的核心是 PagedAttention,这是一种新颖的注意力算法,它将在操作系统的虚拟内存中分页的经典思想引入到 LLM 服务中。

配备了 PagedAttention 的 vLLM 将 LLM 服务状态重新定义:它比 HuggingFace Transformers 提供高达 24 倍的吞吐量,而无需任何模型架构更改。

总结而言,vLLM 具有如下特点:

  • 最先进的服务吞吐量;

  • PagedAttention 可以有效的管理注意力的键和值;

  • 动态批处理请求;

  • 优化好的 CUDA 内核;

  • 与流行的 HuggingFace 模型无缝集成;

  • 高吞吐量服务与各种解码算法,包括并行采样、beam search 等等;

  • 张量并行以支持分布式推理;

  • 流输出;

  • 兼容 OpenAI 的 API 服务。

vLLM 还可以无缝支持许多 Huggingface 模型,包括以下架构:

  • GPT-2 (gpt2、gpt2-xl 等);
  • GPTNeoX (EleutherAI/gpt-neox-20b、databricks/dolly-v2-12b、stabilityai/stablelm-tuned-alpha-7b 等);
  • LLaMA (lmsys/vicuna-13b-v1.3、young-geng/koala、openlm-research/open_llama_13b 等)
  • OPT (facebook/opt-66b、facebook/opt-iml-max-30b 等)。

PagedAttention:解决内存瓶颈

在自回归解码过程中,所有输入到 LLM 的 token 会产生注意力键和值的张量,这些张量保存在 GPU 内存中以生成下一个 token。这些缓存键和值的张量通常被称为 KV 缓存,其具有:

  • 内存占用大:在 LLaMA-13B 中,缓存单个序列最多需要 1.7GB 内存;
  • 动态且不可预测:KV 缓存的大小取决于序列长度,这是高度可变和不可预测的。因此,这对有效地管理 KV 缓存挑战较大。该研究发现,由于碎片化和过度保留,现有系统浪费了 60% - 80% 的内存。

为了解决这个问题,该研究引入了 PagedAttention,这是一种受操作系统中虚拟内存和分页经典思想启发的注意力算法。

与传统的注意力算法不同,PagedAttention 允许在非连续的内存空间中存储连续的键和值。

具体来说,PagedAttention 将每个序列的 KV 缓存划分为块,每个块包含固定数量 token 的键和值

在注意力计算期间,PagedAttention 内核可以有效地识别和获取这些块。

因为块在内存中不需要连续,因而可以用一种更加灵活的方式管理键和值,序列的连续逻辑块通过块表映射到非连续物理块中。物理块在生成新 token 时按需分配。

生成前: 输入序列 "Alan Turing is a computer scientist"

image-20240822094343133

在 PagedAttention 中,内存浪费只会发生在序列的最后一个块中。这使得在实践中可以实现接近最佳的内存使用,仅浪费不到 4 %。这种内存效率的提升被证明非常有用,允许系统将更多序列进行批处理,提高 GPU 使用率,显著提升吞吐量。

PagedAttention 还有另一个关键优势 —— 高效的内存共享。例如在并行采样中,多个输出序列是由同一个提示(prompt)生成的。在这种情况下,提示的计算和内存可以在输出序列中共享。

并行采样示例

image-20240822094717698

PagedAttention 自然地通过其块表来启动内存共享。

与进程共享物理页面的方式类似,PagedAttention 中的不同序列可以通过将它们的逻辑块映射到同一个物理块的方式来共享块

  1. 共享Prompt:将逻辑块映射到相同的物理块

    image-20240822095009000

  2. 序列A生成第一个token,物理块的引用技术

    image-20240822095146985

  3. 由于序列A生成了新的token,也需要同步更新存储到物理块中,这个时候会对物理块进行写入,但此时物理块的共享的,会发生写时复制,同时物理块的引用计数-1

    image-20240822095313802

  4. 序列B生成新的token,这是物理块的引用计数为1,不需要再次复制,直接在原物理块写入新生成的token

    image-20240822095533806

  5. 序列A和序列B生成第二个token,可以看到这时两个序列的第一个逻辑块还是共享的

    image-20240822095727891

  6. 序列A和序列B生成第三个token,当物理块写满后,会寻找新的空闲的物理块写入

    image-20240822095912323

  7. 序列A和序列B生成第四个token

    image-20240822095958061

PageAttention 的内存共享大大减少了复杂采样算法的内存开销,例如并行采样和集束搜索的内存使用量降低了 55%。这可以转化为高达 2.2 倍的吞吐量提升。这种采样方法也在 LLM 服务中变得实用起来。

PageAttention 成为了 vLLM 背后的核心技术。vLLM 是 LLM 推理和服务引擎,为各种具有高性能和易用界面的模型提供支持。

vLLM 的安装与使用

pip install vllm

vLLM 可以用于离线推理和在线服务。在使用 vLLM 进行离线推理任务时,你需要导入 vLLM 并在 Python 脚本中使用 LLM 类。

from vllm import LLMprompts = ["Hello, my name is", "The capital of France is"]  # Sample prompts.
llm = LLM (model="lmsys/vicuna-7b-v1.3")  # Create an LLM.
outputs = llm.generate (prompts)  # Generate texts from the prompts.

在使用 vLLM 进行在线服务时,你可以通过以下命令启动一个兼容 OpenAI API 的服务器。

python -m vllm.entrypoints.openai.api_server --model lmsys/vicuna-7b-v1.3

还可以利用与 OpenAI API 相同的格式来查询服务器

curl http://localhost:8000/v1/completions \-H "Content-Type: application/json" \-d '{"model": "lmsys/vicuna-7b-v1.3","prompt": "San Francisco is a","max_tokens": 7,"temperature": 0}'

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

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

相关文章

批量图像识别的快速遍历技巧

本周我们来介绍一下如何快速地批量遍历图片列表找到图片对应的位置或对应关系,也很感谢Q群2群lincoln同学的分享,感兴趣的同学可以戳推文详细阅读~此文章来源于项目官方公众号:“AirtestProject” 版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前…

系统缓存可以删吗,删除系统缓存的方法有哪些

系统缓存是可以清理的,这些文件在长时间积累后可能会占用大量的磁盘空间,甚至影响电脑的性能。以下是一些清理C盘缓存的方法: 一、清理系统缓存 1.使用磁盘清理工具: 打开“此电脑”,右键点击C盘,选择“属性”。在“常规”选项卡中,点击“磁盘清理”。 系统将扫描C盘上的…

关于电脑晚上自动关机的问题,系统win11

前提:由于工作需要,有时需电脑在晚上仍能保持运行,但目前突然出现电脑晚上自动关机的情况,故需寻找解决方法。 解决方案:原文地址 方法:本次主要采取原文中所提及的方法二。 step1:搜索设备管理器step2:找到系统设备step3:在系统设备中找到Intel(R) Management Engine…

Vue 之混入(mixin)详细介绍

混入(mixin)提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项(如data、methods、mounted、filters等等)。 一、注册使用 1、在main.js中全局配置import mixin from ./mixinsVue.mixin(mixin)2、组件中配置 在日常的开发中,我…

Goby 漏洞发布|泛微 e-cology v10 appThirdLogin 权限绕过漏洞【漏洞复现】

漏洞名称:泛微 e-cology v10 appThirdLogin 权限绕过漏洞 English Name:Weaver e-cology v10 appThirdLogin Permission Bypass Vulnerability CVSS core: 7.5 漏洞描述: 泛微新一代数字化运营构建平台E10,是基于原eteams平台之上全新研发,同时融合了原E9产品的所有功能,…

[VS Code扩展]写一个代码片段管理插件(二):功能实现

@目录创建和插入代码片段代码片段列表代码片段预览代码片段编辑自定义映射默认映射自动完成项目地址 创建和插入代码片段 VS Code扩展提供了数据存储,其中globalState是使用全局存储的Key-Value方式来保存用户状态,支持在不同计算机上保留某些用户状态,详情请参考官方文档 若…

DLAFormer:微软提出多任务统一的端到端文本分析Transformer模型 | ICDAR 2024

论文提出新颖的基于Transformer的端到端方法DLAFormer,在统一的模型中集成多个文档布局分析任务,包括图形页面对象检测、文本区域检测、逻辑角色分类和阅读顺序预测。为了实现这一目标,将各种DLA子任务视为关系预测问题并提出了统一标签空间方法,使得统一关系预测模块能够有…

MySql Excel 数据导入

mysql工具:Navicat Premium 15 导入文件:file_Excel.xlsx 1.选择要导入到的表,右键选择导入向导,先择excel, 2.选择导入的数据文件,勾选excel的表名 3.设置字段选项,通配符 4.选择目标表,也可以自动新建表 5.字段对应关系展示,不匹配的会跳过 6.导入模式,追加或覆盖,…

Debian12+openresty1.25.3.2 部署 markdown在线编辑器 Editor.md

openresty的下载安装步骤参考: http://openresty.org/cn/linux-packages.html#debian 安装完成后:conf目录: /etc/openresty -> /usr/local/openresty/nginx/conf/html目录: /usr/local/openresty/nginx/htmlEditor.md 部署: cd /usr/local/openresty/nginx/htmlgit cl…

SLAB:华为开源,通过线性注意力和PRepBN提升Transformer效率 | ICML 2024

论文提出了包括渐进重参数化批归一化和简化线性注意力在内的新策略,以获取高效的Transformer架构。在训练过程中逐步将LayerNorm替换为重参数化批归一化,以实现无损准确率,同时在推理阶段利用BatchNorm的高效优势。此外,论文设计了一种简化的线性注意力机制,其在计算成本较…

神了!两个开源的高仿外卖项目!

大家好,我是 Java陈序员。 今天,给大家推荐两个高仿的外卖项目!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。高仿饿了么 项目简介 vue2-elm —— 一个基于 Vue2 + Vuex 构建具有 45 个页面的高仿饿了么项目,涉及注册、登…

C++ wsl2 ubuntu 环境配置

目前学习C++,配合Ubuntu进行开发, IDE 使用Clion,这里记录一下环境准备 WSL2 C++一般是用在linux下,这里就用Ubuntu进行开发,考虑到window系统,这里准备用wsl2. 虚拟化 wsl2 要系统支持虚拟化,一般在bios中进行处理,成功之后,任务管理器 --> 性能适用于Linux的Wind…