为LLM推理服务配置监控

在生产环境中LLM推理服务的可观测性是至关重要的,可以监控LLM推理服务、推理服务Pod及相关GPU的性能指标,有效发现性能瓶颈,帮助定位故障。本文介绍如何为LLM推理服务配置监控。

前提条件

已为ACK开启阿里云Prometheus监控。具体操作,请参考使用阿里云Prometheus监控

计费说明

LLM推理服务将监控数据接入阿里云Prometheus监控功能后,相关组件会自动将监控指标发送至阿里云Prometheus服务,这些指标将被视为自定义指标

使用自定义指标会产生额外的费用。这些费用将根据您的集群规模、应用数量和数据量等因素产生变动,您可以通过用量查询,监控和管理您的资源使用情况。

步骤一:接入LLM推理服务监控大盘

  1. 登录ARMS控制台

  2. 在左侧导航栏单击接入中心,然后在人工智能区域单击云原生AI套件-LLM推理服务卡片。

  3. 云原生AI套件-LLM推理服务页面的选择容器服务集群区域,选择目标集群。

    若显示已经安装该组件,则无需再重复安装。
  4. 配置信息区域配置参数,然后单击确定,完成组件接入。

    配置项

    说明

    接入名称

    当前LLM推理服务监控唯一名称。非必填,可留空。

    命名空间

    当前LLM推理服务监控仅采集哪些命名空间下的指标。非必填,留空时表示采集所有命名空间下满足条件。

    Pod 端口名

    LLM推理服务Pod上标识的端口名,将尝试从该端口上采集推理服务监控指标。默认值为"http"。

    指标采集路径

    LLM推理服务Pod暴露Prometheus格式指标的HTTP服务路径。默认值为“/metrics”。

    metrics采集间隔

    监控数据采集时间间隔(秒)。

  5. 已接入的组件可在ARMS控制台的接入管理页面查看。

接入中心的更多信息,请参见接入指南

步骤二:部署推理服务并开启指标采集

在需要采集指标的LLM推理服务Pod上增加以下标签,将该推理服务Pod加入到ARMS指标采集目标列表中:

...
spec:
  template:
    metadata:
      labels:
        alibabacloud.com/inference-workload: <workload_name>
        alibabacloud.com/inference-backend: <backend>

变量

用途

说明

<workload_name>

用于唯一标识一个命名空间下的一个推理服务。

推荐选择部署推理服务时使用的工作负载(例如:StatefulSet、LeaderWorkerSet、RoleBasedGroup)的名字作为<workload_name>。当Pod包含alibabacloud.com/inference-workload标签时,该Pod就会被加入到ARMS指标采集目标列表中,无论是否同时包含alibabacloud.com/inference-backend标签。

<backend>

用于标识推理引擎。

需要根据实际使用的推理引擎填写。目前该字段支持的值包括:

  • vllm:适用于使用vLLM推理引擎部署的单机或分布式推理服务。

  • sglang:适用于使用SGLang推理引擎部署的单机或分布式推理服务。

  • vllm-pd:适用于使用vLLM推理引擎部署的PD分离推理服务。

  • sglang-pd:适用于使用SGLang推理引擎部署的PD分离推理服务。

上述示例仅展示了为LLM推理服务Pod开启指标采集时的部分代码片段,如果需要了解如何部署不同的LLM推理服务的完整示例,请参见:

步骤三:查看推理服务监控大盘

  1. 登录容器服务管理控制台,在左侧导航栏单击集群

  2. 集群列表页面,单击已接入云原生AI套件-LLM推理服务组件的ACK集群或ACS集群,然后在左侧导航栏,选择运维管理 > Prometheus 监控

  3. Prometheus监控页面,选择其他 > LLM Inference Dashboard,查看LLM推理服务监控大盘的详情数据。在LLM推理服务监控大盘中,您可以查看有关集群中运行的LLM推理服务的详情数据。

  4. 调整监控大盘的变量,可以选择需要查看的LLM推理服务的命名空间(namespace)、负载名称(workload_name)和该推理服务使用的模型名称(model_name)。如果需要了解大盘中各个Panel的含义,请参考监控面板说明

监控指标说明

LLM推理服务采集的指标主要包括:

监控面板说明

LLM推理服务监控大盘假设用户使用一个Kubernetes工作负载(workload)部署一个推理服务,一个推理服务中包含多个推理服务实例(一个实例可能由一个Pod或多个Pod构成),一个推理服务实例同时可对外提供一个模型或多个模型(例如:基于基础模型+Lora的组合模型)的LLM推理能力。

因此,如果需要对某个推理服务上特定模型的推理表现进行监控,需要选择推理服务所在的命名空间(namespace),接着选择工作负载名字(workload_name),最后选择模型名(model_name)。选择完成后,监控大盘数据将会自动更新,展示指定时间段内推理服务的性能指标。

LLM推理服务监控大盘包含3Panel组:

Model-Level Panel

该组下Panel展示某个模型对应的推理服务聚合指标,这些指标用于从整体上判断一个推理服务的性能是否满足业务预期。

