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 Hami、Alauda 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
-
在每个 NVIDIA GPU 节点上添加标签 "gpu=on",以便 hami-device-plugin(NVIDIA)仅在这些节点上运行。
kubectl label nodes {nodeid} gpu=on
-
转到 管理员 -> Marketplace -> 集群插件 页面,切换到目标集群,然后部署 Alauda Build of Hami 集群插件。
在部署表单中保持 Enable NVIDIA 为开启。如果集群不包含任何 Huawei Ascend NPU 节点,请将 Enable Ascend 保持为关闭。其他参数可以保持默认值,或者在了解其用法后再进行修改。
TIP
Enable NVIDIA 和 Enable Ascend 彼此独立。您可以关闭其中任意一个,但应至少保持一种设备类型处于启用状态。
-
验证结果。您可以在 UI 中查看 "Installed" 状态,也可以检查 pod 状态:
kubectl get pods -n kube-system | grep -E "hami-scheduler|hami-device-plugin"
-
创建一些用于定义扩展资源的 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
-
转到 管理员 -> 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
-
验证结果。您可以在 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.7 和 v2.8 兼容。
v1.5.0 与 Hami v2.8 不兼容。
- 部署 Hami
v2.8 时,请使用 Alauda Build of Hami-WebUI v1.10.0。
- 转到
管理员 -> 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"
- 验证结果。您可以在 UI 中查看 "Installed" 状态,也可以检查 pod 状态:
kubectl get pods -n cpaas-system | grep "hami-webui"
验证
本节介绍如何验证已安装的 Alauda Build of Hami 及相关监控是否有效。
验证 Hami
- 检查业务集群控制节点中的 GPU 节点上是否存在可分配的 GPU 资源。
运行以下命令:
kubectl get node ${nodeName} -o=jsonpath='{.status.allocatable}'
# 输出包含:"nvidia.com/gpualloc":"10"(具体值取决于 GPU 卡数量和安装参数)
- 部署一个 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。