NVIDIA GPU 安装

本章介绍在带有 NVIDIA GPU 的集群上进行端到端安装的步骤。有关 Huawei Ascend NPU,请参见 Huawei Ascend NPU 安装

前提条件

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

操作步骤

在 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!" 提示时,表示安装成功。

配置 containerd 使用 NVIDIA runtime 并重启:

nvidia-ctk runtime configure --runtime=containerd
systemctl restart containerd

下载集群插件

INFO

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

更多信息请联系 Consumer Support。

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

上传集群插件

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

安装 Alauda Build of Hami

  1. 在每个 NVIDIA GPU 节点上添加标签 "gpu=on",以便 hami-device-plugin(NVIDIA)仅在这些节点上运行。

    kubectl label nodes {nodeid} gpu=on
    TIP

    此标签仅适用于 NVIDIA 节点——Ascend 节点请使用 ascend=on 标签。请参见 Huawei Ascend NPU 安装

  2. 转到 管理员 -> Marketplace -> 集群插件 页面,切换到目标集群,然后部署 Alauda Build of Hami 集群插件。

    在部署表单中保持 Enable NVIDIA开启。如果集群不包含任何 Huawei Ascend NPU 节点,请将 Enable Ascend 保持为关闭。其他参数可以保持默认值,或者在了解其用法后再进行修改。

    参数默认值说明
    Enable NVIDIA已启用启用后,会同时部署 hami-schedulerhami-device-plugin(NVIDIA)。
    Enable Ascend已禁用对于仅包含 NVIDIA 的集群,请保持禁用。如果您的集群也包含 Huawei Ascend NPU,请参见 Huawei Ascend NPU 安装
    TIP

    Enable NVIDIAEnable Ascend 彼此独立。您可以关闭其中任意一个,但应至少保持一种设备类型处于启用状态。

  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. 转到 管理员 -> Marketplace -> 集群插件 页面,切换到目标集群,然后部署 Alauda Build of DCGM-Exporter 集群插件: 在弹出的表单中设置节点标签:

    • Node Label Key: gpu
    • Node Label Value: on

    如果需要为 pgpu 启用 dcgm-exporter,请添加以下标签:

    • Node Label Key: nvidia-device-enable
    • Node Label Value: pgpu
  2. 验证结果。您可以在 UI 中查看 "Installed" 状态,也可以检查 pod 状态:

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

安装监控

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

安装 ACP MonitorDashboard(可选)

在 ACP dashboard 中为 HAMi GPU monitor 创建 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(可选)

Alauda Build of Hami-WebUI 版本兼容性:

  • v1.10.0 与 Hami v2.7v2.8 兼容。
  • v1.5.0 与 Hami v2.8 不兼容。
  • 部署 Hami v2.8 时,请使用 Alauda Build of Hami-WebUI v1.10.0
  1. 转到 管理员 -> Marketplace -> 集群插件 页面,切换到目标集群,然后部署 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"

验证

本节介绍如何验证已安装的 Alauda Build of Hami 及相关监控是否有效。

验证 Hami

  1. 检查业务集群控制节点中的 GPU 节点上是否存在可分配的 GPU 资源。 运行以下命令:
    kubectl get node  ${nodeName} -o=jsonpath='{.status.allocatable}'
    # 输出包含:"nvidia.com/gpualloc":"10"(具体值取决于 GPU 卡数量和安装参数)
  2. 部署一个 GPU 示例实例。 检查是否存在任何与 GPU 相关的资源消耗。在业务集群的 GPU 节点上运行以下命令:
    nvidia-smi pmon -s u -d 1

如果 sm 和 mem 中都包含数据,则表示 GPU 已就绪。您可以开始在 GPU 节点上开发 GPU 应用。 注意:部署 GPU 应用时,请务必配置以下必填参数:

spec:
  containers:
    - image: your-image
      imagePullPolicy: IfNotPresent
      name: gpu
      resources:
        limits:
          cpu: '2'
          memory: 4Gi
          nvidia.com/gpualloc: 1     # 请求 1 个物理 GPU(必填)
          nvidia.com/gpucores: "50"  # 请求每个 GPU 50% 的计算资源(可选)
          nvidia.com/gpumem: 8000    # 请求每个 GPU 8000MB 显存(可选)

验证 MonitorDashboard

在 HAMi vgpu 服务运行一段时间后,进入 管理员 -> Operations Center -> Monitor -> Dashboards 页面,并切换到 Hami 下的 HAMi GPU Monitoring 图表。 您将看到相关图表数据。

验证 Hami-WebUI

在 HAMi-WebUI 组件运行一段时间后,在浏览器中访问 http://{business cluster node IP}:NodePort