Dynamia ascend-device-plugin Chart 0.1.1
Release date: 2026-08-17
| Version | Previous | This release |
|---|---|---|
| Chart | 0.1.0 | 0.1.1 |
| appVersion | v1.3.0 | v1.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 mode | Minimum usable HAMi Enterprise version | Compatibility requirements and upgrade conclusion |
|---|---|---|
| Hard partitioning with existing devices and templates | v2.7.1-rc0 | The 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 partitioning | v2.9.0-rc0 | Enable 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 hook | v2.10.0-r2 | This 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 port9395, a ServiceMonitor, and a PrometheusRule. The recording rules convert plugin metrics tokantaloupe_*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=4to the defaultdaemonSet.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 separatelimiterexecutable. 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-sharefor 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.uuidandfilterDevices.indexin node configuration to exclude specified devices from registration, health checks, and cleanup of idle virtual devices.indexis the physical card ID. A positive node-levelvDeviceCountcan 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 sethuawei.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_*tohami_*; 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/metricsendpoint 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 range0–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 isghcr.io/dynamia-ai/ascend-device-plugin:v1.4.0. Update a customimage.tag; ifimage.digestis set, update or clear it because the digest takes precedence over the tag. The Chart version0.1.1alone 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
vnpuslist configuration and create a separate plugin ConfigMap in the same namespace, placing the device list undervnpus.configsand settingvnpus.hamiVnpuCore: false. Setconfig.create=falseand pointconfig.existingDeviceConfigMapNameto that separate ConfigMap; its data key remainsdevice-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
bashto start the limiter in the background; if retaining the hook, ensurebashcan run in the container. Alternatively, keep a valid custom PostStart that no longer invokes the old limiter, or use Enterprisev2.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.sopreloaded, the CANN/driver libraries and their dependencies must be resolvable as soon as the dynamic loader loads the library, including for PostStartbash. Version 1.4.0 adds a dependency onlibdcmi.soand still requireslibruntime.so. Prepare the library mounts and dynamic-linker search path before upgrading; settingLD_LIBRARY_PATHonly 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_PATHand mounts, confirm all users have exited, and clean only the corresponding old container state. The default container path/hami-vnpu-shmem/vnpu_local_shmemmaps to/usr/local/hami-vnpu-core/containers/<Pod UID>_<container name>/vnpu_local_shmemon the host. Follow the actual configuration if the plugin'sHOOK_PATHor mounts have been customized. The global registry layout is unchanged, so do not clear the entire/usr/local/hami-shared-regiondirectory for this upgrade. - Check node tools and custom startup arguments. Soft-partitioned nodes need an executable
npu-smiso the plugin can enabledevice-share. A customdaemonSet.argsreplaces the entire default argument list; add--v=4to 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=trueto create a ServiceMonitor and PrometheusRule, enabled by default in themonitoringnamespace with therelease: prometheuslabel. Ensure the namespace and Prometheus Operator CRDs exist and that the labels match the selectors in your environment. Without the Operator, setvnpuMonitor.serviceMonitor.create=falseandvnpuMonitor.prometheusRule.create=false, and use the Service for your own scraping. Deployments that previously scraped physical-card metrics from:9395/metricson 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
honorLabelsand writes the scrape target'spodandnamespacevalues toexported_podandexported_namespace, which may override workload identity labels. If queries depend on workload dimensions, disable the Chart-created ServiceMonitor and maintain a scrape configuration withhonorLabels: true, removing the two relabeling rules that writeexported_*. Also check for existing recording rules with the samekantaloupe_*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 metric | Replacement in this release |
|---|---|
vnpu_host_memory_used_bytes | hami_host_gpu_memory_used_bytes |
vnpu_host_utilization_ratio | hami_host_gpu_utilization_ratio |
vnpu_vgpu_memory_used_bytes | hami_vgpu_memory_used_bytes |
vnpu_vgpu_memory_limit_bytes | hami_vgpu_memory_limit_bytes |
vnpu_container_device_utilization_ratio | hami_container_device_utilization_ratio |
vnpu_host_memory_total_bytes | Removed; no equivalent replacement |
vnpu_container_last_kernel_elapsed_seconds | Removed; 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
| 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.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.0" | 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. |
| 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. |