在大语言模型(LLM)应用中,用户请求与模型响应的长度差异、模型在Prompt和Generate阶段生成的Token数量的随机性,以及GPU资源占用的不确定性,使得传统负载均衡策略难以实时感知后端负载压力,导致实例负载不均,影响系统吞吐量和响应效率。EAS推出LLM智能路由组件,基于LLM特有的Metrics动态分发请求,均衡各推理实例的算力与显存分配,提升集群资源利用率与系统稳定性。
工作原理
组件功能介绍
智能路由是由LLM Gateway、LLM Scheduler以及LLM Agent三个组件组合而成。
- LLM Gateway - 主要负责用户请求流量的转发: - 协议支持:支持HTTP(HTTP_SSE)和WebSocket协议。 
- 缓冲限流:当后端推理实例负载较高且Waiting队列中已有请求时,新进入的请求不进行调度将缓存在LLM Gateway中,待选择合适的实例后再进行转发。 
 
- LLM Scheduler - 是LLM智能路由的核心组件,负责选择当前后端较优的推理实例。 - 新版支持基于Prompt前缀匹配的调度(需后端引擎开启preifix-caching功能),并根据实例负载和关键指标选择最优推理实例。 
- LLM Agent - 该组件随推理实例一起部署,主要负责以下功能: - 保活与异常处理:与LLM Scheduler保持心跳联系,实时监听推理进程的健康情况,在推理实例异常时,主动与LLM Scheduler联系,并将该实例摘除,并在恢复后重新接入服务列表。 
- 指标采集与上报:采集推理引擎相关指标(如waiting队列长度、KV Cache的使用率、每秒输入/输出Token数等),并主动上报给LLM Scheduler。 
- 自动探测推理框架:支持自动识别后端推理框架(如Blade-LLM、vLLM、SGLang),减少手动配置需求。 
 
实现流程
LLM智能路由本质上是一种特殊的EAS服务,必须和推理服务部署在同一个服务群组下,才能正常工作。部署LLM智能路由和推理服务后,LLM智能路由能够将请求智能调度给后端推理服务,具体实现流程如下:
- 注册实例:LLM Agent等待LLM推理引擎ready(可接受处理请求)后,主动向LLM Scheduler注册,实时采集并上报相关引擎指标。 
- 流量接入:LLM Gateway作为智能路由的流量入口,负责请求接收与转发,目前支持常用的HTTP(HTTP_SSE)以及websocket协议。 - 如果智能路由的名称是llm_gateway,它所在的分组是group_llm_gateway,则访问地址为 - http://********.cn-beijing.pai-eas.aliyuncs.com/api/predict/group_llm_gateway.llm_gateway/v1/chat/completions。
- 请求调度与转发:LLM Gateway接收到请求后,会将请求相关信息发给LLM Scheduler,调度策略基于当前指标的评估选择一个最佳的后端实例,返回给LLM Gateway,LLM Gateway再将请求发送给指定的后端实例进行推理。 
Failover机制
描述LLM智能路由针对异常情况的处理能力:
- LLM GateWay:作为流量接入层,实例数一般大于等于2。当某个实例发生故障时,流量会自动切换至其他健康实例,从而保证服务的持续可用性。 
- LLM Scheduler:作为一个请求调度模块,为了解决全局调度问题,目前设计为单实例运行。当LLM Scheduler出现故障后,在LLM Gateway感知到LLM Scheduler不可用时,会自动切换到轮询策略,将请求转发给后端推理实例。待LLM Scheduler恢复正常后,系统将重新启用调度逻辑,恢复正常的工作模式。 
- LLM Agent:设计目的是不侵入推理框架,同时具备良好的扩展性,以支持多个LLM推理引擎。当LLM Agent出现故障时,Scheduler会将该实例从服务列表中移除,确保流量不再转发至该实例,而转发至其他健康实例上。 
- 推理引擎(BladeLLM/vLLM/SGLang):本身具有不稳定因素,一旦发生故障,LLM Agent会立即感知并将该实例从Scheduler的服务列表中移除,暂停其流量分配。待该实例恢复正常后,再重新加入服务列表,继续承载流量。 
多推理引擎支持
由于每个LLM推理引擎的/metrics接口返回的指标信息存在差异,LLM Agent负责对这些指标进行采集并统一格式化处理后上报。LLM Scheduler无需关注具体推理引擎的实现细节,只需基于统一化指标进行调度算法的编写。目前支持的LLM推理引擎及其对应的采集指标如下:
| LLM推理引擎 | 指标 | 说明 | 
| Blade_LLM | decode_batch_size_mean | 正在运行的请求数。 | 
| wait_queue_size_mean | 在排队等待的请求数。 | |
| block_usage_gpu_mean | GPU KV Cache的使用率。 | |
| tps_total | 每秒总共处理的Token数。 | |
| tps_out | 每秒生成的Token数。 | |
| vLLM | vllm:num_requests_running | 正在运行的请求数。 | 
| vllm:num_requests_waiting | 在排队等待的请求数。 | |
| vllm:gpu_cache_usage_perc | GPU KV Cache的使用率。 | |
| vllm:prompt_tokens_total | 总Prompt的Token数。 | |
| vllm:generation_tokens_total | 生成的总的Token数。 | |
| SGLang | sglang:num_running_reqs | 正在运行的请求数。 | 
| sglang:num_queue_reqs | 在排队等待的请求数。 | |
| sglang:token_usage | KV Cache的使用率。 | |
| sglang:prompt_tokens_total | 总Prompt的Token数。 | |
| sglang:gen_throughput | 每秒生成的Token数。 | 
使用限制
- LLM智能路由应用于LLM推理场景,后端实例的推理框架仅支持BladeLLM、vLLM和SGLang。 
- 只有关联多个推理实例,即与多个推理实例在同一服务群组中,LLM智能路由的功能价值才能得以发挥。 
- 部署LLM智能路由时,请确保与大语言模型(LLM)服务需选择相同的推理框架。 
- 仅在部署大语言模型服务时支持选择智能路由,更新服务时不支持该选项。 
部署服务
部署LLM智能路由服务
支持以下两种部署方式:
方式一:通过控制台部署
- 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。 
- 在模型在线服务(EAS)页面,单击部署服务,选择以下任意一种部署方式: - 自定义模型部署>自定义部署。 
- 场景化模型部署>LLM大语言模型部署。 
 
