跳到主要内容

Dynamia ppu-vgpu-device-plugin Chart 0.0.2

发布时间:2026-09-16

版本上一版本版
Chart0.0.10.0.2
appVersion1.0.21.0.4

本版默认应用从 1.0.2 升级至 1.0.4,包含中间应用版本 1.0.3 的变化。插件与监控均使用 ghcr.io/dynamia-ai/ppu-device-plugin:v1.0.4。随镜像交付的 PPU-HAMi-core 新增运行时授权校验,升级时须同步准备节点授权、更新插件与监控,并重建已有业务 Pod 以取得新的按容器授权文件和挂载。

HAMi Enterprise 兼容性​

旧版 PPU 业务能够运行,不等于可以只升级插件。 本版在分配设备时要求节点具有有效的 PPU 授权。现有 Enterprise 已满足下表条件、能识别原始授权并发布有效 hami.io/alibaba-license 时,无需同步升级 Enterprise;否则应先升级配套调度器并完成授权下发,再升级插件。仅在宿主机保留旧授权文件不能满足新的分配流程。

功能或使用场景最低可用 HAMi Enterprise 版本本版配套要求与升级结论
PPU 基础调度、显存与算力切分,以及本版新增的授权下发和续期;使用旧格式 UUID 授权或型号授权v2.9.0-rc2调度器须校验原始授权并发布节点 PPU 授权。使用 v2.9.0-rc0、v2.9.0-rc1 等尚未提供该下发接口的配套时,应先升级;已满足接口和授权条件的部署可沿用现有 Enterprise。
使用 deviceInstances 格式的实例授权v2.10.0-r0原始授权采用此格式时,需由能够解析该格式的调度器处理。插件消费调度器转换后的节点授权,不要求所有部署都换用此授权格式。

设备路径和启动参数修复本身不增加 Enterprise 配套要求。以上版本下限基于发布制品和接口实现核对,不代表已完成各配套版本的 PPU 实机验证。

版本变化​

Chart 变化​

修复 --device-split-count 和 --device-memory-scaling 中数值被额外双引号包裹的问题。例如,上一版渲染后的参数内容是 --device-split-count="2",本版为 --device-split-count=2,避免数值参数解析失败。默认切分数仍为 2,显存与算力缩放仍为 1.0;本次没有调整资源名称、监控端口或部署节点选择。

应用变化​

  • 按容器生成运行时授权。 插件在每次分配时读取当前节点的 hami.io/alibaba-license,核验本次分配的物理 PPU UUID 和有效期,再生成该容器的授权文件。所分配设备缺少有效授权,或目录和文件准备失败时,分配返回错误。文件还会包含插件物理设备池内其他已授权卡的记录,以覆盖驱动可能枚举的设备。
  • 监控组件负责续期文件。 监控刷新时读取节点上的最新授权,对已有容器授权文件中的相同 UUID 延长有效期并更新提醒信息;采用原地写入,保留挂载文件的 inode。续期不添加或删除 UUID,也不会为缺少授权文件的旧容器补建文件。节点注解缺失或无效时,保留已有文件。
  • 运行库开始校验设备授权。 本版内置 PPU-HAMi-core 在初始化设备信息时按完整 UUID 和有效期校验授权,未授权、过期或无法读取授权文件时终止初始化。它会检查 HGML 实际可见的设备;若驱动仍暴露未授权卡,即使该卡不是本次业务申请的设备,也可能导致初始化失败。
  • 修复多容器分配和失败重试。 按 Pod 中的容器位置对应分配请求,保留不申请 PPU 的容器位置;完成授权文件和挂载准备后才消费待分配注解,避免准备失败时提前丢失请求。
  • 修复物理设备路径映射。 按 HGML 返回的一基 minor number 映射到零基设备文件 /dev/alixpu_ppu{minor-1},替代对设备索引取模的旧映射,避免编号较高的设备错误映射到前八个设备路径。公共设备 /dev/alixpu、/dev/alixpu_ctl 仍需存在,重复路径会去重。此修复不等同于已验证任意卡数或驱动组合。

升级说明​

先确认调度器和授权​

将原始授权按原内容放入 Enterprise 调度器所在命名空间的 Secret:数据键为 license,标签为 hami.io/license=true。授权绑定的集群 ESN 应与 kube-system 命名空间 UID 一致。已有同类 Secret 的部署更新原对象即可,不要把原始授权内容直接复制到宿主机运行时授权路径。

升级插件前,检查目标 PPU 节点已由调度器发布有效的 hami.io/alibaba-license,其中 UUID 与现场设备一致、有效期覆盖业务运行时间。原始授权 Secret、节点授权注解和容器中的运行时文件是三个不同阶段的产物,应由调度器和插件完成转换。

