跳转至

HAMi 企业版安装和配置指南

本文介绍如何在 DCE 平台上安装和配置 HAMi(异构 AI 计算虚拟化中间件)企业版,实现 GPU 虚拟化功能。

Note

本文适用于已部署 DCE 平台的企业用户,需要启用 GPU 虚拟化功能以支持多容器共享 GPU 资源。 HAMi 企业版提供更强大的 GPU 资源管理和虚拟化能力,详细信息请参考 HAMi 项目官网

前提条件

在开始安装 HAMi 企业版之前,请确保满足以下条件:

系统要求

  • 已成功部署 DCE 平台
  • Kubernetes 集群版本 1.20 或更高
  • 集群中至少有一个配置了 GPU 的节点 (本文以 NVIDIA GPU 卡为例)
  • 具有集群管理员权限

GPU 硬件要求

Warning

在开始安装之前,请确保已备份重要数据,并在测试环境中验证安装过程。

获取 GPU UUID

在安装 HAMi 企业版之前,需要获取 GPU 设备的 UUID 用于许可证申请。根据您的环境配置,可以选择以下两种方法之一。

方法一:宿主机直接获取(推荐)

如果 GPU 驱动程序直接安装在宿主机上,可以使用以下命令获取 GPU UUID:

# 列出所有 GPU 设备及其 UUID
nvidia-smi -L

预期输出示例:

GPU 0: NVIDIA H800 (UUID: GPU-12345678-1234-1234-1234-123456789abc)
GPU 1: NVIDIA H800 (UUID: GPU-87654321-4321-4321-4321-cba987654321)

从输出中提取 UUID 信息:

# 仅显示 UUID
nvidia-smi -L | grep -oP 'UUID: \K[^)]*'

预期输出:

GPU-12345678-1234-1234-1234-123456789abc
GPU-87654321-4321-4321-4321-cba987654321

方法二:容器内获取

如果 GPU 驱动程序不是直接安装在宿主机上,需要将 GPU 设备挂载到容器中获取 UUID:

# 创建临时容器并挂载 GPU 设备
docker run --rm --gpus all nvidia/cuda:11.8-base-ubuntu20.04 nvidia-smi -L

或者使用 Kubernetes Pod 的方式:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-uuid-checker
spec:
  containers:
    - name: cuda
      image: nvidia/cuda:11.8-base-ubuntu20.04
      command: ["nvidia-smi", "-L"]
      resources:
        limits:
          nvidia.com/gpu: 1
  restartPolicy: Never

应用 Pod 配置并查看输出:

# 创建 Pod
kubectl apply -f gpu-uuid-checker.yaml

# 查看 Pod 日志获取 UUID
kubectl logs gpu-uuid-checker

# 清理临时 Pod
kubectl delete pod gpu-uuid-checker

Tip

建议记录所有 GPU 设备的 UUID,这些信息将用于后续的许可证申请和配置过程。 如果您有多个 GPU 节点,需要分别在每个节点上执行上述操作。

许可证申请和管理

HAMi 企业版需要有效的许可证才能正常运行。本节介绍如何申请和管理许可证。

申请企业版许可证

  1. 准备 GPU UUID 信息

使用上一节获取的 GPU UUID 信息,准备许可证申请所需的设备清单。

  1. 联系 HAMi 技术支持

通过以下方式申请企业版许可证:

  • 访问 HAMi 项目官网 获取联系方式
  • 提供 GPU UUID 列表和使用场景描述
  • 说明预期的 GPU 虚拟化需求

许可证文件部署

HAMi 企业版的许可证已内置到镜像中,对于基本安装无需额外配置。如果需要为其他 GPU 设备添加许可证,请按以下步骤操作:

  1. 找到许可证目录

    在每个 GPU 节点上找到许可证存储目录:

    # 在 GPU 节点上执行
    sudo mkdir -p /usr/local/vgpu
    
  2. 部署许可证文件

    将获取的许可证文件复制到指定目录:

    # 复制主许可证文件
    sudo cp <license> /usr/local/vgpu/
    
    # 复制设备特定的许可证文件(一个许可证可包含申请的一个或多个设备)
    sudo cp GPU-12345678-1234-1234-1234-123456789abc.lic /usr/local/vgpu/
    

