2.15. 监控模型性能


在单型号服务平台中,您可以查看平台上部署的特定模型的性能指标。

2.15.1. 查看已部署模型的性能指标

您可以监控以下指标,以了解在单型号服务平台上部署的特定模型:

  • 请求数 - 特定模型失败的请求数。
  • 平均响应时间(ms)- 对请求做出特定模型的平均时间
  • CPU 使用率(%) -特定模型当前使用的每个模型副本的 CPU 限值百分比。
  • 内存使用率(%) -特定模型使用的每个模型副本的内存限值百分比。

您可以为这些指标指定时间范围和刷新间隔,例如,当峰值使用小时以及模型在指定时间执行的方式时。

先决条件

  • 已安装 Red Hat OpenShift AI。
  • 您已登陆到 Red Hat OpenShift AI。
  • 如果您使用 OpenShift AI 组,则作为 OpenShift 中的用户组或 admin 组(如 rhoai-usersrhoai-admins)的一部分。
  • 以下仪表板配置选项被设置为默认值,如下所示:

    disablePerformanceMetrics:false
    disableKServeMetrics:false

    有关设置仪表板配置选项的更多信息,请参阅 自定义仪表板

  • 已使用预安装的运行时在单模式服务平台上部署了模型。

    注意

    只有在使用预安装模型服务运行时或从预安装运行时重复的自定义运行时,指标只支持部署模型。

流程

  1. 在 OpenShift AI 仪表板导航菜单中点 Data Science projects

    Data Science 项目页将打开。

  2. 点包含要监控的数据科学模型的项目名称。
  3. 在项目详情页面中,点 Models 选项卡。
  4. 选择您感兴趣的模型。
  5. Endpoint performance 选项卡中,设置以下选项:

    • 时间范围 - 指定跟踪指标的时间长度。您可以选择这些值之一:1 小时、24 小时、7 天和 30 天。
    • 刷新间隔 - 指定指标页面中图形的刷新频率(以显示最新的数据)。您可以选择这些值之一:15 秒、30 秒、1 分钟、5 分钟、15 分钟、30 分钟、1 小时、2 小时和 1 天。
  6. 向下滚动以查看请求数、平均响应时间、CPU 使用率和内存使用率的数据图形。

验证

Endpoint 性能 选项卡显示模型的指标图。

2.15.2. 部署 Grafana 指标仪表板

您可以为用户工作负载监控(UWM)部署 Grafana 指标仪表板,以监控单模型服务平台上部署的模型的性能和资源使用指标。

您可以创建 Kustomize 覆盖,如下例所示。使用覆盖为通过 OpenVino Model Server (OVMS)和 vLLM 部署的模型部署预配置指标仪表板。

先决条件

流程

  1. 在终端窗口中,以集群管理员身份登录 OpenShift CLI。
  2. 如果您还没有创建覆盖来安装 Grafana operator 和指标仪表板,请参阅 RHOAI UWM 存储库 来创建它。
  3. 使用您创建的覆盖在 OpenShift 集群上安装 Grafana 实例和指标仪表板。将 <overlay-name > 替换为覆盖的名称。

    oc apply -k overlays/<overlay-name>
  4. 检索 Grafana 实例的 URL。将 < namespace> 替换为包含 Grafana 实例的命名空间。

    oc get route -n <namespace> grafana-route -o jsonpath='{.spec.host}'

    您会看到类似以下示例的输出。使用 URL 访问 Grafana 实例:

    grafana-<namespace>.apps.example-openshift.com

验证

  • 您可以访问 Grafana 实例上 KServe、vLLM 和 OVMS 的预配置仪表板。

部署 Grafana 板以监控加速器和 vLLM 性能指标。

先决条件

  • 您已部署了 Grafana 指标仪表板,如 部署 Grafana 指标仪表板 中所述。
  • 您可以访问 Grafana 实例。
  • 您已安装了 envsubst,这是用于替换配置文件中的环境变量的命令行工具。如需更多信息,请参阅 GNU gettext 文档。

