使用LLM智能路由提升推理效率

在大语言模型(LLM)应用中,用户请求与模型响应的长度差异、模型在PromptGenerate阶段生成的Token数量的随机性,以及GPU资源占用的不确定性,使得传统负载均衡策略难以实时感知后端负载压力,导致实例负载不均,影响系统吞吐量和响应效率。EAS推出LLM智能路由组件,基于LLM特有的Metrics动态分发请求,均衡各推理实例的算力与显存分配,提升集群资源利用率与系统稳定性。

工作原理

架构概览

LLM智能路由是由LLM GatewayLLM Scheduler以及LLM Agent三个核心组件构成,它们协同工作,为后端的大语言模型推理实例集群提供智能的流量分发和管理。

  • LLM Gateway:作为流量入口,负责接收所有用户请求,并根据LLM Scheduler的决策将请求转发到指定的后端推理实例。它支持HTTP(HTTP_SSE)和WebSocket协议,并在后端推理实例高负载时可缓存请求。

  • LLM Scheduler:作为智能路由的大脑,负责执行调度算法。它从所有LLM Agent处汇集实时指标,并根据预设的调度策略(如基于前缀缓存)为每个到来的请求计算出最优的目标实例。

  • LLM Agent:作为Sidecar容器与每个推理实例一同部署。它负责采集推理引擎的性能指标,与LLM Scheduler保持心跳,并上报实例的健康状况和负载数据。

image

实现流程

LLM智能路由本质上是一种特殊的EAS服务,必须和推理服务部署在同一个服务群组下,才能正常工作。部署LLM智能路由和推理服务后,LLM智能路由能够将请求智能调度给后端推理服务,具体实现流程如下:

  1. 实例注册:推理服务启动后,LLM Agent等待推理引擎就绪,然后向LLM Scheduler注册该实例,并开始周期性上报健康状况和性能指标。

  2. 流量接入:用户的请求首先到达LLM Gateway。Gateway支持HTTP(SSE)和WebSocket协议。

  3. 调度决策LLM GatewayLLM Scheduler发起调度请求。

  4. 智能调度LLM Scheduler基于调度策略,根据从各LLM Agent收集的实时指标,选择一个当前最优的后端实例。

  5. 请求转发LLM Scheduler将决策结果返回给LLM GatewayLLM Gateway随即把用户的原始请求转发到该目标实例进行推理。

  6. 请求缓冲:当所有后端实例均处于高负载状态时,新请求会暂时缓存在LLM Gateway的队列中,等待LLM Scheduler找到合适的转发时机,以避免请求失败。

Failover机制

系统设计了多层容错机制以保障服务稳定性:

  • LLM Gateway:作为无状态的流量接入层,建议部署至少2个实例。当某个实例故障时,流量会自动切换至其他健康实例,保证服务的持续可用性。

  • LLM Scheduler:作为请求调度组件,单实例运行以实现全局调度。LLM Scheduler发生故障时,LLM Gateway会在心跳失败后自动降级,采用轮询策略将请求直接转发给后端实例。这保证了服务的可用性,但会牺牲调度性能。待LLM Scheduler恢复后,LLM Gateway会自动切换回智能调度模式。

  • 推理实例或LLM Agent:当某个推理实例或其伴生的LLM Agent发生故障时,LLM AgentLLM Scheduler之间的心跳会中断。LLM 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

PromptToken数。

vllm:generation_tokens_total

生成的总的Token数。

SGLang

sglang:num_running_reqs

正在运行的请求数。

sglang:num_queue_reqs

在排队等待的请求数。

sglang:token_usage

KV Cache的使用率。

sglang:prompt_tokens_total

PromptToken数。

sglang:gen_throughput

每秒生成的Token数。

