大模型推理黑科技:为什么AI有时候秒回有时候卡?
你有没有发现同样的AI有时秒回有时却慢得像蜗牛这背后不是网络问题而是一场从‘整批整批做’到‘来一个做一个’的效率革命。你有没有过这样的经历 早上问豆包 “今天天气怎么样”它秒回答案 下午让它帮你写一篇 1000 字的活动策划结果它半天蹦出一个字等得你抓耳挠腮 有时候明明是同样的 AI怎么有时候快得像闪电有时候慢得像蜗牛很多人以为这是网络的问题或者是 AI “心情不好”但其实背后藏着一套非常精妙的技术 ——AI Infra 里的推理优化技术。今天我们不用复杂的公式就用奶茶店、快递柜这些你天天见的生活例子把大模型高效推理的秘密给你讲得明明白白。你有没有发现AI 有时候秒回有时候却卡成 PPT要搞懂这个问题我们先从你家楼下的奶茶店说起。早几年的老派奶茶店是什么样的 老板站在柜台前等所有排队的客人都点完单把所有的订单都收齐了才转身进后厨开始做奶茶。 比如 10 个客人排队第一个人点完单不能立刻做要等后面 9 个人都点完老板才开始动手。 那第一个点单的人就要等后面 9 个人点单的时间还要等所有人的奶茶都做好才能拿到自己的那杯。更坑的是什么 如果最后一个人点了一杯超级复杂的奶茶 —— 要加珍珠、椰果、布丁、芋圆还要少冰半糖做这一杯要 10 分钟。 那前面 9 个点了柠檬水的客人哪怕他们的奶茶 1 分钟就能做好也得等这个复杂的奶茶做完才能一起拿到餐。这就是最早的大模型推理的状态 ——静态批处理。原来的 AI就像这个老派奶茶店老板 它要等所有用户的请求都凑齐了才开始一起处理。 所有的请求必须 “步调一致”同时开始同时结束。 可大模型是生成式的啊每个人的需求完全不一样 有的人只问 “今天天气”输出 5 个字就够了 有的人要写一篇 5000 字的小说输出要几千个 token。 这就导致GPU 大部分时间都在闲着用户还要等很久明明硬件很强却发挥不出实力。从 “整批整批做” 到 “来一个做一个”连续批处理到底是什么后来奶茶店老板发现不对啊这样效率太低了客人都跑光了。 于是他改了规则不用等所有人点完来一个点完我就做一个第一个客人点完单老板立刻进后厨做他的柠檬水1 分钟做完客人拿了就走 第二个客人点完接着做他的珍珠奶茶不用等后面的人 哪怕后面有个客人点了超级复杂的大杯奶茶也不影响前面的人前面的人该拿餐拿餐该走就走。这就是现在大模型推理里的连续批处理Continuous Batching原来的调度是 “请求级别” 的要等所有请求都准备好了才能一起处理 现在的调度直接下沉到了 “token 级别”—— 我不管你是什么请求不管你是刚输入完 prompt还是已经在生成答案了我只看你还有多少 token 没处理我能处理多少就处理多少。就像 vLLM 里的调度器它根本不管什么 Prefill 阶段、Decode 阶段它只看两个数你已经算完了多少 token你现在总共有多少 token 差多少我就给你调度多少算力来补只要不超过 GPU 的上限就行。这样一来GPU 再也不会闲着了原来可能只有 30% 的利用率现在直接拉到 90% 以上用户的等待时间直接减半这就是为什么现在的 AI哪怕同时服务几万人也能做到秒回。null解决了排队的问题新的问题又来了显存不够用了。你想啊大模型要记住你之前说过的话对吧不然你问了半天它忘了你之前说啥了那还怎么聊 这些“记忆”就是技术里说的 KV Cache要存在显存里的。原来的做法是什么 我给每个用户提前预留一大块显存。比如我预估你最多可能输出 1000 个 token那我就给你留够 1000 个 token 的显存空间不管你用不用这块空间都给你占着。可实际上呢 大部分用户问个问题输出几十个字就结束了那剩下的 900 多字的显示空间就这么白白浪费了 就像你去租房子你可能最多住 10 天房东直接给你租了一个 100 平的大房子结果你只住了 1 天剩下的 9 天房子空着谁也用不了。这可不行啊显存多贵啊这么浪费根本服务不了几个用户。那怎么办 现在的工程师想到了小区的快递柜你看快递柜是不是把整个大柜子分成了一个个小小的格子 不用给你提前租一整个大房子你有多少快递我就给你分多少小格子。 你的快递可以存在不同的格子里比如第一个快递在 5 号格第二个在 8 号格第三个在 12 号格没关系系统只要记下来你的快递都在哪些格子里就行取的时候挨个去取就好了。这就是 Paged Attention工程师把显存也分成了一个个小的 “块”每个块能存 16 个 token 的 KV 数据。 不用给你提前预留一整块大显存了你用多少我就给你分多少块。 你的 token 可以存在不同的块里系统只要用一个 “块表”记录你的 token 都在哪些块里就行。比如你的第 25 个 token我给你存在第 8 号块的第 9 个位置系统只要记下来这个位置到时候要读的时候直接去这个位置找就好了。这么一来显存的利用率直接拉满原来浪费的那些空间现在都能用上了同样的显存能服务的用户直接翻了好几倍这就是为什么现在你用 AI哪怕聊了几千字的长对话它也不会卡因为显存根本用不完。大模型 “思考” 的每一步从你输入文字到它输出答案讲完了这两个核心的优化我们再来从头到尾走一遍当你输入一句话大模型到底是怎么一步步给你输出答案的还是用生活化的例子给你讲明白。就拿你输入“帮我写个周末出游的攻略”这句话来说第一步把你的话拆成 AI 能懂的“小碎片”首先AI 要先把你输入的这句话拆成一个个小的 “词碎片”这个过程叫 Tokenize。 就像你去餐厅点单你说 “我要一份微辣的水煮鱼加一碗米饭”服务员要把你的话拆成 “水煮鱼”“微辣”“米饭” 这几个单独的菜品项不然厨房看不懂。 AI 也是一样把你的文字拆成一个个小的 token然后变成数字这样 AI 才能处理。第二步给这些碎片加上 “标签”接下来AI 要把这些数字变成它能理解的特征这个叫 Embedding。 就像服务员给每个菜品加上标签“这是主菜”“这是主食”“辣度是微辣”这样厨房就能知道怎么处理了。 AI 把每个 token变成一个向量里面包含了这个词的意思、属性这样后面的处理才能看懂。第三步核心的“思考”过程这就是 Transformer BlockAI 的核心大脑这里面的步骤就多了整理数据先把这些特征整理一下不让数据太大或者太小就像厨房把你的订单整理成统一的格式方便厨师看。生成查询和记忆然后 AI 会生成三个东西Q你现在的问题、K之前的记忆的标签、V之前的记忆的内容。就像你要做攻略你先想我现在的需求是周末出游我要从之前的记忆里找哪些地方适合周末去哪些地方的攻略我之前看过。匹配记忆找到相关的内容这就是 Attention用你的问题去匹配之前的记忆找到最相关的内容。就像你翻聊天记录找到之前你说过你喜欢爬山然后找到适合爬山的周末出游的地方。这里还有 FlashAttention就是把这些步骤合并起来不用把中间结果存来存去一次性做完节省了大量的时间和空间。别忘了原来的需求然后是残差连接就是不要忘了你原来的输入在原来的基础上修改就像你做攻略不会完全忘了你原来要的是周末出而是在原来的需求上补充内容。整合信息整理成攻略然后是 FFN把这些信息整合起来变成完整的内容就像厨师把食材处理好做成一道完整的菜。第四步输出第一个字然后重复最后AI 会根据处理好的信息预测下一个字是什么比如第一个字输出 “周”然后把这个字加到你的输入里再重复上面的步骤输出 “末”然后 “去”然后 “吧”…… 直到把整个攻略写完。你看原来这么复杂的技术拆解开来其实和我们生活里的点单、做奶茶、收快递都是一样的道理工程师只是把生活里的高效方法用到了 AI 的推理里而已。最后聊聊原来我们觉得很高大上的 AI Infra其实本质上就是在解决一个问题怎么把硬件的利用率拉满让用户用得更爽更便宜。 从静态批处理到连续批处理从整块显存到快递柜一样的 Paged Attention每一步优化都是工程师在一点点抠效率让大模型从实验室里的玩具变成我们每个人都能用的工具。你平时用 AI 的时候有没有遇到过 AI 突然卡顿的情况你觉得是哪一步出了问题评论区聊聊你的经历
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2577197.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!