流程

  1. YAML 文件中定义 GrafanaDashboard 对象,如下例所示:

    1. 要监控加速器指标,请参阅 nvidia-vllm-dashboard.yaml
    2. 要监控 vLLM 指标,请参阅 grafana-vllm-dashboard.yaml
  2. 创建一个类似以下示例的 inputs.env 文件。将 NAMESPACEMODEL_NAME 参数替换为您自己的值:

    NAMESPACE=<namespace> 
    1
    
    MODEL_NAME=<model-name> 
    2
    1
    NAMESPACE 是部署模型的目标命名空间。
    2
    MODEL_NAME 是您的 InferenceService 中定义的模型名称。模型名称还用于在 Grafana 仪表板中过滤 pod 名称。
  3. 通过执行以下操作,将 YAML 文件中的 NAMESPACEMODEL_NAME 参数替换为 input.env 文件中的值:

    1. inputs.env 中所述的参数导出为环境变量:

      export $(cat inputs.env | xargs)
    2. 将 YAML 文件中的 $NAMESPACE${MODEL_NAME) 变量替换为导出的环境变量的值:

      envsubst '${NAMESPACE} ${MODEL_NAME}' < nvidia-vllm-dashboard.yaml > nvidia-vllm-dashboard-replaced.yaml
  4. 确认 YAML 文件包含更新的值。
  5. 部署仪表板对象:

    oc create -f nvidia-vllm-dashboard-replaced.yaml

验证

您可以在 Grafana 实例上看到加速器和 vLLM 指标仪表板。

2.15.4. Grafana 指标

您可以使用 Grafana 板来监控加速器和 vLLM 性能指标。数据源instancegpu 是板内定义的变量。

2.15.4.1. 加速器指标

跟踪加速器的指标,以确保硬件的健康状况。

NVIDIA GPU 使用率

跟踪 GPU 主动处理任务的时间百分比,指示 GPU 工作负载级别。

查询

DCGM_FI_DEV_GPU_UTIL{instance=~"$instance", gpu=~"$gpu"}
NVIDIA GPU 内存使用率

将内存用量与可用内存进行比较,这对于识别 GPU 密集型工作负载中的内存瓶颈至关重要。

查询

DCGM_FI_DEV_POWER_USAGE{instance=~"$instance", gpu=~"$gpu"}

sum

sum(DCGM_FI_DEV_POWER_USAGE{instance=~"$instance", gpu=~"$gpu"})
NVIDIA GPU 温度

确保 GPU 在安全限制内运行,以防止硬件降级。

查询

DCGM_FI_DEV_GPU_TEMP{instance=~"$instance", gpu=~"$gpu"}

avg

avg(DCGM_FI_DEV_GPU_TEMP{instance=~"$instance", gpu=~"$gpu"})
NVIDIA GPU 节流

GPU 节流会在 GPU 自动减少时钟时发生,以避免出现过量问题的问题。

您可以访问以下指标来识别 GPU 节流:

  • GPU 温度 :监控 GPU 温度。当 GPU 达到特定温度时,节流通常会发生,例如 85-90°C。
  • Osm clock speed: 监控核心时钟速度。当 GPU 处于 load 表示节流时,时钟速度显著下降。

2.15.4.2. CPU 指标

您可以跟踪 CPU 上的指标,以确保硬件的健康状况。

CPU 使用率

跟踪 CPU 使用量以识别 CPU 密集型工作负载。

查询

sum(rate(container_cpu_usage_seconds_total{namespace="$namespace", pod=~"$model_name.*"}[5m])) by (namespace)
CPU-GPU 瓶颈

CPU 节流和 GPU 使用指标的组合来识别资源分配无效。下表概述了 CPU 节流和 GPU 利用率的组合,以及您的环境的含义:

Expand
CPU 节流GPU 使用率含义

