Skip to main content

HAMi Enterprise 2.9.0-rc2

Chart versionDeclared appVersionRelease date
2.9.0-rc22.9.0-rc22026-06-08

This is a patch release. Changes below are compared with HAMi Enterprise v2.9.0-rc1.

Software changes​

  • Adjust GPU memory auto-expansion granularity. For containers with CUDA_MEMORY_AUTO_ADJUST=true, the target memory allocation is rounded up to the next 1024 MiB (1 GiB). For example, 1536 MiB becomes 2048 MiB, while an existing allocation of 2048 MiB remains unchanged. GPU memory auto-expansion is an existing feature; this change does not enable it automatically for other containers.
  • Add Alibaba PPU to license management. The license state of a PPU device is checked when allocating it to a new workload. Devices without a valid license are no longer eligible for allocation. Verify that the required license is valid before upgrading an existing PPU deployment.

Chart changes​

Configuration or identifier2.9.0-rc12.9.0-rc2
Chart namehamihami-enterprise
Packagehami-2.9.0-rc1.tgzhami-enterprise-2.9.0-rc2.tgz
Default schedulerNamehami-schedulerhami-enterprise-scheduler
Default Enterprise component image repositoryghcr.io/dynamia-ai/hamighcr.io/dynamia-ai/hami-enterprise
Default global.imageTagv2.9.0-rc1v2.9.0-rc2
Scheduler app.kubernetes.io/componenthami-schedulerhami-enterprise-scheduler
Device plugin app.kubernetes.io/componenthami-device-pluginhami-enterprise-device-plugin
Default app.kubernetes.io/namehamihami-enterprise

The image repository changes correspond to scheduler.extender.image.repository, devicePlugin.image.repository, and devicePlugin.monitor.image.repository. If you use a private image registry, synchronize the target images and update these settings; changing only the tags is insufficient.

Renaming the Chart also changes default resource names. For example, with a Helm release named hami and no name overrides, the scheduler Deployment changes from hami-scheduler to hami-hami-enterprise-scheduler, and the device-plugin DaemonSet changes from hami-device-plugin to hami-hami-enterprise-device-plugin.

Upgrade notes​

Before upgrading, save the current Helm values and resource manifests. Render the target Chart with the actual release name and compare resource names, selectors, and Service references. Switch from the old resources to the new ones during a maintenance window to avoid two schedulers or device plugins managing the same workloads and nodes at the same time.

  • If a workload explicitly sets spec.schedulerName: hami-scheduler, make it match the target deployment's schedulerName: either update the workload template to use the new default or explicitly retain the old name in the Chart. The webhook does not automatically change an explicitly specified old HAMi scheduler name.
  • Using nameOverride or fullnameOverride to retain old resource names does not retain old selectors. If the rendered .spec.selector changes for a Deployment or DaemonSet with the same name, recreate the resource; this field cannot be changed in place.
  • Update monitoring, inspection, and automation scripts that select Pods using the old component labels. Check custom Service or webhook integrations for references to old resource names as well.
  • For workloads with GPU memory auto-expansion enabled, verify available-memory headroom and capacity expectations against the new 1 GiB granularity.

Known limitation​

The values validation introduced in this release restricts the following settings to null. Helm validation fails even when a valid, non-empty value is provided:

SettingAffected custom value
devicePlugin.nvidiaDriverRoot, devicePlugin.nvidiaHookPathDriver-root or hook-path string
devicePlugin.gdrcopyEnabled, devicePlugin.gdsEnabled, devicePlugin.mofedEnabledBoolean
scheduler.admissionWebhook.whitelistNamespacesNamespace list
scheduler.admissionWebhook.namespaceSelector.matchLabelsLabel map

Deployments that depend on these settings cannot install this release with their existing custom values unchanged. The validation issue is fixed in 2.9.0-r3. Do not remove settings that are still required by your workloads just to pass validation.

Obtain the package through the agreed delivery channel. See the Chart and appVersion mapping or the software center.

Values reference​

The following parameter descriptions are taken from the README bundled with the Chart 2.9.0-rc2 release package and are preserved as published. Use this version's values.yaml as the source of default configuration.

