Skip to main content

Dynamia ascend-device-plugin Chart 0.1.1

Release date: 2026-08-17

VersionPreviousThis release
Chart0.1.00.1.1
appVersionv1.3.0v1.4.0

This page describes the Chart package published on 2026-08-17 with default application version v1.4.0. The historical OCI repository also contains a package named 0.1.1 whose default application is v1.3.0; that older package does not include the application and monitoring-configuration changes below. When acquiring the package, verify the Chart version, appVersion, and default image together.

HAMi Enterprise compatibility​

Feature or modeMinimum usable HAMi Enterprise versionCompatibility requirements and upgrade conclusion
Hard partitioning with existing devices and templatesv2.7.1-rc0The existing scheduling protocol can be retained. With the 2.7/2.8 series, the plugin needs a separate device configuration in the new format with the same devices, resource names, and templates as the scheduler; do not directly reuse the old-format shared configuration.
hami-core static soft partitioningv2.9.0-rc0Enable soft partitioning on the node. Explicitly set huawei.com/vnpu-mode: hami-core on workloads and request the corresponding memory and compute resources. If retaining the legacy automatically injected PostStart, bash in the container must start and load the preload library; the hook cannot start the new manager. A valid custom PostStart that does not invoke the old limiter is retained.
Static soft partitioning without automatic injection of the legacy limiter startup hookv2.10.0-r2This version removes the legacy automatic injection. Workloads unable to meet the old hook's execution requirements and without a valid custom PostStart can upgrade to this compatible version first.

Changes​

Chart changes​

  • [Upstream sync] Adds vnpuMonitor.enabled, disabled by default. It can create a Service exposing port 9395, a ServiceMonitor, and a PrometheusRule. The recording rules convert plugin metrics to kantaloupe_* metrics for monitoring. See Upgrade guidance for prerequisites and label handling. Source: ascend-device-plugin #108.
  • [Upstream sync] Adds a Kubernetes version check requiring >=1.20.0-0; Helm rejects installation on older clusters. Source: ascend-device-plugin #113.
  • [Upstream sync] Adds --v=4 to the default daemonSet.args, changing plugin log verbosity. Source: ascend-device-plugin #112.
  • [Enterprise feature] Relaxes top-level values validation to allow extra configuration, such as global, supplied by a parent Chart. Existing child objects continue to be validated under their own rules; extra fields are not automatically used by templates.

Application changes​

  • [Upstream sync] Bundled libvnpu v1.4.0 moves the soft-partitioning manager thread into libvnpu.so, starts it on the first NPU call, and supports takeover from an inactive manager. A separate cleanup thread and saturating decrements improve memory accounting after process exit. The plugin no longer distributes a separate limiter executable. Sources: hami-vnpu-core #11 and ascend-device-plugin #98.
  • [Enterprise feature] Adds heartbeat refresh while waiting, restarts after abnormal manager exit, and backs off when the registry is full, reducing false inactive-manager detection during waits.
  • [Upstream sync] On soft-partitioned nodes, plugin startup enables device-share for the cards and chips it manages. Failure on any card aborts the current startup pass; completed changes are not automatically rolled back. Source: ascend-device-plugin #95.
  • [Upstream sync] Supports filterDevices.uuid and filterDevices.index in node configuration to exclude specified devices from registration, health checks, and cleanup of idle virtual devices. index is the physical card ID. A positive node-level vDeviceCount can override the globally derived virtual-device count. Sources: ascend-device-plugin #76 and #100.
  • [Upstream sync] Soft-partitioning compute capacity reported to the scheduler is standardized to 100, consistent with percentage-based allocation. If a Pod does not set huawei.com/vnpu-mode, the plugin's Allocate path follows the node mode. With a compatible older scheduler, the workload must still declare the mode explicitly; do not rely only on the plugin's default detection. Sources: ascend-device-plugin #91 and #106.
  • [Upstream sync] Improves device-plugin re-registration after kubelet restarts by recreating the gRPC service, waiting for background threads to exit, cleaning up the old socket, and adjusting Unix-socket connection and readiness checks. Sources: ascend-device-plugin #84 and #92.
  • [Upstream sync] Periodic idle-vNPU cleanup is disabled by default, reducing the risk of reclaiming allocated devices before workloads have used them. Enable it explicitly with --enable_periodic_idle_vnpu_cleanup; the one-time cleanup at plugin startup or restart remains. Source: ascend-device-plugin #120.
  • [Enterprise feature] Renames the main monitoring metrics from vnpu_* to hami_*; old names are no longer emitted in parallel. See Upgrade guidance for name mappings and removed metrics.
  • [Upstream sync] Memory monitoring for ordinary workload containers now reports by device UUID and improves multi-card handling. Monitoring initialization no longer blocks plugin registration. The :9395/metrics endpoint starts only on soft-partitioned nodes; hard-partitioned nodes no longer expose the previous metrics endpoint. Container device utilization is the AI Core utilization of the corresponding physical card, in the range 0–100; it is not the container's exclusive compute share, and containers on the same card may report the same value. Sources: ascend-device-plugin #87 and #93.

