Dynamia ascend-device-plugin Chart 0.1.0
发布时间:2026-08-04
| 版本 | 上一版 | 本版 |
|---|---|---|
| Chart | —(首次 Chart 发布) | 0.1.0 |
| appVersion | — | v1.3.0 |
这是 Dynamia Ascend Device Plugin 的首个 Chart 发布,默认交付已有的 v1.3.0 应用。下文说明首版 Chart 及其随附能力;已有手工部署接入 Helm 的操作见升级说明。
HAMi Enterprise 兼容性
| 功能或模式 | 最低可用 HAMi Enterprise 版本 | 本版配套要求与升级结论 |
|---|---|---|
| 既有设备和模板的硬切分 | v2.7.1-rc0 | 配套 2.7/2.8 系列时,插件需使用独立的新格式设备配置,与调度器保持相同设备、资源名及模板;不能直接复用旧格式共享配置。 |
hami-core 静态软切分 | v2.9.0-rc0 | 节点启用软切分,工作负载显式设置 huawei.com/vnpu-mode: hami-core 并申请对应显存、算力资源;容器内必须运行独立 limiter。已有自定义 PostStart 时,需自行安排 limiter 启动。 |
版本变化
Chart 变化
- [开源同步] 提供 Helm 部署入口,管理设备插件 DaemonSet、ServiceAccount、RBAC、RuntimeClass 和节点配置。可通过 values 设置节点选择、资源配置和全局/节点级设备模式。来源:ascend-device-plugin #96。
- [开源同步] 通过
daemonSet.args配置完整启动参数列表;本版默认传入设备配置和节点配置两个文件路径。来源:ascend-device-plugin #112。 - [企业版特性] 适配企业版镜像和配置管理:默认复用已有设备 ConfigMap,由
config.create明确选择创建或复用;支持通过image.digest固定镜像内容,摘要优先于标签。安装时校验 values 的类型和字段,拒绝未声明的顶层键。
| 配置项 | 默认值 | 含义 |
|---|---|---|
image.repository / image.tag | ghcr.io/dynamia-ai/ascend-device-plugin / v1.3.0 | 默认插件镜像;image.digest 默认为空 |
nodeSelector | ascend: "on" | 插件部署到带有该标签的节点 |
config.create / config.existingDeviceConfigMapName | false / hami-scheduler-device | 使用同命名空间的既有设备配置 |
nodeConfigMap.create / nodeConfigMap.name | true / hami-device-node-config | 创建节点配置,初始 nodes: [] |
hamiVnpuCore.enabled | false | 仅影响 config.create=true 时生成的设备配置 |
runtimeClass.create / runtimeClass.name / runtimeClass.handler | true / ascend / ascend | 创建 RuntimeClass 对象;节点仍需预先配置对应运行时 |
应用变化
以下为首版 Chart 随附的 v1.3.0 应用能力。
- [开源同步] 硬切分路径读取统一设备配置和调度器分配结果,将设备可见列表及虚拟化模板传入容器。支持按注解中的容器槽位分别完成分配,并在全部完成后释放节点分配锁。模板选择依赖配套调度器与设备配置。来源:ascend-device-plugin #71、#75。
- [开源同步] 集成基于
libvnpu.so和独立limiter的软切分,向容器挂载运行库、预加载文件及共享状态,并传入显存额度和计算共享参数。可按全局或指定节点选择模式,节点配置优先;运行时默认按相对权重分配计算份额,不能将申请值视为精确的物理卡利用率硬上限。来源:ascend-device-plugin #61、#67。 - [开源同步] 在插件启动、重启及周期任务中清理驱动判定为空闲的 vNPU,默认检查间隔为 60 秒。此判断依据设备是否被实际使用;尚未使用 NPU 的已分配工作负载也可能被回收,不能将其等同于仅清理已结束的 Pod。来源:ascend-device-plugin #54。
- [企业版特性] 使用按容器保存的本地共享状态提供基础监控,在
:9395/metrics输出vnpu_*指标。物理卡指标不依赖软切分状态;容器指标依赖运行库产生的本地状态及其与 Pod 的关联。指标使用限制见升级说明。 - [企业版特性] 在 fork 后识别子进程并重新建立运行库客户端;部分 DSMI/DCMI 查询返回容器配额视图,供容器内查看对应分配。
升级说明
本版没有上一 Chart。以下适用于首次安装,或将已有手工部署接入此 Chart。
- 准备节点运行环境和设备配置。 节点须已有可用的 Ascend 驱动与容器运行时,并匹配
nodeSelector。Chart 默认创建 RuntimeClass 使用node.k8s.io/v1,集群须提供该 API;创建对象不会安装主机运行时,也不会自动应用到业务 Pod。工作负载需设置有效的runtimeClassName(默认名称为ascend),或使用已配置好的对应默认运行时。默认设备 ConfigMap 必须已存在于插件安装的命名空间,数据键为device-config.yaml。若由 Chart 管理,设置config.create=true;HAMi 仍管理该对象时应继续复用,避免重复管理。 - 旧调度器单独提供插件配置。 对 2.7/2.8 系列的既有硬切分部署,保留调度器原来的
vnpus列表;在独立插件 ConfigMap 中将设备列表放到vnpus.configs下,并设置vnpus.hamiVnpuCore: false。将config.existingDeviceConfigMapName指向该独立配置,两端设备、资源名和模板须一致。已有符合条件的独立配置可以保留。 - 软切分需同时配置节点和工作负载。 该模式要求 Ascend 驱动
>=25.5,并预先为所用设备开启device-share;本版插件不会自动设置。通过实际设备配置的vnpus.hamiVnpuCore或节点配置启用模式,并给 Pod 设置huawei.com/vnpu-mode: hami-core,申请对应显存、算力资源。默认复用外部 ConfigMap 时,仅修改hamiVnpuCore.enabled不会更新该配置。 - 确保独立 limiter 持续运行。 插件向软切分容器挂载
/hami-vnpu-core/limiter,但不会替容器执行它。Enterprise v2.9.0-rc0 对没有自带 PostStart 的此类容器注入bash后台启动命令;镜像须能执行bash,且/tmp/limiter_manager.log可写。已有自定义 PostStart,或配套已移除自动启动钩子的 Enterprise v2.10.0-r2 时,需在自己的启动流程中启动 limiter,并使用插件注入的共享状态路径及配额环境。仅有 Pod Running 不代表启动成功;缺少 limiter 时,运行库会持续等待本地共享状态。 - 满足软切分容器的动态加载条件。
libvnpu.so预加载时须能解析 CANNlibruntime.so及其依赖,包含 PostStart 的bash、limiter 和业务进程启动时。应事先准备库挂载及搜索路径,不能只在业务 entrypoint 已启动后再设置。本版交付的 amd64 运行库和 limiter 要求兼容GLIBC_2.34的符号环境,应检查业务镜像,而非只检查插件镜像。首次安装由 limiter 初始化共享状态,无需套用后续版本的状态迁移或清理步骤。 - 为既有资源明确管理归属。 默认 DaemonSet、RBAC、RuntimeClass 和节点 ConfigMap 使用固定名称。迁入已有部署时,先处理同名资源及其管理方;仅更换 Helm release 名或命名空间不能消除集群级资源冲突。关闭节点 ConfigMap 或 ServiceAccount 的创建后,应确保插件引用的资源已存在;关闭
runtimeClass.create后,应确认工作负载所选运行时已配置可用。将本 Chart 嵌入父 Chart 时,注意根级 schema 会拒绝global等未声明字段。 - 自行配置指标采集。 本版 Chart 仅声明
9395容器端口,没有 Service、ServiceMonitor 或 PrometheusRule,也没有vnpuMonitor.enabled开关。按现有监控体系采集插件的PodIP:9395/metrics,或自行建立 Service。端点在硬切分和软切分节点均初始化;容器数据需满足前述软切分状态条件。
配置看板和告警时,保留以下指标边界:
| 指标或关联信息 | 本版含义与限制 |
|---|---|
vnpu_vgpu_memory_used_bytes / vnpu_vgpu_memory_limit_bytes | 来自容器本地状态的显存用量/配额,单位为字节;每容器单条,尚无逐设备明细 |
vnpu_host_memory_used_bytes | 通常来自物理卡;存在非零容器汇总时会改用该汇总,不保证始终反映整卡全部用量 |
vnpu_host_utilization_ratio | 物理设备 AI Core 利用率,范围 0–100 |
vnpu_container_device_utilization_ratio | 实际取首个物理设备的利用率,不代表该容器独占的算力,也不保证对应其所用设备 |
vnpu_container_last_kernel_elapsed_seconds | 固定为 0,不能用于判断实际空闲时间 |
| 容器的设备 UUID 关联 | 仅解析 huawei.com/Ascend310P 注解的首个 UUID,不能据此获得通用的多卡/多型号容器统计 |
查看 Chart 与 appVersion 对应关系或软件中心。
Values 说明
以下参数说明取自 Chart 0.1.0 发布包随附的 README,保留原文。默认配置以该版本的 values.yaml 为准。
展开参数表
| 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. |