🤖 Assistant

好的,根据您提供的资料,HAMi 确实是一个非常适合构建 GPU PaaS 平台动态虚拟化方案的开源项目。它解决了传统 GPU 分配方式中的痛点,实现了细粒度、可隔离、可调度的 GPU 资源管理。下面我将为您详细规划基于 HAMi 的 GPU PaaS 平台动态虚拟化方案。

1. HAMi 核心价值与技术原理

为什么选择 HAMi?
HAMi(Heterogeneous AI Computing Virtualization Middleware)是一个 CNCF 沙箱项目,专注于为 Kubernetes 提供异构加速器(GPU、NPU、MLU 等)的共享、隔离和调度能力 1。其核心价值在于:

  • 细粒度资源切分:允许用户以“显存百分比”或“具体 MB 数”请求 GPU 资源,打破了传统 K8s 只能分配整张 GPU 卡的限制 2
  • 硬隔离保障:通过拦截 CUDA API,在运行时强制限制每个 Pod 的显存和算力使用,防止资源争抢,保证服务质量 3
  • 异构设备统一管理:支持 NVIDIA、华为昇腾、寒武纪、海光等多种加速器,实现统一资源池管理 1
  • 高级调度策略:内置 Binpack、Spread 等策略,可以优化资源利用率或实现高可用 23

技术原理:
HAMi 的架构主要由四个组件协同工作,实现从资源请求到运行时隔离的全链路管理 3

  1. Webhook:拦截 Pod 创建请求,识别 vGPU 资源请求,并将调度器指定为 vgpu-scheduler
  2. Scheduler:自定义调度器,根据节点的 GPU 资源余量、调度策略(Binpack/Spread)进行打分和调度决策。
  3. Device Plugin:上报节点 GPU 信息,并根据调度结果,为 Pod 分配虚拟 GPU 设备,注入环境变量(如显存限制)和挂载拦截库。
  4. vGPU-Core (libvgpu.so):在容器内拦截 CUDA 调用,根据注入的环境变量限制显存和算力使用,实现硬隔离。

2. GPU PaaS 平台整体架构设计

一个基于 HAMi 的 GPU PaaS 平台,可以采用以下分层架构:

基础设施层

  • 节点池管理:支持异构 GPU 节点池(如 NVIDIA A100, T4, 华为昇腾等),每个节点需安装 NVIDIA 驱动、容器运行时和 HAMi Device Plugin。

核心调度层

  • HAMi 控制面:部署 HAMi Scheduler 和 Webhook,作为 GPU 资源调度的核心大脑。
  • 策略配置:可配置集群级别的默认调度策略(如默认使用 Binpack 以提高利用率)。
  • 与 Volcano/Kueue 集成:HAMi 可与批处理调度器 Volcano 或队列管理器 Kueue 协同工作,支持优先级、队列配额等高级功能 1

资源隔离层

  • 运行时拦截:Pod 启动时,Device Plugin 会将 libvgpu.so 挂载到容器内,并设置环境变量(如 CUDA_DEVICE_MEMORY_LIMIT)。
  • 资源视图虚拟化:在容器内执行 nvidia-smi,看到的显存总量将是申请值,而非物理 GPU 全部显存,实现了视图层面的隔离 3

平台服务层

  • 用户控制台:提供可视化界面,让用户无需编写 YAML,即可提交 GPU 任务,选择 GPU 型号、显存大小、算力百分比等。
  • 配额管理:为不同租户/项目设置 GPU 资源配额。
  • 监控计量:收集 GPU 使用指标,用于计费或性能分析。

3. 动态资源分配具体实现

步骤一:集群环境准备与 HAMi 安装

  1. 部署 K8s 集群:确保集群版本兼容(如 EKS, ACK, 或自建集群)。
  2. 安装 HAMi:使用 Helm Chart 安装,命令示例如下:
helm repo add hami https://project-hami.io/charts
helm install hami hami/hami --set scheduler.defaultSchedulerName=vgpu-scheduler
  1. 验证安装:检查 kube-system 命名空间下的 hami-schedulerhami-device-plugin Pod 是否正常运行 [1]。

步骤二:应用提交与资源请求
用户无需关心具体底层实现,只需在 Pod 的 YAML 中声明所需资源。PaaS 平台可通过用户输入,自动生成如下的 YAML:

apiVersion: v1
kind: Pod
metadata:
name: my-gpu-app
annotations:
 hami.io/gpu-scheduler-policy: "binpack" # 使用 Binpack 策略