使用限制

  • 不支持更新时添加:LLM智能路由功能仅能在创建新服务时配置。对于一个已存在的、未使用智能路由的推理服务,无法通过更新服务操作来为其添加智能路由。

  • 推理引擎限制:部署LLM智能路由服务时,选择的推理引擎需与LLM服务一致,且目前仅支持 PAI-BladeLLMvLLM 或 SGLang

  • 推荐部署多推理实例:在部署多个推理实例的场景下,LLM智能路由的功能价值才能得以发挥。

部署服务

部署LLM智能路由服务

支持以下两种部署方式:

方式一:通过控制台部署

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 模型在线服务(EAS)页面,单击部署服务,选择场景化模型部署>LLM智能路由部署

  3. LLM智能路由部署页面,配置以下关键参数,然后单击部署

    参数

    描述

    基本信息

    服务名称

    自定义服务名称,例如llm_gateway。

    资源信息

    部署资源

    LLM-Gateway的资源配置。为确保高可用,最小实例数默认为2,建议保持。默认 CPU 为4核,内存 为8 GB。

    调度配置

    LLM-Scheduler调度资源。默认为 CPU 2核,内存 4 GiB。

    推理引擎

    选择您后端LLM服务将使用的推理引擎,支持 PAI-BladeLLMvLLMSGLang

    调度策略

    系统基于调度策略选择后端最佳推理实例,支持的调度策略如下:

    • 基于前缀缓存:KV Cache亲和性调度,是一种综合性调度策略,基于多项指标进行决策。将相似请求转发到对应缓存KV-Cache的实例中处理,从而使请求的处理效率最大化。使用时,需将引擎的前缀缓存(Prefix Caching)功能打开。

    • 基于LLM指标:基于LLM服务的各项监控指标,智能分配服务流量,保证资源利用效率最大化。

    • 最少请求:优先选择当前请求数最少的实例来分配新请求。

    • 最少token:优先选择当前处理token数量最少的实例来分配新请求。

    • 静态PD分离:在Prefill-Decode分离的LLM部署方案中,选择该策略可最大化提升调度效率。选择之后需要分别设置PrefillDecode的调度策略。

    • 动态PD分离:根据实际服务负载、KVCache缓存以及GPU利用率等关键指标,智能地实现Prefill实例与Decode实例的自动动态切换。在使用动态PD分离的LLM部署方案中,选择该策略可最大化提升调度效率。

部署成功后,系统会自动创建一个群组服务,命名格式为group_LLM智能路由服务名称。您可以前往模型在线服务(EAS)页面的灰度发布页签进行查看。image

说明

由于智能路由与服务队列存在冲突,同一服务群组中两者不可同时存在。

方式二:通过JSON独立部署

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 模型在线服务(EAS)页面,单击部署服务,然后在自定义模型部署区域,单击JSON独立部署

  3. JSON文本编辑框中配置以下内容,然后单击部署

    其中关键配置说明如下,其他参数配置说明,请参见JSON部署

    • metadata.type:配置为LLMGatewayService,即可部署LLM智能路由服务。服务部署成功后,EAS会自动创建一个组合服务,包含LLM-GatewayLLM-Scheduler,其中

      • LLM-Gateway的资源使用该服务的配置。

      • LLM-Scheduler默认的资源配置为4CPU4 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": 8000,
              "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": 8000,
              "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-SchedulerCPU,默认为4核。

      llm_scheduler.memory

      指定LLM-SchedulerMemory,默认为4 GiB。

      llm_scheduler.instance_type

      指定LLM-Scheduler的实例规格,与llm_scheduler.cpu/llm_scheduler.memory二选一配置,因该规格已经定义了CPU核数和内存大小,无需单独配置CPUMemory。

      llm_scheduler.policy

      调度策略,取值如下:

      • prefix-cache(默认值):KV Cache亲和性调度,是一种综合性调度策略,基于多项指标进行决策(包括llm-metric-basedleast-request指标信息)。将相似请求转发到对应缓存KV-Cache的实例中处理,从而使请求的处理效率最大化。使用时,需将引擎的prefix-caching功能打开。

      • llm-metric-based:基于LLM服务的各项监控指标,智能分配服务流量,保证资源利用效率最大化。

      • least-request:将请求尽可能均匀地分配到各个服务器上,以减少某些服务器过载的可能性。该策略优先选择当前请求数最少的服务器,从而平衡服务器的负载。

      • pd-split:在Prefill-Decode分离的LLM部署方案中,选择该策略可最大化提升调度效率。

