如何定义整体 NPU 成本模型

此操作步骤会将 Ascend 整体 NPU 分配以及(可选)项目 NPU 配额注册为计费项。它衡量的是已分配的设备,而不是 AI-core、HBM 或运行时利用率。

此配置提供的内容

  • 分配:分配的一个 NPU 设备计为一个 NPU-hour。
  • 项目配额(可选):可以将项目的硬 NPU 配额累计为 NPU-hours。
  • 模型定价:分配记录会保留 NPU 模型,因此不同模型可以使用不同价格。
  • 项目配额定价:配额记录没有设备或模型维度,因此应使用一个项目级基础价格。

1. 创建记录规则

INFO

配置应用位置

在包含 NPU 和 npu-exporter 的集群中应用此 PrometheusRule。应用之前,请确认 exporter target 状态正常,并且 npu_chip_info_name 具有 vdie_idname 和 namespace labels。

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: alauda-npu-billing-recording
  namespace: kube-system
  labels:
    prometheus: kube-prometheus
spec:
  groups:
    - name: alauda.billing.npu
      interval: 30s
      rules:
        - record: alauda_npu_allocated_count
          expr: |
            count by (UUID, label_modelName, namespace) (
              label_replace(
                label_replace(
                  npu_chip_info_name{namespace!="", namespace!="kube-system"},
                  "UUID", "$1", "vdie_id", "(.+)"
                ),
                "label_modelName", "$1", "name", "(.+)"
              )
            )
        - record: alauda_npu_project_quota_count
          expr: |
            avg by (project, cluster) (
              avg_over_time(
                cpaas_project_resourcequota{
                  resource="requests.huawei.com/Ascend910",
                  type="project-hard"
                }[5m]
              )
            )
WARNING

requests.huawei.com/Ascend910 值仅为示例。请将其替换为目标集群公开的确切 NPU 资源键,其中包括实际的 accelerator model 或 model suffix。在应用规则之前,请在 Prometheus 中检查 cpaas_project_resourcequotaresource label。如果键不匹配,项目配额指标将保持为空,并且不会收集 ProjectQuota 使用量。

项目配额规则是可选的。不需要项目配额计费时,请将其删除。

在 Prometheus 中验证规范化指标:

alauda_npu_allocated_count
alauda_npu_project_quota_count

继续之前,exporter target 和所需的规范化查询都必须状态正常。

2. 创建采集配置

INFO

配置应用位置

在运行 Cost Management Agent 的 NPU 集群中应用此 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: slark-agent-npu-config
  namespace: cpaas-system
  labels:
    cpaas.io/slark.collection.config: "true"
data:
  config: |
    - kind: NPU
      category: NPU
      item: npuAllocationHours
      period: Hourly
      usage:
        query: alauda_npu_allocated_count
        step: 5m
        mappers:
          name: UUID
          namespace: namespace
          cluster: ""
          project: ""
      labels:
        query: alauda_npu_allocated_count
        mappers:
          name: UUID
          namespace: namespace
          cluster: ""
          project: ""
    - kind: Project
      category: NPU
      item: projectNPUQuotaHours
      period: Hourly
      usage:
        query: alauda_npu_project_quota_count
        step: 5m
        mappers:
          name: project
          namespace: ""
          cluster: cluster
          project: project

Prometheus label source 中必须使用 label_ 前缀。Cost Management 会将 label_modelName 存储为计费标签 modelName

应用 ConfigMap 后,重新加载 Cost Management Agent:

kubectl -n cpaas-system delete pod -l service_name=slark-agent

3. 创建显示配置

INFO

配置应用位置

在运行 Cost Management Server 的 global 集群中应用此 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: slark-display-config-for-npu
  namespace: kube-public
  labels:
    cpaas.io/slark.display.config: "true"
data:
  config: |
    - name: NPU
      displayname:
        zh: "整卡 NPU"
        en: "Whole NPU"
      methods:
        - name: Allocation
          displayname: {zh: "分配量", en: "Allocation Usage"}
          item: npuAllocationHours
          divisor: 1
          unit: {zh: "卡时", en: "NPU-hours"}
        - name: ProjectQuota
          displayname: {zh: "项目配额", en: "Project Quota"}
          item: projectNPUQuotaHours
          divisor: 1
          unit: {zh: "卡时", en: "NPU-hours"}

应用 ConfigMap 后,重新加载 Cost Management Server:

kubectl -n cpaas-system delete pod -l service_name=slark-server

4. 向成本模型添加价格

在平台控制台中,打开 Metering and Billing > Cost Models,然后创建或编辑与 NPU 集群关联的成本模型。

计费项方法单位价格规则
整体 NPUAllocation UsageNPU-hours默认价格,可选 modelName 覆盖
整体 NPUProject QuotaNPU-hours项目级默认价格
WARNING

Project Quota 是可选的,并且没有 NPU 模型维度。请勿为此方法配置 modelName 价格覆盖。

如需配置特定模型的分配价格,请将 exporter 中的确切值用作 modelName 标签覆盖值。该值区分大小写。

5. 验证结果

等待至少一个每小时计费窗口。按以下顺序验证结果:

  1. 使用量:确认存在 NPU 使用量记录,并且其中包含预期的集群、namespace、UUID 和 model label。
  2. 账单:确认已生成账单,并且应用了预期的默认价格或特定模型价格。
  3. 控制台:确认该项及其金额显示在成本详情和统计信息中。

有关共享部署规则,请参阅《配置约定》