Dynamia ascend-device-plugin Chart 0.2.2
Release date: 2026-10-09
| Version | Previous | This release |
|---|---|---|
| Chart | 0.2.1 | 0.2.2 |
| appVersion | v1.4.1 | v1.4.2 |
HAMi Enterprise compatibility
| Feature or mode | Minimum usable HAMi Enterprise version | Compatibility requirements and upgrade conclusion |
|---|---|---|
| Template-based hard partitioning | v2.9.0-rc0 | The existing scheduler can be retained; this plugin upgrade does not require upgrading to v2.10.0-r2. |
hami-core static soft partitioning, including this release's compute policy, task priority, Turbo, and control-injection opt-out | v2.9.0-rc0 | Explicitly set huawei.com/vnpu-mode: hami-core. The PostStart hook injected by older schedulers must run successfully, or a valid workload-supplied PostStart must prevent that injection. With these conditions met, the existing scheduler can be retained; runtime state still needs to be migrated as described below. |
| The soft-partitioning features above without the legacy PostStart startup hook | v2.10.0-r2 | This release removes the legacy startup hook. Upgrade Enterprise first if the container cannot run the old hook and does not define a custom PostStart. |
| Automatic GPU memory expansion | v2.10.0-r2 | Upgrade to this compatible version and enable expansion approval and admission protection. Kubernetes 1.30 or later is required with the corresponding Chart. Memory limits are not increased when the approval flow is disabled; static allocation is not subject to this gate. |
Changes
Chart changes
- [Enterprise feature] Adds
hamiVnpuCore.coreUtilizationPolicyto set the default compute policy for soft-partitioned containers. Supported values aredefault,force, anddisable; the default isforce. It does not depend onconfig.create. - [Enterprise feature] Adds
vnpuDeviceSplitCount, defaulting to10, to configure the number of virtual devices reported per physical NPU in soft-partitioning mode. When using the bundleddeviceConfigwithconfig.create=true, the value is written to the device configuration. See Upgrade guidance for externally managed configuration.
Application changes
- [Enterprise feature] Supports automatic memory expansion for virtual NPUs (vNPUs) approved by HAMi Enterprise. An eligible ordinary container using a single vNPU can enable it with
NPU_MEMORY_AUTO_ADJUST=true. Rejection or timeout does not increase the limit. Expansion is upward only and does not change the Pod resource request or AI Core allocation. See Upgrade guidance for prerequisites. - [Enterprise feature] Supports the
NPU_CORE_UTILIZATION_POLICYcompute policy. By default, the plugin injectsforceinto thehami-corecontainer and limits average duty cycle according to the allocated share.defaultuses relative weighting;disableturns off compute limits while retaining memory control. Explicit containerenvsettings take precedence, includingvalueFrom. - [Enterprise feature] Supports setting task priority with the business container environment variable
NPU_TASK_PRIORITY. The default is1; smaller unsigned integers have higher priority. Tasks sharing physical-NPU scheduling state can cooperatively preempt at submission boundaries while retaining processes and memory. Lower-priority tasks may continue after higher-priority tasks stop submitting work. Submitted tasks finish naturally; fixed preemption latency is not guaranteed, and there is no independent arbitration for multiple devices assigned to one container. Sustained high-priority demand may indefinitely delay lower-priority tasks.disable, Turbo, and opting out of control injection bypass arbitration. - [Enterprise feature] The bundled libvnpu v1.4.2 adds Turbo mode. Setting the exact value
NPU_TURBO_MODE=truedisables compute throttling while retaining memory limits, accounting, and approved memory expansion. Turbo is disabled by default and is intended only for trusted, compute-exclusive workloads; request one vNPU and 100% of AI Core. - [Enterprise feature] Supports opting out of control-library injection per container. An ordinary or init container can set the literal
CANN_DISABLE_CONTROL=truein Podenvto omit the/etc/ld.so.preloadmount.envFromandvalueFromare not parsed. Device visibility, scheduling allocation, and other mounts are unchanged; without separately loading libvnpu, compute and memory operations use the native runtime. - [Enterprise feature] Soft-partitioning capacity reporting now uses
physical NPU count × vnpuDeviceSplitCountinstead of deriving the count from the smallest virtualization template. Without a valid setting, each physical NPU reports10virtual devices by default. A positive node-levelvDeviceCountstill takes precedence; template-based hard partitioning is unchanged. - [Enterprise feature] Strengthens soft-partitioning allocation validation and rejects allocations when device identity or memory limits are missing, or runtime information differs from the scheduler allocation.
Upgrade guidance
- Choose Enterprise compatibility based on the required features. Hard partitioning and static soft partitioning that meet the compatibility table do not require a universal Enterprise upgrade. An older scheduler injects a
bashstartup command intohami-corecontainers without a custom PostStart; the hook fails if the container lacksbash. Upgrade tov2.10.0-r2to remove this legacy startup dependency. Workloads with a valid existing PostStart may keep their hook. This issue predates this plugin release and is not a new incompatibility. - Locate shared-state files using the effective configuration. Before upgrading, record the actual
NPU_GLOBAL_SHM_PATHandNPU_LOCAL_SHM_PATHused by affected workloads and map them to host paths through container mounts. By default, container path/hami-shared-region/<physical-device-ID>_global_registrymaps to host path/usr/local/hami-shared-region/<physical-device-ID>_global_registry; the ID is that of the allocated physical device. Default local path/hami-vnpu-shmem/vnpu_local_shmemmaps to/usr/local/hami-vnpu-core/containers/<Pod UID>_<container name>/vnpu_local_shmemon the host. Use the effective paths if environment variables, pluginHOOK_PATH, or mounts are customized. - Migrate state after stopping old workloads. libvnpu v1.4.2 changes the global scheduling-state layout and local shared-memory protocol. Stop all old soft-partitioning workloads that use the files to be migrated and confirm their processes have exited. Then remove only the corresponding files or configure new paths; do not remove files still in use or let old and new runtimes share them. Upgrade the plugin, confirm the host runtime library is updated, and then recreate workloads. Rolling the plugin alone does not complete this migration.
- Check image overrides. The default image is
ghcr.io/dynamia-ai/ascend-device-plugin:v1.4.2. Update a customimage.tagto the target version. Ifimage.digestis set, update it to the target digest or clear it because the digest takes precedence over the tag. Keeping the old image prevents the application changes in this release from reaching nodes. - Review the new default compute policy. The previous release did not inject
NPU_CORE_UTILIZATION_POLICYand usually used relative weighting. New soft-partitioned containers without an explicit policy now default toforce, which applies average duty-cycle limits even without contention. To retain relative weighting, sethamiVnpuCore.coreUtilizationPolicy=defaultor explicitly setNPU_CORE_UTILIZATION_POLICY=defaultin the target container'senv. Set the policy and Turbo mode before process startup and recreate the Pod to change them. Processes in the same local shared-memory region should use consistent settings. - Review the reported soft-partitioning capacity. The default is now
10virtual devices per physical NPU and may differ from the count previously derived from the smallest template. To preserve the previous count, set an appropriatevnpuDeviceSplitCountor node-levelvDeviceCount. The default isconfig.create=false; update the actual shared-device ConfigMap. The HAMi Enterprise Chart exposesdevices.ascend.vnpuDeviceSplitCountstarting with2.10.0-r3. With earlier Charts, retain the plugin default or explicitly setvnpus.vnpuDeviceSplitCountin the shared device configuration. If you replace the plugin Chart's completedeviceConfigstring, add this field yourself. Restart the plugin on affected nodes after updating configuration so it reloads the settings and reports the new count. Changing the virtual-device count does not increase physical memory or AI Core capacity. - Enable automatic memory expansion only when needed. First upgrade Enterprise to
v2.10.0-r2and use Kubernetes 1.30 or later. Setdevices.ascend.enabled=true,scheduler.admissionWebhook.enabled=true, anddra.enabled=false, then confirm the vNPU expansion-validation webhook is enabled. After migrating runtime state and upgrading the plugin in the order above, set the exact literalNPU_MEMORY_AUTO_ADJUST=truein the Podenvof an ordinary container on a soft-partitioned node, with explicithuawei.com/vnpu-mode: hami-coreand exactly one vNPU. Do not repeat the Enterprise upgrade if these prerequisites are already met. Init containers and a single container assigned multiple vNPUs are outside this automatic-expansion scope. - Recreate Pods that opt out of control injection.
CANN_DISABLE_CONTROLtakes effect during device allocation. Changing the environment variable of a running process does not change its mounts. This option opts out of control-library injection. To retain memory limits while disabling only compute limits, useNPU_CORE_UTILIZATION_POLICY=disableor Turbo under the conditions above.
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 0.2.2 release package and are preserved as published. Use this version's values.yaml as the source of default configuration.
Expand values table
| Key | Type | Default | Description |
|---|---|---|---|
| config.create | bool | false | Create the bundled device configuration ConfigMap for an installation without HAMi. Leave disabled when HAMi owns the device configuration. |
| config.deviceConfigMapName | string | "hami-scheduler-device" | Name of the device configuration ConfigMap created when config.create=true. |
| config.existingDeviceConfigMapName | string | "hami-scheduler-device" | HAMi-managed device configuration ConfigMap to reuse when config.create=false. The ConfigMap must be in the release namespace. |
| daemonSet.args[0] | string | "--config_file" | |
| daemonSet.args[1] | string | "/device-config.yaml" | |
| daemonSet.args[2] | string | "--v=4" | |
| daemonSet.args[3] | string | "--node_config_file" | |
| daemonSet.args[4] | string | "/node-config.yaml" | |
| daemonSet.name | string | "hami-ascend-device-plugin" | Device plugin DaemonSet name. |
| fullnameOverride | string | "" | Override the fully qualified resource name. |
| hamiVnpuCore.coreUtilizationPolicy | string | "force" | Default compute policy injected into hami-core containers that do not declare NPU_CORE_UTILIZATION_POLICY. |
| hamiVnpuCore.enabled | bool | false | Enable hami-vnpu-core in the bundled device configuration when config.create=true. This mode requires the HAMi scheduler. |
| image.digest | string | "" | Optional immutable OCI manifest digest. When set, it takes precedence over image.tag. |
| image.pullPolicy | string | "IfNotPresent" | Kubernetes image pull policy. |
| image.repository | string | "ghcr.io/dynamia-ai/ascend-device-plugin" | Container image repository. |
| image.tag | string | "v1.4.2" | Container image tag. |
| nameOverride | string | "" | Override the chart name used in resource names. |
| nodeConfig | string | "nodes: []" | Per-node hami-vnpu-core configuration written to the node ConfigMap. |
| nodeConfigMap.create | bool | true | Create the per-node configuration ConfigMap. |
| nodeConfigMap.name | string | "hami-device-node-config" | Per-node configuration ConfigMap name. |
| nodeSelector.ascend | string | "on" | Node label value used to schedule the device plugin. |
| rbac.name | string | "hami-ascend" | Name shared by the chart-managed RBAC resources. |
| resources.limits.cpu | string | "500m" | |
| resources.limits.memory | string | "500Mi" | |
| resources.requests.cpu | string | "500m" | |
| resources.requests.memory | string | "500Mi" | |
| runtimeClass.create | bool | true | Create the Ascend RuntimeClass. |
| runtimeClass.handler | string | "ascend" | Container runtime handler used by the RuntimeClass. |
| runtimeClass.name | string | "ascend" | RuntimeClass resource name. |
| serviceAccount.create | bool | true | Create a ServiceAccount for the device plugin. |
| serviceAccount.name | string | "hami-ascend" | ServiceAccount name. |
| vnpuDeviceSplitCount | int | 10 | Number of virtual devices advertised per physical Ascend NPU in soft-slicing mode when this chart creates the device configuration. A positive node-level vDeviceCount overrides it. |
| vnpuMonitor.enabled | bool | false | Expose device plugin metrics and create optional Prometheus Operator resources. |
| vnpuMonitor.prometheusRule.create | bool | true | Create a PrometheusRule when vnpuMonitor.enabled=true. |
| vnpuMonitor.prometheusRule.groupLabels.vendor | string | "ascend" | |
| vnpuMonitor.prometheusRule.groupName | string | "ascend-vnpu" | Recording-rule group name. |
| vnpuMonitor.prometheusRule.interval | string | "15s" | Recording-rule evaluation interval. |
| vnpuMonitor.prometheusRule.labels.release | string | "prometheus" | |
| vnpuMonitor.prometheusRule.labels.role | string | "recording-rules" | |
| vnpuMonitor.prometheusRule.labels.vendor | string | "ascend" | |
| vnpuMonitor.prometheusRule.name | string | "hami-ascend-vnpu-monitor" | PrometheusRule resource name. |
| vnpuMonitor.prometheusRule.namespace | string | "monitoring" | Namespace for the PrometheusRule. |
| vnpuMonitor.service.name | string | "hami-ascend-device-plugin-metrics" | Headless Service that exposes the device plugin metrics port. |
| vnpuMonitor.serviceMonitor.create | bool | true | Create a ServiceMonitor when vnpuMonitor.enabled=true. |
| vnpuMonitor.serviceMonitor.interval | string | "15s" | Prometheus scrape interval. |
| vnpuMonitor.serviceMonitor.labels.release | string | "prometheus" | |
| vnpuMonitor.serviceMonitor.name | string | "hami-ascend-vnpu-monitor" | ServiceMonitor resource name. |
| vnpuMonitor.serviceMonitor.namespace | string | "monitoring" | Namespace for the ServiceMonitor. |
| vnpuMonitor.serviceMonitor.path | string | "/metrics" | Metrics HTTP path. |