- 在服务功能区域,打开LLM智能路由开关,然后在下拉列表中,单击新建LLM智能路由。  
- 在新建LLM智能路由配置面板中,配置以下关键参数,然后单击部署。 - 参数 - 描述 - 基本信息 - 服务名称 - 自定义服务名称,例如llm_gateway。 - 资源配置 - 部署资源 - LLM-智能路由的资源配置。默认配置如下: - 最小实例数:默认为2。建议您将最小实例数至少设置为2,以确保智能路由能够多实例运行。 
- CPU:默认为2核。 
- 内存:默认为4 GB。 
 - 调度资源 - LLM-Scheduler调度资源。默认为: - CPU:2核。 
- 内存:4 GB。 
 - 推理引擎 - 请选择您在镜像中使用的推理框架,目前支持以下框架类型: - PAI-BladeLLM 
- vLLM 
- SGLang 
 - 调度策略 - 系统基于调度策略选择后端最佳推理实例。支持以下几种调度策略: - 请求匹配:KV Cache亲和性调度,是一种综合性调度策略,基于多项指标进行决策。将相似请求转发到对应缓存KV-Cache的实例中处理,从而使请求的处理效率最大化。使用时,需将引擎的prefix-caching功能打开。 
- 基于LLM指标:基于LLM服务的各项监控指标,智能分配服务流量,保证资源利用效率最大化。 
- 最少请求:将请求尽可能均匀地分配到各个服务器上,以减少某些服务器过载的可能性。该策略优先选择当前请求数最少的服务器,从而平衡服务器的负载。 
- PD分离:在Prefill-Decode分离的LLM部署方案中,选择该策略可最大化提升调度效率。 
 
部署成功后,系统会自动创建一个群组服务,命名格式为group_LLM智能路由服务名称。您可以前往模型在线服务(EAS)页面的灰度发布页签进行查看。
由于智能路由与服务队列存在冲突,只能在服务群组中添加其中一个。
方式二:通过JSON独立部署
- 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。 
- 在模型在线服务(EAS)页面,单击部署服务,然后在自定义模型部署区域,单击JSON独立部署。 
- 在JSON文本编辑框中配置以下内容,然后单击部署。 - 其中关键配置说明如下,其他参数配置说明,请参见JSON部署。 - metadata.type:配置为LLMGatewayService,即可部署LLM智能路由服务。服务部署成功后,EAS会自动创建一个组合服务,包含LLM-Gateway和LLM-Scheduler,其中 - LLM-Gateway的资源使用该服务的配置。 
- LLM-Scheduler默认的资源配置为4核CPU和4 GB内存。 
 
