Skip to main content

Dynamia ascend-device-plugin Chart 0.1.0

Release date: 2026-08-04

VersionPreviousThis 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 modeMinimum usable HAMi Enterprise versionCompatibility requirements and upgrade conclusion
Hard partitioning with existing devices and templatesv2.7.1-rc0With 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. 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.args to 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.create explicitly selecting whether to create or reuse it; supports pinning image content with image.digest, which takes precedence over the tag. Installation validates value types and fields and rejects undeclared top-level keys.
SettingDefaultMeaning
image.repository / image.tagghcr.io/dynamia-ai/ascend-device-plugin / v1.3.0Default plugin image; image.digest is empty by default
nodeSelectorascend: "on"Deploy the plugin to nodes with this label
config.create / config.existingDeviceConfigMapNamefalse / hami-scheduler-deviceReuse an existing device configuration in the same namespace
nodeConfigMap.create / nodeConfigMap.nametrue / hami-device-node-configCreate node configuration, initially nodes: []
hamiVnpuCore.enabledfalseAffects only the device configuration generated when config.create=true
runtimeClass.create / runtimeClass.name / runtimeClass.handlertrue / ascend / ascendCreate 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.so and a separate limiter, 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 fork and 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 using node.k8s.io/v1 by 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 valid runtimeClassName (default name ascend) or use a preconfigured default runtime. The default device ConfigMap must exist in the plugin namespace with data key device-config.yaml. Set config.create=true if 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 vnpus list. In a separate plugin ConfigMap, put the device list under vnpus.configs and set vnpus.hamiVnpuCore: false. Point config.existingDeviceConfigMapName to 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; enable device-share on the devices in advance. This plugin release does not enable it automatically. Enable the mode through vnpus.hamiVnpuCore in the effective device configuration or through node configuration, set huawei.com/vnpu-mode: hami-core on the Pod, and request the matching memory and compute resources. With an external ConfigMap reused by default, changing only hamiVnpuCore.enabled does not update that configuration.
  • Keep the separate limiter running. The plugin mounts /hami-vnpu-core/limiter into soft-partitioned containers but does not execute it. Enterprise v2.9.0-rc0 injects a background startup command using bash into such containers when they have no custom PostStart. The image must be able to run bash, and /tmp/limiter_manager.log must be writable. With a custom PostStart, or with Enterprise v2.10.0-r2 where 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 status Running alone 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.so must be able to resolve CANN libruntime.so and its dependencies, including when PostStart bash, the limiter, and the workload process start. Prepare library mounts and search paths in advance; setting LD_LIBRARY_PATH only after the workload entrypoint has started is insufficient. The amd64 runtime library and limiter shipped with this release require an environment with symbols compatible with GLIBC_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 as global.
  • Configure metric collection yourself. This Chart declares only the container port 9395; it does not create a Service, ServiceMonitor, or PrometheusRule and has no vnpuMonitor.enabled switch. Collect the plugin at PodIP:9395/metrics through 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 associationMeaning and limitation in this release
vnpu_vgpu_memory_used_bytes / vnpu_vgpu_memory_limit_bytesMemory usage/limit from container-local state, in bytes; one series per container, with no per-device breakdown yet
vnpu_host_memory_used_bytesUsually 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_ratioPhysical-device AI Core utilization, range 0–100
vnpu_container_device_utilization_ratioActually 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_secondsFixed at 0; cannot be used to determine actual idle time
Container device UUID associationParses 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
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"--node_config_file"
daemonSet.args[3]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.3.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.