Continous Batching、Inflight Batching、Prefill Decode分离、SpecDecode

Continous Batching(也叫Iteration Batch,vllm是这种思路)

简单来说就是batch内的请求长度和回复长度长短不一,存在Early-Finished的情况,但是空占着GPU的情况。Orca: A Distributed Serving System for Transformer-Based Generative Models这篇论文解决了这个问题,解决思路可以参考以下两个视频:

  • Continous Batching:https://www.youtube.com/watch?v=oYUz0phWFEU&list=TLGGQ-lnizqcSg0wNzAyMjAyNQ
  • 传统的Batching:https://www.youtube.com/watch?v=DnFH9d_nHPU&list=TLGGf4I7wLCYLRIwNzAyMjAyNQ

具体来说要处理3类问题:

  • 对Early-finished Requests的处理。不同请求所生成的文本长度不一致,可能差别很大,并且不易预测。如果没有一个将已生成结束的请求从Batch中移除并提前返回结果的机制,那么只能等一个Batch内所有请求都完成生成后才返回生成结果,导致生成短文本的用户则需要多“陪跑”数秒到数十秒才能得到结果,这对于服务响应时间是不利的;
  • 对Late-joining Requests的处理。完整生成一段文本需要长达数秒或数十秒的时间,是漫长的。所以如果没有一个将新请求插入到推理Batch的机制,那么只能像CV业务那样,等前面的请求都完成推理了才进行后续请求的推理。这会导致请求需要在系统中长时间等待排队,表现为服务响应时间过长甚至不可接受;
  • Batching an arbitrary set of requests。每个请求对应的QKV Tensor的Length维度各不相同,在批量计算Attention时,需要处理此问题。诚然Padding+Masking的方法可以解决,但严重浪费算
连续时间卷积是信号处理和系统分析中的一个重要概念。在连续时间系统中,卷积描述了系统对输入信号的响应。 ### 概念 连续时间卷积是通过两个连续时间函数的积分运算来定义的。设两个连续时间函数 \(x(t)\) 和 \(h(t)\),它们的卷积 \(y(t)\) 定义为: \[y(t) = (x * h)(t)=\int_{-\infty}^{\infty}x(\tau)h(t - \tau)d\tau\] 其中 \(x(t)\) 通常是输入信号,\(h(t)\) 是系统的冲激响应,\(y(t)\) 是系统对输入信号 \(x(t)\) 的输出响应。 ### 算法 计算连续时间卷积通常有以下几种方法: 1. **解析法**:对于一些简单的函数,可以通过直接计算积分来求解卷积。例如,当 \(x(t)\) 和 \(h(t)\) 是分段常数函数或指数函数时,可以利用积分的性质进行计算。 2. **图解法**:通过将 \(x(\tau)\) 和 \(h(t - \tau)\) 进行图形变换和相乘,然后计算积分区域的面积来得到卷积结果。这种方法有助于直观理解卷积的过程。 3. **频域法**:利用傅里叶变换的性质,将时域的卷积运算转换为频域的乘法运算。具体步骤是先对 \(x(t)\) 和 \(h(t)\) 进行傅里叶变换得到 \(X(j\omega)\) 和 \(H(j\omega)\),然后计算 \(Y(j\omega)=X(j\omega)H(j\omega)\),最后对 \(Y(j\omega)\) 进行傅里叶逆变换得到 \(y(t)\)。 ### 应用 连续时间卷积在许多领域都有广泛的应用,包括: 1. **信号处理**:用于滤波、信号恢复和增强等。例如,在通信系统中,通过设计合适的滤波器(即冲激响应 \(h(t)\)),可以对输入信号 \(x(t)\) 进行滤波,去除噪声或提取特定频率成分。 2. **控制系统**:用于分析和设计线性时不变系统。通过卷积可以得到系统对各种输入信号的响应,从而评估系统的性能和稳定性。 3. **图像处理**:在图像滤波和边缘检测等方面有应用。例如,通过对图像进行卷积操作,可以实现平滑、锐化等效果。 以下是一个简单的 Python 代码示例,用于计算两个简单函数的卷积: ```python import numpy as np import matplotlib.pyplot as plt # 定义时间范围 t = np.linspace(-10, 10, 1000) # 定义两个函数 x = np.exp(-np.abs(t)) h = np.ones_like(t) * (np.abs(t) < 1) # 计算卷积 y = np.convolve(x, h, mode='same') # 绘制结果 plt.figure(figsize=(12, 4)) plt.subplot(131) plt.plot(t, x) plt.title('x(t)') plt.subplot(132) plt.plot(t, h) plt.title('h(t)') plt.subplot(133) plt.plot(t, y) plt.title('y(t) = x(t) * h(t)') plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值