- metadata.instance:即LLM-Gateway实例数,建议至少设置为2,以防止单点故障。 
 - 配置文件内容示例如下,您可以使用基础配置部署LLM智能路由服务,如果基础配置无法满足您的需求,您还可以进行高阶配置。 - 基础配置: - { "cloud": { "computing": { "instance_type": "ecs.c7.large" } }, "metadata": { "type": "LLMGatewayService", "cpu": 4, "group": "group_llm_gateway", "instance": 2, "memory": 4000, "name": "llm_gateway" } }
- 高阶配置: - { "cloud": { "computing": { "instance_type": "ecs.c7.large" } }, "llm_gateway": { "infer_backend": "vllm", "max_queue_size": 128, "retry_count": 2, "wait_schedule_timeout": 5000, "wait_schedule_try_period": 500 }, "llm_scheduler": { "cpu": 4, "memory": 4000, "policy": "prefix-cache" }, "metadata": { "cpu": 2, "group": "group_llm_gateway", "instance": 2, "memory": 4000, "name": "llm_gateway", "type": "LLMGatewayService" } }- 其中关键配置说明如下: - 配置 - 说明 - llm_gateway.infer_backend - 大语言模型使用的推理框架,支持: - vllm 
- bladellm 
- sglang 
 - 未配置时,系统可根据LLM服务配置自动识别推理引擎。 - llm_gateway.max_queue_size - LLM Gateway缓存队列的最大长度,默认是512。 - 当超过后端推理框架处理能力时,多余的请求会缓存在该队列,等待调度。 - llm_gateway.retry_count - 重试次数,默认是2。当后端推理实例异常时,进行请求重试并转发到新的实例。 - llm_gateway.wait_schedule_timeout - 当后端引擎处于满负荷时,请求会间隔的尝试进行调度。该参数表示尝试调度地时间,默认为10秒。 - llm_gateway.wait_schedule_try_period - 表示每次尝试调度的间隔时间,默认为1秒。 - llm_scheduler.cpu - 指定LLM-Scheduler的CPU,默认为4核。 - llm_scheduler.memory - 指定LLM-Scheduler的Memory,默认为4 GiB。 - llm_scheduler.instance_type - 指定LLM-Scheduler的实例规格,与llm_scheduler.cpu/llm_scheduler.memory二选一配置,因该规格已经定义了CPU核数和内存大小,无需单独配置CPU和Memory。 - llm_scheduler.policy - 调度策略,取值如下: - prefix-cache(默认值):KV Cache亲和性调度,是一种综合性调度策略,基于多项指标进行决策(包括llm-metric-based和least-request指标信息)。将相似请求转发到对应缓存KV-Cache的实例中处理,从而使请求的处理效率最大化。使用时,需将引擎的prefix-caching功能打开。 - llm-metric-based:基于LLM服务的各项监控指标,智能分配服务流量,保证资源利用效率最大化。 - least-request:将请求尽可能均匀地分配到各个服务器上,以减少某些服务器过载的可能性。该策略优先选择当前请求数最少的服务器,从而平衡服务器的负载。 - pd-split:在Prefill-Decode分离的LLM部署方案中,选择该策略可最大化提升调度效率。 
 
 
部署大语言模型(LLM)服务
您可以通过EAS场景化部署一键部署LLM大语言模型服务,也可以通过Model Gallery实现一键部署。本文以EAS场景化部署为例,具体操作步骤如下:
- 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。 
- 在模型在线服务(EAS)页面,单击部署服务。然后在部署服务页面,选择LLM大语言模型部署,并配置以下关键参数,其他参数配置说明,请参见自定义部署。 说明- 请选择与LLM智能路由服务一致的推理引擎。 
- 当使用vLLM加速部署,并且LLM智能路由服务的调度策略选择请求匹配时,需将引擎的prefix-caching功能打开。 
- 支持通过单击右上角的切换为自定义部署按钮,更新相关参数(如运行命令等)。 
 - 参数 - 描述 - 基本信息 - 版本选择 - 支持选择以下两种版本: - 开源模型一键部署:使用该版本时,请选择支持vLLM、BladeLLM或SGLang加速引擎的模型类别。 
