如何定义 pGPU 计费模型

目录

前提条件

在 GPU 集群中:

  • 已安装 Alauda Build 的 NVIDIA GPU Device Plugin
  • 已安装成本管理智能体

关于 Alauda Build 的 NVIDIA GPU Device Plugin

Kubernetes 的 NVIDIA 设备插件是一个 Daemonset,允许您自动:

  • 暴露集群中每个节点的 GPU 数量
  • 跟踪 GPU 的健康状态
  • 在 Kubernetes 集群中运行支持 GPU 的容器。
Note
因为 Alauda Build of NVIDIA GPU Device Plugin 的发版周期与灵雀云容器平台不同,所以 Alauda Build of NVIDIA GPU Device Plugin 的文档现在作为独立的文档站点托管在

操作步骤

创建 PrometheusRule 以生成所需指标

在 GPU 集群中创建一个 PrometheusRule。

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    prometheus: kube-prometheus
  name: pgpu-labels
  namespace: kube-system
spec:
  groups:
  - name: gpu.rules
    interval: 30s
    rules:
    - record: gpu_count
      expr: |
        count by (UUID, label_modelName, namespace) (
          label_replace(
            DCGM_FI_DEV_GPU_UTIL{namespace!="kube-system"},
            "label_modelName",
            "$0",
            "modelName",
            ".*"
          )
        )

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

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

apiVersion: v1
data:
  config: >
    - kind: pGPU
      category: pGPUCount
      item: vGPUCountQuota
      period: Hourly
      labels:
        query: "gpu_count"
        mappers:
          name: UUID
          namespace: namespace
          cluster: ""
          project: ""
      usage:
        query: gpu_count
        step: 5m
        mappers:
          name: UUID
          namespace: namespace
          cluster: ""
          project: ""
kind: ConfigMap
metadata:
  labels:
    cpaas.io/slark.collection.config: "true"
  name: slark-agent-pgpu-namespace-config
  namespace: cpaas-system
---
apiVersion: v1
data:
  config: >
    - kind: Project
      category: pGPUCount
      item: vGPUCountsProjectQuota
      period: Hourly
      usage:
        query: avg by (project, cluster) (avg_over_time(cpaas_project_resourcequota{resource="requests.nvidia.com/gpu", 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-vgpu
  namespace: cpaas-system

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

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

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

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

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

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

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

为 pGPU 计费模型添加价格

计费方式说明

计费项计费方式计费规则说明
pGPURequest(Count-hours)按小时计算,基于 POD 过去一小时的 Request,乘以 POD 实际运行时长(不足 5 分钟按 5 分钟计)。基于 pGPU 资源请求
pGPUProject Quota(Count-hours)按小时计算,基于项目分配的 CPU 配额限制,乘以时间长度。配额变更时分段计算。基于项目级资源配额

如果 GPU 集群没有成本模型,需要先创建新的成本模型。 然后可以为 GPU 集群的成本模型添加价格:

  1. 计费项 中选择 pGPU
  2. 方式 中选择 Request Usage (count-hours)Project Quota (count-hours)
  3. 设置 默认价格
  4. 配置 按标签定价(可选)。 示例: key: modelName
    value: "Tesla P100-PCIE-16GB" 或 "Tesla T4" 或 "NVIDIA A30"(通过运行 nvidia-smi 获取)

成本明细与成本统计

最后,等待 1 小时或更长时间后,您可以在 成本明细 中查看基于命名空间和卡 UUID 维度的成本明细。 并且可以在 成本统计 中查看基于集群、项目和命名空间的总成本。