image.png

Pod-Level Pane

该组下Panel展示选择的推理服务下各个Pod的推理服务指标,这些指标用于细化了解不同推理服务实例的负载均衡情况。

image.png

GPU Stats (Associated with Pod)

该组下Panel展示选择的推理服务下各个PodGPU指标,这些指标用于了解各个推理服务PodGPU资源的使用情况。

image.png

展开查看各个Panel组中每个Panel的含义以及各个Panel与推理引擎(inference backend)的适用性。

Panel

Panel

含义说明

推理引擎适用性

Model-Level

QPS

推理服务每秒处理的请求量

为各个推理服务实例每秒处理请求量之和。

仅适用于vllm,sglang

Request Success Rate

请求成功率。

仅适用于vllm

E2E Latency

请求平均处理耗时

仅适用于vllm, sglang

Token Throughput

推理服务输入(Prompt)和输出(Generation)的Token吞吐速率

仅适用于vllm, sglang

Token Throughput per GPU

推理服务输入(Prompt)和输出(Generation)的GPU卡均Token吞吐速率

仅适用于vllm, sglang

Request Prompt Length

推理请求输入长度,以平均值和分位值表示。

仅适用于vllm, sglang

使用vllm推理引擎时,支持平均值和分位值。

使用sglang推理引擎时,仅支持平均值

Request Generation Length

推理请求输出长度,以平均值和分位值表示。

仅适用于vllm, sglang

使用vllm推理引擎时,支持平均值和分位值。

使用sglang推理引擎时,仅支持平均值

TTFT(Time To First Token)

推理请求首Token返回延时,以平均值和分位值表示。

仅适用于vllm, sglang

TPOT(Time Per Output Token)

推理请求除首Token外,各Token返回延时,以平均值和分位值表示。

仅适用于vllm, sglang

KV Cache Hit Ratio

各推理服务实例平均KV缓存命中率,仅在推理框架启用prefix cache特性时有效。

仅适用于vllm, sglang

Request Prompt Length Heatmap

推理请求输入长度分布情况,以热力图展示。

仅适用于vllm

Request Generation Length Heatmap

推理请求输出长度分布情况,以热力图展示。

仅适用于vllm

Pod-Level

E2E Request Latency

各推理服务Pod上请求平均处理耗时

适用于vllm, sglang, vllm-pd, sglang-pd

Token Throughput

各推理服务Pod输入(Prompt)和输出(Generation)的Token吞吐速率

适用于vllm, sglang, vllm-pd, sglang-pd

Time To First Token Latency

推理请求首Token返回延时,以平均值和分位值表示。

适用于vllm, sglang, vllm-pd, sglang-pd

Time Per Output Token Latency

推理请求除首Token外,各Token返回延时,以平均值和分位值表示。

适用于vllm, sglang, vllm-pd, sglang-pd

KV Cache Utilization

各推理服务PodKV缓存使用情况,单位为百分比。

适用于vllm, sglang, vllm-pd, sglang-pd

Scheduler State

各推理服务Pod中处于特定处理状态的请求数。处理状态包括:

  • 等待处理(Waiting)

  • 正在处理(Running)

  • 换出(Swapped)

适用于vllm, sglang, vllm-pd, sglang-pd

当使用sglangsglang-pd时仅支持WaitingRunning状态。

Finish Reason

一个监控周期内以特定原因结束处理的请求数量。原因包括:

  • abort:中途停止

  • length: 到达最大输出长度

仅适用于vllm, vllm-pd

Queue Time

各推理请求在队列中等待处理的平均等待时间。

适用于vllm, sglang, vllm-pd, sglang-pd

Requests Prefill and Decode Time

各推理请求执行prefill计算和decode计算的平均时间。

仅适用于vllmvllm-pd

KV Cache Hit Ratio

各推理服务PodKV缓存命中率,仅在推理框架启用prefix cache特性时有效

适用于vllm, sglang, vllm-pd, sglang-pd

GPU Stats (Associated with Pod)

Pods GPU Tensor Active

推理服务Pod上各GPUTensor(HMMA/IMMA) Pipe处于Active状态的平均周期分数。

该值表示一个时间间隔内的平均值,而不是瞬时值。

适用于vllm, sglang, vllm-pd, sglang-pd

Pods GPU Utilization

推理服务Pod上各GPU利用率的平均值。

适用于vllm, sglang, vllm-pd, sglang-pd

Pods GPU SM Active

推理服务Pod上各GPUSM(Streaming Multiprocessor)利用率的平均值。

适用于vllm, sglang, vllm-pd, sglang-pd

Pods GPU Memory Copy Utilization

推理服务Pod上各GPU的平均内存带宽利用率。

适用于vllm, sglang, vllm-pd, sglang-pd

Pods Used GPU Memory

推理服务Pod上各GPU的平均内存占用。

适用于vllm, sglang, vllm-pd, sglang-pd

Pods GPU DRAM Active

推理服务Pod上各GPU在一个采样周期内内存指令执行的频繁程度。

适用于vllm, sglang, vllm-pd, sglang-pd