安装

目录

前提条件

  • 对您的 ACP 集群具有集群管理员权限
  • Kubernetes 版本:v1.16+
  • CUDA 版本:v10.2+
  • NvidiaDriver:Hami 中为 v440+,DCGM-exporter 中为 v450+
  • ACP 版本:v3.18.2,v4.0,v4.1,v4.2

操作步骤

在您的 gpu 节点安装 Nvidia 驱动

建议参考 Nvidia 官方网站安装指南

安装 Nvidia Container Runtime

建议参考 Nvidia Container Toolkit 安装指南

在 GPU 节点添加 Nvidia yum 库

注意:确保 GPU 节点可以访问 nvidia.github.io

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
yum makecache -y

当出现“Metadata cache created.”消息时,表示添加成功。

安装 Nvidia Container Runtime

yum install nvidia-container-toolkit -y

当提示“Complete!”时,表示安装成功。

下载集群插件

INFO

Alauda Build of HamiAlauda Build of DCGM-Exporter 和(可选)Alauda Build of Hami-WebUI 集群插件可从 Customer Portal 获取。

如需更多信息,请联系消费者支持。

注意:部署在 global 集群中的版本为 v4.2.3-413 的 Alauda Build of DCGM-Exporter 可能导致组件持续重装。版本 v4.2.3-413-1 解决了此问题,请务必使用该版本。

上传集群插件

有关上传集群插件的更多信息,请参见 Uploading Cluster Plugins

安装 Alauda Build of Hami

  1. 在您的 GPU 节点上添加标签 "gpu=on",以便 Hami 调度。

    kubectl label nodes {nodeid} gpu=on
  2. 进入 Administrator -> Marketplace -> Cluster Plugin 页面,切换到目标集群,然后部署 Alauda Build of Hami 集群插件。 注意:部署表单参数可保持默认或在了解使用方法后修改。

  3. 验证结果。您可以在 UI 中看到“Installed”状态,或者检查 pod 状态:

    kubectl get pods -n kube-system | grep -E "hami-scheduler|hami-device-plugin"
  4. 创建定义扩展资源的 ConfigMaps,可用于在 ACP 上设置扩展资源。在您的 gpu 集群中运行以下脚本:

    点击展开代码
    kubectl apply -f - <<EOF
    apiVersion: v1
    data:
      dataType: integer
      defaultValue: "1"
      descriptionEn: Number of GPU jobs for resource quota. When create workload, declare how many physical GPUs needs and the requests of gpu core and gpu memory are the usage of per physical GPU
      descriptionZh: 资源配额代表 GPU 任务数。创建负载时代表申请的物理 gpu 个数, 申请的算力和显存都是每个物理 GPU 的使用量
      group: hami-nvidia
      groupI18n: '{"zh": "HAMi NVIDIA", "en": "HAMi NVIDIA"}'
      key: nvidia.com/gpualloc
      labelEn: gpu number
      labelZh: gpu 个数
      limits: optional
      requests: disabled
      resourceUnit: "count"
      relatedResources: "nvidia.com/gpucores,nvidia.com/gpumem"
      excludeResources: "nvidia.com/mps-core,nvidia.com/mps-memory,tencent.com/vcuda-core,tencent.com/vcuda-memory"
      runtimeClassName: ""
    kind: ConfigMap
    metadata:
      labels:
        features.cpaas.io/enabled: "true"
        features.cpaas.io/group: hami-nvidia
        features.cpaas.io/type: CustomResourceLimitation
      name: cf-crl-hami-nvidia-gpualloc
      namespace: kube-public
    ---
    apiVersion: v1
    data:
      dataType: integer
      defaultValue: "20"
      descriptionEn: vgpu cores, 100 cores represents the all computing power of a physical GPU
      descriptionZh: vgpu 算力, 100 算力代表一个物理 GPU 的全部算力
      group: hami-nvidia
      groupI18n: '{"zh": "HAMi NVIDIA", "en": "HAMi NVIDIA"}'
      key: nvidia.com/gpucores
      prefix: limits
      labelEn: vgpu cores
      labelZh: vgpu 算力
      limits: optional
      requests: disabled
      relatedResources: "nvidia.com/gpualloc,nvidia.com/gpumem"
      excludeResources: "nvidia.com/mps-core,nvidia.com/mps-memory,tencent.com/vcuda-core,tencent.com/vcuda-memory"
      runtimeClassName: ""
      ignoreNodeCheck: "true"
    kind: ConfigMap
    metadata:
      labels:
        features.cpaas.io/enabled: "true"
        features.cpaas.io/group: hami-nvidia
        features.cpaas.io/type: CustomResourceLimitation
      name: cf-crl-hami-nvidia-gpucores
      namespace: kube-public
    ---
    apiVersion: v1
    data:
      dataType: integer
      defaultValue: "4000"
      group: hami-nvidia
      groupI18n: '{"zh": "HAMi NVIDIA", "en": "HAMi NVIDIA"}'
      key: nvidia.com/gpumem
      prefix: limits
      labelEn: vgpu memory
      labelZh: vgpu 显存
      limits: optional
      requests: disabled
      resourceUnit: "Mi"
      relatedResources: "nvidia.com/gpualloc,nvidia.com/gpucores"
      excludeResources: "nvidia.com/mps-core,nvidia.com/mps-memory,tencent.com/vcuda-core,tencent.com/vcuda-memory"
      runtimeClassName: ""
      ignoreNodeCheck: "true"
    kind: ConfigMap
    metadata:
      labels:
        features.cpaas.io/enabled: "true"
        features.cpaas.io/group: hami-nvidia
        features.cpaas.io/type: CustomResourceLimitation
      name: cf-crl-hami-nvidia-gpumem
      namespace: kube-public
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cf-crl-hami-config
      namespace: kube-public
      labels:
        device-plugin.cpaas.io/config: "true"
    data:
      deviceName: "HAMi"
      nodeLabelKey: "gpu"
      nodeLabelValue: "on"
    EOF
    

