安装

前提条件

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

操作步骤

在您的 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 解决了此问题,请务必使用该版本。

上传集群插件

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

安装 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: 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 的使用量
      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
      labelEn: vgpu cores
      labelZh: vgpu 算力
      limits: optional
      requests: disabled
      resourceUnit: "%"
      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
      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"