- 高性能部署:使用BladeLLM引擎快速部署LLM服务。请选择镜像版本和模型配置。 
 - 服务功能 - LLM智能路由 - 打开LLM智能路由开关,并选择已创建的LLM智能路由。 
- 参数配置完成后,单击部署。 
访问服务
获取服务访问地址和Token
- 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。 
- 单击LLM智能路由服务的服务方式列下的调用信息。 
- 在调用信息页面,查询服务访问地址和Token。  
- 配置服务访问地址。 - 访问地址配置规则:<LLM智能路由访问地址>/<LLM服务请求接口>。其中: - <LLM智能路由访问地址>为步骤3查询的访问地址,例如 - http://175805416243****.cn-beijing.pai-eas.aliyuncs.com/api/predict/group_llm_gateway.llm_gateway。
- <LLM服务请求接口>为LLM服务API请求接口,例如: - v1/completions。
 
- 访问地址示例值为: - http://175805416243****.cn-beijing.pai-eas.aliyuncs.com/api/predict/group_llm_gateway.llm_gateway/v1/completions
 
访问测试
在终端中,执行以下命令访问服务。
curl -H "Authorization: xxxxxx" -H "Content-Type: application/json" http://********.cn-beijing.pai-eas.aliyuncs.com/api/predict/<服务群组名称>.<LLM智能路由名称>/v1/completions -d '{"model": "llama2", "prompt": "I need your help writing an article. I will provide you with some background information to begin with. And then I will provide you with directions to help me write the article.", "temperature": 0.0, "best_of": 1, "n_predict": 34, "max_tokens": 34, "stream": true}'其中:
- "Authorization: xxxxxx":配置为上述步骤已获取的Token。 
- http://********.cn-beijing.pai-eas.aliyuncs.com/api/predict/<服务群组名称>.<LLM智能路由名称>/v1/completions:更新为上述步骤已配置的访问地址。
返回结果示例如下:
data: {"id":"0d9e74cf-1025-446c-8aac-89711b2e****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":"\n"}],"object":"text_completion","usage":{"prompt_tokens":36,"completion_tokens":1,"total_tokens":37},"error_info":null}
data: {"id":"0d9e74cf-1025-446c-8aac-89711b2e****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":"\n"}],"object":"text_completion","usage":{"prompt_tokens":36,"completion_tokens":2,"total_tokens":38},"error_info":null}
data: {"id":"0d9e74cf-1025-446c-8aac-89711b2e****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":""}],"object":"text_completion","usage":{"prompt_tokens":36,"completion_tokens":3,"total_tokens":39},"error_info":null}
...
[DONE]查看服务监控指标
服务测试完成后,您可以通过查看服务监控指标,来了解服务的性能。具体操作步骤如下:
- 在模型在线服务(EAS)页面,单击已部署的LLM智能路由服务的日志/监控列下的  。 。
- 在监控页签,查看以下指标信息。 - Token Throughput - LLM输入和输出Token的吞吐量  - IN:表示LLM输入Token的吞吐量。 
- OUT:表示LLM输出Token的吞吐量。 
 - GPU Cache Usage - LLM Engine GPU KV Cache的使用率  - Engine Current Requests - LLM Engine实时请求并发数  - Running:LLM Engine正在执行的请求数量。 
- Waiting:LLM Engine等待队列中的请求数量。 
 - Gateway Current Requests - LLM智能路由实时请求数  - Total:LLM智能路由当前总共接收的请求数量(总实时并发数)。 
- Pending:LLM Engine未处理的缓存在LLM智能路由中的请求数。 
 - Time To First Token - 请求的首包延时  - Max:请求首包延迟的最大值。 
- Avg:请求首包延迟的平均值。 
- Min:请求首包延迟的最小值。 
- TPxx:请求首包延迟的各个分位点值。 
 - Time Per Output Token - 请求的每包延时  - Max:请求每包延迟的最大值。 
- Avg:请求每包延迟的平均值。 
- Min:请求每包延迟的最小值。 
- TPxx:请求每包延迟的各个分位点值。