然后,在 ACP 业务视图创建应用时的资源配置页面中,您可以在扩展资源类型下拉框中看到 Hami,并可以使用它。

安装 Alauda Build of DCGM-Exporter

  1. 进入 Administrator -> Marketplace -> Cluster Plugin 页面,切换到目标集群,然后部署 Alauda Build of DCGM-Exporter 集群插件: 在弹出表单中设置节点标签:

    • 节点标签键:gpu
    • 节点标签值:on

    如果需要为 pgpu 启用 dcgm-exporter,可以添加另一个标签:

    • 节点标签键:nvidia-device-enable
    • 节点标签值:pgpu
  2. 验证结果。您可以在 UI 中看到“Installed”状态,或者检查 pod 状态:

    kubectl get pods -n kube-system | grep dcgm-exporter

安装监控

您可以使用 ACP MonitorDashboard 或 Alauda build of Hami-WebUI

安装 ACP MonitorDashboard(可选)

为 ACP 监控面板中的 HAMi GPU 监控创建 ACP MonitorDashboard 资源。 将 hami-vgpu-metrics-dashboard-v1.0.2.yaml 文件保存到业务集群,并执行命令:kubectl apply -f hami-vgpu-metrics-dashboard-v1.0.2.yaml

安装 Alauda build of Hami-WebUI(可选)

  1. 进入 Administrator -> Marketplace -> Cluster Plugin 页面,切换到目标集群,然后部署 Alauda Build of Hami-WebUI 集群插件。 填写 Prometheus 地址和 Prometheus 认证。建议启用 NodePort 访问。Prometheus 地址和认证信息可通过以下脚本获取:
    #!/bin/bash
    
    addr=$(kubectl get feature monitoring -o jsonpath='{.spec.accessInfo.database.service}')
    if [ -z "$addr" ]; then
    addr=$(kubectl get feature monitoring -o jsonpath='{.spec.accessInfo.database.address}')
    fi
    echo "Prometheus Address: $addr"
    
    secret_name=$(kubectl get feature monitoring -o jsonpath='{.spec.accessInfo.database.basicAuth.secretName}')
    namespace="cpaas-system"
    
    username=$(kubectl get secret $secret_name -n $namespace -o jsonpath='{.data.username}' | base64 -d)
    password=$(kubectl get secret $secret_name -n $namespace -o jsonpath='{.data.password}' | base64 -d)
    
    auth="Basic $(echo -n "$username:$password" | base64 -w 0)"
    echo "Prometheus Auth   : $auth"
  2. 验证结果。您可以在 UI 中看到“Installed”状态,或者检查 pod 状态:
    kubectl get pods -n cpaas-system | grep "hami-webui"