安装 HAMi 企业版

本节介绍如何移除现有的 GPU 操作器并安装 HAMi 企业版。

移除现有的 nvidia-vgpu Operator

在安装 HAMi 企业版之前,需要先移除集群中现有的 nvidia-vgpu Operator 以避免冲突。

检查现有 Operator,如果有请根据合理的方式进行卸载。

# 查看现有的 GPU 相关操作器
kubectl get pods -A | grep -i nvidia
kubectl get pods -A | grep -i vgpu

准备 HAMi 企业版安装包

Note

HAMi 企业版可支持多种安装方式。本文以镜像为主,如有其他需要可联系交付人员获取支持。

  1. 获取安装包

    确保您已获得 hami_commercial.tar 安装包文件。

  2. 解压安装包

    # 解压 HAMi 企业版安装包
    tar -xvf hami_commercial.tar
    

部署 HAMi 企业版

使用 Helm 命令部署 HAMi 企业版:

使用 helm upgrade 命令更新安装包;注意修改 values.yaml配置:

  • resourceNamenvidia.com/gpu 改为 nvidia.com/vgpu
  • 修改 Chart 中需要的镜像和版本,主要涉及:
    • /projecthami/jettech/kube-webhook-certgen
    • /projecthami/kube-webhook-certgen
    • /projecthami/hami:vX.Y.Z-commercial
helm upgrade --install hami-commercial ./ \
  -n hami-commercial \
  --create-namespace \
  -f ./values.yaml

部署过程中的预期输出:

Release "hami-commercial" does not exist. Installing it now.
NAME: hami-commercial
LAST DEPLOYED: Mon Jan 15 10:30:00 2024
NAMESPACE: hami-commercial
STATUS: deployed
REVISION: 1
TEST SUITE: None

验证部署状态

  1. 检查 Pod 状态

    # 查看 HAMi 企业版相关 Pod 状态
    kubectl -n hami-commercial get pod
    

    预期输出示例:

    NAME                                READY   STATUS    RESTARTS   AGE
    hami-device-plugin-daemonset-xxxxx  1/1     Running   0          2m
    hami-scheduler-xxxxx                1/1     Running   0          2m
    hami-webhook-xxxxx                  1/1     Running   0          2m
    

Note

部署完成后,HAMi 企业版将自动开始管理集群中的 GPU 资源。 原有的 nvidia.com/gpu 资源将被转换为 nvidia.com/vgpu 资源。

切换节点 GPU 模式

HAMi 企业版部署完成后,需要进行一些后续配置以确保系统正常运行。

在容器管理界面切换 GPU 模式

  1. 登录 DCE 管理界面

    使用管理员账户登录 DCE 平台的 Web 管理界面。

  2. 进入容器管理模块

    导航到 容器管理集群列表 → 选择目标集群。

  3. 切换 GPU 模式

    在集群详情页面中:

    • 找到 节点管理 选项
    • 选择包含 GPU 的节点
    • 在节点详情中找到 GPU 配置 选项
    • 将 GPU 模式从 GPU 切换为 vGPU
    • 保存配置更改
  4. 确认模式切换

    切换完成后,可以在节点详情页面确认 GPU 模式已更改为 vGPU

验证系统配置

  1. 检查 GPU 资源

    验证 GPU 资源已正确转换为 vGPU 资源:

    # 查看节点的 GPU 资源
    kubectl describe nodes | grep -A 5 -B 5 "nvidia.com/vgpu"
    

    预期输出应显示 nvidia.com/vgpu 资源而不是 nvidia.com/gpu

  2. 验证设备插件状态

    # 检查设备插件是否正常运行
    kubectl -n hami-commercial get pods -l app=hami-device-plugin
    
  3. 查看系统事件

    # 查看相关的系统事件
    kubectl get events -n hami-commercial --sort-by='.lastTimestamp'
    

验证和测试

完成 HAMi 企业版安装后,可创建测试应用程序来验证 GPU 虚拟化功能是否正常工作。

