HAMi GPU 资源管理完整指南
HAMi GPU 资源管理完整指南
项目地址:https://github.com/Project-HAMi/HAMi
本文地址:https://github.com/ForceInjection/AI-fundermentals/blob/main/hami/hmai-gpu-resources-guide.md
相关文章:
GPU 虚拟化与资源管理技术深度解析 - 第一部分:基础理论篇
GPU 虚拟化与资源管理技术深度解析 - 第二部分:虚拟化技术篇
GPU 虚拟化与资源管理技术深度解析 - 第三部分:资源管理与优化篇
GPU 虚拟化与资源管理技术深度解析 - 第四部分:实践应用篇
目录
• HAMi GPU 资源管理完整指南 • 目录 • 1. 概述 • 1.1 快速参考表 • 1.2 常见配置模式 • 2. 核心资源类型 • 2.1 nvidia.com/gpu • 2.1.1 定义 • 2.1.2 特性 • 2.1.3 代码实现 • 2.2 nvidia.com/gpucores • 2.2.1 定义 • 2.2.2 特性 • 2.2.3 配置选项 • 2.3 nvidia.com/gpumem • 2.3.1 定义 • 2.3.2 特性 • 2.3.3 代码实现 • 2.4 nvidia.com/gpumem-percentage • 2.4.1 定义 • 2.4.2 特性 • 2.4.3 使用示例 • 3. 算力分配机制 • 3.1 算力(已分配/总量)的含义 • 3.1.1 核心概念 • 3.1.2 数据结构 • 3.1.3 分配流程 • 3.1.4 实际示例 • 3.1.5 性能影响分析 • 4. 使用场景对比 • 4.1 独占使用场景 • 4.2 共享使用场景 • 5. 配置管理 • 5.1 全局配置 • 5.2 节点级配置 • 5.3 Pod级配置 • 6. 高级特性 • 6.1 调度策略 • 6.1.1 节点级调度策略 • 6.1.2 GPU 级调度策略 • 6.1.3 调度策略说明 • 6.2 GPU 类型和设备选择 • 6.2.1 指定 GPU 类型 • 6.2.2 指定 GPU UUID • 6.3 NUMA 绑定和拓扑感知 • 6.3.1 NUMA 绑定 • 6.3.2 拓扑感知调度 • 6.4 MIG 支持 • 6.4.1 静态 MIG 配置 • 6.4.2 动态 MIG 支持 • 6.5 运行时模式选择 • 6.5.1 vGPU 模式配置 • 6.5.2 运行时类配置 • 6.6 监控和可观测性 • 6.6.1 资源使用率监控 • 6.6.2 Prometheus 指标 • 7. 故障排查和最佳实践 • 7.1 常见问题诊断 • 7.1.1 资源分配失败 • 7.1.2 性能隔离问题 • 7.1.3 内存超限问题 • 7.2 性能优化建议 • 7.2.1 资源配置优化 • 7.2.2 调度策略优化 • 7.3 监控和告警 • 7.3.1 关键监控指标 • 7.3.2 性能基线建立 • 7.4 升级和迁移 • 7.4.1 版本升级注意事项 • 7.4.2 配置迁移 • 8. 多厂商 GPU 支持 • 8.1 支持的设备类型 • 8.2 通用资源声明模式 • 8.2.1 基础设备分配 • 8.2.2 厂商特定配置 • 8.3 设备粒度和虚拟化策略 • 8.4 监控和可观测性 • 9. 总结 • 9.1 核心资源类型 • 9.2 高级特性 • 9.3 多厂商支持 • 9.4 核心优势
1. 概述
本文档是 HAMi GPU 资源管理的完整技术指南,涵盖以下核心内容:
• 资源类型管理: 详细介绍 NVIDIA GPU 的四种核心资源类型( nvidia.com/gpu、nvidia.com/gpucores、nvidia.com/gpumem、nvidia.com/gpumem-percentage)的定义、特性和使用方法• 算力分配机制: 深入解析 GPU 算力分配的核心概念、数据结构、分配流程和性能影响 • 高级特性: 包括多种调度策略(binpack、spread、numa-first等)、设备选择、NUMA绑定、拓扑感知、MIG支持、运行时模式选择等 • 配置管理: 全局配置、节点级配置和Pod级配置的详细说明 • 故障排查与最佳实践: 常见问题诊断、性能优化建议、监控告警配置、版本升级指导 • 多厂商支持: 统一管理 NVIDIA、寒武纪、海光、天数智芯、摩尔线程、华为昇腾、沐曦等7种厂商的AI加速设备 • 监控与可观测性: Prometheus指标、性能监控、资源使用率跟踪等
本指南面向对 HAMi 有一定了解的技术人员,提供从基础概念到高级特性的全方位技术说明。
1.1 快速参考表
nvidia.com/gpu | ||||
nvidia.com/gpucores | ||||
nvidia.com/gpumem | ||||
nvidia.com/gpumem-percentage |
1.2 常见配置模式
# 独占模式
nvidia.com/gpu:1
nvidia.com/gpucores:100
nvidia.com/gpumem-percentage:100
# 共享模式
nvidia.com/gpu:1
nvidia.com/gpucores:50
nvidia.com/gpumem:4000
# 高密度共享
nvidia.com/gpu:1
nvidia.com/gpucores:25
nvidia.com/gpumem-percentage:252. 核心资源类型
2.1 nvidia.com/gpu
2.1.1 定义
nvidia.com/gpu 是用于声明 Pod 所需物理 GPU 数量的资源类型。
2.1.2 特性
• 必需性: 必需的资源声明,用于触发 GPU 调度 • 取值范围: 正整数(1, 2, 3...) • 用途: 指定 Pod 需要多少个物理 GPU 设备 • 调度作用: HAMi 调度器根据此值进行 GPU 设备分配
2.1.3 代码实现
在 pkg/device/nvidia/device.go 的 GenerateResourceRequests 函数中:
func(dev *NvidiaGPUDevices) GenerateResourceRequests(pod *corev1.Pod) util.PodDeviceRequests {
// 从容器的 Limits 或 Requests 中获取 nvidia.com/gpu 的值
count, _ := resource.Limits.Name(dev.ResourceCountName).AsInt64()
if count == 0 {
count, _ = resource.Requests.Name(dev.ResourceCountName).AsInt64()
}
// ...
}2.2 nvidia.com/gpucores
2.2.1 定义
nvidia.com/gpucores 是用于指定每个物理 GPU 分配给 Pod 的计算核心百分比的资源类型。
2.2.2 特性
• 必需性: 可选的资源声明 • 取值范围: 0-100 的整数,表示百分比 • 默认值: 由 nvidia.defaultCores配置项决定• 限制类型: 从 v1.0.1.3 版本开始在容器内部限制 GPU 利用率 • 共享支持: 支持多个 Pod 共享同一个物理 GPU 的不同算力份额
2.2.3 配置选项
• nvidia.defaultCores: 默认核心分配百分比• nvidia.disablecorelimit: 是否禁用核心限制• GPU_CORE_UTILIZATION_POLICY: 容器环境变量,控制核心利用率策略
2.3 nvidia.com/gpumem
2.3.1 定义
nvidia.com/gpumem 是用于指定 Pod 所需 GPU 内存大小的资源类型,以 MB 为单位。
2.3.2 特性
• 必需性: 可选的资源声明 • 取值范围: 正整数,单位为 MB • 用途: 精确指定 Pod 需要的 GPU 内存量 • 互斥性: 不能与 nvidia.com/gpumem-percentage同时使用• 内存隔离: 提供硬隔离保证,确保容器不会超出分配的内存边界
2.3.3 代码实现
在 GenerateResourceRequests 函数中处理内存资源请求:
// 获取 nvidia.com/gpumem 的值
memoryRequest, _ := resource.Limits.Name(dev.ResourceMemoryName).AsInt64()
if memoryRequest == 0 {
memoryRequest, _ = resource.Requests.Name(dev.ResourceMemoryName).AsInt64()
}2.4 nvidia.com/gpumem-percentage
2.4.1 定义
nvidia.com/gpumem-percentage 是用于指定 Pod 所需 GPU 内存百分比的资源类型,在 v1.0.1.4 版本中引入。
2.4.2 特性
• 必需性: 可选的资源声明 • 取值范围: 0-100 的整数,表示百分比 • 用途: 以百分比形式分配 GPU 内存 • 互斥性: 不能与 nvidia.com/gpumem同时使用• 独占支持: 设置为 100 时配合 nvidia.com/gpucores: 100可实现 GPU 独占
2.4.3 使用示例
resources:
limits:
nvidia.com/gpu:1
nvidia.com/gpumem-percentage:50# 分配50%的GPU内存
nvidia.com/gpucores:50# 分配50%的GPU算力3. 算力分配机制
3.1 算力(已分配/总量)的含义
3.1.1 核心概念
• 总量(Totalcore): 每个 GPU 设备的总计算核心数,通常为 100(代表 100% 的 GPU 计算能力) • 已分配(Usedcores): 当前已经分配给 Pod/容器的 GPU 核心数总和 • 算力: 指 GPU 的计算核心资源,以百分比形式表示
3.1.2 数据结构
在 pkg/util/types.go 中的 DeviceUsage 结构体定义:
type DeviceUsage struct {
ID string
Index uint
Used int32// 使用该设备的容器数量
Count int32// 设备可支持的最大容器数量
Usedmem int32// 已使用内存
Totalmem int32// 总内存
Totalcore int32// 总核心数(通常为100)
Usedcores int32// 已使用核心数
Mode string// 设备模式(如MIG模式)
// ... 其他字段
}3.1.3 分配流程
1. 资源声明: Pod 通过 nvidia.com/gpucores声明所需的 GPU 核心百分比2. 分配检查: 在 Fit函数中检查可用资源if dev.Totalcore-dev.Usedcores < k.Coresreq {
// 核心资源不足
continue
}3. 使用更新: 在 AddResourceUsage函数中更新已分配核心数n.Usedcores += ctr.Usedcores
3.1.4 实际示例
• 100/100: GPU 被完全独占使用 • 50/100: GPU 的 50% 算力已分配,还剩 50% 可用 • 80/100: GPU 的 80% 算力已分配,还剩 20% 可用
3.1.5 性能影响分析
基于实际测试数据,不同算力分配对性能的影响:
注意: 性能数据基于 Tesla V100 测试,实际性能可能因工作负载类型和GPU型号而异。
4. 使用场景对比
4.1 独占使用场景
apiVersion:v1
kind:Pod
spec:
containers:
-name:gpu-container
resources:
limits:
nvidia.com/gpu:2# 需要2个物理GPU
nvidia.com/gpumem-percentage:100# 每个GPU分配100%内存
nvidia.com/gpucores:100# 每个GPU分配100%算力4.2 共享使用场景
# Pod 1
apiVersion:v1
kind:Pod
spec:
containers:
-name:gpu-container-1
resources:
limits:
nvidia.com/gpu:1# 需要1个物理GPU
nvidia.com/gpumem-percentage:50# 分配50%内存
nvidia.com/gpucores:50# 分配50%算力
---
# Pod 2 (可以与Pod 1共享同一个GPU)
apiVersion:v1
kind:Pod
spec:
containers:
-name:gpu-container-2
resources:
limits:
nvidia.com/gpu:1# 需要1个物理GPU
nvidia.com/gpumem-percentage:50# 分配50%内存
nvidia.com/gpucores:50# 分配50%算力5. 配置管理
5.1 全局配置
通过 ConfigMap 管理设备配置:
apiVersion:v1
kind:ConfigMap
metadata:
name:hami-device-config
data:
# GPU设备内存虚拟化缩放比例,支持超分配(实验性功能)
# 取值范围:大于0的浮点数,默认值:1
# 当设置为大于1时,可实现GPU内存的虚拟化超分配
nvidia.deviceMemoryScaling:"1"
# 单个GPU设备可同时分配的最大任务数量
# 取值范围:正整数,默认值:10
# 控制GPU资源共享的并发度,影响调度器的分配策略
nvidia.deviceSplitCount:"10"
# Pod未指定GPU内存时的默认内存分配量(单位:MB)
# 取值范围:非负整数,默认值:0
# 0表示使用GPU的100%内存,非0值表示具体的内存分配量
nvidia.defaultMem:"1000"
# Pod未指定GPU核心时的默认核心分配百分比
# 取值范围:0-100的整数,默认值:0
# 0表示可适配任何有足够内存的GPU,100表示独占整个GPU
nvidia.defaultCores:"0"
# Pod未指定nvidia.com/gpu时的默认GPU数量
# 取值范围:正整数,默认值:1
# 当Pod指定了gpumem、gpumem-percentage或gpucores时自动添加此默认值
nvidia.defaultGPUNum:"1"
# 是否禁用GPU核心利用率限制功能
# 取值:"true"禁用限制,"false"启用限制,默认值:false
# 禁用后容器将忽略nvidia.com/gpucores设置的利用率限制
nvidia.disablecorelimit:"false"5.2 节点级配置
通过节点注解进行配置:
apiVersion:v1
kind:Node
metadata:
annotations:
hami.io/node-scheduler-policy:"binpack"# 节点调度策略
hami.io/gpu-scheduler-policy:"spread"# GPU调度策略5.3 Pod级配置
通过Pod注解进行精细控制:
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/use-gputype:"GeForce-RTX-3080"# 指定GPU类型
nvidia.com/use-gpuuuid:"GPU-12345678"# 指定GPU UUID
nvidia.com/vgpu-mode:"shared"# vGPU模式
spec:
containers:
-name:gpu-container
env:
-name:GPU_CORE_UTILIZATION_POLICY
value:"default"# 核心利用率策略6. 高级特性
6.1 调度策略
HAMi 支持多种 GPU 调度策略,可通过注解进行配置:
6.1.1 节点级调度策略
apiVersion:v1
kind:Node
metadata:
annotations:
hami.io/node-scheduler-policy:"binpack"# 紧凑分配策略
# 可选值: "binpack", "spread", "numa-first"6.1.2 GPU 级调度策略
apiVersion:v1
kind:Pod
metadata:
annotations:
hami.io/gpu-scheduler-policy:"spread"# GPU 分散策略
# 可选值: "best-fit", "idle-first", "numa-first"
spec:
# Pod 规格定义6.1.3 调度策略说明
binpack | ||
spread | ||
best-fit | ||
idle-first | ||
numa-first |
6.2 GPU 类型和设备选择
6.2.1 指定 GPU 类型
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/use-gputype:"GeForce-RTX-3080,Tesla-V100"# 指定可用GPU类型
nvidia.com/nouse-gputype:"GeForce-GTX-1080"# 排除特定GPU类型
spec:
containers:
-name:gpu-container
resources:
limits:
nvidia.com/gpu:16.2.2 指定 GPU UUID
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/use-gpuuuid:"GPU-12345678-1234-1234-1234-123456789012"# 指定GPU UUID
nvidia.com/nouse-gpuuuid:"GPU-87654321-4321-4321-4321-210987654321"# 排除特定GPU UUID
spec:
# Pod 规格定义6.3 NUMA 绑定和拓扑感知
6.3.1 NUMA 绑定
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/numa-bind:"true"# 启用NUMA绑定
spec:
containers:
-name:gpu-container
resources:
limits:
nvidia.com/gpu:2# 多GPU时会优先选择同一NUMA域的GPU6.3.2 拓扑感知调度
HAMi 支持基于 GPU 拓扑的智能调度,在多 GPU 分配时会考虑:
• NVLink 连接: 优先分配有 NVLink 连接的 GPU 组合 • PCIe 拓扑: 考虑 PCIe 总线的带宽和延迟 • NUMA 域: 优先在同一 NUMA 域内分配 GPU
6.4 MIG 支持
6.4.1 静态 MIG 配置
HAMi 支持 NVIDIA MIG (Multi-Instance GPU) 技术:
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/vgpu-mode:"mig"# 指定使用MIG模式
spec:
containers:
-name:mig-container
resources:
limits:
nvidia.com/gpu:1
nvidia.com/gpumem:5000# MIG实例内存大小6.4.2 动态 MIG 支持
HAMi 支持动态 MIG 实例管理:
• 自动创建: 根据任务需求自动创建合适的 MIG 实例 • 动态调整: 根据负载情况动态调整 MIG 配置 • 统一 API: 与 HAMi-core 模式使用相同的资源声明方式
6.5 运行时模式选择
6.5.1 vGPU 模式配置
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/vgpu-mode:"shared"# 共享模式
# 可选值: "shared", "mig", "mps", "hami-core"
spec:
containers:
-name:gpu-container
env:
-name:GPU_CORE_UTILIZATION_POLICY
value:"default"# 核心利用率策略
# 可选值: "default", "force", "disable"6.5.2 运行时类配置
apiVersion:v1
kind:Pod
spec:
runtimeClassName:"nvidia"# 指定运行时类
containers:
-name:gpu-container
resources:
limits:
nvidia.com/gpu:16.6 监控和可观测性
6.6.1 资源使用率监控
HAMi 提供多层次的 GPU 使用率监控:
• 节点级监控: 通过 HostCoreUtilization指标监控整个 GPU 卡的利用率• 容器级监控: 通过 Device_utilization_desc_of_container指标监控容器的 GPU 使用情况• 内存监控: 通过 vGPU_device_memory_usage_in_bytes指标监控 vGPU 内存使用
6.6.2 Prometheus 指标
# 主要监控指标
-HostGPUMemoryUsage:GPU设备内存使用量
-HostCoreUtilization:GPU核心利用率
-vGPU_device_memory_usage_in_bytes:vGPU设备内存使用量
-vGPU_device_memory_limit_in_bytes:vGPU设备内存限制
-Device_utilization_desc_of_container:容器设备利用率7. 故障排查和最佳实践
7.1 常见问题诊断
7.1.1 资源分配失败
问题现象: Pod 一直处于 Pending 状态,事件显示 GPU 资源不足
排查步骤:
# 1. 检查节点GPU资源状态
kubectl describe node <node-name> | grep nvidia.com
# 2. 查看HAMi调度器日志
kubectl logs -n kube-system deployment/hami-scheduler
# 3. 检查设备插件状态
kubectl get pods -n kube-system | grep hami-device-plugin常见原因:
• GPU内存碎片化:多个小任务占用导致无法分配大内存需求 • 算力超分配: gpucores总和超过100%• 设备类型不匹配:指定的GPU类型在节点上不存在
7.1.2 性能隔离问题
问题现象: 容器GPU利用率超出预期,影响其他容器
解决方案:
# 启用严格的核心利用率限制
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/vgpu-mode:"hami-core"
spec:
containers:
-name:gpu-container
env:
-name:GPU_CORE_UTILIZATION_POLICY
value:"force"# 强制执行利用率限制7.1.3 内存超限问题
问题现象: 容器因GPU内存不足被终止
排查方法:
# 查看容器GPU内存使用情况
kubectl exec <pod-name> -- nvidia-smi
# 检查HAMi监控指标
curl http://<node-ip>:9394/metrics | grep vGPU_device_memory7.2 性能优化建议
7.2.1 资源配置优化
内存分配策略:
# 推荐:使用固定内存分配,避免碎片化
nvidia.com/gpumem:4000# 而非 nvidia.com/gpumem-percentage: 50
# 大内存任务:优先使用独占模式
nvidia.com/gpu:1
nvidia.com/gpucores:100
nvidia.com/gpumem-percentage:100算力分配策略:
# 计算密集型任务:分配足够的核心资源
nvidia.com/gpucores:80
# 推理任务:可以使用较少的核心资源
nvidia.com/gpucores:257.2.2 调度策略优化
# 高性能计算场景:使用NUMA绑定
apiVersion:v1
kind:Pod
metadata:
annotations:
nvidia.com/numa-bind:"true"
hami.io/gpu-scheduler-policy:"numa-first"
# 高可用场景:使用分散策略
apiVersion:v1
kind:Pod
metadata:
annotations:
hami.io/gpu-scheduler-policy:"spread"7.3 监控和告警
7.3.1 关键监控指标
# Prometheus告警规则示例
groups:
-name:hami-gpu-alerts
rules:
-alert:GPUMemoryUtilizationHigh
expr:vGPU_device_memory_usage_in_bytes/vGPU_device_memory_limit_in_bytes>0.9
for:5m
labels:
severity:warning
annotations:
summary:"GPU内存使用率过高"
-alert:GPUCoreUtilizationLow
expr:HostCoreUtilization<0.1
for:10m
labels:
severity:info
annotations:
summary:"GPU算力利用率过低,可能存在资源浪费"7.3.2 性能基线建立
# 建立GPU性能基线
# 1. 记录空载时的基础指标
# 2. 测试单容器满载性能
# 3. 测试多容器共享性能
# 4. 建立性能衰减阈值告警7.4 升级和迁移
7.4.1 版本升级注意事项
• v1.0.1.3 → v1.0.1.4: 新增 gpumem-percentage资源类型• 配置兼容性: 旧版本配置在新版本中保持兼容 • 功能变更: 核心利用率限制默认启用
7.4.2 配置迁移
# 旧配置 (v1.0.1.2)
nvidia.com/gpu:1
nvidia.com/gpumem:4000
# 新配置 (v1.0.1.4+) - 推荐使用百分比
nvidia.com/gpu:1
nvidia.com/gpumem-percentage:50
nvidia.com/gpucores:508. 多厂商 GPU 支持
除了 NVIDIA GPU 外,HAMi 还支持多种其他厂商的 GPU 和 AI 加速设备:
8.1 支持的设备类型
nvidia.com/gpunvidia.com/gpucores, nvidia.com/gpumem | |||
cambricon.com/vmlucambricon.com/mlu.smlu.vmemory | |||
hygon.com/dcunumhygon.com/dcumem, hygon.com/dcucores | |||
iluvatar.ai/vcuda-coreiluvatar.ai/vcuda-memory | |||
mthreads.com/vgpumthreads.com/sgpu-memory | |||
huawei.com/Ascend910Ahuawei.com/Ascend910A-memory | |||
metax-tech.com/gpu |
8.2 通用资源声明模式
HAMi 为不同厂商的设备提供了统一的资源声明模式:
8.2.1 基础设备分配
apiVersion:v1
kind:Pod
spec:
containers:
-name:ai-workload
resources:
limits:
# NVIDIA GPU
nvidia.com/gpu:1
nvidia.com/gpumem:4000
# 寒武纪 MLU
# cambricon.com/mlu: 1
# 海光 DCU
# hygon.com/dcu: 1
# 天数智芯 GPU
# iluvatar.ai/vcuda-core: 50
# iluvatar.ai/vcuda-memory: 8000
# 华为昇腾 NPU
# huawei.com/Ascend910: 1
# huawei.com/npu-memory: 160008.2.2 厂商特定配置
不同厂商的设备可能需要特定的配置和依赖:
天数智芯 GPU:
# 需要部署 gpu-manager
helm install hami hami-charts/hami \
--set iluvatarResourceMem=iluvatar.ai/vcuda-memory \
--set iluvatarResourceCore=iluvatar.ai/vcuda-core摩尔线程 GPU:
# 需要部署 MT-CloudNative Toolkit
# 联系厂商获取相关组件华为昇腾 NPU:
# 支持模板化虚拟化
apiVersion:v1
kind:Pod
metadata:
annotations:
huawei.com/npu-template:"1c8g"# 1核心8GB模板
spec:
containers:
-name:npu-container
resources:
limits:
huawei.com/Ascend910:18.3 设备粒度和虚拟化策略
不同厂商的设备采用不同的虚拟化粒度:
• NVIDIA GPU: 基于内存和核心百分比的灵活切分 • 天数智芯 GPU: 100 单元粒度切分 • 华为昇腾 NPU: 基于预定义模板的虚拟化 • 其他厂商: 根据硬件特性采用相应的虚拟化策略
8.4 监控和可观测性
HAMi 为不同厂商的设备提供统一的监控接口:
# 通用监控指标
-device_memory_usage_bytes:设备内存使用量
-device_memory_limit_bytes:设备内存限制
-device_utilization_percent:设备利用率
-device_core_usage:设备核心使用情况9. 总结
本文档全面介绍了 HAMi 中 GPU 资源管理的各个方面,主要内容包括:
9.1 核心资源类型
• nvidia.com/gpu: 基础 GPU 设备分配,支持独占和共享模式• nvidia.com/gpucores: 精细化算力控制,以百分比形式分配 GPU 计算资源• nvidia.com/gpumem: GPU 内存分配,以 MB 为单位进行精确控制• nvidia.com/gpumem-percentage: 基于百分比的内存分配方式
9.2 高级特性
• 调度策略: 支持 binpack、spread、best-fit、idle-first、numa-first 等多种调度策略 • 设备选择: 支持基于 GPU 类型、UUID 的精确设备选择和排除 • NUMA 绑定: 支持 NUMA 感知调度和拓扑优化 • MIG 支持: 支持静态和动态 MIG 实例管理 • 运行时模式: 支持 shared、mig、mps、hami-core 等多种运行时模式
9.3 多厂商支持
HAMi 不仅支持 NVIDIA GPU,还支持:
• 寒武纪 MLU、海光 DCU、天数智芯 GPU • 摩尔线程 GPU、华为昇腾 NPU、沐曦 GPU • 统一的资源声明模式和监控接口
9.4 核心优势
通过 HAMi 的 GPU 资源管理机制,可以实现:
1. 灵活的资源分配: 支持独占和共享两种使用模式 2. 精细的算力控制: 以百分比形式分配 GPU 计算资源和内存 3. 高效的资源利用: 多个工作负载可以共享同一个物理 GPU 4. 完善的监控机制: 实时跟踪资源使用情况和性能指标 5. 多厂商兼容: 统一的接口支持多种 AI 加速设备 6. 智能调度: 基于拓扑、NUMA、负载的智能调度策略
这种设计使得 HAMi 能够在保证性能隔离的同时,最大化 GPU 资源的利用效率,为 Kubernetes 环境中的 AI 工作负载提供了强大而灵活的资源管理能力。
本文档面向对 HAMi 有一定了解的用户,提供了 GPU 资源管理的详细技术说明。如需了解基础安装和配置,请参考 HAMi 官方文档。