vLLM引擎解析-调度分析
一、vLLM 的调用方式根据 vLLM 的官方文档,它向用户提供了两种调用它的方法,分别是:
Offline Batched Inference ( 同步 ,离线批处理)
API Server For Online Serving ( 异步 ,在线推理服务),在这下面又提供了 2 种支持的 API 类型:
OpenAI-Compatible API Server (官方推荐):兼容了 OpenAI 请求格式的 server,包括 OpenAI Completions API 和 OpenAI Chat API。
Simple Demo API Server (测试开发用,官方不推荐,相关脚本也不再维护)
在代码实现上,vLLM首先实现了一个推理内核引擎(LLMEngine),在此基础上封装了上述两种调用方法 。在本系列的讲解中,我们会先以“offline bacthed inference”作为入口,详细解说内核引擎 LLMEngine 的各块细节。在此基础上我们再来看“online serving”的运作流程。
现在,让我们来看这两种调用方法的具体例子。
1.1 Off ...
CUDA学习之hello world
数据并行当现代软件应用运行缓慢时,问题通常出在数据上——数据量太大而难以处理。图像处理应用处理包含数百万到数万亿像素的图像或视频。科学应用使用数十亿的网格点来模拟流体动力学。分子动力学应用程序必须模拟数千亿个原子之间的相互作用。航空公司排班涉及数千个航班、机组人员和机场门。这些像素、粒子、网格点、相互作用、航班等等中的大多数通常可以被独立处理。例如,在图像处理中,将彩色像素转换为灰度只需要该像素的数据。模糊图像会将每个像素的颜色与附近像素的颜色平均,只需要该小邻域像素的数据。即使是看似全局的操作,例如找到图像中所有像素的平均亮度,也可以分解为许多较小的计算,这些计算可以相互独立地执行。这种对不同数据片段的独立评估是数据并行性的基础。编写数据并行代码涉及(重新)组织计算,使其围绕数据执行,以便我们可以并行执行生成的独立计算,以更快地完成整体工作——通常快得多。
任务并行性与数据并行性 在并行编程中,数据并行性并不是唯一使用的并行性类型。任务并行性在并行编程中也被广泛使用。任务并行性通常通过对应用程序的任务分解来暴露。例如,一个简单的应用程序可能需要进行矢量加法和矩阵-矢量乘法。其中每个都 ...
LLM引擎解析-框架概览
一、调用vLLM的两种方式根据vLLM的官方文档,它向用户提供了两种调用它的方法,分别是:
Offline Batched Inference ( 同步 ,离线批处理)
API Server For Online Serving ( 异步 ,在线推理服务),在这下面又提供了2种支持的API类型:
OpenAI-Compatible API Server (官方推荐):兼容了OpenAI请求格式的server,包括OpenAI Completions API和OpenAI Chat API。
Simple Demo API Server (测试开发用,官方不推荐,相关脚本也不再维护)
在代码实现上,vLLM首先实现了一个推理内核引擎(LLMEngine),在此基础上封装了上述两种调用方法 。在本系列的讲解中,我们会先以“offline bacthed inference”作为入口,详细解说内核引擎LLMEngine的各块细节。在此基础上我们再来看“online serving”的运作流程。
现在,让我们来看这两种调用方法的具体例子。
1.1 Offline Batched ...
GRPC底层传输协议-HTTP Trailer
从上一篇文章,我们知道grpc使用HTTP/2作为底层传输协议,并且在响应消息包含 3 个主要部分:响应头信息、以长度作为前缀的消息以及 trailer。那么什么是trailer呢?大家很多人前端或者后端工作中都在使用http协议,但我咨询了一些同事,都没听过http trailer,包括没在使用grpc的自己。
什么是Trailer HTTP 标头?Trailer HTTP 标头是一个响应标头,指示使用分块传输编码编码的消息的标头中是否存在一组指定的标头字段。它使发送者能够在分块消息的末尾放置附加字段以传递元数据。分块传输编码是 HTTP 版本 1.1 中包含的一种数据传输技术。要启用Trailer HTTP 标头中的trailer 字段,必须将TE 请求标头设置为trailers。用户代理准备接受的传输编码在 TE 请求标头中指定。Trailer HTTP 标头只有一个值。Trailer HTTP 标头语法是 header-name,它是在使用分块传输编码编码的消息预告片中找到的标头字段的集合。Trailer HTTP 标头的示例如下所示。
123456789101112 ...
GRPC底层传输协议
Grpc他是由谷歌开发,其中主要有以下特点:
高性能 :gRPC 使用基于二进制的协议,并采用 Protocol Buffers 进行高效的消息序列化和反序列化。它使用 HTTP/2 作为底层传输协议,支持多路复用、头部压缩和流等特性,提供了更低的延迟和更高的吞吐量。
跨语言支持 :gRPC 提供了多种编程语言的支持,如 C++, Java, Python, Go 等。通过使用 Protocol Buffers 的接口描述语言,可以自动生成客户端和服务端的代码,提供了更好的类型安全性和编译时检查。
其中使用 HTTP/2作为底层传输协议,然后我们使用proto文件生成的Java或者python代码进行服务提供者和客户端调用。那么他内部协议设计是怎样的呢?
在 HTTP/2 中,客户端和服务器端的所有通信都是通过一个 TCP 连接完成的,这个连接可以传送任意数量的双向字节流。
相关术语如下:
流(stream):在一个已建立的连接上的双向字节流。一个流可以携带一条或多条消息。帧(frame):HTTP/2 中最小的通信单元。每一帧都包含一个 ...
飞桨大模型分布式训练技术
1. 背景与挑战近年来,大模型由于良好的模型效果和广阔的应用前景,逐渐受到业界的广泛重视。主流的 AI 科技公司也站在了大模型研究的前沿,模型参数量的规模呈现快速增长的趋势。从 2018 年 1 亿参数规模的模型增长至今已达千亿参数量规模。
大模型的出现给模型训练带来极大的挑战。即使使用 A800、H800 这样的 GPU,单张 GPU 的算力和显存都是远远无法满足大模型训练需求的。为了保证大模型可训练,并提高整体训练吞吐,需要用到模型并行 + 数据并行等技术。
这张图展示的是大模型分布式训练技术的发展历程。
对于十亿及以下的模型,单卡往往就能放下全量模型参数和梯度,传统的数据并行即可即可覆盖其应用场景。当模型规模到了百亿量级以后,需要使用分组参数切片的方式将模型参数、梯度和优化器状态切分到各个卡上,保证单机可放下。当模型规模到了千亿以后,则需要同时使用模型并行、数据并行等多种并行技术混合进行高效训练。在这个阶段里,分布式并行技术从单一的基础并行策略演进为多种并行策略的组合。
当模型规模到了万亿级别以后,稠密模型已经难以高效训练,从而衍生出稀疏专家模型,也伴随着 MoE 等并行 ...
向量检索在大模型应用场景的技术和实践
1. 向量检索应用简介向量是多维数学空间里的一个点,在各维度上的坐标的一串数字。这个点就是来源于真实世界的物体进行数字化之后在数学空间的投影。那么不同点之间有一个数学关系,就是距离,距离远近就代表两个物体的相似程度。
非结构化数据转换成向量的过程称为 embedding。通过深度学习的训练,可以将真实世界数字化后的离散特征提取出来,投影到数学空间上,成为一个数学意义上的向量,同时很神奇的保留着通过向量之间的距离表示语义相似度的能力,这就是 embedding 的效果。
在大语言模型出现之前(2020 年以前),向量检索这项技术就已经发展成熟。随着深度学习的技术,广泛应用于图片、音频、视频的搜索和推荐、人脸识别、语音识别等传统人工智能应用领域。
大模型的出现改变了人机交互方式,带来了人工智能技术的新革命,一下子火起来,进入了一个大模型的时代。当然现在处于初期阶段,在实际应用上还存在很多问题。
首先是知识能力不够强,大模型记忆比较有限,比如 6 亿参数,130 亿参数,就像人的脑细胞一样,能记住的东西有限。
其次大模型训练周期和成本都很高,所以没法跟上实时热点,比如我们说 ...
LMOps工具链与千帆大模型平台
1. 从机器学习到百模大战众所周知,目前我们实现人工智能的主要技术手段是机器学习技术,特别是其中基于深层神经网络的深度学习技术。机器学习的本质是通过具有学习能力的算法、对数据进行建模的技术。深度学习借助大规模的算力解决了机器学习中特征表示的人工干预的瓶颈,在效果上取得了巨大突破。因此,机器学习成为目前人工智能的主流技术。
深度学习和生成式大模型之间的关系,如下图右侧所示,在 2012 年至 2016 年左右,像卷积神经网络、对抗生成网络、ResNet 等经典的深度学习模型,已经在计算视觉、语音识别、自然语言处理等领域取得了显著的效果提升。这些经典深度学习模型既有判别式、也有生成式,它们往往会在 ImageNet、COCO 等有标注的数据集上进行预训练,形成带有预训练权重、可以进一步进行 Fine-tuning 的预训练模型。
在 2017 年之后,Transformer 结构在自然语言处理领域首先被成功应用,在这之后以 Transformer 为基础组件的生成式大模型逐步成为视觉、自然语言处理、跨模态理解和生成领域的主流技术。这类技术通常以 Transformer 和注意力机制作为组件 ...
大规模AI高性能网络的设计与实践
1. 大模型训练对网络的要求我们先来聊聊大模型训练对网络的需求。
最近半年以来大模型持续火爆。虽然关于大模型的发展与应用还有很多的争论,但可以肯定的是,大模型能力已经成为了接下来人工智能发展的基础。
和以前的小模型相比,大模型对大规模的分布式并行训练有更强的诉求。
这一方面是因为模型本身非常大。受制于今天的 GPU 显存限制,我们不得不把一个模型分拆到很多个 GPU 上来存储。比如说,百度的文心大模型有 2600 亿个参数,但是实际上一个 80G 显存的 A800,算上训练中间的计算状态,也只能存放大概 10 亿-20 亿参数。那显然光是存放 2600 亿的模型本身,就需要一两百块 GPU。这已经是一个比较大的规模了。
另一方面,因为训练更多的参数需要更多的计算量,因此我们必须得引入更大规模的 GPU 来进行加速,所以我们需要的 GPU 又要有一个数量级的提升。
在百度我们根据一个任务的 GPU 卡数来命名训练的规模。比如百卡以下我们叫小规模,百卡到千卡我们叫中规模,千卡以上我们叫大规模,超过万卡我们则以超大规模进行命名。依照这个命名方式,我们可以说,千卡以上的大规模并行训练是大模型成 ...
GPT和BERT的差别
NLP的技术原理首先,我们要弄明白,NLP任务(自然语言处理,AI的一个技术领域,即文本类的AI任务)的核心逻辑是一个“猜概率”的游戏。
比如说,“我今天被我朋友___”,经过大量的数据训练后,AI预测空格出会出现的最高概率的词是“放鸽子了”,那么CPU就会被填到这个空格中,从而答案产生——“我今天被我朋友放鸽子了”
虽然非常不可思议,但事实就是这样,现阶段所有的NLP任务,都不意味着机器真正理解这个世界,他只是在玩文字游戏,进行一次又一次的概率解谜,本质上和我们玩报纸上的填字游戏是一个逻辑。只是我们靠知识和智慧,AI靠概率计算。
在近几年的自然语言处理领域中,BERT和GPT是两个引起广泛关注的语言模型。特别是在GPT3.5的基础上进行微调的chatGPT,持续出圈和火爆。chatGPT的火爆表明了预训练语言模型在自然语言处理领域具有巨大的潜力,并且在提高自然语言理解和生成能力方面取得了显著的进展。这可能会带来更多的应用和更广泛的接受。
BERT和GPT也都是基于预训练语言模型的思想,通过大量的语料训练而得到的高效率的语言模型。为了帮助大家更好的理解和选择不同的技术和模型,本文将着重 ...