链载Ai

标题: 分而治之:全面解析分布式分离 Inference 系统 [打印本页]

作者: 链载Ai    时间: 昨天 20:48
标题: 分而治之:全面解析分布式分离 Inference 系统

一、背景

大模型,如大语言模型(LLM)和大型多模态模型(LMM),正在改变自然语言处理和多模态任务的格局。然而,这些模型的 Inference 过程面临大计算、大内存、高时延等诸多挑战。为了应对这些问题,分布式分离 Inference 系统应运而生,旨在通过将模型的不同部分分开处理来优化性能。

大体来说,大模型 Inference 经历了从单体到分布式,再到分离式的演进,并在继续发展中:

  1. 单体 Inference 阶段(2020 年前):

五、调度策略

5.1 概述

在分离-分布式 Inference 系统中,调度策略对于实现高并发、低时延至关重要。在介绍上述的 Inference 系统时多多少少都有提到,这里不再赘述,只做简单总结。

请求调度:系统需要根据请求的特点(Prompt 长度,可预测的生成长度、优先级等)将其调度到合理的节点上。比如,Decoding 阶段通常采用 Continuous Batching 技术,将多个请求打包到一个 Micro-Batch 中处理,以缓解 Memory Bound 问题,提升 GPU 吞吐;然而过大的 Batch 又可能导致时延的增加,进而影响 SLO。此外,对于一些较短的请求,也可以适当提升优先级,减少尾部延迟,提高整体 SLO。最后,也需要充分考虑 Pipeline 的调度,尽量减少 Pipeline Bubble。

KV Cache 调度:在跨节点部署时,要合理管理 KV Cache 在各节点间的分布和一致性。通常使用数据亲和性策略,将同一个会话或上下文路由到同一节点,这样该节点保留了相关的KV Cache,无需频繁跨网络获取;但是,也要避免节点过热导致的负载不均衡问题,当节点繁忙或资源不足时,系统需要暂停向该节点转发新请求,优先利用空闲节点;对于动态负载和故障,还要保证 KV Cache 的一致性与弹性。

资源调度:资源的弹性调度也是分离式 Inference 系统中老生常谈的问题,比如系统中部署多少个 Prefill 节点,多少个 Decoding 节点,比例如何确定。输入、输出 Token 分布以及对应的模型、硬件等都会对节点的负载产生影响,因此也就需要提供详细的 Metric 指标,进行动态的资源调整,以便在满足 SLO 要求的情况下尽可能提升吞吐。

5.2 NVIDIA Dynamo KV Cache 路由

在大规模 Inference 系统中,KV Cache 对于减少重复计算、降低 Inference 成本至关重要。然而,KV Cache 的存在进一步增加了系统的复杂度,也使得路由机制变得更加具有挑战性。

在 NVIDIA 的 Dynamo 框架中,KV Cache 路由机制是智能 Router 的核心,负责根据 Request 的 KV Cache 匹配度和 Worker 的负载情况,决定将 Request 发送到哪个 Worker。

Dynamo 中包括一些最基础的路由机制:

将 Request 尽可能路由到已经存在 KV Cache 的 Worker,可以显著加速生成过程,这也是 KV Cache 路由机制的目标。这使得负载均衡策略变得更加复杂,如果路由策略不感知每个 Worker 的 KV Cache,则可能出现:

解决这个问题的最好方式是能够感知到全局视角的 KV Cache 和负载,以便 Router 能够确定一个代价函数对各个 Worker 进行打分,挑选出最合适的 Worker。如下图所示,将KV Cache 匹配度 - 负载作为代价函数,Worker 1 得分(15%-30%=-15%),Worker 2 得分(50% - 50%=0),Worker 3 得分(75% - 80%=-5%),因此 Router 选择 Worker 2。

在 NVIDIA Dynamo 中提供了 KvMetricsAggregator 来汇集各种指标,以便代价函数使用,比如:






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5