创建 vGPU 测试应用

  1. 创建测试应用配置文件

    创建一个使用 vGPU 资源的测试应用:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vgpu-test-app
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: vgpu-test-app
      template:
        metadata:
          labels:
            app: vgpu-test-app
        spec:
          containers:
            - name: pytorch-container
              image: release.daocloud.io/zestu/pytorch:2.5.1-cuda12.4-cudnn9-runtime
              command: ["sleep", "3600"]
              resources:
                limits:
                  nvidia.com/vgpu: 1 # 申请 1 个 vGPU
                  nvidia.com/gpumem: 4096 # 申请 4GB GPU 内存
                  nvidia.com/gpucores: 50 # 申请 50% GPU 算力
                requests:
                  nvidia.com/vgpu: 1
                  nvidia.com/gpumem: 4096
                  nvidia.com/gpucores: 50
          nodeSelector:
            gpu: "on"
    
  2. 部署测试应用

    # 应用测试配置
    kubectl apply -f vgpu-test-app.yaml
    

GPU 资源分配验证

  1. 进入测试容器

    # 进入测试容器
    kubectl exec -it deployment/vgpu-test-app -- bash
    
  2. 检查 GPU 可见性

    在容器内执行以下命令:

    # 检查 CUDA 设备
    nvidia-smi
    
    # 检查 GPU 内存限制
    nvidia-smi --query-gpu=memory.total,memory.used,memory.free --format=csv
    

    预期输出应显示分配的 4GB GPU 内存限制。

  3. 验证 GPU 算力限制

    # 检查 GPU 利用率限制
    nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits
    

GPU 内存验证

为了更详细地验证 GPU 内存分配和使用情况,可以使用以下 Python 脚本进行测试。

创建验证脚本

创建一个名为 use_3gb_gpu_for_5min.py 的 Python 脚本:

#!/usr/bin/env python3
"""
HAMi 企业版 GPU 内存验证脚本
此脚本用于验证 vGPU 环境中的 GPU 内存分配和使用情况
"""
import torch
import time

def use_3_5gb_gpu_for_5min():
    print("CUDA available:", torch.cuda.is_available())
    print("CUDA device count:", torch.cuda.device_count())

    for i in range(torch.cuda.device_count()):
        print(f"Allocating memory on GPU {i}...")
        device = torch.device(f"cuda:{i}")
        # 获取当前 GPU 的显存大小
        total_memory = torch.cuda.get_device_properties(device).total_memory
        print(f"Total memory on GPU {i}: {total_memory / (1024 ** 3):.2f} GB")

        # 设置目标显存占用量为 3.5GB
        target_memory = 3.5 * (1024 ** 3)  # 3.5GB
        print(f"Target memory to allocate: {target_memory / (1024 ** 3):.2f} GB")

        allocated_memory = 0
        tensors = []
        while allocated_memory < target_memory:
            tensor = torch.empty(1024, 1024, device=device)
            allocated_memory += tensor.storage().nbytes()
            tensors.append(tensor)
            print(f"Allocated {allocated_memory / (1024 ** 3):.2f} GB on GPU {i}")

        print(f"GPU {i} is now filled with approximately 3.5GB of tensors.")

        # 设置运行时间为 5 分钟
        run_time = 5 * 60  # 5 分钟
        print(f"Running for {run_time / 60:.2f} minutes...")
        start_time = time.time()

        while time.time() - start_time < run_time:
            # 在这里可以添加一些简单的计算任务,以保持 GPU 活跃
            torch.cuda.synchronize(device)
            time.sleep(1)  # 每秒同步一次,避免过度占用 CPU

        print(f"Finished running for {run_time / 60:.2f} minutes.")
        print(f"Releasing memory on GPU {i}...")
        del tensors
        torch.cuda.empty_cache()
        print(f"Memory released on GPU {i}.")

if __name__ == "__main__":
    use_3_5gb_gpu_for_5min()

下一步

HAMi 企业版安装完成后,您可以:

  • 在生产环境中部署需要 GPU 资源的应用程序
  • 配置更复杂的 GPU 资源分配策略
  • 监控 GPU 资源使用情况和性能指标
  • 根据业务需求扩展 GPU 节点规模

Success

恭喜!您已成功完成 HAMi 企业版的安装和配置。 现在可以充分利用 GPU 虚拟化功能,提高 GPU 资源的利用率和管理效率。

相关参考

评论