部署大语言模型(LLM)服务

您可以通过EAS场景化部署一键部署LLM大语言模型服务,也可以通过Model Gallery实现一键部署。本文以EAS场景化部署为例,具体操作步骤如下:

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 模型在线服务(EAS)页面,单击部署服务。然后在部署服务页面,选择LLM大语言模型部署,注意以下参数配置以使用LLM智能路由,其他参见LLM大语言模型部署

    说明
    • 当使用vLLM加速部署,并且LLM智能路由服务的调度策略选择请求匹配时,需将引擎的prefix-caching功能打开。

    • 支持通过单击右上角的切换为自定义部署按钮,更新相关参数(如运行命令等)。

    参数

    描述

    基本信息

    推理引擎

    请选择与LLM智能路由服务一致的推理引擎。

    服务功能

    LLM智能路由

    打开LLM智能路由开关,并选择已创建的LLM智能路由。

  3. 参数配置完成后,单击部署

调用与测试

所有请求都应发送到LLM智能路由服务的访问地址,而不是后端的具体推理服务。

获取访问凭证

  1. 模型在线服务(EAS)页面,找到您部署的LLM智能路由服务。

  2. 单击服务名,进入服务详情页,在概览页签的基本信息区域,单击查看调用信息

  3. 调用信息页面,复制服务独立流量入口下的公网调用地址Tokenimage

构建与发送请求

最终的请求URLLLM智能路由的访问地址和模型服务的API路径拼接而成。

  • URL结构<LLM智能路由访问地址>/<LLM服务请求接口>

  • 示例http://********.pai-eas.aliyuncs.com/api/predict/group_llm_gateway.llm_gateway/v1/chat/completions

请求示例

# 将 <YOUR_GATEWAY_URL> 和 <YOUR_TOKEN> 替换为您的实际信息
# <model_name> 替换为实际的模型名称
curl -X POST "<YOUR_GATEWAY_URL>/v1/chat/completions" \
     -H "Authorization: Bearer <YOUR_TOKEN>" \
     -H "Content-Type: application/json" \
     -N \
     -d '{
           "model": "<model_name>",
           "messages": [{"role": "user", "content": "你好"}],
           "stream": true
         }'

返回结果示例如下:

