首页 > 其他分享 >大模型推理框架 vLLM

大模型推理框架 vLLM

时间:2024-03-20 11:37:54浏览次数:23  
标签:prompt stream 框架 模型 api model vLLM 推理 generate

  1. vLLM是一个开源的大模型推理加速框架,通过PagedAttention高效地管理attention中缓存的张量,实现了比HuggingFace Transformers高14-24倍的吞吐量,就像在操作系统中管理CPU虚拟内存一样
  2. NVIDIA FasterTransformer (FT) 是一个用于实现基于Transformer的神经网络推理的加速引擎。它包含Transformer块的高度优化版本的实现,其中包含编码器和解码器部分。使用此模块,您可以运行编码器-解码器架构模型(如:T5)、仅编码器架构模型(如:BERT)和仅解码器架构模型(如:GPT)的推理。FT框架是用C++/CUDA编写的,依赖于高度优化的 cuBLAS、cuBLASLt 和 cuSPARSELt 库,这使您可以在 GPU 上进行快速的 Transformer 推理。与 NVIDIA TensorRT 等其他编译器相比,FT 的最大特点是它支持以分布式方式进行 Transformer 大模型推理。在底层,节点间或节点内通信依赖于 MPI 、 NVIDIA NCCL、Gloo等。因此,使用FasterTransformer,您可以在多个 GPU 上以张量并行运行大型Transformer,以减少计算延迟。同时,TP 和 PP 可以结合在一起,在多 GPU 节点环境中运行具有数十亿、数万亿个参数的大型 Transformer 模型。
  3. DeepSpeed-MII 是 DeepSpeed 的一个新的开源 Python 库,旨在使模型不仅低延迟和低成本推理,而且还易于访问。

一般有几个需求

  1. 统一api,这样切换模型时上游应用无感,最好是 OpenAI-compatible,其api 被主要上游框架(比如langchain)兼容
    1. 支持流式输出和普通输出
  2. 支持多实例,进而支持灰度发布等
  3. 支持通用的加速库比如vllm等
  4. prompt拼写:llm本质都是语言模型,因此提供的只有语言模型调用方式,将所有请求简化为输入一个string,输出一个string的模式。然而,从语言模型到chat应用之间仍然有一个gap:输入prompt的拼写。text-in-text-out的设计可以简化引擎开发,但是prompt拼写的难题就被丢给了用户。提供chat能力的核心需求是如何将多轮对话按照模型训练时的格式渲染成模型的input id。
  5. function call 的处理。以ReAct模板的prompt为例,在模型吐字时留上一小块buffer不返回,如果没有\nAction: 那就继续返回;如果遇到这个string,则说明模型可能要输出function call,在此收集输出直到遇到eos或者作为stop word 的\nObservation:,然后再把buffer一次性parse成函数并返回。

设计思路

  1. 因为要支持不同的llm 库或加速库,比如Transformer、vllm等,且不同的llm在一些细节上有差异,因此推理侧必须有一个统一的LLM 抽象,在Fastchat里是XXModelWorker,在xinference 里是XXLLM
  2. 将python llm 库 api化,一个api 要有一个api handler 函数,一般抽象为一个对象 作为api handler的载体,这个对象持有上面的XxLLM 执行chat/generate 方法,有时候还要支持/封装分布式、异步等细节。在Fastchat里是ModelWorker,在xinference 里是WorkerActor
  3. 不同的llm 还有很多差别的(比如加载 load_model、运行chat/generate、模型配置转换),也有很多共性,所以模型设计的分层抽象很重要,Fastchat 的思路是 提供了一个ModelAdapter(主要差异化了加载) 和一个 generate_stream_gate 函数成员(差异化text生成),inference的思路是一个模型(比如chatglm、llama等)一个XXLLM
  4. 这里的模型配置转换说的是,比如一个chat message 包含role 和content 两个部分,role=system/user/assistant 各家各有差异,但因为对外提供的接口一般是openai 风格,所以有一个转换的过程。
  5. 除了文本生成模型,还经常需要部署embedding模型、rerank模型、图生图、文生图等(入参出参与LLM 肯定不一样了),Fastchat 的方式是 让ModelWorker支持除了generate_stream_xx 外的get_embeddings、get_rerank方法,inference的思路除了LLM之外还定义了 EmbeddingModel、RerankModel等。

