惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
A
About on SuperTechFans
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
博客园 - Franky
D
Docker
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
Last Week in AI
Last Week in AI
U
Unit 42
F
Fortinet All Blogs
H
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
P
Proofpoint News Feed
月光博客
月光博客
G
Google Developers Blog

机器学习

llama.cpp 服务开启 embedding 是否稳定? 深度学习的 LLM 就像受伤的大脑 大语言模型会被其他技术取代吗? llm 训练最 dirty work 的就是数据处理! 做机器学习强烈推荐看看 MIT 18.S096 矩阵微积分 求助微信聊天记录训练 ai 请问 AI 训练大佬 : 目前大家不写 blog, stackoverflow 等,如何训练新的优质数据,还是拿 AI 数据训练自己? 想要真正理解目前的深度学习(不仅是打杂的炼丹师),需要怎样的数学基础 怎样加快 onnx 模型在 cpu 上的推理速度啊 AI 公司瞄准的顺序是浏览器、输入法、操作系统 有什么能本地跑的机器学习项目吗? 求助 使用 ddddocr 自训练模型场景下,遇到了 onnxruntime.capi.onnxruntime_pybind11_state.InvalidArgument BERT 论文复现: 经验 & 教训 求推荐一些 LLM/深度学习方面打基础的书籍或者课程 2025 年底,如果想做一个图像分类模型,用什么模型来微调比较好 目前使用 yolov8 训练了一个目标检测模型,但是上线使用效果不是很好,怎么优化? 最近看 1-2 万主机发现 3090 还是能打的 想做有声小说声音克隆, 3060Ti 能扛得住吗? [AI Glimpse 科普系列] KV Cache 的原理推导与代码实现(基于 GPT2) 关于 OCR 以及以图找图识别 这类型的英语学习视频,是用哪个模型生成? 怎么实现提取俩个图片的一些特征,然后进行特征比对 检测画面中存在漏水,给点思路 学习 AI, 跑下模型, 应该用什么 N 卡? 有没有大佬了解机器学习的 mlops 框架或者平台 如何把本地文件作为大模型的知识库 使用大语言模型进行文本分类任务需要微调吗? lima 和 colima 居然是有关系的 gpt4o 图像生成的技术讨论(自回归模型又好起来了?) [AI Glimpse 科普系列] 不到 100 行 Python 代码从零实现 LLM 的推测采样算法
LLM 静态批处理和 Continuous Batch 相关疑问的求解
huc2 · 2025-01-11 · via 机器学习

问题来自在看这篇博客时看到的图片

img1

这张图片中是静态 batch 的示意图,但我的理解似乎有所偏差,希望有大佬能答疑解惑。

问题 1:对于静态 batch 场景,同一个 batch 中不同的 sample 的 prefill 是同时完成的吗?

我的理解: 对于一个单独的短 prompt ,prefill 阶段肯定是一个比很长的 prompt 快的。但是当这 2 个长度不同的 sample 经过 padding 然后拼成了一个静态 batch 之后,也就是维度变成了 [batch_size, ..] (当然这里可能不止 2 个 sample )。在 prefill 阶段,他们肯定是同时开始的,因为 transformers 内部是很多的矩阵乘法。并且要经过很多层,比如:

emb = layer1(emb)
emb = layer2(emb)
...

上面的 emb 的维度应该也都会是 [batch_size, ....]

虽然同一个 batch 之间不同 sample 单独做 prefill 需要的时间不同,但是当他们成为一个 batch 之后,变成了一个大矩阵,他们在经过不同的 layer 的时候,都是一起一层一层过的,也就相当于他们同时开始 prefill 阶段,然后同时完成 layer1, 同时完成 layer2, ......。最后一起完成最后一层,获得第一个预测的 new_tokens ( batch 中每个 sample 都有一个 new_token)。所以,在我的理解中,prefill 阶段应该是左右对齐的。

问题 2: 以下我对 Continuous Batch 的理解是否正确?

我的理解:

  • 首先模型每次 forward 都是生成一个新的 token (无论是 prefill 还是 decoder 阶段)。prefill 完成生成第一个 new_token 后接着自回归。
  • 如果是 continous batch 配置情况下,如果有 sample 输出 end_token ,那 batch_size 就少一个,可能就可以再放一个 sample 进来。这样子的话这个新 sample 要做 prefill (目的也是生成 new token ),别的 sample 是继续在 decoder 阶段。不过别的 sample 都是有前面的 kvcache 的,所以这个时候这个新 sample 的 prefill 就拖累了旧的 sample 中的 decoder 过程,毕竟大家都还是在一个 batch 中,大家最终还是一起一层 layer 一层 layer 过。
  • 如果同一个 batch 都在 decoder 阶段,因为 kvcache 的存在大家都很快。但是只要有一个 sample 输出了 end_token, 就可能允许新的 sample 进来,这个新 sample 的 prefill 过程因为可能没有 kvcache 会拖累其他的 sample 。所以有一些工作提出要将 prefill 和 decoder 分离。

以上是我的理解,不知道有多少错误的内容,希望有大佬指正。我的描述可能有点啰嗦,抱歉。