In this release, hami_vgpu_memory_context_bytes, hami_vgpu_memory_module_bytes, and hami_vgpu_memory_buffer_bytes are still emitted as fixed 0 values; they do not describe the actual memory breakdown.

Upgrade guidance​

  • Verify the package and image. Use the release package described above whose default application is v1.4.0, and confirm the Kubernetes cluster meets the Chart's version check. The default image is ghcr.io/dynamia-ai/ascend-device-plugin:v1.4.0. Update a custom image.tag; if image.digest is set, update or clear it because the digest takes precedence over the tag. The Chart version 0.1.1 alone cannot distinguish the two historical packages.
  • Separate device configuration when retaining an older scheduler. This applies only to existing hard-partitioning deployments on the 2.7/2.8 series. Keep the scheduler's existing vnpus list configuration and create a separate plugin ConfigMap in the same namespace, placing the device list under vnpus.configs and setting vnpus.hamiVnpuCore: false. Set config.create=false and point config.existingDeviceConfigMapName to that separate ConfigMap; its data key remains device-config.yaml. Do not modify the old scheduler's shared configuration in place. Keep devices, resource names, and template parameters consistent on both sides, and retain the existing valid Ascend runtime selection. Existing separate configurations meeting these conditions may remain. Chart 2.9.0-rc0 already uses the new device-configuration structure.
  • Stop old soft-partitioned processes before updating the plugin and recreating workloads. Stop affected workloads and the separate limiter, remove legacy limiter startup commands from custom templates, and retain any required workload initialization. The new plugin removes the separate host limiter; the new manager starts with NPU calls and cannot be driven by the old command. An older Enterprise webhook may still inject a PostStart that uses bash to start the limiter in the background; if retaining the hook, ensure bash can run in the container. Alternatively, keep a valid custom PostStart that no longer invokes the old limiter, or use Enterprise v2.10.0-r2, which removed automatic injection. Do not let old and new managers use the same container state simultaneously.
  • Meet preload requirements before container processes start. With libvnpu.so preloaded, the CANN/driver libraries and their dependencies must be resolvable as soon as the dynamic loader loads the library, including for PostStart bash. Version 1.4.0 adds a dependency on libdcmi.so and still requires libruntime.so. Prepare the library mounts and dynamic-linker search path before upgrading; setting LD_LIBRARY_PATH only after the workload entrypoint starts is insufficient.
  • Recreate containers to initialize their local shared state. This runtime adds fields to container-local manager state. Recreating Pods gives them fresh local state under their new Pod UIDs; rolling the plugin alone does not migrate old running processes. Before removing stale files, identify the actual NPU_LOCAL_SHM_PATH and mounts, confirm all users have exited, and clean only the corresponding old container state. The default container 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. Follow the actual configuration if the plugin's HOOK_PATH or mounts have been customized. The global registry layout is unchanged, so do not clear the entire /usr/local/hami-shared-region directory for this upgrade.
  • Check node tools and custom startup arguments. Soft-partitioned nodes need an executable npu-smi so the plugin can enable device-share. A custom daemonSet.args replaces the entire default argument list; add --v=4 to the existing list if you want the new log verbosity. Enable periodic cleanup only if you explicitly need to restore it.
  • Enable monitoring according to your collection method. Set vnpuMonitor.enabled=true to create a ServiceMonitor and PrometheusRule, enabled by default in the monitoring namespace with the release: prometheus label. Ensure the namespace and Prometheus Operator CRDs exist and that the labels match the selectors in your environment. Without the Operator, set vnpuMonitor.serviceMonitor.create=false and vnpuMonitor.prometheusRule.create=false, and use the Service for your own scraping. Deployments that previously scraped physical-card metrics from :9395/metrics on hard-partitioned nodes must change their collection configuration; enabling the Chart monitoring switch does not restore that endpoint.
  • Check workload labels in collected metrics. The bundled ServiceMonitor does not set honorLabels and writes the scrape target's pod and namespace values to exported_pod and exported_namespace, which may override workload identity labels. If queries depend on workload dimensions, disable the Chart-created ServiceMonitor and maintain a scrape configuration with honorLabels: true, removing the two relabeling rules that write exported_*. Also check for existing recording rules with the same kantaloupe_* names to avoid duplicate definitions.

Migrate dashboard, alert, and PromQL metric names using the table below. The old names are not emitted in parallel.

Old metricReplacement in this release
vnpu_host_memory_used_byteshami_host_gpu_memory_used_bytes
vnpu_host_utilization_ratiohami_host_gpu_utilization_ratio
vnpu_vgpu_memory_used_byteshami_vgpu_memory_used_bytes
vnpu_vgpu_memory_limit_byteshami_vgpu_memory_limit_bytes
vnpu_container_device_utilization_ratiohami_container_device_utilization_ratio
vnpu_host_memory_total_bytesRemoved; no equivalent replacement
vnpu_container_last_kernel_elapsed_secondsRemoved; no equivalent replacement

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.1.1 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.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.0"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.
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.