spec:
containers:
 - name: my-container
 image: nvidia/cuda:11.0-base
 command: ["python", "train.py"]
 resources:
 limits:
 nvidia.com/gpu: 1 # 请求 1 个虚拟 GPU
 nvidia.com/gpumem: 3000 # 请求 3000MB 显存
 nvidia.com/gpucores: 30 # 请求 30% 的算力
  • 动态分配:调度器会寻找一张剩余显存 >= 3000MB 且剩余算力 >= 30% 的物理 GPU,将其分配给该 Pod。
  • 硬隔离生效:Pod 启动后,即使物理 GPU 有更多空闲资源,该 Pod 也只能看到和使用 3000MB 显存和 30% 算力,实现了资源的严格限制。

步骤三:高级调度策略应用
在 AWS 的示例中,通过设置 hami.io/gpu-scheduler-policy: "binpack",可以实现 GPU 维度的 Binpack 调度,即优先将多个 Pod 填充到同一张物理 GPU 上,直到其资源被填满,然后再使用下一张 GPU,从而最大化 GPU 利用率,避免资源碎片化 2

4. 核心功能落地指南

场景一:开发调试环境——多租户共享 GPU

  • 需求:多个算法工程师在开发调试时,显存需求可能只是 2-4GB,无需独占整张卡。
  • 方案:为每位用户创建一个 Jupyter Notebook Pod,请求 3000MB 显存。PaaS 平台可实现:同一张物理 GPU(如 T4 16GB)上,同时运行 5 个用户的 Notebook,彼此隔离,互不影响。
  • 落地:PaaS 平台在用户控制台提供“GPU 开发环境”模板,用户选择显存大小后,自动生成 Pod YAML 并提交。

场景二:模型推理服务——高并发、低延迟

  • 需求:多个推理服务需要同时运行,但流量波动大。
  • 方案:利用 HAMi 的 Binpack 策略,将多个推理服务(如 vLLM)部署在同一张 GPU 上。每个服务根据模型大小申请特定显存(如 A10G 卡上,每个模型申请 45% 显存,实现双模型共享)2
  • 落地:PaaS 平台集成 vLLM 框架模板,用户上传模型权重,平台自动根据模型大小计算所需显存,并生成 Deployment YAML。

场景三:模型训练任务——资源独占与队列管理

  • 需求:训练任务通常需要独占整张 GPU 或多张 GPU,且希望支持队列排队和优先级。
  • 方案
  • 与 Volcano/Kueue 集成:利用 Volcano 的队列管理功能,设置不同租户的资源配额。训练任务提交到 Volcano 队列,Volcano 再与 HAMi Scheduler 协同,实现排队和优先级调度 1
  • 资源请求:训练任务 YAML 中设置 nvidia.com/gpu: 1,不设置 gpumemgpucores,则表示请求整张 GPU。

5. 监控、运维与最佳实践

监控与计量

  • Prometheus 集成:HAMi Device Plugin 会将节点的 GPU 资源使用情况(包括物理总量、已分配虚拟量)写入 Node 的 Annotations 中。PaaS 平台可以采集这些指标,构建监控看板。
  • 用户计费:根据用户 Pod 申请的 nvidia.com/gpumemnvidia.com/gpucores 进行计量计费,而非按物理 GPU 卡数计费。

运维最佳实践

  • 节点维护:在维护 GPU 节点前,先驱逐该节点上的 Pod。HAMi 的调度器会自动将 Pod 重新调度到其他有空闲资源的节点。
  • 资源超卖:HAMi 支持显存超卖,但算力无法超卖。PaaS 平台需根据实际物理 GPU 的算力,谨慎设置超卖比例。
  • 异构设备兼容:PaaS 平台应通过标签(如 nvidia.com/use-gputype: "A100")管理异构 GPU 节点池,让应用能明确指定所需的 GPU 型号 2

总结
基于 HAMi 构建 GPU PaaS 平台的动态虚拟化方案,核心在于利用其 细粒度资源划分硬隔离机制高级调度策略,将物理 GPU 资源转化为可弹性、可计量的服务。通过 PaaS 平台层的封装,可以为用户提供简单、高效、低成本的 GPU 使用体验,显著提升 GPU 资源利用率,降低企业算力成本。


  1. Heterogeneous GPU Sharing on Kubernetes | HAMi ↩︎ ↩︎ ↩︎ ↩︎

  2. Virtualizing Any GPU on AWS with HAMi: Free Memory Isolation ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  3. GPU资源告急?HAMi GPU虚拟化技术是如何为你省钱的! - 睿思智联 RiseUnion ↩︎ ↩︎ ↩︎ ↩︎

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