Dynamia ascend-device-plugin Chart 0.1.0
Release date: 2026-08-04
| Version | Previous | This release |
|---|---|---|
| Chart | — (first Chart release) | 0.1.0 |
| appVersion | — | v1.3.0 |
This is the first Chart release of the Dynamia Ascend Device Plugin and packages the existing v1.3.0 application by default. The sections below describe the first Chart and its bundled capabilities. See Upgrade guidance for adopting this Chart with an existing manual deployment.
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 | 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. The container must run the separate limiter. If a custom PostStart is already defined, arrange for it to start the limiter yourself. |
Changes
Chart changes
- [Upstream sync] Adds a Helm deployment entry point managing the device-plugin DaemonSet, ServiceAccount, RBAC, RuntimeClass, and node configuration. Values can configure node selection, resources, and global or node-level device modes. Source: ascend-device-plugin #96.
- [Upstream sync] Uses
daemonSet.argsto configure the complete startup argument list; this release passes the device-configuration and node-configuration file paths by default. Source: ascend-device-plugin #112. - [Enterprise feature] Adapts image and configuration management for Enterprise: reuses an existing device ConfigMap by default, with
config.createexplicitly selecting whether to create or reuse it; supports pinning image content withimage.digest, which takes precedence over the tag. Installation validates value types and fields and rejects undeclared top-level keys.
| Setting | Default | Meaning |
|---|---|---|
image.repository / image.tag | ghcr.io/dynamia-ai/ascend-device-plugin / v1.3.0 | Default plugin image; image.digest is empty by default |
nodeSelector | ascend: "on" | Deploy the plugin to nodes with this label |
config.create / config.existingDeviceConfigMapName | false / hami-scheduler-device | Reuse an existing device configuration in the same namespace |
nodeConfigMap.create / nodeConfigMap.name | true / hami-device-node-config | Create node configuration, initially nodes: [] |
hamiVnpuCore.enabled | false | Affects only the device configuration generated when config.create=true |
runtimeClass.create / runtimeClass.name / runtimeClass.handler | true / ascend / ascend | Create the RuntimeClass object; the corresponding runtime must already be configured on nodes |
Bundled application capabilities
The following capabilities are included in the v1.3.0 application packaged with the first Chart.
- [Upstream sync] The hard-partitioning path reads the unified device configuration and scheduler allocation result, then passes device visibility and virtualization templates into containers. It supports completing allocation separately for each container slot in the annotation and releases the node allocation lock after all allocations finish. Template selection depends on the compatible scheduler and device configuration. Sources: ascend-device-plugin #71 and #75.
- [Upstream sync] Integrates soft partitioning based on
libvnpu.soand a separatelimiter, mounting the runtime library, preload file, and shared state into containers and passing memory limits and compute-sharing parameters. The mode can be selected globally or per node, with node configuration taking precedence. At runtime, compute shares use relative weighting by default; a requested share is not an exact hard cap on physical-card utilization. Sources: ascend-device-plugin #61 and #67. - [Upstream sync] Cleans up vNPUs determined to be idle by the driver at plugin startup, restart, and periodic runs. The default interval is 60 seconds. The determination is based on whether the device is actually in use; an allocated workload that has not yet used the NPU may also be reclaimed. This is not equivalent to cleaning up only after a Pod has terminated. Source: ascend-device-plugin #54.
- [Enterprise feature] Provides basic monitoring using container-local shared state and exposes
vnpu_*metrics at:9395/metrics. Physical-card metrics do not depend on soft-partitioning state; container metrics require local state generated by the runtime library and its association with the Pod. See Upgrade guidance for metric limitations. - [Enterprise feature] Detects child processes after
forkand re-establishes the runtime-library client. Some DSMI/DCMI queries return the container quota view for inspecting the corresponding allocation inside the container.
Upgrade guidance
There is no previous Chart. The following applies to a first-time installation or adopting this Chart with an existing manual deployment.
- Prepare the node runtime and device configuration. Nodes need a usable Ascend driver and container runtime and must match
nodeSelector. The Chart creates a RuntimeClass usingnode.k8s.io/v1by default, so the cluster must serve this API. Creating the object does not install a host runtime or automatically apply it to workload Pods. Workloads must set a validruntimeClassName(default nameascend) or use a preconfigured default runtime. The default device ConfigMap must exist in the plugin namespace with data keydevice-config.yaml. Setconfig.create=trueif the Chart should manage it. If HAMi already manages the object, continue reusing it to avoid duplicate ownership. - Provide separate plugin configuration for an older scheduler. For existing hard-partitioning deployments on the 2.7/2.8 series, keep the scheduler's existing
vnpuslist. In a separate plugin ConfigMap, put the device list undervnpus.configsand setvnpus.hamiVnpuCore: false. Pointconfig.existingDeviceConfigMapNameto this separate configuration. Devices, resource names, and templates must match on both sides. An existing separate configuration meeting these conditions may be retained. - Configure both node and workload for soft partitioning. This mode requires Ascend driver
>=25.5; enabledevice-shareon the devices in advance. This plugin release does not enable it automatically. Enable the mode throughvnpus.hamiVnpuCorein the effective device configuration or through node configuration, sethuawei.com/vnpu-mode: hami-coreon the Pod, and request the matching memory and compute resources. With an external ConfigMap reused by default, changing onlyhamiVnpuCore.enableddoes not update that configuration. - Keep the separate limiter running. The plugin mounts
/hami-vnpu-core/limiterinto soft-partitioned containers but does not execute it. Enterprisev2.9.0-rc0injects a background startup command usingbashinto such containers when they have no custom PostStart. The image must be able to runbash, and/tmp/limiter_manager.logmust be writable. With a custom PostStart, or with Enterprisev2.10.0-r2where automatic startup injection has been removed, start the limiter in your own startup flow using the shared-state path and quota environment injected by the plugin. Pod statusRunningalone does not indicate successful startup; without the limiter, the runtime library keeps waiting for local shared state. - Meet dynamic-loading requirements in soft-partitioned containers. When preloaded,
libvnpu.somust be able to resolve CANNlibruntime.soand its dependencies, including when PostStartbash, the limiter, and the workload process start. Prepare library mounts and search paths in advance; settingLD_LIBRARY_PATHonly after the workload entrypoint has started is insufficient. The amd64 runtime library and limiter shipped with this release require an environment with symbols compatible withGLIBC_2.34; check the workload image, not only the plugin image. During first-time installation, the limiter initializes shared state, so state migration or cleanup steps from later releases do not apply. - Assign clear ownership for existing resources. The default DaemonSet, RBAC, RuntimeClass, and node ConfigMap use fixed names. When adopting an existing deployment, resolve same-name resources and their current owners first. Changing only the Helm release name or namespace does not avoid cluster-scoped resource conflicts. If disabling creation of the node ConfigMap or ServiceAccount, ensure the resources referenced by the plugin already exist. If disabling
runtimeClass.create, verify the runtime selected by workloads is available. When embedding this Chart in a parent Chart, note that the root schema rejects undeclared fields such asglobal. - Configure metric collection yourself. This Chart declares only the container port
9395; it does not create a Service, ServiceMonitor, or PrometheusRule and has novnpuMonitor.enabledswitch. Collect the plugin atPodIP:9395/metricsthrough the existing monitoring system or create a Service yourself. The endpoint is initialized on both hard- and soft-partitioned nodes; container metrics require the soft-partitioning state described above.
Keep these metric boundaries in mind when configuring dashboards and alerts:
| Metric or association | Meaning and limitation in this release |
|---|---|
vnpu_vgpu_memory_used_bytes / vnpu_vgpu_memory_limit_bytes | Memory usage/limit from container-local state, in bytes; one series per container, with no per-device breakdown yet |
vnpu_host_memory_used_bytes | Usually from the physical card; when a nonzero container aggregate exists, that aggregate is used instead, so it does not always represent all card usage |
vnpu_host_utilization_ratio | Physical-device AI Core utilization, range 0–100 |
vnpu_container_device_utilization_ratio | Actually reports the first physical device's utilization; it does not represent the container's exclusive compute share and may not correspond to a device used by the container |
vnpu_container_last_kernel_elapsed_seconds | Fixed at 0; cannot be used to determine actual idle time |
| Container device UUID association | Parses only the first UUID from the huawei.com/Ascend310P annotation; it does not provide generic multi-card or multi-model container statistics |
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.0 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 | "--node_config_file" | |
| daemonSet.args[3] | 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.3.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. |