如何定义 NPU 成本模型

前提条件

在 NPU 集群中:

  • 已安装 NPU Operator 的 Alauda Build
  • 已安装成本管理智能体
  • ACP v4.2+

关于 NPU Operator 的 Alauda Build

请参考 安装 NPU Operator 的 Alauda Build

Note
因为 ACP 的发版周期与灵雀云容器平台不同,所以 ACP 的文档现在作为独立的文档站点托管在 ACP

操作步骤

创建 PrometheusRule 以生成所需指标

在 NPU 集群中创建一个 PrometheusRule。

NPU 计量和计费需要 npu_count 指标。

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    prometheus: kube-prometheus
  name: npu-labels
  namespace: kube-system
spec:
  groups:
  - name: npu.rules
    interval: 30s
    rules:
    - record: npu_count
      expr: |
        count by (vdie_id, label_modelName, exported_namespace) (
          label_replace(
            npu_container_info{exported_namespace!="kube-system"},
            "label_modelName",
            "$0",
            "model_name",
            ".*"
          )
        )

添加采集配置(成本管理智能体)

在运行成本管理智能体的 NPU 集群中创建 ConfigMap,用于声明要采集的内容。

apiVersion: v1
data:
  config: |
    - kind: NPU
      category: NPUCount
      item: NPUCountQuota
      period: Hourly
      labels:
        query: "npu_count"
        mappers:
          name: vdie_id
          namespace: exported_namespace
          cluster: ""
          project: ""
      usage:
        query: npu_count
        step: 5m
        mappers:
          name: vdie_id
          namespace: exported_namespace
          cluster: ""
          project: ""
kind: ConfigMap
metadata:
  labels:
    cpaas.io/slark.collection.config: "true"
  name: slark-agent-npu-namespace-config
  namespace: cpaas-system
---
apiVersion: v1
data:
  config: |
    - kind: Project
      category: NPUCount
      item: NPUCountsProjectQuota
      period: Hourly
      usage:
        query: avg by (project, cluster) (avg_over_time(cpaas_project_resourcequota{resource="requests.huawei.com/Ascend910", type="project-hard"}[5m]))
        step: 5m
        mappers:
          name: project
          namespace: ""
          cluster: cluster
          project: project
kind: ConfigMap
metadata:
  labels:
    cpaas.io/slark.collection.config: "true"
  name: slark-agent-project-config-npu
  namespace: cpaas-system

添加 yaml 后,需要重启智能体 Pod 以重新加载配置。

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

添加展示/存储配置(成本管理服务器)

在运行成本管理服务器的集群中创建一个 ConfigMap,用于声明计费项、计费方式、单位和显示名称。这会告诉服务器要对哪些内容计费,以及如何计费。

apiVersion: v1
data:
  config: |
    - name: NPUCount
      displayname:
        zh: "NPU"
        en: "NPU"
      methods:
        - name: Request
          displayname:
            zh: "请求量"
            en: "Request Usage"
          item: NPUCountQuota
          divisor: 1
          unit:
            zh: "count-hours"
            en: "count-hours"
        - name: ProjectQuota
          displayname:
            zh: "项目配额"
            en: "Project Quota"
          item: NPUCountsProjectQuota
          unit:
            zh: "count-hours"
            en: "count-hours"
          divisor: 1
kind: ConfigMap
metadata:
  labels:
    cpaas.io/slark.display.config: "true"
  name: slark-display-config-for-npu
  namespace: kube-public

添加 yaml 后,需要重启服务器 Pod 以重新加载配置。

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

为 NPU 成本模型添加价格

计费方式说明

计费项计费方式计费规则说明
NPURequest (Count-hours)按小时计算,使用过去一小时的 npu_count 指标,并乘以 NPU 分配的实际时长。基于 NPU 设备使用情况
NPUProject Quota (Count-hours)按小时计算,使用项目分配的 NPU 配额上限,并乘以时间长度。当配额发生变化时,按区间分段计算。基于项目级资源配额

如果 NPU 集群没有 Cost model,则需要创建一个新的 cost model。 然后你可以为该 NPU 集群的 cost model 添加价格:

  1. 将目标 NPU 集群与 cost model 关联。
  2. Billing Items 中选择 NPU
  3. Method 中选择 Request Usage (count-hours)Project Quota (count-hours)
  4. 设置 Default Price
  5. 配置 Price By Label(可选)。 示例: key: modelName value: 910B4-Ascend-V1

费用明细和费用统计

最后,等待 1 小时或更长时间后,你可以在 Cost Details 中按 namespace 和 card uuid 维度查看费用明细。 你也可以在 Cost Statistics 中查看按 cluster、project 和 namespace 统计的总费用。

在采集到使用量数据后,计费数据会在下一个计费周期生成,因此可能会在整点之后几分钟才显示。