HAMi Enterprise 2.7.1-rc0
| Chart 版本 | Chart 声明的 appVersion | 发布日期 |
|---|---|---|
2.7.1-rc0 | 2.7.1-rc0 | 2026 年 1 月 16 日 |
这是 dynamia 首个 HAMi Enterprise 版本,发布状态为预发布。本页以开源 HAMi v2.7.0 为对照。
软件变更
相对开源 HAMi v2.7.0 的企业版扩展
通过 Downward API 传递 NVIDIA 设备分配结果。 调度器将 GPU UUID、显存额度和算力限制写入 Pod 标注,再通过 Kubernetes Downward API 传入对应容器。常规 NVIDIA vGPU 分配路径因此可以跳过依赖节点锁查找待分配 Pod 的步骤。默认设备配置中的 nvidia.useDownward 为 true,仍需配套设备插件、企业版运行库和 NVIDIA 容器运行环境。
调整运行中容器的显存额度。 企业版监控组件接收运行时报告的显存调整请求,交由调度器检查设备可用容量;调度器更新分配记录和配额用量后,监控组件将批准的额度同步回运行时。此能力依赖配套企业版运行时、监控组件和调度器,不等同于修改 Pod 的 resources.limits,也不表示所有工作负载都会自动扩容。首版的扩容判断不额外检查命名空间 ResourceQuota 上限,不能将它作为运行时扩容的强制配额边界。
管理 NVIDIA 设备授权。 调度器将设备授权有效期纳入选卡判断,监控组件同步授权更新。调度器指标 vGPULicenseRemains 提供授权剩余秒数,可用于配置到期告警。安装与续期所需的授权资料通过约定的交付渠道获取。
提供容器显存明细。 除显存总用量和限额外,企业版监控提供以下指标,单位均为字节,应按 Gauge 当前值使用:
| 指标 | 含义 |
|---|---|
hami_container_device_memory_context_bytes | 上下文显存占用 |
hami_container_device_memory_data_bytes | 数据显存占用 |
hami_container_device_memory_module_bytes | 模块显存占用 |
hami_container_device_memory_offset_bytes | 偏移显存占用 |
这些指标通过 podnamespace、podname、ctrname、vdeviceid、deviceuuid 标签关联容器与设备。采集规则应使用这些实际标签名。
已同步的开源改动
本版本还纳入了开源 HAMi v2.7.0 之后的以下社区改动。
| 改动 | 对使用和集成的影响 | 对应开源 PR |
|---|---|---|
| 天数智芯多型号配置 | 按 BI-V100、BI-V150、MR-V100、MR-V50 分别配置设备数量、显存和算力资源名。需配套对应的 GPU Manager,并设置 devices.iluvatar.enabled: true(默认 false)。例如 BI-V150 使用 iluvatar.ai/BI-V150-vgpu、iluvatar.ai/BI-V150.vMem、iluvatar.ai/BI-V150.vCore。 | HAMi #1399 |
| 沐曦 sGPU 在线与离线任务分类 | Pod 标注 metax-tech.com/sgpu-app-class 可取 online 或 offline,调度时区分两类任务的设备选择;设置该标注时,每个相关容器只能申请一个 sGPU。任务执行优先级仍依赖配套沐曦组件。 | HAMi #1436 |
| AMD MI300X 整卡资源接入 | 需另行部署配套 AMD 设备插件;HAMi 根据其上报的 amd.com/gpu 容量,将整卡分配纳入调度器记录与指标。每卡显存按固定的 192000 MiB 记账;这些指标反映调度分配量,不代表实时显存或利用率遥测。本版本不提供 AMD 显存或算力切分。 | HAMi #1472 |
| 动态 MIG 混合规格选择 | 在同一切分方案含多种实例规格时,按申请匹配具体实例,修复小显存申请错误占用较大实例的问题。 | HAMi #1518 |
| 配额用量清理 | Pod 进入终止状态时回收其配额用量;更新 ResourceQuota 时先清理旧配置,避免清空配额项后仍保留旧限制。 | HAMi #1400 |
| 按节点维护 GPU 数量 | 分别跟踪各节点上报的 NVIDIA GPU 数量,避免不同节点之间相互覆盖设备数量记录。 | HAMi #1555 |
| 节点锁标注解析 | 对包含分隔符但字段数量错误的节点锁标注返回明确错误;旧的纯时间戳格式仍可解析。企业版默认 Downward API 路径不依赖这条节点锁分配流程。 | HAMi #1560 |
| 节点配置与选择器修复 | 节点配置按 JSON 文本写入 ConfigMap;NVIDIA 节点选择器统一使用 devicePlugin.nvidiaNodeSelector。迁移旧 values 时需检查键名。 | HAMi #1558、HAMi #1546 |
| 可选模拟设备插件 | 可安装模拟设备插件进行无 GPU 的调度验证,默认关闭;模拟设备不执行真实 GPU 计算。 | HAMi #1534 |
| 可选 DRA 安装路径 | 主 Chart 包含 hami-dra 子 Chart 0.0.1,可切换到 Kubernetes 动态资源分配路径,默认关闭。切换行为见下文。 | HAMi #1542 |
Chart 变更
首版主 Chart 名称为 hami,默认应用镜像为 ghcr.io/dynamia-ai/hami:v2.7.1-rc0。该标签用于调度扩展器、NVIDIA 设备插件及 vGPU 监控;内置 kube-scheduler、证书辅助组件和可选子 Chart 使用各自的镜像配置。
| 配置项 | 默认值 | 使用说明 |
|---|---|---|
schedulerName | hami-scheduler | 工作负载使用的调度器名称 |
scheduler.replicas | 1 | 默认部署一个调度器 Pod |
devicePlugin.nvidiaNodeSelector | gpu: "on" | NVIDIA 设备插件部署到带有该标签的节点 |
devicePlugin.deviceSplitCount | 10 | 默认设备共享份数 |
devicePlugin.deviceMemoryScaling | 1 | 默认不放大可分配显存容量 |
devicePlugin.deviceListStrategy | envvar | 默认通过环境变量传递设备列表 |
mockDevicePlugin.enabled | false | 启用时默认使用模拟插件镜像标签 0.1.0 |
dra.enabled | false | 启用后改用 DRA 子 Chart,不再部署主 Chart 的常规调度器和 NVIDIA 设备插件 |
DRA 路径需满足配套驱动及 Kubernetes 的 DRA 要求,不能直接套用常规设备插件路径的企业版扩展说明。
升级说明
安装首版或从开源版迁移
使用约定交付的 hami-2.7.1-rc0.tgz、配套企业版运行时和授权资料。采用自定义镜像仓库或显式镜像标签时,应同步检查调度扩展器、设备插件和监控的版本,避免只替换其中一个组件。
从开源部署迁移时,按本版本配置核对节点选择、调度器接入和设备资源申请。若旧 values 使用 devicePlugin.nvidianodeSelector,改为 devicePlugin.nvidiaNodeSelector;默认选择器为 gpu: "on",遗漏自定义选择器可能使插件部署到错误的节点集合。
天数智芯的旧参数 iluvatarResourceName、iluvatarResourceMem、iluvatarResourceCore 已不再被 Chart 使用,旧 values 不会自动迁移。原先默认的 iluvatar.ai/vgpu、iluvatar.ai/vcuda-memory、iluvatar.ai/vcuda-core 改为按型号区分的资源名。迁移时需设置 devices.iluvatar.enabled: true,按实际型号同步调整 Pod 的设备数量、显存和算力资源申请,并部署使用同一套资源名称的配套 GPU Manager;仅替换 Chart、继续保留旧 Pod 资源名不能完成迁移。
devicePlugin.nodeConfiguration.config 接收 JSON 文本。配置中的 name 应填写实际节点名;默认示例名 your-node-name 不会自动匹配现场节点。设置 devicePlugin.nodeConfiguration.externalConfigName 时,使用指定 ConfigMap,Chart 不再创建这份节点配置。
检查 Downward API 与启动钩子
默认设备配置同时设置 nvidia.useDownward: true 和 nvidia.postNvidiaSmi: true。开启 Downward API 后,后者为申请 NVIDIA 设备的容器设置执行 nvidia-smi 的 postStart 钩子。应用镜像必须能执行该命令;已有的 postStart 会被替换,不会自动合并。
需要关闭启动钩子时,在设备配置中保留 nvidia.useDownward: true,将 nvidia.postNvidiaSmi 改为 false。这两个字段不是该版本的顶层 Helm 参数。使用自定义 files/device-config.yaml 时,该文件完整替换默认设备配置,需保留其余实际使用的设备字段,不能只提交这两个字段。按修改后的配置更新调度器和设备插件,并重新创建需要改变注入行为的工作负载 Pod。
首版的 NVIDIA 分配标注按普通容器列表处理,尚未包含后续版本的空分配列表和容器索引防护。含非 GPU 容器、初始化容器或原生边车容器的组合不能据此视为已完整支持。
检查配额与监控集成
首版尚未包含 NVIDIA 多容器配额累计修复:同一 Pod 的多个 GPU 容器可能分别通过检查,但合计申请超过命名空间剩余配额。需要这项修复的部署可查看 Chart 2.8.0-rc0;运行时显存调整的配额边界则按前文说明处理。
显存明细指标来自 vGPU 监控,vGPULicenseRemains 来自调度器。采集端需覆盖两个组件,并按当前值配置看板与告警。本版本仍保留 HostGPUMemoryUsage、HostCoreUtilization 等旧指标,不能按后续版本的指标删除清单提前移除采集规则。
查看 Chart 与 appVersion 对应关系或软件中心。
Values 说明
以下参数说明取自 Chart 2.7.1-rc0 发布包随附的 README,保留原文。默认配置以该版本的 values.yaml 为准。
展开参数表
Global Configuration
| Parameter | Description | Default Value |
|---|---|---|
global.imageRegistry | Global Docker image registry | "" |
global.imagePullSecrets | Global Docker image pull secrets | [] |
global.imageTag | Image tag | "v2.7.1" |
global.gpuHookPath | GPU Hook path | /usr/local |
global.labels | Global labels | {} |
global.annotations | Global annotations | {} |
global.managedNodeSelectorEnable | Whether to enable managed node selector | false |
global.managedNodeSelector.usage | Managed node selector usage | "gpu" |
nameOverride | Name override | "" |
fullnameOverride | Full name override | "" |
namespaceOverride | Namespace override | "" |
Resource Name Configuration
NVIDIA GPU Resources
| Parameter | Description | Default Value |
|---|---|---|
resourceName | GPU resource name | "nvidia.com/gpu" |
resourceMem | GPU memory resource name | "nvidia.com/gpumem" |
resourceMemPercentage | GPU memory percentage resource name | "nvidia.com/gpumem-percentage" |
resourceCores | GPU core resource name | "nvidia.com/gpucores" |
resourcePriority | GPU priority resource name | "nvidia.com/priority" |
Cambricon MLU Resources
| Parameter | Description | Default Value |
|---|---|---|
mluResourceName | MLU resource name | "cambricon.com/vmlu" |
mluResourceMem | MLU memory resource name | "cambricon.com/mlu.smlu.vmemory" |
mluResourceCores | MLU core resource name | "cambricon.com/mlu.smlu.vcore" |
Hygon DCU Resources
| Parameter | Description | Default Value |
|---|---|---|
dcuResourceName | DCU resource name | "hygon.com/dcunum" |
dcuResourceMem | DCU memory resource name | "hygon.com/dcumem" |
dcuResourceCores | DCU core resource name | "hygon.com/dcucores" |
Metax GPU Resources
| Parameter | Description | Default Value |
|---|---|---|
metaxResourceName | GPU resource name | "metax-tech.com/sgpu" |
metaxResourceCore | GPU core resource name | "metax-tech.com/vcore" |
metaxResourceMem | GPU memory resource name | "metax-tech.com/vmemory" |
metaxsGPUTopologyAware | GPU topology awareness | "false" |
Enflame GCU Resources
| Parameter | Description | Default Value |
|---|---|---|
enflameResourceNameVGCU | vGCU resource name | "enflame.com/vgcu" |
enflameResourceNameVGCUPercentage | vGCU percentage resource name | "enflame.com/vgcu-percentage" |
Kunlunxin XPU Resources
| Parameter | Description | Default Value |
|---|---|---|
kunlunResourceName | XPU resource name | "kunlunxin.com/xpu" |
Scheduler Configuration
| Parameter | Description | Default Value |
|---|---|---|
schedulerName | Scheduler name | "hami-scheduler" |
scheduler.nodeName | Define node name, scheduler will schedule to this node | "" |
scheduler.overwriteEnv | Whether to overwrite environment variables | "false" |
scheduler.defaultSchedulerPolicy.nodeSchedulerPolicy | Node scheduler policy | binpack |
scheduler.defaultSchedulerPolicy.gpuSchedulerPolicy | GPU scheduler policy | spread |
scheduler.metricsBindAddress | Metrics bind address | ":9395" |
scheduler.forceOverwriteDefaultScheduler | Whether to force overwrite default scheduler | true |
scheduler.livenessProbe | Whether to enable liveness probe | false |
scheduler.leaderElect | Whether to enable leader election | true |
scheduler.replicas | Number of replicas | 1 |
Kube Scheduler Configuration
| Parameter | Description | Default Value |
|---|---|---|
scheduler.kubeScheduler.enabled | Whether to run kube-scheduler container in scheduler pod | true |
scheduler.kubeScheduler.image.registry | Kube scheduler image registry | "registry.cn-hangzhou.aliyuncs.com" |
scheduler.kubeScheduler.image.repository | Kube scheduler image repository | "google_containers/kube-scheduler" |
scheduler.kubeScheduler.image.tag | Kube scheduler image tag | "" |
scheduler.kubeScheduler.image.pullPolicy | Kube scheduler image pull policy | IfNotPresent |
scheduler.kubeScheduler.image.pullSecrets | Kube scheduler image pull secrets | [] |
scheduler.kubeScheduler.extraNewArgs | Extra new arguments | ["--config=/config/config.yaml", "-v=4"] |
scheduler.kubeScheduler.extraArgs | Extra arguments | ["--policy-config-file=/config/config.json", "-v=4"] |
Extender Configuration
| Parameter | Description | Default Value |
|---|---|---|
scheduler.extender.image.registry | Scheduler extender image registry | "docker.io" |
scheduler.extender.image.repository | Scheduler extender image repository | "projecthami/hami" |
scheduler.extender.image.tag | Scheduler extender image tag | "" |
scheduler.extender.image.pullPolicy | Scheduler extender image pull policy | IfNotPresent |
scheduler.extender.image.pullSecrets | Scheduler extender image pull secrets | [] |
scheduler.extender.extraArgs | Scheduler extender extra arguments | ["--debug", "-v=4"] |
Admission Webhook Configuration
| Parameter | Description | Default Value |
|---|---|---|
scheduler.admissionWebhook.enabled | Whether to enable admission webhook | true |
scheduler.admissionWebhook.customURL.enabled | Whether to enable custom URL | false |
scheduler.admissionWebhook.customURL.host | Custom URL host | 127.0.0.1 |
scheduler.admissionWebhook.customURL.port | Custom URL port | 31998 |
scheduler.admissionWebhook.customURL.path | Custom URL path | /webhook |
scheduler.admissionWebhook.reinvocationPolicy | Reinvocation policy | Never |
scheduler.admissionWebhook.failurePolicy | Failure policy | Ignore |
TLS Certificate Configuration
| Parameter | Description | Default Value |
|---|---|---|
scheduler.certManager.enabled | Whether to use cert-manager to generate self-signed certificates | false |
scheduler.patch.enabled | Whether to use kube-webhook-certgen to generate self-signed certificates | true |
scheduler.patch.image.registry | Certgen image registry | "docker.io" |
scheduler.patch.image.repository | Certgen image repository | "jettech/kube-webhook-certgen" |
scheduler.patch.image.tag | Certgen image tag | "v1.5.2" |
scheduler.patch.image.pullPolicy | Certgen image pull policy | IfNotPresent |
scheduler.patch.imageNew.registry | New certgen image registry | "docker.io" |
scheduler.patch.imageNew.repository | New certgen image repository | "liangjw/kube-webhook-certgen" |
scheduler.patch.imageNew.tag | New certgen image tag | "v1.1.1" |
Scheduler Service Configuration
| Parameter | Description | Default Value |
|---|---|---|
scheduler.service.type | Service type | NodePort |
scheduler.service.httpPort | HTTP port | 443 |
scheduler.service.schedulerPort | Scheduler NodePort | 31998 |
scheduler.service.monitorPort | Monitor port | 31993 |
scheduler.service.monitorTargetPort | Monitor target port | 9395 |
Device Plugin Configuration
| Parameter | Description | Default Value |
|---|---|---|
devicePlugin.image.registry | Device plugin image registry | "docker.io" |
devicePlugin.image.repository | Device plugin image repository | "projecthami/hami" |
devicePlugin.image.tag | Device plugin image tag | "" |
devicePlugin.image.pullPolicy | Device plugin image pull policy | IfNotPresent |
devicePlugin.image.pullSecrets | Device plugin image pull secrets | [] |
Monitor Configuration
| Parameter | Description | Default Value |
|---|---|---|
devicePlugin.monitor.image.registry | Monitor image registry | "docker.io" |
devicePlugin.monitor.image.repository | Monitor image repository | "projecthami/hami" |
devicePlugin.monitor.image.tag | Monitor image tag | "" |
devicePlugin.monitor.image.pullPolicy | Monitor image pull policy | IfNotPresent |
devicePlugin.monitor.image.pullSecrets | Monitor image pull secrets | [] |
devicePlugin.monitor.ctrPath | Container path | /usr/local/vgpu/containers |
devicePlugin.monitor.extraArgs | Monitor extra arguments | ["-v=4"] |
devicePlugin.monitor.extraEnvs | Monitor extra environments | {} |
Device Plugin Other Configuration
| Parameter | Description | Default Value |
|---|---|---|
devicePlugin.deviceSplitCount | Integer type, default value: 10. Maximum number of tasks assigned to a single GPU device | 10 |
devicePlugin.deviceMemoryScaling | Device memory scaling ratio | 1 |
devicePlugin.deviceCoreScaling | Device core scaling ratio | 1 |
devicePlugin.runtimeClassName | Runtime class name | "" |
devicePlugin.createRuntimeClass | Whether to create runtime class | false |
devicePlugin.migStrategy | String type, "none" means ignore MIG functionality, "mixed" means allocate MIG devices through independent resources | "none" |
devicePlugin.disablecorelimit | String type, "true" means disable core limit, "false" means enable core limit | "false" |
devicePlugin.passDeviceSpecsEnabled | Whether to enable passing device specs | false |
devicePlugin.extraArgs | Device plugin extra arguments | ["-v=4"] |
devicePlugin.nodeConfiguration.config | Node configuration for device plugin by json | An example of default configuration. |
devicePlugin.nodeConfiguration.externalConfigName | Node configuration for device plugin by external congimap | "" |
devicePlugin.extraEnvs | Device plugin extra environments | {} |
Device Plugin Service Configuration
| Parameter | Description | Default Value |
|---|---|---|
devicePlugin.service.type | Service type | NodePort |
devicePlugin.service.httpPort | HTTP port | 31992 |
Device Plugin Deployment Configuration
| Parameter | Description | Default Value |
|---|---|---|
devicePlugin.pluginPath | Plugin path | /var/lib/kubelet/device-plugins |
devicePlugin.libPath | Library path | /usr/local/vgpu |
devicePlugin.nvidiaNodeSelector | NVIDIA node selector | {"gpu": "on"} |
devicePlugin.updateStrategy.type | Update strategy type | RollingUpdate |
devicePlugin.updateStrategy.rollingUpdate.maxUnavailable | Maximum unavailable count | 1 |
Device Configuration
AWS Neuron
| Parameter | Description | Default Value |
|---|---|---|
devices.awsneuron.customresources | Custom resources | ["aws.amazon.com/neuron", "aws.amazon.com/neuroncore"] |
Kunlunxin
| Parameter | Description | Default Value |
|---|---|---|
devices.kunlun.enabled | Whether to enable | true |
devices.kunlun.customresources | Custom resources | ["kunlunxin.com/xpu"] |
Mthreads
| Parameter | Description | Default Value |
|---|---|---|
devices.mthreads.enabled | Whether to enable | true |
devices.mthreads.customresources | Custom resources | ["mthreads.com/vgpu"] |
NVIDIA
| Parameter | Description | Default Value |
|---|---|---|
devices.nvidia.gpuCorePolicy | GPU core policy | default |
devices.nvidia.libCudaLogLevel | CUDA library log level | 1 |
Huawei Ascend
| Parameter | Description | Default Value |
|---|---|---|
devices.ascend.enabled | Whether to enable | false |
devices.ascend.image | Image | "" |
devices.ascend.imagePullPolicy | Image pull policy | IfNotPresent |
devices.ascend.extraArgs | Extra arguments | [] |
devices.ascend.nodeSelector | Node selector | {"ascend": "on"} |
devices.ascend.tolerations | Tolerations | [] |
devices.ascend.customresources | Custom resources | ["huawei.com/Ascend910A", "huawei.com/Ascend910A-memory", ...] |
Iluvatar
| Parameter | Description | Default Value |
|---|---|---|
devices.iluvatar.enabled | Whether to enable | false |
devices.iluvatar.customresources | Custom resources | ["iluvatar.ai/BI-V150-vgpu", "iluvatar.ai/BI-V150.vMem","iluvatar.ai/BI-V150.vCore", ...] |