当前位置:首页 > 技术 > 正文内容

HAMi vGPU 方案的 GPU 核心与显存隔离效果验证

访客 技术 2026年6月5日 1

本文针对开源虚拟 GPU 解决方案 HAMi 的 GPU 核心算力及显存资源隔离能力进行了实际测试。

测试结论简述

  • 核心算力隔离:Pod 所能使用的 GPU 计算能力会在设定值上下波动,但在较长时间维度上其平均利用率与所申请的核心比例基本相符。
  • 显存资源隔离:当 Pod 请求的 GPU 显存超出分配上限时,程序将立即触发 CUDA Out of Memory 错误。

测试环境配置

实验采用以下软硬件配置:

  • 物理 GPU 设备:NVIDIA A40 × 2
  • Kubernetes 版本:v1.23.17
  • HAMi 插件版本:v2.3.13

基础依赖部署

首先通过 NVIDIA GPU Operator 完成驱动和容器运行时组件的自动安装。相关操作可参考官方文档或社区指南。

随后按照 HAMi 官方指引完成插件部署,确保集群支持 vGPU 功能。

测试镜像准备

docker pull pytorch/pytorch:2.4.1-cuda11.8-cudnn9-runtime

测试脚本来源

选用 PyTorch 示例项目中的 ImageNet 训练代码作为负载模拟工具:

https://github.com/pytorch/examples/tree/main/imagenet

该示例程序会输出每次迭代执行耗时,便于观察不同资源配额下的性能变化。

使用方式

git clone https://github.com/pytorch/examples.git
cd /mnt/imagenet/
python main.py -a resnet18 --dummy

强制策略设置

为保证资源控制生效,需在 Pod 环境变量中添加 GPU_CORE_UTILIZATION_POLICY=force,否则仅单个 Pod 使用 GPU 时不启用算力限制机制。

完整部署清单

以下 YAML 文件展示了如何以 HostPath 形式挂载训练脚本并指定不同的核心占比(如 30% 和 60%)进行对比测试。

apiVersion: v1
kind: Pod
metadata:
  name: hami-test-pod
  namespace: default
spec:
  containers:
  - name: app-container
    image: pytorch/pytorch:2.4.1-cuda11.8-cudnn9-runtime
    command: ["python", "/mnt/data/main.py", "-a", "resnet18", "--dummy"]
    resources:
      requests:
        cpu: "4"
        memory: "32Gi"
        nvidia.com/gpu: "1"
        nvidia.com/gpucores: "30"
        nvidia.com/gpumem: "20000"
      limits:
        cpu: "4"
        memory: "32Gi"
        nvidia.com/gpu: "1"
        nvidia.com/gpucores: "30"
        nvidia.com/gpumem: "20000"
    env:
    - name: GPU_CORE_UTILIZATION_POLICY
      value: "force"
    volumeMounts:
    - name: code-mount
      mountPath: /mnt/data
    - name: shared-memory
      mountPath: /dev/shm
  restartPolicy: Never
  volumes:
  - name: code-mount
    hostPath:
      path: /root/project/examples/imagenet
      type: Directory
  - name: shared-memory
    emptyDir:
      medium: Memory

CUDA 核心算力隔离测试

30% 算力场景表现

查看日志发现每轮训练步长约为 0.6 秒,且 Grafana 监控图表显示整体 GPU 利用率维持在 30% 左右浮动。

Epoch: [0][  11/5005]        Time  0.605 ( 0.806) ...
Epoch: [0][  21/5005]        Time  0.605 ( 0.706) ...
...

60% 算力场景表现

将核心配额调整至 60%,对应地,处理延迟降低至约 0.3 秒,同时监控数据显示 GPU 平均占用率趋近于目标值。

Epoch: [0][  11/5005]        Time  0.227 ( 0.597) ...
Epoch: [0][  21/5005]        Time  0.234 ( 0.413) ...
...

GPU 显存资源隔离测试

资源配额检查

进入容器后执行 nvidia-smi 查看可用显存量应为 20GB。

+-------------------------------+----------------------+----------------------+
|   0  NVIDIA A40          Off  | 00000000:00:07.0 Off |                    0 |
|  0%   30C    P8    29W / 300W |      0MiB / 20000MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

OOM 行为验证脚本

编写一段简单的 Python 脚本来动态申请指定大小的 GPU 内存块,并捕获异常判断是否达到边界。

import torch
import sys

def request_gpu_memory(mb_size):
    elements = mb_size * 1024 * 1024 // 4
    try:
        tensor = torch.empty(elements, dtype=torch.float32, device='cuda')
        print(f"{mb_size} MB successfully allocated.")
    except RuntimeError as e:
        print(f"Allocation failed due to OOM: {e}")

if __name__ == "__main__":
    size = int(sys.argv[1]) if len(sys.argv) > 1 else 1024
    request_gpu_memory(size)

测试结果分析

尝试分配恰好等于限额的 20000MB 数据时报错退出;而请求略低于阈值的 19500MB 则顺利完成,表明内存隔离逻辑有效实施。

# 失败案例:
Failed to allocate 20000 MB on GPU: OOM.

# 成功案例:
Successfully allocated 19500 MB on GPU.

总结

综上所述,HAMi 提供的 vGPU 技术能够较好满足多租户环境中对 GPU 算力与显存资源的精细化管控需求:

  • 对于算力调度,能够在允许范围内合理调节任务吞吐速度;
  • 对于显存管理,则实现了硬性容量封顶,避免非法超额占用影响其他工作负载。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。