Expand values table
KeyTypeDefaultDescription
dcuResourceCoresstring"hygon.com/dcucores"
dcuResourceMemstring"hygon.com/dcumem"
dcuResourceNamestring"hygon.com/dcunum"
devicePlugin.createRuntimeClassboolfalse
devicePlugin.deviceCoreScalingint1
devicePlugin.deviceListStrategystring"envvar"
devicePlugin.deviceMemoryScalingint1
devicePlugin.deviceSplitCountint10
devicePlugin.disablecorelimitstring"false"
devicePlugin.enabledbooltrue
devicePlugin.extraArgs[0]string"-v=4"
devicePlugin.extraEnvsobject{}
devicePlugin.gdrcopyEnabledstringnil
devicePlugin.gdsEnabledstringnil
devicePlugin.gpuOperatorToolkitReady.enabledboolfalse
devicePlugin.gpuOperatorToolkitReady.hostPathstring"/run/nvidia/validations"
devicePlugin.image.pullPolicystring"IfNotPresent"
devicePlugin.image.pullSecretslist[]
devicePlugin.image.registrystring"ghcr.io"
devicePlugin.image.repositorystring"dynamia-ai/hami-enterprise"
devicePlugin.image.tagstring""
devicePlugin.libPathstring"/usr/local/vgpu"
devicePlugin.migStrategystring"none"
devicePlugin.mofedEnabledstringnil
devicePlugin.monitor.ctrPathstring"/usr/local/vgpu/containers"
devicePlugin.monitor.extraArgs[0]string"-v=4"
devicePlugin.monitor.extraEnvsobject{}
devicePlugin.monitor.image.pullPolicystring"IfNotPresent"
devicePlugin.monitor.image.pullSecretslist[]
devicePlugin.monitor.image.registrystring"ghcr.io"
devicePlugin.monitor.image.repositorystring"dynamia-ai/hami-enterprise"
devicePlugin.monitor.image.tagstring""
devicePlugin.monitor.resourcesobject{}
devicePlugin.monitor.resyncIntervalstring"5m"
devicePlugin.nodeConfiguration.configstring"{\n \"nodeconfig\": [\n {\n \"name\": \"your-node-name\",\n \"operatingmode\": \"hami-core\",\n \"devicememoryscaling\": 1,\n \"devicesplitcount\": 10,\n \"preconfigureddevicememory\": 0,\n \"migstrategy\": \"none\",\n \"filterdevices\": {\n \"uuid\": [],\n \"index\": []\n },\n \"enablegetpreferredallocation\": false\n }\n ]\n}\n"
devicePlugin.nodeConfiguration.externalConfigNamestring""
devicePlugin.nvidiaDriverRootstringnil
devicePlugin.nvidiaHookPathstringnil
devicePlugin.nvidiaNodeSelector.gpustring"on"
devicePlugin.passDeviceSpecsEnabledboolfalse
devicePlugin.pluginPathstring"/var/lib/kubelet/device-plugins"
devicePlugin.podAnnotationsobject{}
devicePlugin.preConfiguredDeviceMemoryint0
devicePlugin.resourcesobject{}
devicePlugin.runtimeClassNamestring""
devicePlugin.service.annotationsobject{}
devicePlugin.service.httpPortint31992
devicePlugin.service.labelsobject{}
devicePlugin.service.typestring"NodePort"
devicePlugin.tolerationslist[]
devicePlugin.updateStrategy.rollingUpdate.maxUnavailableint1
devicePlugin.updateStrategy.typestring"RollingUpdate"
devices.alibaba.customresources[0]string"alibaba.com/ppu"
devices.alibaba.customresources[1]string"alibaba.com/ppu-memory"
devices.alibaba.customresources[2]string"alibaba.com/gpu-core"
devices.alibaba.enabledbooltrue
devices.alibaba.ppuCorePolicystring"default"
devices.amd.customresources[0]string"amd.com/gpu"
devices.amd.customresources[1]string"amd.com/gpumem"
devices.ascend.customresources[0]string"huawei.com/Ascend910A"
devices.ascend.customresources[10]string"huawei.com/Ascend910B4-memory"
devices.ascend.customresources[11]string"huawei.com/Ascend910B4-core"
devices.ascend.customresources[12]string"huawei.com/Ascend910B4-1"
devices.ascend.customresources[13]string"huawei.com/Ascend910B4-1-memory"
devices.ascend.customresources[14]string"huawei.com/Ascend910B4-1-core"
devices.ascend.customresources[15]string"huawei.com/Ascend310P"
devices.ascend.customresources[16]string"huawei.com/Ascend310P-memory"
devices.ascend.customresources[17]string"huawei.com/Ascend310P-core"
devices.ascend.customresources[18]string"huawei.com/Ascend910C"
devices.ascend.customresources[19]string"huawei.com/Ascend910C-memory"
devices.ascend.customresources[1]string"huawei.com/Ascend910A-memory"
devices.ascend.customresources[20]string"huawei.com/Ascend910C-core"
devices.ascend.customresources[2]string"huawei.com/Ascend910A-core"
devices.ascend.customresources[3]string"huawei.com/Ascend910B2"
devices.ascend.customresources[4]string"huawei.com/Ascend910B2-memory"
devices.ascend.customresources[5]string"huawei.com/Ascend910B2-core"
devices.ascend.customresources[6]string"huawei.com/Ascend910B3"
devices.ascend.customresources[7]string"huawei.com/Ascend910B3-memory"
devices.ascend.customresources[8]string"huawei.com/Ascend910B3-core"
devices.ascend.customresources[9]string"huawei.com/Ascend910B4"
devices.ascend.enabledboolfalse
devices.ascend.extraArgslist[]
devices.ascend.hamiVnpuCoreboolfalse
devices.ascend.imagestring""
devices.ascend.imagePullPolicystring"IfNotPresent"
devices.ascend.nodeSelector.ascendstring"on"
devices.ascend.runtimeClassNamestring""
devices.ascend.tolerationslist[]
devices.awsneuron.customresources[0]string"aws.amazon.com/neuron"
devices.awsneuron.customresources[1]string"aws.amazon.com/neuroncore"
devices.enflame.customresources[0]string"enflame.com/vgcu"
devices.enflame.customresources[1]string"enflame.com/vgcu-percentage"
devices.enflame.customresources[2]string"enflame.com/gcu"
devices.enflame.enabledbooltrue
devices.iluvatar.customresources[0]string"iluvatar.ai/BI-V100-vgpu"
devices.iluvatar.customresources[10]string"iluvatar.ai/MR-V50.vCore"
devices.iluvatar.customresources[11]string"iluvatar.ai/MR-V50.vMem"
devices.iluvatar.customresources[1]string"iluvatar.ai/BI-V100.vCore"
devices.iluvatar.customresources[2]string"iluvatar.ai/BI-V100.vMem"
devices.iluvatar.customresources[3]string"iluvatar.ai/BI-V150-vgpu"
devices.iluvatar.customresources[4]string"iluvatar.ai/BI-V150.vCore"
devices.iluvatar.customresources[5]string"iluvatar.ai/BI-V150.vMem"
devices.iluvatar.customresources[6]string"iluvatar.ai/MR-V100-vgpu"
devices.iluvatar.customresources[7]string"iluvatar.ai/MR-V100.vCore"
devices.iluvatar.customresources[8]string"iluvatar.ai/MR-V100.vMem"
devices.iluvatar.customresources[9]string"iluvatar.ai/MR-V50-vgpu"
devices.iluvatar.enabledboolfalse
devices.kunlun.customresources[0]string"kunlunxin.com/xpu"
devices.kunlun.customresources[1]string"kunlunxin.com/vxpu"
devices.kunlun.customresources[2]string"kunlunxin.com/vxpu-memory"
devices.kunlun.enabledbooltrue
devices.mthreads.customresources[0]string"mthreads.com/vgpu"
devices.mthreads.enabledbooltrue
devices.nvidia.gpuCorePolicystring"default"
devices.nvidia.libCudaLogLevelint2
devices.vastai.customresources[0]string"vastaitech.com/va"
devices.vastai.enabledbooltrue
dra.enabledboolfalse
enflameResourceNameVGCUstring"enflame.com/vgcu"
enflameResourceNameVGCUPercentagestring"enflame.com/vgcu-percentage"
fullnameOverridestring""
global.annotationsobject{}
global.gpuHookPathstring"/usr/local"
global.imagePullSecretslist[]
global.imageRegistrystring""
global.imageTagstring"v2.9.0-rc2"
global.labelsobject{}
global.managedNodeSelector.usagestring"gpu"
global.managedNodeSelectorEnableboolfalse
hami-dra.drivers.nvidia.containerDriverbooltrue
hami-dra.drivers.nvidia.enabledbooltrue
hami-dra.drivers.nvidia.image.repositorystring"ghcr.io/project-hami/k8s-dra-driver"
hami-dra.drivers.nvidia.image.tagstring"main"
hami-dra.monitor.enabledbooltrue
kunlunResourceNamestring"kunlunxin.com/xpu"
kunlunResourceVCountNamestring"kunlunxin.com/vxpu"
kunlunResourceVMemoryNamestring"kunlunxin.com/vxpu-memory"
legacyMetricsboolfalse
metaxResourceCorestring"metax-tech.com/vcore"
metaxResourceMemstring"metax-tech.com/vmemory"
metaxResourceNamestring"metax-tech.com/sgpu"
metaxsGPUTopologyAwarestring"false"
mluResourceCoresstring"cambricon.com/mlu.smlu.vcore"
mluResourceMemstring"cambricon.com/mlu.smlu.vmemory"
mluResourceNamestring"cambricon.com/vmlu"
mockDevicePlugin.enabledboolfalse
mockDevicePlugin.image.pullPolicystring"IfNotPresent"
mockDevicePlugin.image.pullSecretslist[]
mockDevicePlugin.image.registrystring"docker.io"
mockDevicePlugin.image.repositorystring"projecthami/mock-device-plugin"
mockDevicePlugin.image.tagstring"1.0.1"
nameOverridestring""
namespaceOverridestring""
podSecurityPolicy.enabledboolfalse
prometheus.enabledboolfalse
resourceCoresstring"nvidia.com/gpucores"
resourceMemstring"nvidia.com/gpumem"
resourceMemPercentagestring"nvidia.com/gpumem-percentage"
resourceNamestring"nvidia.com/gpu"
resourcePrioritystring"nvidia.com/priority"
scheduler.admissionWebhook.customURL.enabledboolfalse
scheduler.admissionWebhook.customURL.hoststring"127.0.0.1"
scheduler.admissionWebhook.customURL.pathstring"/webhook"
scheduler.admissionWebhook.customURL.portint31998
scheduler.admissionWebhook.enabledbooltrue
scheduler.admissionWebhook.failurePolicystring"Ignore"
scheduler.admissionWebhook.namespaceSelector.matchExpressionslist[]
scheduler.admissionWebhook.namespaceSelector.matchLabelsstringnil
scheduler.admissionWebhook.objectSelector.matchExpressionslist[]
scheduler.admissionWebhook.reinvocationPolicystring"Never"
scheduler.admissionWebhook.whitelistNamespacesstringnil
scheduler.certManager.enabledboolfalse
scheduler.defaultSchedulerPolicy.gpuSchedulerPolicystring"spread"
scheduler.defaultSchedulerPolicy.nodeSchedulerPolicystring"binpack"
scheduler.extender.extraArgs[0]string"--debug"
scheduler.extender.extraArgs[1]string"-v=4"
scheduler.extender.image.pullPolicystring"IfNotPresent"
scheduler.extender.image.pullSecretslist[]
scheduler.extender.image.registrystring"ghcr.io"
scheduler.extender.image.repositorystring"dynamia-ai/hami-enterprise"
scheduler.extender.image.tagstring""
scheduler.extender.resourcesobject{}
scheduler.forceOverwriteDefaultSchedulerbooltrue
scheduler.kubeScheduler.enabledbooltrue
scheduler.kubeScheduler.extraArgs[0]string"--policy-config-file=/config/config.json"
scheduler.kubeScheduler.extraArgs[1]string"-v=4"
scheduler.kubeScheduler.extraNewArgs[0]string"--config=/config/config.yaml"
scheduler.kubeScheduler.extraNewArgs[1]string"-v=4"
scheduler.kubeScheduler.image.pullPolicystring"IfNotPresent"
scheduler.kubeScheduler.image.pullSecretslist[]
scheduler.kubeScheduler.image.registrystring"registry.cn-hangzhou.aliyuncs.com"
scheduler.kubeScheduler.image.repositorystring"google_containers/kube-scheduler"
scheduler.kubeScheduler.image.tagstring""
scheduler.kubeScheduler.resourcesobject{}
scheduler.leaderElectbooltrue
scheduler.livenessProbeboolfalse
scheduler.metricsBindAddressstring":9395"
scheduler.nodeLockExpirestring"5m"
scheduler.nodeNamestring""
scheduler.overwriteEnvstring"false"
scheduler.patch.enabledbooltrue
scheduler.patch.image.pullPolicystring"IfNotPresent"
scheduler.patch.image.pullSecretslist[]
scheduler.patch.image.registrystring"docker.io"
scheduler.patch.image.repositorystring"jettech/kube-webhook-certgen"
scheduler.patch.image.tagstring"v1.5.2"
scheduler.patch.imageNew.pullPolicystring"IfNotPresent"
scheduler.patch.imageNew.pullSecretslist[]
scheduler.patch.imageNew.registrystring"docker.io"
scheduler.patch.imageNew.repositorystring"liangjw/kube-webhook-certgen"
scheduler.patch.imageNew.tagstring"v1.1.1"
scheduler.patch.nodeSelectorobject{}
scheduler.patch.podAnnotationsobject{}
scheduler.patch.priorityClassNamestring""
scheduler.patch.runAsUserint2000
scheduler.patch.tolerationslist[]
scheduler.podAnnotationsobject{}
scheduler.replicasint1
scheduler.service.annotationsobject{}
scheduler.service.httpPortint443
scheduler.service.httpTargetPortint443
scheduler.service.labelsobject{}
scheduler.service.monitorPortint31993
scheduler.service.monitorTargetPortint9395
scheduler.service.schedulerPortint31998
scheduler.service.typestring"NodePort"
scheduler.tolerationslist[]
schedulerNamestring"hami-enterprise-scheduler"
vastaiResourceNamestring"vastaitech.com/va"