更新插件、监控和已有业务​

  • 将插件和监控一起升级至应用 1.0.4。Chart 的 image.tag 为空时会采用默认版本;若固定为 v1.0.2、v1.0.3 或自定义镜像,应同步更新 image.repository、image.tag,并确认镜像包含配套运行库。仅更新 Chart 元数据不会覆盖显式指定的旧镜像。
  • 保持 monitor.enabled: true,才能由监控组件自动更新已有容器的授权文件。关闭监控时,新容器仍由插件在分配阶段读取当前授权,但已有文件不会通过监控流程续期。
  • 按维护安排重建已有 PPU 业务 Pod,使新容器重新执行设备分配,取得按容器生成的授权文件、新挂载和本版运行库。仅重启插件、监控或旧容器中的业务进程,不能补齐旧 Pod 缺少的授权挂载。重建前保存业务状态。
  • 默认路径关系如下。若现场改过挂载路径,须同时核对插件、监控和业务容器的映射,不能仅修改一个组件的 HOOK_PATH。
位置或组件默认路径及用途
宿主机上的容器授权/usr/local/vgpu/containers/<Pod UID>_<容器名>/license;目录以 Pod UID 和容器名标识
业务容器的主要授权路径/usr/local/vgpu/license;来自上述容器目录挂载
业务容器的备用授权路径/tmp/license;同一授权文件的只读挂载
监控扫描目录/usr/local/vgpu/containers;监控的 HOOK_PATH 为 /usr/local/vgpu
插件路径前缀HOOK_PATH=/usr/local;插件在其下使用 vgpu/containers

本版不要求全量删除宿主机 /usr/local/vgpu 或 /tmp/vgpulock。如需清理旧容器状态,应先停止对应 Pod 和使用这些文件的进程,确认目录所属 Pod UID 与容器名,再按现场维护流程处理;不要清理仍被业务使用的共享目录。

续期与验收​

续期时更新原始授权 Secret,确认调度器更新节点授权,再确认监控已更新容器文件。运行库会在进程内缓存解析后的授权:文件更新后,新进程会读取续期内容,已有进程需要重启才能采用新授权。UUID 范围变化应通过重新分配处理,不能依赖仅延长有效期的续期流程。

插件以 UTC 写入授权时间;本版运行库按业务进程本地时区解释时间。业务容器应使用 UTC,例如设置 TZ=UTC,以避免有效期解释偏差。

升级后检查插件与监控滚动更新、节点注册容量、新建业务的设备分配、容器授权文件、实际可见 PPU UUID,以及显存和算力限制。重点排查 hami.io/alibaba-license 缺失、授权过期、设备路径不匹配和驱动暴露未授权设备等错误。源码及 Chart 渲染核对不能替代现场业务验证。

查看Chart 与 appVersion 对应关系或软件中心。

Values 说明​

以下参数说明取自 Chart 0.0.2 发布包随附的 README,保留原文。默认配置以该版本的 values.yaml 为准。

展开参数表
KeyTypeDefaultDescription
commonAnnotationsobject{}
commonLabelsobject{}
config.createbooltrue
config.data.alibaba.defaultCoresint0
config.data.alibaba.defaultGPUNumint1
config.data.alibaba.defaultMemoryint0
config.data.alibaba.deviceCoreScalingfloat1
config.data.alibaba.deviceMemoryScalingfloat1
config.data.alibaba.deviceSplitCountint2
config.data.alibaba.gpuCorePolicystring"default"
config.data.alibaba.memoryFactorint1
config.data.alibaba.overwriteEnvboolfalse
config.data.alibaba.resourceCoreNamestring"alibaba.com/gpu-core"
config.data.alibaba.resourceCountNamestring"alibaba.com/ppu"
config.data.alibaba.resourceMemoryNamestring"alibaba.com/ppu-memory"
config.data.alibaba.resourceMemoryPercentageNamestring"alibaba.com/ppu-memory-percentage"
config.data.alibaba.runtimeClassNamestring""
config.existingConfigMapNamestring""
fullnameOverridestring""
image.pullPolicystring"IfNotPresent"
image.pullSecretslist[]
image.repositorystring"ghcr.io/dynamia-ai/ppu-device-plugin"
image.tagstring""
monitor.enabledbooltrue
monitor.resourcesobject{}
monitor.service.enabledbooltrue
monitor.service.nodePortint31992
monitor.service.portint31992
monitor.service.typestring"NodePort"
nameOverridestring""
namespaceOverridestring"hami-system"
nodeSelector.alibabappustring"on"
plugin.enabledbooltrue
plugin.resources.limits.cpustring"500m"
plugin.resources.limits.memorystring"512Mi"
plugin.resources.requests.cpustring"100m"
plugin.resources.requests.memorystring"128Mi"
priorityClassNamestring"system-node-critical"
tolerations[0].keystring"CriticalAddonsOnly"
tolerations[0].operatorstring"Exists"
tolerations[1].effectstring"NoSchedule"
tolerations[1].operatorstring"Exists"