FastChat

如何理解FastChat 都干了什么?本质是对下面的 原始的大模型推理代码进行抽象(模型加载、模型推理=tokenizer+model)和封装,对外提供rest api。

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
你好

标签:prompt,stream,框架,模型,api,model,vLLM,推理,generate
From: https://www.cnblogs.com/muzinan110/p/18084850

相关文章

  • webui自动化框架-playwright
    playwright中文文档Playwright为现代web应用提供了跨浏览器、快速且可靠的端到端的测试能力。|Playwright中文文档|Playwright中文网(bootcss.com)playwright安装pipinstallplaywrightplaywright-浏览器安装playwright的nohead模式需要在本地安装浏览器的内核pl......
  • 界面开发框架DevExpress XAF v24.1新版预告 - 跨平台应用UI(三)
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。本文中的内容概述了XAF跨平台.NET应用UI和DevExpress.NETApp、WebAPI服......
  • ssts-hospital-web-master项目实战记录五十:项目迁移-页面模块实现(主框架-文件结构)
    记录时间:2024-03-20文件结构 翻译搜索复制......
  • 利用CrewAI框架打造高效自动化周报系统:告别手动报告,迎接智能协作
    在日常工作中,编写个人和团队的工作周报是一项既繁琐又枯燥的任务。幸运的是,这种场景非常适合利用人工智能(AI)技术来简化。尽管市面上已有多种基于GPT的智能体,如国内的文心一言、讯飞星火、智谱清言等,它们能够对用户提供的内容进行总结,但如果没有用户输入,它们便无法凭空创造内容......
  • LAMP 世界上使用最广泛的框架(安装LAMP框架)快照
    说是框架就不只是一个东西。L:Linux,一种操作系统类型,专为服务器领域服务.A:Apache,web服务器。    M:MySQL,数据库,存储项目的元数据,真实数据会存放在硬盘中。P:PHP,一种编程语言,专注在web领域。LAMP取各软件首字母,组合而成,并且都有一些共同的特性,比如开源、免......
  • Python 数据持久层ORM框架 TorToise模块(异步)
    文章目录TortoiseORM简介TortoiseORM特性TortoiseORM安装TortoiseORM数据库支持TortoiseORM创建模型aerich迁移工具简介aerich迁移工具安装aerich迁移工具使用TrotoiseORM查询数据TrotoiseORM修改数据TrotoiseORM删除数据TrotoiseORM新增数据......
  • 基于SSM框架的商城的设计与实现(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着电子商务的迅猛发展,网上购物已成为人们日常生活的一部分。基于SSM(Spring+SpringMVC+MyBatis)框架的商城系统因其轻量化、高效和易于维护等特点,成为......
  • 020_若依框架集成MQTT
    目录什么是MQTT什么是EMQMQTTX下载使用下载使用若依集成MQTT拉取若依单应用版本pom.xml导入mqtt依赖yml文件配置mqtt拷贝mqtt相关代码MqttConfigPushCallbackMqttPushClient测试订阅接收消息测试发布消息订阅接收消息存入数据库什么是MQTTMQTT_百度百科什么是EMQEMQX_百度......
  • 集合框架
    集合框架中整体的架构分为2类:Collection接口和Map接口Collection接口:用于存储单个对象的典型的实现类:List--->ArryListLinkedListSet--->HashSetThreeSetMap接口:用于存储K-V键值对双对象的典型的实现类:HashMap一、ArrayList1.1、简介数据存储:底层采用的是数组,但是采......
  • 深度学习-卷积神经网络-目标检测YOLO-v3-推理运行-55
    目录代码仓地址:https://github.com/qqwweee/keras-yolo3.git创建虚拟环境三方件安装Python3.7.5conda4.1.6pip3uninstallkeras-nightlypip3uninstall-ytensorflowpip3installkeras2.1.6pip3installtensorflow1.15.0pip3installh5py==2.10.0pipinsta......