Seldon Core 2 指标体系完全指南:运维指标(Operational Metrics)与用量指标(Usage Metrics)
人工智能大模型MLOpsLLMOps模型推理服务云原生后端【免费下载链接】seldon-coreAn MLOps framework to package, deploy, monitor and manage thousands of production machine learning models项目地址https://gitcode.com/gh_mirrors/se/seldon-core点击查看免费下载Seldon Core 2 是一个用于打包、部署、监控和管理生产环境机器学习模型的 MLOps 框架。其监控体系由两类互补的指标构成面向系统管理员与运维工程师的运维指标Operational Metrics以及面向平台提供商与运营团队的用量指标Usage Metrics。本文以 docs-gb/metrics/README.md 为主线结合仓库源码逐条梳理 Seldon Core 2 暴露的全部 Prometheus 指标、Prometheus/Grafana 采集配置、本地验证方法以及匿名用量采集组件 Hodometer 的架构、配置与完整指标清单帮助你在生产环境中快速建立可观测性。Seldon Core 2 的两类指标Seldon Core 2 中存在两类指标见 docs-gb/metrics/README.md运维指标Operational Metrics描述系统中各组件自身的性能表现常见关注点包括内存占用与 CPU 使用率、请求延迟与吞吐量、模型缓存命中率等。这类指标是系统管理员、运维团队和工程师日常巡检的核心对象。用量指标Usage Metrics以更高层次、较低动态性的视角描述系统的使用情况例如已部署的 Server 与模型数量、组件版本等。工程师通常不需要关注这些指标但平台提供商与运营团队可能用它们来评估整体使用模式。运维指标Agent 与 Pipeline Gateway 暴露的模型/管线指标系统运行期间Prometheus 会持续采集 Seldon Core 2 的运维指标除标准 Kubernetes 指标外还包括吞吐量、延迟、内存与 CPU 等。指标名在源码中以常量形式定义文档与代码通过Docs Start Metrics/Docs End Metrics标记保持同步。1. Agent 指标位于推理服务器旁的组件Agent 位于每个推理服务器Server旁边负责模型加载调度与指标采集。其指标常量定义于 scheduler/pkg/metrics/agent.go// scheduler/pkg/metrics/agent.go const ( // Histograms do no include pipeline label for efficiency modelHistogramName seldon_model_infer_api_seconds // We use base infer counters to store core metrics per pipeline modelInferCounterName seldon_model_infer_total modelInferLatencyCounterName seldon_model_infer_seconds_total modelAggregateInferCounterName seldon_model_aggregate_infer_total modelAggregateInferLatencyCounterName seldon_model_aggregate_infer_seconds_total ) // Agent metrics const ( cacheEvictCounterName seldon_cache_evict_count cacheMissCounterName seldon_cache_miss_count loadModelCounterName seldon_load_model_counter unloadModelCounterName seldon_unload_model_counter loadedModelGaugeName seldon_loaded_model_gauge loadedModelMemoryGaugeName seldon_loaded_model_memory_bytes_gauge evictedModelMemoryGaugeName seldon_evicted_model_memory_bytes_gauge serverReplicaMemoryCapacityGaugeName seldon_server_replica_memory_capacity_bytes_gauge serverReplicaMemoryCapacityWithOverCommitGaugeName seldon_server_replica_memory_capacity_overcommit_bytes_gauge )从源码实现可以确认各指标的语义与标签设计scheduler/pkg/metrics/agent.go指标名类型语义seldon_model_infer_api_secondsHistogram推理服务器延迟直方图标签为server、server_replica、method、codeseldon_model_infer_totalCounter模型推理调用次数额外带model、model_internal、method_type标签seldon_model_infer_seconds_totalCounter模型推理调用延迟累计值用于计算平均延迟seldon_model_aggregate_infer_totalCounter聚合推理调用次数不带模型标签用于快速求和seldon_model_aggregate_infer_seconds_totalCounter聚合推理延迟累计值seldon_cache_evict_count/seldon_cache_miss_countCounter模型缓存驱逐次数 / 缓存未命中次数seldon_load_model_counter/seldon_unload_model_counterCounter模型加载 / 卸载次数seldon_loaded_model_gaugeGauge系统中已加载模型数1/0 标记seldon_loaded_model_memory_bytes_gaugeGauge已加载模型占用内存字节seldon_evicted_model_memory_bytes_gaugeGauge被驱逐模型释放的内存字节seldon_server_replica_memory_capacity_bytes_gaugeGaugeServer 副本内存容量字节seldon_server_replica_memory_capacity_overcommit_bytes_gaugeGauge开启 overcommit 后 Server 副本内存容量字节延迟直方图的默认桶bucket定义在 scheduler/pkg/metrics/agent.goDefaultHistogramBuckets []float64{0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10}即从 5ms 到 10s 的指数分布桶覆盖从超低延迟服务到重推理场景的典型范围。指标通过 HTTP/metrics端点以 Prometheus 文本格式暴露Start方法在 agent.go 中注册promhttp.Handler()。2. Pipeline Gateway 指标处理管线请求的网关管线网关的指标常量定义于 scheduler/pkg/metrics/gateway.go// scheduler/pkg/metrics/gateway.go // The aggregate metrics exist for efficiency, as the summation can be // very slow in Prometheus when many pipelines exist. const ( // Histograms do no include model label for efficiency pipelineHistogramName seldon_pipeline_infer_api_seconds // We use base infer counters to store core metrics per pipeline pipelineInferCounterName seldon_pipeline_infer_total pipelineInferLatencyCounterName seldon_pipeline_infer_seconds_total pipelineAggregateInferCounterName seldon_pipeline_aggregate_infer_total pipelineAggregateInferLatencyCounterName seldon_pipeline_aggregate_infer_seconds_total )对应指标为seldon_pipeline_infer_api_seconds、seldon_pipeline_infer_total、seldon_pipeline_infer_seconds_total以及两个 aggregate 变体标签为pipeline、server、method_type、code。3. 指标设计要点这些指标中许多是模型级与管线级的 Counter 和 Gauge部分指标做了聚合aggregate以加速图表展示——当存在大量管线时在 Prometheus 中做 Summation 会非常慢源码注释明确说明了这一点。出于性能考虑当前不为单个模型保存直方图指标但按管线保存直方图指标见 operational.md。该指标集仍属实验性官方预期会随系统使用信息的积累而演进以便更好捕获相关趋势。采集配置kube-prometheus、PodMonitor 与 GrafanaSeldon Core 2 与部署的模型会自动向 Prometheus 暴露指标。推荐基于 kube-prometheusPrometheus Operator搭建监控栈完整步骤见 observability.md。要点如下创建命名空间并安装 kube-prometheus以 Bitnami chart 为例kubectl create ns seldon-monitoring helm upgrade --install prometheus kube-prometheus \ --version 9.5.12 \ --namespace seldon-monitoring \ --values prometheus-values.yaml \ --repo https://charts.bitnami.com/bitnami其中prometheus-values.yaml必须包含fullnameOverride: seldon-monitoring kube-state-metrics: extraArgs: metric-labels-allowlist: pods[*]pods[*]与标签app.kubernetes.io/managed-byseldon-core是计算部署用量规则的关键。应用自定义 RBACprometheus/rbac/cr.yaml与四个采集目标资源prometheus/monitors 目录kubectl apply -f .../agent-podmonitor.yaml kubectl apply -f .../envoy-servicemonitor.yaml kubectl apply -f .../pipelinegateway-podmonitor.yaml kubectl apply -f .../server-podmonitor.yaml这些资源分别以 15s 间隔抓取agentPodMonitor匹配标签app.kubernetes.io/name: seldon-server端口metrics路径/metricsserverPodMonitor匹配同一批 Server Pod端口server-metricspipelinegatewayPodMonitor匹配seldon-pipelinegateway端口metricsenvoyServiceMonitor匹配seldon-envoy端口stats路径/stats/prometheusEnvoy 的统计端点。通过kubectl port-forward访问 Prometheushttp://127.0.0.1:9090/与 Alertmanagerhttp://127.0.0.1:9093/在Status → Targets中查看各抓取端点的状态。以 Prometheus 为数据源导入 Grafana 仪表盘 prometheus/dashboards/seldon.json即可获得系统全景视图。本地验证指标采集Local Metrics Examples若要在本地开发环境验证原始指标可按 local-metrics-test.md 的示例操作从仓库根目录的samples目录运行需要prometheus_client与requests库。三个抓取端点分别为mlserver_metrics_host0.0.0.0:9006 # MLServer 模型 triton_metrics_host0.0.0.0:9007 # Triton 模型 pipeline_metrics_host0.0.0.0:9009 # 管线网关抓取与查询脚本核心逻辑from prometheus_client.parser import text_string_to_metric_families import requests def scrape_metrics(host): data requests.get(fhttp://{host}/metrics).text return {family.name: family for family in text_string_to_metric_families(data)} def get_model_infer_count(host, model_name): family scrape_metrics(host)[seldon_model_infer] for sample in family.samples: if sample.labels[model] model_name: print(sample)以 MLServer 上的 iris 模型为例加载模型seldon model load -f ./models/sklearn-iris-gs.yaml、分别以 REST-i 50和 gRPC--inference-mode grpc -i 100推理后抓取结果如下Sample(nameseldon_model_infer_total, labels{code: 200, method_type: rest, model: iris, model_internal: iris_1, server: mlserver, server_replica: 0}, value50.0, timestampNone, exemplarNone) Sample(nameseldon_model_infer_total, labels{code: OK, method_type: grpc, model: iris, model_internal: iris_1, server: mlserver, server_replica: 0}, value100.0, timestampNone, exemplarNone)注意 REST 调用的code标签为 HTTP 状态码200gRPC 调用为状态字符串OKmodel为外部模型名model_internal为内部模型名。管线场景如tfsimples则通过seldon_pipeline_infer_total查询server标签固定为pipeline-gateway。这印证了 agent.go 中addInferCount与 gateway.go 中addInferCount的标签写入逻辑。用量指标Hodometer 架构与隐私设计用量指标由独立轻量组件Hodometer负责采集与上报它不是 Seldon Core 2 的核心部分而是连接 Seldon Core 2 Scheduler 公共 API 的独立组件若部署在 Kubernetes 中它还会从 Kubernetes API 获取少量基本信息。记录到的指标发送给 Seldon并可选择性地发送到你定义的额外端点。Hodometer 架构图Seldon Core 2 的用量指标采集与发布组件.png)隐私设计Hodometer 在设计上显式强调用户信息隐私与实现透明不记录任何敏感或可识别信息不感知 IP 地址、模型名称或用户信息所有发送给 Seldon 的信息均通过完全随机的集群标识符cluster id匿名化支持不同信息级别完全由你控制向 Seldon 提供哪些指标实现完全开源且易于阅读指标结构定义在 hodometer/pkg/hodometer/metrics.go例如ClusterMetrics、ResourceMetrics、FeatureMetrics三个结构体。从发布代码可见事件对象显式设置了IP: 0以禁用 IP 采集publish.go。性能特征指标以每天几次的周期性快照方式采集主要来自 Seldon Core v2 Scheduler且高度聚合对 CPU、内存与网络占用影响极小Hodometer 不存储任何记录内容没有持久化存储因此不应视为 Prometheus 这类监控工具的替代品。Hodometer 配置指标级别、环境变量与 Kubernetes 部署指标级别Metrics levelsHodometer 支持 3 个级别对应源码 hodometer/pkg/hodometer/levels.go 中的CLUSTER、RESOURCE、FEATURE枚举Level说明cluster关于 Seldon Core v2 安装的基础信息resource使用了哪些 Seldon Core v2 资源的高级信息feature关于资源如何被使用以及某些特性开关是否启用的更详细信息也可以完全禁用用量指标直接移除现有 Hodometer 部署或在下述安装环境中将其禁用。环境变量选项无论部署在何种环境以下环境变量都控制 Hodometer 的行为与 hodometer/cmd/hodometer/args.go 中的解析逻辑一一对应变量格式示例说明METRICS_LEVELstringfeature记录指标的详细级别取值为feature、resource或clusterEXTRA_PUBLISH_URLS逗号分隔的 URL 列表http://my-endpoint-1:8000,http://my-endpoint-2:8000额外的指标发布端点SCHEDULER_HOSTstringseldon-schedulerSeldon Core v2 Scheduler 主机名SCHEDULER_PORTinteger9004Seldon Core v2 Scheduler 端口LOG_LEVELstringinfo应用日志详细级别除文档表格外从源码还可看到额外的内部变量SCHEDULER_PLAINTXT_PORT默认明文端口 9004、SCHEDULER_TLS_PORTTLS 端口 9044、PUBLISH_URL默认http://hodometer-test.seldon.io以及CLUSTER_ID未设置时随机生成见 collect.go 的parseOrCreateClusterId。Kubernetes 部署Hodometer 以独立 Deployment 安装默认位于与其余 Seldon 组件相同的命名空间参考 hodometer/k8s/deployment.yaml 与 hodometer/k8s/kustomization.yaml。其 Role 仅授予读取 TLS Secrets 的最小权限hodometer/k8s/role.yaml。通过 Helm 安装完整步骤见 Helm 安装指南时关键环境变量对应的 Helm values 如下Helm value环境变量hodometer.metricsLevelMETRICS_LEVELhodometer.extraPublishUrlsEXTRA_PUBLISH_URLShodometer.logLevelLOG_LEVEL运行时 chart 的 values 中hodometer.disable默认为false、hodometer.replicas默认为 1见 seldon-core-v2-runtime/values.yaml并通过 seldon-runtime.yaml 渲染到SeldonConfig组件列表。若不需要记录用量指标可在安装时禁用helm install seldon-v2-runtime k8s/helm-charts/seldon-core-v2-runtime \ --namespace seldon-mesh \ --set hodometer.disabletrue该命令既能在全新安装中关闭用量指标采集也能从既有安装中移除 Hodometer。最佳实践是把 Helm 值写入 values 文件并通过-f filename应用。从 k8s/kustomize/helm-components-sc/patch_hodometer.yaml 可以看出Helm 渲染出的 Hodometer 容器除上述变量外还会注入CONTROL_PLANE_SECURITY_PROTOCOL及一组 TLS 相关变量CONTROL_PLANE_CLIENT_TLS_SECRET_NAME等用于在控制面启用 TLS 时安全连接 Scheduler——这对应源码中 collect.go 根据tlsOptions.Cert是否为 nil 来选择明文insecure或 TLS 传输凭据的逻辑。额外发布端点Extra publish URLsEXTRA_PUBLISH_URLS期望一个逗号分隔的 HTTP 兼容 URL 列表Hodometer 除发送给 Seldon 外还会向这些额外端点发布指标。你可以借此构建自己的用量监控例如捕获这些指标并通过自有服务暴露给 Prometheus 或其他监控系统。指标以MixPanel 兼容格式记录采用高度灵活的 JSON Schema每个发布 URL 对应一个独立 client通过带重试的 HTTP 客户端并行发布publish.go 配置了最多 20 次重试、1~30 秒退避。自定义监听器的参考实现见hodometer/pkg/receiverGo 包。Hodometer 指标完整清单指标名级别格式说明cluster_idclusterUUID该集群的随机标识符用于去重seldon_core_versioncluster版本号例如 1.2.3is_global_installationclusterBoolean安装是全局还是按命名空间is_kubernetesclusterBoolean是否部署在 Kubernetes 中kubernetes_versioncluster版本号Kubernetes 服务端版本若在 Kubernetes 中node_countclusterInteger集群节点数若在 Kubernetes 中model_countresourceIntegerModel资源数量pipeline_countresourceIntegerPipeline资源数量experiment_countresourceIntegerExperiment资源数量server_countresourceIntegerServer资源数量server_replica_countresourceIntegerServer资源副本总数multimodel_enabled_countfeatureInteger启用多模型服务multi-model serving的Server数量overcommit_enabled_countfeatureInteger启用 overcommit 的Server数量gpu_enabled_countfeatureInteger挂载 GPU 的Server数量inference_server_namefeatureString推理服务器名称例如 MLServer 或 Tritonserver_cpu_cores_sumfeatureFloat所有Server资源副本的 CPU limits 总量单位核server_memory_gb_sumfeatureFloat所有Server资源副本的 memory limits 总量单位GiB从源码看 Hodometer 的实现原理结合仓库源码可以进一步理解用量指标的采集与发布机制周期性调度主程序以 8 小时为间隔循环执行“采集并发布”hodometer/cmd/hodometer/main.go 中的interval 8 * time.Hour通过 punctuate.go 的Punctuator.Run驱动。官方文档所述“每天几次的周期性快照”正是由该间隔保证且多次尝试也有助于应对临时网络故障。并行采集与级别门控Collect方法并发启动 6 个 goroutine分别采集 Kubernetes 信息、Scheduler 信息、Experiment、Pipeline、Server 与 Model 状态collect.go。只有当level metricsLevelCluster时才统计资源类指标只有当level metricsLevelResource时才统计 feature 类指标——这正是cluster/resource/feature三级递进关系的直接实现。Server 指标的统计规则updateServerMetrics仅在ExpectedReplicas 0或AvailableReplicas 0时计数当OverCommitPercentage 0时同时累加 overcommit 与 multi-model 计数因为无 multi-model serving 时 overcommit 无意义否则当NumLoadedModels 1时累加 multi-model 计数并累计TotalMemoryBytescollect.go。指标序列化UsageMetrics结构体各字段携带json标签metrics.goflattenStructToProperties通过反射将其扁平化为 MixPanel 事件属性并附加$insert_id以保证幂等publish.go。小结Seldon Core 2 的监控体系分层清晰运维指标由 Agent 与 Pipeline Gateway 通过/metrics端点直接暴露给 Prometheus配合 kube-prometheus 的 PodMonitor/ServiceMonitor 与 Grafana 仪表盘实现秒级可观测用量指标则由独立组件 Hodometer 以极低频率、匿名、非持久化的方式快照系统使用情况并通过三级指标级别cluster/resource/feature与可配置的额外发布端点让平台运营方在保护用户隐私的前提下了解系统整体使用模式。若需查看完整指标定义可直接阅读 scheduler/pkg/metrics/agent.go 与 scheduler/pkg/metrics/gateway.go若需进一步阅读监控搭建细节可参考 observability.md 与 local-metrics-test.md。赞分享人工智能大模型MLOpsLLMOps模型推理服务云原生后端【免费下载链接】seldon-coreAn MLOps framework to package, deploy, monitor and manage thousands of production machine learning models项目地址https://gitcode.com/gh_mirrors/se/seldon-core点击查看免费下载相关推荐Flink 指标Metrics体系完全指南注册、作用域、系统指标与监控集成Flink 指标Metrics体系完全指南注册、作用域、系统指标与监控集成 Flink 内置了一套完整的指标Metric系统允许用户从任意用户函数中后端大数据流处理批处理MMF 指标系统Metrics完全指南内置指标全览与自定义指标开发MMF 指标系统Metrics完全指南内置指标全览与自定义指标开发 本文以 MMF 框架的 mmf.modules.metrics 模块为核心系统讲解多模态人工智能深度学习NLP计算机视觉预训练Presto C Worker 运行时指标Runtime Metrics监控完全指南Presto C Worker 运行时指标Runtime Metrics监控完全指南 导读 Presto 的 C 原生执行引擎Presto C大数据数据库后端上一篇K9s v0.31.0 配置体系升级实战Schema 校验、fullScreen 重命名与 Reactive UI 详解下一篇深入 Raspberry Pi OS 第 2 课练习EL 异常级别切换、FP/SIMD 寄存器与 QEMU 适配实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考