data: {"id":"chatcmpl-9a9f8299*****","object":"chat.completion.chunk","created":1762245102,"model":"Qwen3-8B","choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}
data: {"id":"chatcmpl-9a9f8299*****","object":"chat.completion.chunk","created":1762245102,"model":"Qwen3-8B","choices":[{"index":0,"delta":{"content":"<think>","tool_calls":[]}}]}

...
data: [DONE]

查看服务监控指标

部署服务后,可以在EAS控制台查看服务的核心性能指标,以评估智能路由的效果。

模型在线服务(EAS)页面,单击已部署的LLM智能路由服务进入服务详情。在监控页签,关注以下核心指标:

Token Throughput

LLM输入和输出Token的吞吐量image

  • IN:表示LLM输入Token的吞吐量。

  • OUT:表示LLM输出Token的吞吐量。

GPU Cache Usage

LLM Engine GPU KV Cache的使用率

image

Engine Current Requests

LLM Engine实时请求并发数

image

  • Running:LLM Engine正在执行的请求数量。

  • Waiting:LLM Engine等待队列中的请求数量。

Gateway Current Requests

LLM智能路由实时请求数

image

  • Total:LLM智能路由当前总共接收的请求数量(总实时并发数)。

  • Pending:LLM Engine未处理的缓存在LLM智能路由中的请求数。

Time To First Token

请求的首包延时

image

  • Max:请求首包延迟的最大值。

  • Avg:请求首包延迟的平均值。

  • Min:请求首包延迟的最小值。

  • TPxx:请求首包延迟的各个分位点值。

Time Per Output Token

请求的每包延时

image

  • Max:请求每包延迟的最大值。

  • Avg:请求每包延迟的平均值。

  • Min:请求每包延迟的最小值。

  • TPxx:请求每包延迟的各个分位点值。

附录:测试结果对比

通过对Distill-Qwen-7B、QwQ-32BQwen2.5-72b三个模型进行测试,发现LLM智能路由在推理服务的速度和吞吐上有显著的性能提升,具体的测试环境和测试结果如下:

重要

以下测试结果仅供参考,实际表现请以您的实际测试结果为准。

测试环境

配置项

Distill-Qwen-7B

QwQ-32B

Qwen2.5-72b

调度策略

prefix-cache

prefix-cache

prefix-cache

测试数据(多轮对话)

ShareGPT_V3_unfiltered_cleaned_split.json

ShareGPT_V3_unfiltered_cleaned_split.json

ShareGPT_V3_unfiltered_cleaned_split.json

测试的推理引擎

vLLM(0.7.3)

vLLM(0.7.3)

vLLM(0.7.3)

后端实例个数

5

5

5

卡型

ml.gu8tf.8.40xlarge

ml.gu8tf.8.40xlarge

ml.gu7xf.8xlarge-gu108

并发数

500

100

100

测试结果

监控指标

Distill-Qwen-7B

QwQ-32B

Qwen2.5-72b

LLM智能路由

使用LLM智能路由

效果提升

LLM智能路由

使用LLM智能路由

效果提升

LLM智能路由

使用LLM智能路由

效果提升

Successful requests

3698

3612

-

1194

1194

-

1194

1194

-

Benchmark duration

460.79 s

435.70 s

-

1418.54 s

1339.04 s

-

479.53 s

456.69 s

-

Total input tokens

6605953

6426637

-

2646701

2645010

-

1336301

1337015

-

Total generated tokens

4898730

4750113

-

1908956

1902894

-

924856

925208

-

Request throughput

8.03 req/s

8.29 req/s

+3.2%

0.84 req/s

0.89 req/s

+5.95%

2.49 req/s

2.61 req/s

+4.8%

Output token throughput

10631.17 tok/s

10902.30 tok/s

+2.5%

1345.72 tok/s

1421.08 tok/s

+5.6%

1928.66 tok/s

2025.92 tok/s

+5.0%

Total Token throughput

24967.33 tok/s

25652.51 tok/s

+2.7%

3211.52 tok/s

3396.38 tok/s

+5.8%

4715.34 tok/s

4953.56 tok/s

+5.0%

Mean TTFT

532.79 ms

508.90 ms

+4.5%

1144.62 ms

859.42 ms

+25.0%

508.55 ms

389.66 ms

+23.4%

Median TTFT

274.23 ms

246.30 ms

-

749.39 ms

565.61 ms

-

325.33 ms

190.04 ms

-

P99 TTFT

3841.49 ms

3526.62 ms

-

5339.61 ms

5027.39 ms

-

2802.26 ms

2678.70 ms

-

Mean TPOT

40.65 ms

39.20 ms

+3.5%

68.78 ms

65.73 ms

+4.4%

46.83 ms

43.97 ms

+4.4%

Median TPOT

41.14 ms

39.61 ms

-

69.19 ms

66.33 ms

-

45.37 ms

43.30 ms

-

P99 TPOT

62.57 ms

58.71 ms

-

100.35 ms

95.55 ms

-

62.29 ms

54.79 ms

-