vLLM推理服务库

一、定义

  1. 定义与目的
  2. 为什么Cache只存储K、V,而不存储Q?
  3. 为什么vllm和HF推理结果不一致?
  4. vLLM 实现原理
  5. pagedAttention 实现原理
  6. 模型部署demo

二、实现

  1. 定义与目的
    目的:减少显存、提高吞吐量。如何优化KV cache,节省显存,提高推理吞吐量,就成了LLM推理框架需要解决的重点问题。
  2. 为什么Cache只存储K、V,而不存储Q?
    在Transformer架构的注意力机制中,Q(Query)代表当前输入Token的查询信息,它需要与所有先前和当前的K(Key)进行匹配来决定注意力的分配。因为Q是专门针对当前正在处理的Token的,所以它每次都是独一无二的,即便在没有Cache的情况下,对于序列中的每个新Token,Q都会改变。
    相反,K(Key)和V(Value)通常与序列中已经处理过的Token相关,它们可以被缓存起来供后续的Token查询使用。存储K和V使得模型可以重用之前Token的信息,而不必重新计算它们,这样可以大大节省计算资源。如果存储Q值,对于每个新的Token,我们仍然需要重新计算整个Q与所有K的匹配度,这不会减少计算量。因此,只缓存KV值而不缓存Q值,是为了优化计算效率。
  3. 为什么vllm和HF推理结果不一致?
    qkv映射函数维度有差别,将vllm中的qkv_proj[768,2304]改成三个单独的q_proj[768,768]、k_proj、v_proj,生成结果会一点区别。说明Linear()的参数量对计算精度有影响(可忽略不计)。
    vllm 注意力采用pageattention,和huggingface的OPTAttention()实现不一致.
    采样方法会影响推理结果。将vllm的惩罚处理改为和HF的惩罚处理一致,推理完全结果相同!!!
    最大区别在于采样策略,HF只采用了重复性惩罚+argmax处理,而vllm中对logit根据top-p、top_k、temperatures参数进行了处理。
    参考:https://zhuanlan.zhihu.com/p/658780653
  4. vLLM 实现原理
    1. 通过 PagedAttention 对注意力 key 和 value 进行内存管理,降低显存,提高推理速度。
  5. pagedAttention 实现原理
    1. 内存中保存Key、value 值,允许内存空间不需要连续。不必浪费大量显存。方法:内存中序列的逻辑通过块表映射到物理内存中,保证其逻辑性。
    2. 内存中可以共享内存,使prompt 计算可以共享。
    6 . 模型部署demo
    1. 查看支持的模型
    https://docs.vllm.ai/en/latest/models/supported_models.html
  6. 离线部署
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "6,7"from vllm import LLM, SamplingParamsllm = LLM('/data-ai/model/llama2/llama2_hf/Llama-2-13b-chat-hf')prompts = ["Hello, my name is","The president of the United States is","The capital of France is","The future of AI is",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)outputs = llm.generate(prompts, sampling_params)# Print the outputs.
for output in outputs:prompt = output.promptgenerated_text = output.outputs[0].textprint(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")Prompt: 'Hello, my name is', Generated text: " Sherry and I'm a stay at home mom of three beautiful children."
Prompt: 'The president of the United States is', Generated text: ' one of the most powerful people in the world, and yet, many people do'
Prompt: 'The capital of France is', Generated text: ' Paris. This is a fact that is well known to most people, but there'
Prompt: 'The future of AI is', Generated text: ' likely to be shaped by a combination of technological advancements and soci'

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

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

相关文章

基于大模型训练的数字识别

创作原因 现在写电赛题,题目有识别数字的要求。但使用设备openmv使用模板匹配的算法帧率很低,且识别效果不是很好,于是我们就想到了利用神经网络训练模型来识别数字 正文部分 内容介绍 本文内容是基于openmv使用Edge Impulse训练大模型。…

爬虫工作量由小到大的思维转变---<第七十五章 > Scrapy爬虫回调函数在请求重试中的应用研究

前言: 在Scrapy框架中,利用回调函数进行请求重试的实践方法与其优劣势,与传统的中间件重试机制进行对比。通过深入分析回调函数的工作原理及其在网络爬虫项目中的应用,旨在提高网络爬虫的效率和稳健性。同时,本文将探讨…

服务攻防——应用协议ssh,rsync,proftpd,openssh,libssh

1.口令猜解 ftp-拿来文件传输的 rdp-windows远程连接 3389 ssh-linux远程连接 工具hydra 口令 1.windows 这就爆破成功了,现在,我们就可以ftp爆破,爆破出ftp的密码 爆破出来后 访问 2.ssh Rsync(配置不当,未授权…

【Docker】docker-compose简单实战

1、首先要准备好Jar包 docker-compose.yml version: "2.2.4" services:redis:image: rediscontainer_name: redisvolumes:- /redis/data:/data- /redis/redis.conf://usr/local/etc/redis/redis.confnetworks:- kewu-networkkewu:build:context: .dockerfile: dock…

[NOI Online #2 入门组] 未了

[NOI Online #2 入门组] 未了 题目描述 由于触犯天神,Sisyphus 将要接受惩罚。 宙斯命 Sisyphus 推一块巨石上长度为 L L L 的山坡。Sisyphus 匀速向上推的速度为每年 v v v 的长度(由于是匀速,故经过 1 2 \frac{1}{2} 21​ 年将能向上…

Gooxi发布最新AI服务器:加速生成式AI落地 更懂AI

近日,Gooxi发布最新训推一体AI服务器,以大容量内存和灵活的高速互连选项满足各种AI应用场景,最大可能支持扩展插槽,从而大幅提升智能算力性能,以最优的性能和成本为企业的模型训练推理落地应用提供更好的通用算力。 AI…

主从Reactor服务器

目录: 目录: 目标: 本文讲解思路: 各模块的功能以及代码: 1.服务器相关模块:服务器模块的功能是对所有的连接以及线程进⾏管理 2.协议相关模块:协议模块是对当前的Reactor模型服务器提供应…

【HarmonyOS】Stage 模型 - 应用配置文件

如图所示: Stage 模型应用配置文件主要有两类: 全局配置文件。放在 AppScope 目录下,app.json5。用来配置应用全局的信息。模块配置文件,放在每个模块里,module.json5。用来配置模块的信息。 一、全局配置文件 示…

python的取余与计算商的关系

在Python中,取余数使用的是 % 运算符。它计算一个数除以另一个数的余数,并将结果返回。 例如,如果你执行 a % b,它将返回 a 除以 b 的余数。 这在编程中有很多用途,其中一些包括: 判断奇偶性&#xff1a…

LeetCode1657确定两个字符串是否接近

题目描述 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。例如,abcde -> aecdb操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符&#xff0…

【数据可视化01】matplotlib实例3之数据统计

目录 一、引言二、实例介绍1.百分位数为横条形图2.箱线图定制化3.带有自定义填充颜色的箱线图4.箱线图5.箱线图和小提琴图6.二维数据集的置信椭圆 一、引言 matplotlib库 可以用来创建各种静态、动态、交互式的图形,并广泛应用于数据分析和数据可视化领域。 二、实…

通过Doxygen+Breathe+Sphinx生成代码文档

环境 CentOS Linux 7DoxygenBreathe, Sphinx (安装在同一python 环境下) ➜ build yum install doxygen # 安装最新版本的 Sphinx 及依赖。 # -U 将所有指定的软件包升级到最新的可用版本, 依赖项的处理取决于所使用的升级策略。 ➜ build pip3 install -U Sphinx ➜ buil…

Java并发编程——线程基础

Java并发编程的核心之一就是线程(Thread)。线程是程序执行流的最小单元,Java通过线程来实现并发编程。以下是Java线程的一些基础概念: 1. 线程的创建 在Java中,创建线程主要有两种方式: 继承Thread类&am…

贷款中介CRM管理系统解决方案

一、贷款中介行业背景介绍 随着贷款中介行业的快速发展,贷款中介业务逐渐成为企业和个人融资的重要渠道。然而,贷款中介行业存在信息不对称、风险控制不力等难题。给金融稳定带来潜在风险。 二、方案目的和意义 鑫鹿贷款中介系统解决方案旨在规范贷款中…

蓝桥杯单片机组——国赛1 各模块的基础模板

本文为续写个人专栏:蓝桥杯单片机组基础专栏 由于国赛代码体量较为庞大,各个模块涉及时序、消影、去鬼影、消冲突等操作 因此本文基于小蜜蜂老师代码风格编写,并根据实际有改动 本文用于汇总基础的模块程序,更进阶的操作请查看…

Elasticsearch查看集群信息,设置ES密码,Kibana部署

Elasticsearch查看集群信息,设置ES密码,Kibana部署 查看集群信息查看节点信息查看集群健康状态查看分片信息查看其他集群信息 Kibana部署安装设置ES密码 查看集群信息 查看节点信息 curl http://127.0.0.1:9200/_cat/nodes?v 参数说明: ip…

研究生学习---找工作

规划 研一~研二上学期完成小论文,实习,秋招 竞赛:kaggle? 面试题一般简单且为原题,笔试题目很难,不会出原题 项目 找工作软件

SwiftUI中三大渐变色的介绍

在SwiftUI中,渐变色是一种常用的视觉效果,用于创建平滑过渡的颜色变化。通过使用渐变色,我们可以实现丰富多彩的界面设计,增强用户体验。 1. 渐变色的种类和用途 种类: 线性渐变(Linear Gradient&#x…

【时隙ALOHA,CSMA(载波侦听多路访问)carrier sense mltiple access,无线局域网: CSMA/CA】

文章目录 时隙ALOHA时隙ALOHA的效率( Efficiency )纯ALOHA(非时隙)----效率低CSMA(载波侦听多路访问)carrier sense mltiple accessCSMA冲突CSMA/CD(冲突检测)边说边听(提高了信道利用率)以太网就是用的这个无线局域网: CSMA/CA无线局域网中的 MAC&#…

Transformer+Classification学习笔记

论文名称:An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale [2112.11010] MPViT: Multi-Path Vision Transformer for Dense Prediction (arxiv.org) 参考博客与视频: Vision Transformer 超详细解读 (原理分析代码解读) …