Skip to main content

Dynamia ascend-device-plugin Chart 0.2.2

Release date: 2026-10-09

VersionPreviousThis release
Chart0.2.10.2.2
appVersionv1.4.1v1.4.2

HAMi Enterprise compatibility​

Feature or modeMinimum usable HAMi Enterprise versionCompatibility requirements and upgrade conclusion
Template-based hard partitioningv2.9.0-rc0The 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-outv2.9.0-rc0Explicitly 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 hookv2.10.0-r2This 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 expansionv2.10.0-r2Upgrade 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.coreUtilizationPolicy to set the default compute policy for soft-partitioned containers. Supported values are default, force, and disable; the default is force. It does not depend on config.create.
  • [Enterprise feature] Adds vnpuDeviceSplitCount, defaulting to 10, to configure the number of virtual devices reported per physical NPU in soft-partitioning mode. When using the bundled deviceConfig with config.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_POLICY compute policy. By default, the plugin injects force into the hami-core container and limits average duty cycle according to the allocated share. default uses relative weighting; disable turns off compute limits while retaining memory control. Explicit container env settings take precedence, including valueFrom.
  • [Enterprise feature] Supports setting task priority with the business container environment variable NPU_TASK_PRIORITY. The default is 1; 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=true disables 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=true in Pod env to omit the /etc/ld.so.preload mount. envFrom and valueFrom are 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 × vnpuDeviceSplitCount instead of deriving the count from the smallest virtualization template. Without a valid setting, each physical NPU reports 10 virtual devices by default. A positive node-level vDeviceCount still 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 bash startup command into hami-core containers without a custom PostStart; the hook fails if the container lacks bash. Upgrade to v2.10.0-r2 to 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_PATH and NPU_LOCAL_SHM_PATH used by affected workloads and map them to host paths through container mounts. By default, container path /hami-shared-region/<physical-device-ID>_global_registry maps 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_shmem maps to /usr/local/hami-vnpu-core/containers/<Pod UID>_<container name>/vnpu_local_shmem on the host. Use the effective paths if environment variables, plugin HOOK_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 custom image.tag to the target version. If image.digest is 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_POLICY and usually used relative weighting. New soft-partitioned containers without an explicit policy now default to force, which applies average duty-cycle limits even without contention. To retain relative weighting, set hamiVnpuCore.coreUtilizationPolicy=default or explicitly set NPU_CORE_UTILIZATION_POLICY=default in the target container's env. 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 10 virtual devices per physical NPU and may differ from the count previously derived from the smallest template. To preserve the previous count, set an appropriate vnpuDeviceSplitCount or node-level vDeviceCount. The default is config.create=false; update the actual shared-device ConfigMap. The HAMi Enterprise Chart exposes devices.ascend.vnpuDeviceSplitCount starting with 2.10.0-r3. With earlier Charts, retain the plugin default or explicitly set vnpus.vnpuDeviceSplitCount in the shared device configuration. If you replace the plugin Chart's complete deviceConfig string, 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-r2 and use Kubernetes 1.30 or later. Set devices.ascend.enabled=true, scheduler.admissionWebhook.enabled=true, and dra.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 literal NPU_MEMORY_AUTO_ADJUST=true in the Pod env of an ordinary container on a soft-partitioned node, with explicit huawei.com/vnpu-mode: hami-core and 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_CONTROL takes 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, use NPU_CORE_UTILIZATION_POLICY=disable or 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
KeyTypeDefaultDescription
config.createboolfalseCreate the bundled device configuration ConfigMap for an installation without HAMi. Leave disabled when HAMi owns the device configuration.
config.deviceConfigMapNamestring"hami-scheduler-device"Name of the device configuration ConfigMap created when config.create=true.
config.existingDeviceConfigMapNamestring"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.namestring"hami-ascend-device-plugin"Device plugin DaemonSet name.
fullnameOverridestring""Override the fully qualified resource name.
hamiVnpuCore.coreUtilizationPolicystring"force"Default compute policy injected into hami-core containers that do not declare NPU_CORE_UTILIZATION_POLICY.
hamiVnpuCore.enabledboolfalseEnable hami-vnpu-core in the bundled device configuration when config.create=true. This mode requires the HAMi scheduler.
image.digeststring""Optional immutable OCI manifest digest. When set, it takes precedence over image.tag.
image.pullPolicystring"IfNotPresent"Kubernetes image pull policy.
image.repositorystring"ghcr.io/dynamia-ai/ascend-device-plugin"Container image repository.
image.tagstring"v1.4.2"Container image tag.
nameOverridestring""Override the chart name used in resource names.
nodeConfigstring"nodes: []"Per-node hami-vnpu-core configuration written to the node ConfigMap.
nodeConfigMap.createbooltrueCreate the per-node configuration ConfigMap.
nodeConfigMap.namestring"hami-device-node-config"Per-node configuration ConfigMap name.
nodeSelector.ascendstring"on"Node label value used to schedule the device plugin.
rbac.namestring"hami-ascend"Name shared by the chart-managed RBAC resources.
resources.limits.cpustring"500m"
resources.limits.memorystring"500Mi"
resources.requests.cpustring"500m"
resources.requests.memorystring"500Mi"
runtimeClass.createbooltrueCreate the Ascend RuntimeClass.
runtimeClass.handlerstring"ascend"Container runtime handler used by the RuntimeClass.
runtimeClass.namestring"ascend"RuntimeClass resource name.
serviceAccount.createbooltrueCreate a ServiceAccount for the device plugin.
serviceAccount.namestring"hami-ascend"ServiceAccount name.
vnpuDeviceSplitCountint10Number 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.enabledboolfalseExpose device plugin metrics and create optional Prometheus Operator resources.
vnpuMonitor.prometheusRule.createbooltrueCreate a PrometheusRule when vnpuMonitor.enabled=true.
vnpuMonitor.prometheusRule.groupLabels.vendorstring"ascend"
vnpuMonitor.prometheusRule.groupNamestring"ascend-vnpu"Recording-rule group name.
vnpuMonitor.prometheusRule.intervalstring"15s"Recording-rule evaluation interval.
vnpuMonitor.prometheusRule.labels.releasestring"prometheus"
vnpuMonitor.prometheusRule.labels.rolestring"recording-rules"
vnpuMonitor.prometheusRule.labels.vendorstring"ascend"
vnpuMonitor.prometheusRule.namestring"hami-ascend-vnpu-monitor"PrometheusRule resource name.
vnpuMonitor.prometheusRule.namespacestring"monitoring"Namespace for the PrometheusRule.
vnpuMonitor.service.namestring"hami-ascend-device-plugin-metrics"Headless Service that exposes the device plugin metrics port.
vnpuMonitor.serviceMonitor.createbooltrueCreate a ServiceMonitor when vnpuMonitor.enabled=true.
vnpuMonitor.serviceMonitor.intervalstring"15s"Prometheus scrape interval.
vnpuMonitor.serviceMonitor.labels.releasestring"prometheus"
vnpuMonitor.serviceMonitor.namestring"hami-ascend-vnpu-monitor"ServiceMonitor resource name.
vnpuMonitor.serviceMonitor.namespacestring"monitoring"Namespace for the ServiceMonitor.
vnpuMonitor.serviceMonitor.pathstring"/metrics"Metrics HTTP path.