High

系统经过平衡。在没有 CPU 约束的情况下,会完全使用 GPU。

High

CPU 资源受限制。CPU 无法跟上 GPU 的处理需求,并且 GPU 可能被使用。

High

High

CPU 和 GPU 的工作负载正在增加,您可能需要扩展资源。

查询

sum(rate(container_cpu_cfs_throttled_seconds_total{namespace="$namespace", pod=~"$model_name.*"}[5m])) by (namespace)
avg_over_time(DCGM_FI_DEV_GPU_UTIL{instance=~"$instance", gpu=~"$gpu"}[5m])

2.15.4.3. vLLM 指标

您可以跟踪与 vLLM 模型相关的指标。

GPU 和 CPU 缓存使用率

跟踪 vLLM 模型使用的 GPU 内存百分比,提供有关内存效率的见解。

查询

sum_over_time(vllm:gpu_cache_usage_perc{namespace="${namespace}",pod=~"$model_name.*"}[24h])
运行请求

主动处理的请求数。帮助监控工作负载并发。

num_requests_running{namespace="$namespace", pod=~"$model_name.*"}
等待请求

跟踪队列中的请求,表示系统饱和。

num_requests_waiting{namespace="$namespace", pod=~"$model_name.*"}
前缀缓存命中率

高命中率意味着有效地重复使用缓存的计算,从而优化资源使用量。

查询

vllm:gpu_cache_usage_perc{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}
vllm:cpu_cache_usage_perc{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}
请求总数

查询

vllm:request_success_total{finished_reason="length",namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}

请求终止,因为它达到模型 inference 设置的最大令牌限制。

查询

vllm:request_success_total{finished_reason="stop",namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}

请求根据模型的输出或停止条件而自然完成,例如,句子或令牌完成结束。

端到端延迟
测量处理请求以获得最佳用户体验的总体时间。

直方查询

histogram_quantile(0.99, sum by(le) (rate(vllm:e2e_request_latency_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.95, sum by(le) (rate(vllm:e2e_request_latency_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.9, sum by(le) (rate(vllm:e2e_request_latency_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.5, sum by(le) (rate(vllm:e2e_request_latency_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
rate(vllm:e2e_request_latency_seconds_sum{namespace="$namespace", pod=~"$model_name.*",model_name="$model_name"}[5m])
rate(vllm:e2e_request_latency_seconds_count{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])
第一次令牌(TTFT)延迟的时间

在响应中生成第一个令牌所需的时间。

直方查询

histogram_quantile(0.99, sum by(le) (rate(vllm:time_to_first_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.95, sum by(le) (rate(vllm:time_to_first_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.9, sum by(le) (rate(vllm:time_to_first_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.5, sum by(le) (rate(vllm:time_to_first_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
rate(vllm:time_to_first_token_seconds_sum{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])
rate(vllm:time_to_first_token_seconds_count{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])
每个输出令牌(TPOT)延迟的时间

生成每个输出令牌的平均时间。

直方查询

histogram_quantile(0.99, sum by(le) (rate(vllm:time_per_output_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.95, sum by(le) (rate(vllm:time_per_output_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.9, sum by(le) (rate(vllm:time_per_output_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
histogram_quantile(0.5, sum by(le) (rate(vllm:time_per_output_token_seconds_bucket{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])))
rate(vllm:time_per_output_token_seconds_sum{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])
rate(vllm:time_per_output_token_seconds_count{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])
提示令牌吞吐量和生成吞吐量

跟踪处理提示令牌的速度,以进行 LLM 优化。

查询

rate(vllm:prompt_tokens_total{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])
rate(vllm:generation_tokens_total{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"}[5m])
生成的令牌总数
测量生成响应令牌的效率,对于实时应用至关重要。

查询

sum(vllm:generation_tokens_total{namespace="$namespace", pod=~"$model_name.*", model_name="$model_name"})
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部