配置 Ascend 切片模式
使用此操作步骤在 HAMi 管理的 Ascend 节点之间切换固定模板硬切片和 hami-core 软切片。整卡工作负载通过仅请求计数资源来选择,可在任一节点模式下运行。
WARNING
在更改目标节点的模式之前,请先停止或迁移这些节点上的部分内存 Ascend 工作负载。硬切片和软切片工作负载不会在模式之间迁移。
了解有效配置
v1.4.0 Alauda 交付版通常会设置 spec.config.create: false,并复用 HAMi 所拥有的 hami-scheduler-device ConfigMap。在这种布局下,仅更改 spec.hamiVnpuCore.enabled 不会更新共享的 ConfigMap,因此不会改变实际生效的节点模式。
请在 HAMiAscendDevicePlugin 资源上使用 spec.nodeConfig 进行显式的按节点设置。operator 会将该字符串渲染到 hami-device-node-config 中,匹配的节点条目会覆盖全局值。
检查当前所有者和生效值:
kubectl get hamiadp -A
kubectl -n <hami-namespace> get hamiadp <instance-name> \
-o jsonpath='{.spec.config.create}{"\n"}{.spec.config.existingDeviceConfigMapName}{"\n"}{.spec.hamiVnpuCore.enabled}{"\n"}{.spec.nodeConfig}{"\n"}'
kubectl -n <hami-namespace> get configmap hami-scheduler-device -o yaml
kubectl get node <node-name> \
-o go-template='hami-vnpu-core={{ index .metadata.annotations "hami-vnpu-core" }}{{ "\n" }}'
仅对部分内存请求解释节点注解:
hami-vnpu-core=false:固定模板硬切片;
hami-vnpu-core=true:hami-core 软切片;
- 整卡:通过仅请求 count 资源来选择,不受此注解影响。
更新自定义资源
编辑现有实例;不要创建第二个 HAMiAscendDevicePlugin 实例:
kubectl -n <hami-namespace> edit hamiadp <instance-name>
将 spec.nodeConfig 设置为多行字符串。编辑列表时,请保留其他节点的条目。
要在某个节点上启用软切片:
spec:
config:
create: false
deviceConfigMapName: hami-scheduler-device
existingDeviceConfigMapName: hami-scheduler-device
nodeConfig: |
nodes:
- name: "<node-name>"
hami-vnpu-core: true
若要改为硬切片,请将节点值设置为 false:
spec:
nodeConfig: |
nodes:
- name: "<node-name>"
hami-vnpu-core: false
请使用 kubectl get nodes 返回的准确 Kubernetes Node 名称。nodeConfig 是 YAML 格式的字符串,因此 nodes 列表必须保持缩进并位于 | 块下。
对于其 nodeConfig 仅包含此节点的实例,等效的完整 patch 命令如下:
# Enable soft slicing on the target node.
kubectl -n <hami-namespace> patch hamiadp <instance-name> \
--type merge \
--patch '{"spec":{"nodeConfig":"nodes:\n - name: \"<node-name>\"\n hami-vnpu-core: true"}}'
# Select hard slicing on the target node.
kubectl -n <hami-namespace> patch hamiadp <instance-name> \
--type merge \
--patch '{"spec":{"nodeConfig":"nodes:\n - name: \"<node-name>\"\n hami-vnpu-core: false"}}'
这些 merge patch 会替换完整的 spec.nodeConfig 字符串。当该字符串已经包含其他节点时,请使用 kubectl edit 并保留每个必需条目,而不是应用单节点 patch。
配置逻辑调度槽位
vDeviceCount 是为每个物理 NPU 报告的逻辑调度槽位数量。它不会将内存平均切分,也不是通用的软切片默认值。
保持其未设置,以使用从已安装设备配置中派生的值:
memoryAllocatable / memory of the smallest hard-slice template
例如,v1.4.0 配置会根据 65536 / 16384 为 Ascend 910B4-1 派生出 4 个槽位。仅当容量规划明确允许那么多并发分配时,才设置不同的整数。下面的值 20 是 operator 选择的并发策略,而不是 Ascend 910B4-1 的默认值:
spec:
nodeConfig: |
nodes:
- name: "<ascend-910b4-1-node-name>"
hami-vnpu-core: true
vDeviceCount: 20
不要将 vDeviceCount 作为字符串加引号。每个工作负载仍受其内存和可选核心请求的限制。
等待更改生效
operator 管理的 ConfigMap 校验和通常会在 spec.nodeConfig 更改后触发 Device Plugin 滚动更新:
kubectl -n <hami-namespace> rollout status \
daemonset/hami-ascend-device-plugin --timeout=5m
kubectl -n <hami-namespace> get configmap hami-device-node-config -o yaml
kubectl get node <node-name> \
-o go-template='hami-vnpu-core={{ index .metadata.annotations "hami-vnpu-core" }}{{ "\n" }}'
如果自定义资源和生成的 ConfigMap 中已经包含预期值,但 DaemonSet 没有滚动更新,请仅重启 operator 管理的 Device Plugin:
kubectl -n <hami-namespace> rollout restart \
daemonset/hami-ascend-device-plugin
kubectl -n <hami-namespace> rollout status \
daemonset/hami-ascend-device-plugin --timeout=5m
不要为了重新加载 hami-device-node-config 而重启 HAMi scheduler 或应用工作负载。不要将生成的 ConfigMap 作为正常更新路径进行编辑;应修改其所属的自定义资源。
使用工作负载进行验证