← 返回列表

070-容器云高级特性统一设置

高级特性

一、算力卡参数说明

1. 1 昇腾NPU测试

1.1.1 hami 软切测试YAML

ascend-device-plugin:
  ascendContainerToolkit:
    enabled: true
  ascendDevicePlugin:
    enabled: false
  ascendDeviceShare:
    enabled: true
    hard:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: hard
    soft:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: soft
  enabled: true
  global:
    registry: '10.30.15.90:5000/topke-system'
gpu-operator:
  ccManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  cdi:
    enabled: false
  dcgm:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  dcgmExporter:
    enableGpuAccounting: true
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
    serviceMonitor:
      enabled: true
  devicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  driver:
    manager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  enabled: false
  gdrcopy:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gds:
    enabled: false
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gfd:
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  kataManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  migManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  node-feature-discovery:
    image:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
      tag: v0.18.2
  nodeStatusExporter:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  operator:
    initContainer:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
    metrics:
      enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  sandboxDevicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  toolkit:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
  validator:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vfioManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vgpuDeviceManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  vgpuManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system'
hami:
  ascend-device-plugin:
    config:
      create: false
      deviceConfigMapName: hami-scheduler-device
      existingDeviceConfigMapName: hami-scheduler-device
    enabled: true
    hamiVnpuCore:
      enabled: true
    image:
      repository: '10.30.15.90:5000/topke-system/projecthami/ascend-device-plugin'
  devicePlugin:
    enabled: false
    image:
      registry: '10.30.15.90:5000/topke-system/docker.io'
    nodeConfiguration:
      config: |-
        {
                  "nodeconfig": [
                    {
                      "name": "",
                      "operatingmode": "hami-core",
                      "devicememoryscaling": 1,
                      "devicesplitcount": 10,
                      "preconfigureddevicememory": 0,
                      "migstrategy": "none",
                      "filterdevices": {
                        "uuid": [],
                        "index": []
                      },
                      "enablegetpreferredallocation": false
                    }
                  ]
                }
    runtimeClassName: ''
  devices:
    ascend:
      enabled: true
      hamiVnpuCore: true
      runtimeClassName: ascend
    iluvatar:
      enabled: false
  enabled: true
  scheduler:
    extender:
      image:
        registry: '10.30.15.90:5000/topke-system/docker.io'
    kubeScheduler:
      image:
        registry: '10.30.15.90:5000/registry.k8s.io'
        repository: registry.k8s.io/kube-scheduler
    leaderElect: false
    patch:
      imageNew:
        registry: '10.30.15.90:5000/topke-system/docker.io'
hygon-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
ix-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
lws:
  enabled: false
  image:
    manager:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/lws/lws'
  replicaCount: 2
node-feature-discovery:
  enabled: true
  image:
    repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
  worker:
    config:
      core:
        labelSources:
          - custom
volcano:
  basic:
    image_registry: '10.30.15.90:5000/topke-system/docker.io'
  custom:
    colocation_enable: false
    descheduler_enable: false
    scheduler_config_override: |
    actions: enqueue, allocate, preempt, backfill, reclaim
    tiers:
      - plugins:
          - name: predicates
          - name: deviceshare
            arguments:
              deviceshare.AscendHAMiVNPUEnable: true
              deviceshare.SchedulePolicy: binpack
              deviceshare.KnownGeometriesCMNamespace: topke-system
              deviceshare.KnownGeometriesCMName: hami-scheduler-device
          - name: priority
          - name: conformance
          - name: overcommit
            arguments:
              overcommit-factor: 2.0
      - plugins:
          - name: gang
            enablePreemptable: false
            enableJobStarving: false
          - name: drf
            enablePreemptable: false
          - name: proportion
          - name: nodeorder
          - name: binpack
  enabled: true
volcano-vgpu-device-plugin:
  enabled: false
  image:
    repository: >-
      10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  monitor:
    image:
      repository: >-
        10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  nodeConfig:
    configs:
      - devicememoryscaling: 1.5
        devicesplitcount: 10
        filterdevices:
          index: []
          uuid: []
        migstrategy: none
        name: ''
        operatingmode: hami-core
    enabled: true
  nodeSelector:
    volcano-gpu: 'on'

1.1.2 hami 硬切测试YAML

ascend-device-plugin:
  ascendContainerToolkit:
    enabled: true
  ascendDevicePlugin:
    enabled: false
  ascendDeviceShare:
    enabled: true
    hard:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: hard
    soft:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: soft
  enabled: true
  global:
    registry: '10.30.15.90:5000/topke-system'
gpu-operator:
  ccManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  cdi:
    enabled: false
  dcgm:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  dcgmExporter:
    enableGpuAccounting: true
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
    serviceMonitor:
      enabled: true
  devicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  driver:
    manager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  enabled: false
  gdrcopy:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gds:
    enabled: false
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gfd:
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  kataManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  migManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  node-feature-discovery:
    image:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
      tag: v0.18.2
  nodeStatusExporter:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  operator:
    initContainer:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
    metrics:
      enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  sandboxDevicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  toolkit:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
  validator:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vfioManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vgpuDeviceManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  vgpuManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system'
hami:
  ascend-device-plugin:
    config:
      create: false
      deviceConfigMapName: hami-scheduler-device
      existingDeviceConfigMapName: hami-scheduler-device
    enabled: true
    hamiVnpuCore:
      enabled: false
    image:
      repository: '10.30.15.90:5000/topke-system/projecthami/ascend-device-plugin'
  devicePlugin:
    enabled: false
    image:
      registry: '10.30.15.90:5000/topke-system/docker.io'
    nodeConfiguration:
      config: |-
        {
                  "nodeconfig": [
                    {
                      "name": "",
                      "operatingmode": "hami-core",
                      "devicememoryscaling": 1,
                      "devicesplitcount": 10,
                      "preconfigureddevicememory": 0,
                      "migstrategy": "none",
                      "filterdevices": {
                        "uuid": [],
                        "index": []
                      },
                      "enablegetpreferredallocation": false
                    }
                  ]
                }
    runtimeClassName: ''
  devices:
    ascend:
      enabled: true
      hamiVnpuCore: false
      runtimeClassName: ascend
    iluvatar:
      enabled: false
  enabled: true
  scheduler:
    extender:
      image:
        registry: '10.30.15.90:5000/topke-system/docker.io'
    kubeScheduler:
      image:
        registry: '10.30.15.90:5000/registry.k8s.io'
        repository: registry.k8s.io/kube-scheduler
    leaderElect: false
    patch:
      imageNew:
        registry: '10.30.15.90:5000/topke-system/docker.io'
hygon-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
ix-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
lws:
  enabled: false
  image:
    manager:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/lws/lws'
  replicaCount: 2
node-feature-discovery:
  enabled: true
  image:
    repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
  worker:
    config:
      core:
        labelSources:
          - custom
volcano:
  basic:
    image_registry: '10.30.15.90:5000/topke-system/docker.io'
  custom:
    colocation_enable: false
    descheduler_enable: false
    scheduler_config_override: |
    actions: enqueue, allocate, preempt, backfill, reclaim
    tiers:
      - plugins:
          - name: predicates
          - name: deviceshare
            arguments:
              deviceshare.AscendHAMiVNPUEnable: true
              deviceshare.SchedulePolicy: binpack
              deviceshare.KnownGeometriesCMNamespace: topke-system
              deviceshare.KnownGeometriesCMName: hami-scheduler-device
          - name: priority
          - name: conformance
          - name: overcommit
            arguments:
              overcommit-factor: 2.0
      - plugins:
          - name: gang
            enablePreemptable: false
            enableJobStarving: false
          - name: drf
            enablePreemptable: false
          - name: proportion
          - name: nodeorder
          - name: binpack
  enabled: true
volcano-vgpu-device-plugin:
  enabled: false
  image:
    repository: >-
      10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  monitor:
    image:
      repository: >-
        10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  nodeConfig:
    configs:
      - devicememoryscaling: 1.5
        devicesplitcount: 10
        filterdevices:
          index: []
          uuid: []
        migstrategy: none
        name: ''
        operatingmode: hami-core
    enabled: true
  nodeSelector:
    volcano-gpu: 'on'

1.1.3 Volcano 软切测试YAML

ascend-device-plugin:
  ascendContainerToolkit:
    enabled: true
  ascendDevicePlugin:
    enabled: false
  ascendDeviceShare:
    enabled: true
    hard:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: hard
    soft:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: soft
  enabled: true
  global:
    registry: '10.30.15.90:5000/topke-system'
gpu-operator:
  ccManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  cdi:
    enabled: false
  dcgm:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  dcgmExporter:
    enableGpuAccounting: true
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
    serviceMonitor:
      enabled: true
  devicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  driver:
    manager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  enabled: false
  gdrcopy:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gds:
    enabled: false
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gfd:
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  kataManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  migManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  node-feature-discovery:
    image:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
      tag: v0.18.2
  nodeStatusExporter:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  operator:
    initContainer:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
    metrics:
      enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  sandboxDevicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  toolkit:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
  validator:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vfioManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vgpuDeviceManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  vgpuManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system'
hami:
  ascend-device-plugin:
    config:
      create: false
      deviceConfigMapName: hami-scheduler-device
      existingDeviceConfigMapName: hami-scheduler-device
    enabled: true
    hamiVnpuCore:
      enabled: true
    image:
      repository: '10.30.15.90:5000/topke-system/projecthami/ascend-device-plugin'
  devicePlugin:
    enabled: false
    image:
      registry: '10.30.15.90:5000/topke-system/docker.io'
    nodeConfiguration:
      config: |-
        {
                  "nodeconfig": [
                    {
                      "name": "",
                      "operatingmode": "hami-core",
                      "devicememoryscaling": 1,
                      "devicesplitcount": 10,
                      "preconfigureddevicememory": 0,
                      "migstrategy": "none",
                      "filterdevices": {
                        "uuid": [],
                        "index": []
                      },
                      "enablegetpreferredallocation": false
                    }
                  ]
                }
    runtimeClassName: ''
  devices:
    ascend:
      enabled: true
      hamiVnpuCore: true
      runtimeClassName: ascend
    iluvatar:
      enabled: false
  enabled: true
  scheduler:
    extender:
      image:
        registry: '10.30.15.90:5000/topke-system/docker.io'
    kubeScheduler:
      image:
        registry: '10.30.15.90:5000/registry.k8s.io'
        repository: registry.k8s.io/kube-scheduler
    leaderElect: false
    patch:
      imageNew:
        registry: '10.30.15.90:5000/topke-system/docker.io'
hygon-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
ix-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
lws:
  enabled: false
  image:
    manager:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/lws/lws'
  replicaCount: 2
node-feature-discovery:
  enabled: true
  image:
    repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
  worker:
    config:
      core:
        labelSources:
          - custom
volcano:
  basic:
    image_registry: '10.30.15.90:5000/topke-system/docker.io'
  custom:
    colocation_enable: false
    descheduler_enable: false
    scheduler_config_override: |
     actions: enqueue, allocate, preempt, backfill, reclaim
     tiers:
       - plugins:
          - name: predicates
          - name: deviceshare
            arguments:
              deviceshare.AscendHAMiVNPUEnable: true
              deviceshare.SchedulePolicy: binpack
              deviceshare.KnownGeometriesCMNamespace: topke-system
              deviceshare.KnownGeometriesCMName: hami-scheduler-device
          - name: priority
          - name: conformance
          - name: overcommit
            arguments:
              overcommit-factor: 2.0
       - plugins:
          - name: gang
            enablePreemptable: false
            enableJobStarving: false
          - name: drf
            enablePreemptable: false
          - name: proportion
          - name: nodeorder
          - name: binpack
  enabled: true
volcano-vgpu-device-plugin:
  enabled: false
  image:
    repository: >-
      10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  monitor:
    image:
      repository: >-
        10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  nodeConfig:
    configs:
      - devicememoryscaling: 1.5
        devicesplitcount: 10
        filterdevices:
          index: []
          uuid: []
        migstrategy: none
        name: ''
        operatingmode: hami-core
    enabled: true
  nodeSelector:
    volcano-gpu: 'on'

1.1.4 Volcano硬切测试YAML

ascend-device-plugin:
  ascendContainerToolkit:
    enabled: true
  ascendDevicePlugin:
    enabled: false
  ascendDeviceShare:
    enabled: true
    hard:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: hard
    soft:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: soft
  enabled: true
  global:
    registry: '10.30.15.90:5000/topke-system'
gpu-operator:
  ccManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  cdi:
    enabled: false
  dcgm:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  dcgmExporter:
    enableGpuAccounting: true
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
    serviceMonitor:
      enabled: true
  devicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  driver:
    manager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  enabled: false
  gdrcopy:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gds:
    enabled: false
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gfd:
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  kataManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  migManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  node-feature-discovery:
    image:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
      tag: v0.18.2
  nodeStatusExporter:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  operator:
    initContainer:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
    metrics:
      enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  sandboxDevicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  toolkit:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
  validator:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vfioManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vgpuDeviceManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  vgpuManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system'
hami:
  ascend-device-plugin:
    config:
      create: false
      deviceConfigMapName: hami-scheduler-device
      existingDeviceConfigMapName: hami-scheduler-device
    enabled: true
    hamiVnpuCore:
      enabled: false
    image:
      repository: '10.30.15.90:5000/topke-system/projecthami/ascend-device-plugin'
  devicePlugin:
    enabled: false
    image:
      registry: '10.30.15.90:5000/topke-system/docker.io'
    nodeConfiguration:
      config: |-
        {
                  "nodeconfig": [
                    {
                      "name": "",
                      "operatingmode": "hami-core",
                      "devicememoryscaling": 1,
                      "devicesplitcount": 10,
                      "preconfigureddevicememory": 0,
                      "migstrategy": "none",
                      "filterdevices": {
                        "uuid": [],
                        "index": []
                      },
                      "enablegetpreferredallocation": false
                    }
                  ]
                }
    runtimeClassName: ''
  devices:
    ascend:
      enabled: true
      hamiVnpuCore: false
      runtimeClassName: ascend
    iluvatar:
      enabled: false
  enabled: true
  scheduler:
    extender:
      image:
        registry: '10.30.15.90:5000/topke-system/docker.io'
    kubeScheduler:
      image:
        registry: '10.30.15.90:5000/registry.k8s.io'
        repository: registry.k8s.io/kube-scheduler
    leaderElect: false
    patch:
      imageNew:
        registry: '10.30.15.90:5000/topke-system/docker.io'
hygon-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
ix-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
lws:
  enabled: false
  image:
    manager:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/lws/lws'
  replicaCount: 2
node-feature-discovery:
  enabled: true
  image:
    repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
  worker:
    config:
      core:
        labelSources:
          - custom
volcano:
  basic:
    image_registry: '10.30.15.90:5000/topke-system/docker.io'
  custom:
    colocation_enable: false
    descheduler_enable: false
    scheduler_config_override: |
     actions: enqueue, allocate, preempt, backfill, reclaim
     tiers:
       - plugins:
          - name: predicates
          - name: deviceshare
            arguments:
              deviceshare.AscendHAMiVNPUEnable: true
              deviceshare.SchedulePolicy: binpack
              deviceshare.KnownGeometriesCMNamespace: topke-system
              deviceshare.KnownGeometriesCMName: hami-scheduler-device
          - name: priority
          - name: conformance
          - name: overcommit
            arguments:
              overcommit-factor: 2.0
       - plugins:
          - name: gang
            enablePreemptable: false
            enableJobStarving: false
          - name: drf
            enablePreemptable: false
          - name: proportion
          - name: nodeorder
          - name: binpack
  enabled: true
volcano-vgpu-device-plugin:
  enabled: false
  image:
    repository: >-
      10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  monitor:
    image:
      repository: >-
        10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  nodeConfig:
    configs:
      - devicememoryscaling: 1.5
        devicesplitcount: 10
        filterdevices:
          index: []
          uuid: []
        migstrategy: none
        name: ''
        operatingmode: hami-core
    enabled: true
  nodeSelector:
    volcano-gpu: 'on'

1.2 界面参数说明

  • x86 英伟达选择
# 整个交互界面参数说明
1. 打开开关显示下面配置
2. 选中算力卡,意思安装该算力卡
2.1 天数GPU:ix-device-plugin.enabled=true
2.2 海光DCU:hygon-device-plugin.enabled=true
2.3 昇腾NPU:ascend-device-plugin.enabled=true
0803新增:选择虚拟化的时候:ascend-device-plugin.ascendDevicePlugin=false
2.4 NVIDIA:gpu-operator.enabled=true
2.5 如果安装NVIDIA时,node-feature-discovery.enabled=false,其他算力卡都要选择true
3. 分布式打开设置:lws.emabled=true,否则就是false
4. 模式选择
4.1  选择整卡模式无插件选择
4.2 仅选中nvidia 才显示MIG模式
4.3 选中虚拟化模式
4.3.1 选中hami, hami.enabled=true
4.3.1.1 打开 numa亲和:vocano.custom.scheduler_config_override 的第二个plugins 覆盖或者增加  
		- name: numa-aware
          arguments:
          weight: 10
关闭时去掉
4.3.1.2 打开 优先级抢占调度:vocano.custom.scheduler_config_override,tiers所有的.plugins 里面所有的 enablePreemptable 设置为true 
4.3.1.3 打开 公平调度:vocano.custom.scheduler_config_override 修改
          - name: drf
            enablePreemptable: false // 如果4.3.1.2 开启这里要设置为true
4.3.1.4 打开组调度:vocano.custom.scheduler_config_override tiers[0].plugins 里面查找如果没有就增加,关闭就就删除
          - name: 
            enablePreemptable: false // 如果4.3.1.2 开启这里要设置为true
4.3.1.5 选择volcano调度策略 
4.3.1.5.1 选择binpack:
第二plugins 里面增加 - name: binpack 删除 spread
4.3.1.5.2 spread:
第二plugins 里面增加 - name: spread 删除 binpack
4.3.1.6 打开重调度 vocano.custom.descheduler_enable 设置为true
4.3.1.6 打开在离线混部署 vocano.custom.colocation_enable 设置为true
增加labels [{nodename:"10-30-100-155","patch_labels":{"volcano.sh/colocation":"true"}}]
4.3.1.6 打开资源超卖 增加laebs  [{nodename:"10-30-100-155","patch_labels":{"volcano.sh/colocation":"true","volcano.sh/oversubscription":"true"}}]
4.3.1.6 设置出口网络带宽 增加laebs  [{nodename:"10-30-100-155","patch_labels":{"gpu_core_mode":"whole","volcano.sh/colocation":"true","volcano.sh/oversubscription":"true"}},"patch_annotations":{"volcano.sh/network-bandwidth-rate":1000}]
  • arm 昇腾选择
2. 选中算力卡,意思安装该算力卡,选中昇腾
4.3 选中虚拟化模式
4.3.1 选中hami, hami.enabled=true
ascend-device-plugin.ascendDevicePlugin=false // 默认是true
hami.devicePlugin.enabled=false,默认是true
hami.devices.ascend.enabled=true
hami.ascend-device-plugin.enabled=true 默认是false
hami.ascend-device-plugin.hamiVnpuCore.enabled=false(默认硬切分) 控制是否软切分,默认就是硬切分,同英伟达的MIG功能
ascend-device-plugin.ascendDeviceShare.enabled=true
4.3.2如果选择了volcano, 配置改成如下: 
  volcano-scheduler.conf: |
    actions: "enqueue, allocate, backfill"
    tiers:
    - plugins:
      - name: predicates
      - name: deviceshare
        arguments:
          deviceshare.AscendHAMiVNPUEnable: true   # enable ascend vnpu
          deviceshare.SchedulePolicy: binpack  # scheduling policy. binpack / spread
          deviceshare.KnownGeometriesCMNamespace: kube-system
          deviceshare.KnownGeometriesCMName: hami-scheduler-device

标签设置
ascend: "on" # 必传
npu.huawei.sharing=soft # 软切分
npu.huawei.sharing=hard # 硬切分

arm 成功案例

#hami硬切分
ascend-device-plugin:
  ascendContainerToolkit:
    enabled: true
  ascendDevicePlugin:
    enabled: false
  enabled: true
  ascendDeviceShare:
    enabled: true
    hard:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: hard
    soft:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: soft
  global:
    registry: '10.30.15.90:5000/topke-system'
gpu-operator:
  ccManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  cdi:
    enabled: false
  dcgm:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  dcgmExporter:
    enableGpuAccounting: true
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
    serviceMonitor:
      enabled: true
  devicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  driver:
    manager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  enabled: false
  gdrcopy:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gds:
    enabled: false
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gfd:
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  kataManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  migManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  node-feature-discovery:
    image:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
      tag: v0.18.2
  nodeStatusExporter:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  operator:
    initContainer:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
    metrics:
      enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  sandboxDevicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  toolkit:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
  validator:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vfioManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vgpuDeviceManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  vgpuManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system'
hami:
  ascend-device-plugin:
    config:
      create: false
      deviceConfigMapName: hami-scheduler-device
      existingDeviceConfigMapName: hami-scheduler-device
    enabled: true
    hamiVnpuCore:
      enabled: false
    image:
      repository: '10.30.15.90:5000/topke-system/projecthami/ascend-device-plugin'
  devicePlugin:
    enabled: false
    image:
      registry: '10.30.15.90:5000/topke-system/docker.io'
    nodeConfiguration:
      config:
        nodeconfig:
          - name: 10-30-15-89
            operatingmode: hami-core
            devicememoryscaling: 1
            devicesplitcount: 10
            preconfigureddevicememory: 0
            migstrategy: none
            filterdevices:
              uuid: []
              index: []
            enablegetpreferredallocation: false
    runtimeClassName: ''
  devices:
    ascend:
      enabled: true
      hamiVnpuCore: false
      runtimeClassName: ascend
    iluvatar:
      enabled: false
  enabled: true
  scheduler:
    extender:
      image:
        registry: '10.30.15.90:5000/topke-system/docker.io'
    kubeScheduler:
      image:
        registry: '10.30.15.90:5000/registry.k8s.io'
        repository: registry.k8s.io/kube-scheduler
    leaderElect: false
    path:
      imageNew:
        registry: '10.30.15.90:5000/topke-system/docker.io'
hygon-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
ix-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
lws:
  enabled: false
  image:
    manager:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/lws/lws'
  replicaCount: 2
node-feature-discovery:
  enabled: true
  image:
    repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
  worker:
    config:
      core:
        labelSources:
          - custom
volcano:
  basic:
    image_registry: '10.30.15.90:5000/topke-system/docker.io'
  custom:
    colocation_enable: false
    descheduler_enable: false
    scheduler_config_override:
      actions: 'enqueue, allocate, backfill'
      tiers:
        - plugins:
            - name: priority
            - name: gang
              enablePreemptable: false
            - name: conformance
        - plugins:
            - name: overcommit
            - name: drf
              enablePreemptable: false
            - name: predicates
            - name: proportion
            - name: nodeorder
            - name: binpack
  enabled: false
volcano-vgpu-device-plugin:
  enabled: false
  image:
    repository: >-
      10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  monitor:
    image:
      repository: >-
        10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  nodeConfig:
    configs:
      - devicememoryscaling: 1.5
        devicesplitcount: 10
        filterdevices:
          index: []
          uuid: []
        migstrategy: none
        name: ''
        operatingmode: hami-core
    enabled: true
  nodeSelector:
    volcano-gpu: 'on'
----
# hami软切分
ascend-device-plugin:
  ascendContainerToolkit:
    enabled: true
  ascendDevicePlugin:
    enabled: false
  enabled: true
  ascendDeviceShare:
    enabled: true
    hard:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: hard
    soft:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: soft
  global:
    registry: '10.30.15.90:5000/topke-system'
gpu-operator:
  ccManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  cdi:
    enabled: false
  dcgm:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  dcgmExporter:
    enableGpuAccounting: true
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
    serviceMonitor:
      enabled: true
  devicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  driver:
    manager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  enabled: false
  gdrcopy:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gds:
    enabled: false
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gfd:
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  kataManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  migManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  node-feature-discovery:
    image:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
      tag: v0.18.2
  nodeStatusExporter:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  operator:
    initContainer:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
    metrics:
      enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  sandboxDevicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  toolkit:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
  validator:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vfioManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vgpuDeviceManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  vgpuManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system'
hami:
  ascend-device-plugin:
    config:
      create: false
      deviceConfigMapName: hami-scheduler-device
      existingDeviceConfigMapName: hami-scheduler-device
    enabled: true
    hamiVnpuCore:
      enabled: true
    image:
      repository: '10.30.15.90:5000/topke-system/projecthami/ascend-device-plugin'
  devicePlugin:
    enabled: false
    image:
      registry: '10.30.15.90:5000/topke-system/docker.io'
    nodeConfiguration:
      config:
        nodeconfig:
          - name: 10-30-15-89
            operatingmode: hami-core
            devicememoryscaling: 1
            devicesplitcount: 10
            preconfigureddevicememory: 0
            migstrategy: none
            filterdevices:
              uuid: []
              index: []
            enablegetpreferredallocation: false
    runtimeClassName: ''
  devices:
    ascend:
      enabled: true
      hamiVnpuCore: true
      runtimeClassName: ascend
    iluvatar:
      enabled: false
  enabled: true
  scheduler:
    extender:
      image:
        registry: '10.30.15.90:5000/topke-system/docker.io'
    kubeScheduler:
      image:
        registry: '10.30.15.90:5000/registry.k8s.io'
        repository: registry.k8s.io/kube-scheduler
    leaderElect: false
    path:
      imageNew:
        registry: '10.30.15.90:5000/topke-system/docker.io'
hygon-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
ix-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
lws:
  enabled: false
  image:
    manager:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/lws/lws'
  replicaCount: 2
node-feature-discovery:
  enabled: true
  image:
    repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
  worker:
    config:
      core:
        labelSources:
          - custom
volcano:
  basic:
    image_registry: '10.30.15.90:5000/topke-system/docker.io'
  custom:
    colocation_enable: false
    descheduler_enable: false
    scheduler_config_override:
      actions: 'enqueue, allocate, backfill'
      tiers:
        - plugins:
            - name: priority
            - name: gang
              enablePreemptable: false
            - name: conformance
        - plugins:
            - name: overcommit
            - name: drf
              enablePreemptable: false
            - name: predicates
            - name: proportion
            - name: nodeorder
            - name: binpack
  enabled: false
volcano-vgpu-device-plugin:
  enabled: false
  image:
    repository: >-
      10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  monitor:
    image:
      repository: >-
        10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  nodeConfig:
    configs:
      - devicememoryscaling: 1.5
        devicesplitcount: 10
        filterdevices:
          index: []
          uuid: []
        migstrategy: none
        name: ''
        operatingmode: hami-core
    enabled: true
  nodeSelector:
    volcano-gpu: 'on'



---
# volcano 软硬沿用hami
ascend-device-plugin:
  ascendContainerToolkit:
    enabled: true
  ascendDevicePlugin:
    enabled: false
  enabled: true
  ascendDeviceShare:
    enabled: true
    hard:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: hard
    soft:
      enabled: true
      nodeSelector:
        npu.huawei.sharing: soft
  global:
    registry: '10.30.15.90:5000/topke-system'
gpu-operator:
  ccManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  cdi:
    enabled: false
  dcgm:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  dcgmExporter:
    enableGpuAccounting: true
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
    serviceMonitor:
      enabled: true
  devicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  driver:
    manager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  enabled: false
  gdrcopy:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gds:
    enabled: false
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  gfd:
    enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  kataManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  migManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  node-feature-discovery:
    image:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
      tag: v0.18.2
  nodeStatusExporter:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  operator:
    initContainer:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
    metrics:
      enabled: true
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  sandboxDevicePlugin:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  toolkit:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/k8s'
  validator:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vfioManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia'
  vgpuDeviceManager:
    repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
  vgpuManager:
    driverManager:
      repository: '10.30.15.90:5000/topke-system/nvcr.io/nvidia/cloud-native'
    repository: '10.30.15.90:5000/topke-system'
hami:
  ascend-device-plugin:
    config:
      create: false
      deviceConfigMapName: hami-scheduler-device
      existingDeviceConfigMapName: hami-scheduler-device
    enabled: true
    hamiVnpuCore:
      enabled: false
    image:
      repository: '10.30.15.90:5000/topke-system/projecthami/ascend-device-plugin'
  devicePlugin:
    enabled: false
    image:
      registry: '10.30.15.90:5000/topke-system/docker.io'
    nodeConfiguration:
      config:
        nodeconfig:
          - name: 10-30-15-89
            operatingmode: hami-core
            devicememoryscaling: 1
            devicesplitcount: 10
            preconfigureddevicememory: 0
            migstrategy: none
            filterdevices:
              uuid: []
              index: []
            enablegetpreferredallocation: false
    runtimeClassName: ''
  devices:
    ascend:
      enabled: true
      hamiVnpuCore: false
      runtimeClassName: ascend
    iluvatar:
      enabled: false
  enabled: true
  scheduler:
    extender:
      image:
        registry: '10.30.15.90:5000/topke-system/docker.io'
    kubeScheduler:
      image:
        registry: '10.30.15.90:5000/registry.k8s.io'
        repository: registry.k8s.io/kube-scheduler
    leaderElect: false
    path:
      imageNew:
        registry: '10.30.15.90:5000/topke-system/docker.io'
hygon-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
ix-device-plugin:
  enabled: false
  global:
    registry: '10.30.15.90:5000/topke-system'
lws:
  enabled: false
  image:
    manager:
      repository: '10.30.15.90:5000/topke-system/registry.k8s.io/lws/lws'
  replicaCount: 2
node-feature-discovery:
  enabled: true
  image:
    repository: '10.30.15.90:5000/topke-system/registry.k8s.io/nfd/node-feature-discovery'
  worker:
    config:
      core:
        labelSources:
          - custom
volcano:
  basic:
    image_registry: '10.30.15.90:5000/topke-system/docker.io'
  custom:
    colocation_enable: false
    descheduler_enable: false
    scheduler_config_override:
      actions: 'enqueue, allocate, backfill'
      tiers:
        - plugins:
          - name: predicates
          - name: deviceshare
            arguments:
              deviceshare.AscendHAMiVNPUEnable: true
              deviceshare.SchedulePolicy: binpack
              deviceshare.KnownGeometriesCMNamespace: topke-system
              deviceshare.KnownGeometriesCMName: hami-scheduler-device
  enabled: true
volcano-vgpu-device-plugin:
  enabled: false
  image:
    repository: >-
      10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  monitor:
    image:
      repository: >-
        10.30.15.90:5000/topke-system/docker.io/projecthami/volcano-vgpu-device-plugin
  nodeConfig:
    configs:
      - devicememoryscaling: 1.5
        devicesplitcount: 10
        filterdevices:
          index: []
          uuid: []
        migstrategy: none
        name: ''
        operatingmode: hami-core
    enabled: true
  nodeSelector:
    volcano-gpu: 'on'

----

1.3 模式和插件参数说明

#模式和插件选择参数说明

#模式1:选择整卡模式
gpu_core_mode:whole
hami-dcgm:on
--------------------------------------
#模式2: 选择虚拟化模式
必填标签:
gpu_core_mode:hami-core
选填标签:
如果插件选择:hami-gpu
	hami-gpu:on
    gpu:on
    hami-dcgm:on
    volcano-gpu:null
  
如果插件选择:volcano-gpu
   volcano-gpu:on
   gpu:null
   hami-dcgm:null
   hami-gpu:null
----
------hami要修改的配置文件values中----devicePlugin.nodeConfiguration.config 是一个字符串---   
{      // 多个节点需要多个对象组成数组并压缩成字符串
        "nodeconfig": [
          {
            "name": "10-30-100-155",
            "operatingmode": "hami-core",
            "devicememoryscaling": 1.5,
            "devicesplitcount": 10,
            "migstrategy": "none",
            "filterdevices": {
              "uuid": [],
              "index": []
            },
          }
        ]
}
------vocano要修改的配置文件values中----nodeConfig.configs  是一个yaml 对象数组---   
nodeConfig:
  enabled: true
  configs:
    - name: "10-30-100-155"
      operatingmode: "hami-core"
      devicememoryscaling: 1.5
      devicesplitcount: 10
      migstrategy: "none"
      filterdevices:
        uuid: []
        index: []  


----------------------------------------------------------------------------------------------------


#模式3:选择MIG模式
gpu_core_mode:mig
选填标签:
如果插件选择:hami-gpu
	hami-gpu:on
    gpu:on
    hami-dcgm:on
    volcano-gpu:null
  
如果插件选择:volcano-gpu
   volcano-gpu:on
   gpu:null
   hami-dcgm:null
   hami-gpu:null

------hami要修改的配置文件values中----devicePlugin.nodeConfiguration.config 是一个字符串---   
{      // 多个节点需要多个对象组成数组并压缩成字符串
        "nodeconfig": [
          {
            "name": "10-30-100-155",
            "operatingmode": "hami-core",
            "devicememoryscaling": 1.5,
            "devicesplitcount": 10,
            "migstrategy": "none",
            "filterdevices": {
              "uuid": [],
              "index": []
            },
          }
        ]
}
------vocano要修改的配置文件values中----nodeConfig.configs  是一个yaml 对象数组---   
nodeConfig:
  enabled: true
  configs:
    - name: "10-30-100-155"
      operatingmode: "hami-core"
      devicememoryscaling: 1.5
      devicesplitcount: 10
      migstrategy: "none"
      filterdevices:
        uuid: []
        index: []  
---------------
device device-config.yaml 配置 volcano-vgpu-device-plugin/hami 下deviceConfig.nvidia.knownMigGeometries //举例
deviceConfig:
  nvidia:
    knownMigGeometries: // 数据来源于https://10.30.100.155:8443/v1/topke/node/gpu/migInstance
      - models: ["A30"] // gpu_type  唯一值,有就修改,没有就新增,选择一个节点就选择一种类型  有就替换,没有就添加
        allowedGeometries:
            -geometries:
              - name: 1g.6gb // Name
                memory: 6144 // Memory
                count: 4 // InstanceCount


----
选择昇腾
ascend: "on" # 必传
npu.huawei.sharing=soft # 软切分
npu.huawei.sharing=hard # 硬切分

二、volcano高级调度配置

2.1 Hami

Hami(原名 vGPU-Manager,是目前主流的 Kubernetes 异构算力虚拟化/共享开源方案)主要由两个核心组件组成:Hami-Scheduler(调度器)和 Hami-Device-Plugin(设备插件)。

在 Kubernetes 中,它们分工明确:Scheduler 负责在“大脑”层面做决定(把 Pod 调度到哪台显卡最合适的服务器上),而 Device-Plugin 负责在“节点”层面做执行(把显卡切片并真正挂载给容器)。

以下是它们的具体功能和工作原理:

2.1.1. Hami-Scheduler (调度器)

它是扩展 Kubernetes 原生调度器的一个 扩展调度器 (Scheduler Extender) 或 多机调度插件。

🛠️ 核心功能:

  • 全局拓扑感知与智能调度:原生的 K8s 调度器只知道节点上有几张显卡,不知道显卡的显存剩余多少。Hami-Scheduler 能够感知集群中每张 GPU 的剩余显存和算力百分比。
  • 显存与算力切片调度:当你的 Pod 请求 gpu-mem: 3000MiB(3GB 显存)或 gpu-cores: 20%(20% 算力)时,它会扫描集群,精确计算出哪张物理卡的剩余资源满足要求,并将 Pod 指派到该节点。
  • Binpack / Spread 策略:支持填充策略。
    • Binpack(紧凑布局):优先把一只显卡塞满,再去用下一张卡,尽量留出完整的空闲卡给大任务。
    • Spread(分散布局):优先把任务均摊到不同显卡上,保障单个任务的性能。

2.1.2 Hami-Device-Plugin (设备插件)

它是运行在集群中每个 GPU 节点上的 DaemonSet(后台守护进程),负责与节点底层的 NVIDIA 驱动、NVML 库以及容器运行时(如 Containerd/Docker)直接打交道。

** 核心功能:**

  • 资源上报与虚拟化暴露:它负责向 K8s 节点(Kubelet)注册,告诉 K8s:“我这个节点虽然只有 2 张物理显卡,但我可以提供 200 个虚拟的 GPU 核心(或按显存切片后的虚拟资源)”。
  • 容器环境注入(硬件挂载):当 Hami-Scheduler 决定把 Pod 放到某个节点后,该节点上的 Hami-Device-Plugin 会介入,将指定的物理 GPU 设备的特定切片(通过环境变量或底层 OCI 钩子)注入到容器中。
  • 硬隔离与资源限制(核心能力):
    • 显存隔离:确保容器内运行的 AI 模型如果超过了申请的显存(比如申请了 4G 却用了 5G),会直接触发 OOM 或被限制,绝对不会侵占同一张卡上其他容器的显存。
    • 算力限制:通过底层技术限制容器的 QPS 或 CUDA Core 使用率,确保多容器共享单卡时的算力公平性。

2.1.3 两者如何协同工作?(一个 Pod 的诞生流程)

  1. 提交请求:你提交了一个 Pod 申请,声明需要 hami.io/vgpu-mem: 4000(4GB 显存)。
  2. 调度决策(Scheduler):Hami-Scheduler 发现 Node-A 的 GPU-0 还剩 5GB 显存,于是它做出决策,把这个 Pod 绑定到 Node-A,并在 Pod 的 Annotation(注解)里悄悄写下:“这个 Pod 只能用 Node-A 的 GPU-0 物理卡”
  3. 节点落地(Device-Plugin):Pod 到达 Node-A,Node-A 的 Kubelet 调用本地的 Hami-Device-Plugin。
  4. 环境准备(Device-Plugin):Hami-Device-Plugin 读取到刚才的注解,启动容器,通过修改环境变量(如 NVIDIA_VISIBLE_DEVICES)和加载 Hami 自身的 libvgpu.so 劫持库,把物理 GPU-0 严格限制在 4GB 显存后,挂载给容器。
  5. 运行:容器成功启动,安全地在共享显卡上运行。

如果没有 Scheduler,Pod 可能会被盲目分配到显存不足的节点导致不断重启;如果没有 Device-Plugin,物理显卡就无法被切片,容器之间也会因为显存抢占而互相崩溃。

2.2 Volcano

  1. 核心组件一一对应关系
功能角色 纯 Hami 方案 Volcano + vGPU 方案 它们在做什么?
集群大脑 (调度器) Hami-Scheduler Volcano 计算和分配:决定哪张 GPU 卡有足够的剩余显存和算力。
节点手脚 (设备插件) Hami-Device-Plugin volcano-vgpu-device-plugin 切片与挂载:在节点上上报虚拟资源,并真正拦截和限制容器的显存。
  1. 深入底层的两个关键真相

💡 真相一:volcano-vgpu-device-plugin 内部集成了 Hami-core

你可能已经注意到了,volcano-vgpu-device-plugin 这个开源项目的 GitHub 组织就是 Project-HAMi

  • 技术穿透:当你在集群中部署 volcano-vgpu-device-plugin 时,它底层使用的依然是 Hami 研发的 libvgpu.so 动态链接库。
  • 这意味着什么:在单卡显存硬隔离、算力限制等“节点底层控制能力”上,两者的效果是完全相同的。

💡 真相二:为什么会演变出这两个方案?(区别在“调度器”)

两者的主要区别,在于你希望让 谁 来做集群的资源调度:

  • 如果你用 Hami-Scheduler
    • 它只是一个专注于 GPU 虚拟化 的插件。
    • 适用场景:普通的常驻服务、普通的 AI 推理、普通的 Web 应用。它让普通 K8s 调度器具备了切分显卡的能力。
  • 如果你用 Volcano
    • Volcano 是 CNCF 的顶级开源批处理计算系统(Batch System)。它不仅仅会调度 GPU,还天生自带极其强大的大数据/AI 大模型训练调度策略:作业排队(Queue)、组调度(Gang Scheduling/不齐心不投产)、抢占(Preemption) 和 公平共享(Fair-share)。
    • 适用场景:大规模 AI 训练、批量计算、大数据作业。
    • 强强联合:为了让在 Volcano 队列里排队的大模型训练任务也能享受到 GPU 切片、共享显存的好处,Hami 社区和 Volcano 社区联合开发了 volcano-vgpu-device-plugin。 [5, 6, 7]

2.3 我该怎么选?

不需要重复安装。根据你的业务特点:

  1. 选“纯 Hami 方案”(Hami-Scheduler + Hami-Device-Plugin):
    • 如果你们的业务主要是 AI 推理(Inference)、在线 API 服务,Pod 启动了就不会轻易关闭,不需要排队和复杂的批处理调度。
  2. 选“Volcano vGPU 方案”(Volcano + volcano-vgpu-device-plugin):
    • 如果你们的业务包含 AI 训练(Training)、离线计算、多个研发团队高频提交任务需要抢占和排队。这时候用 Volcano 当大脑,配合 Volcano 的 vgpu 插件,体验是最好的。 [4, 5, 6, 7, 8]

测试参数说明

#旧配置
apiVersion: v1
data:
  volcano-scheduler.conf: |
    actions: "enqueue, allocate, backfill"
    tiers:
    - plugins:
      - name: priority
      - name: gang
        enablePreemptable: false
      - name: conformance
    - plugins:
      - name: overcommit
      - name: drf
        enablePreemptable: false
      - name: predicates
      - name: proportion
      - name: nodeorder
      - name: binpack
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: volcano
    meta.helm.sh/release-namespace: topke-system
  creationTimestamp: "2026-06-22T08:41:05Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: volcano-scheduler-configmap
  namespace: topke-system
  resourceVersion: "6480926"
  uid: b3c2d7c6-cdad-4404-8d62-4b0afc67ccc2
---------------------
#新配置
apiVersion: v1
data:
  volcano-scheduler.conf: |
    actions: "enqueue, allocate, backfill"
    tiers:
      - plugins:
          - name: priority
          - name: gang
            enablePreemptable: true
          - name: conformance
      - plugins:
          - name: overcommit
          - name: drf
            enablePreemptable: true
          - name: predicates
          - name: proportion
          - name: nodeorder
          - name: spread
          - name: numa-aware
            arguments:
              weight: 10
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: volcano
    meta.helm.sh/release-namespace: topke-system
    topke.cluster.name: xggg
    topke.cluster.uuid: 131b128d-5e11-43eb-91e4-8183b514a503
    topke.createtime.unix: "1782117665"
    topke.tenant.name: ken
    topke.tenant.uuid: debe920e-5cc5-4e85-bd8b-a17cfc574602
  creationTimestamp: "2026-06-22T08:41:05Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: volcano-scheduler-configmap
  namespace: topke-system
  resourceVersion: "6999765"
  uid: b3c2d7c6-cdad-4404-8d62-4b0afc67ccc2
  
-----------------------------------  
  
apiVersion: v1
data:
  volcano-scheduler.conf: |
    actions: "enqueue, allocate, backfill"
    tiers:
      - plugins:
          - name: priority
          - name: gang
            enablePreemptable: true
          - name: conformance
      - plugins:
          - name: overcommit
          - name: drf
            enablePreemptable: true
          - name: predicates
          - name: proportion
          - name: nodeorder
          - name: numa-aware
            arguments:
              weight: 10
          - name: binpack
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: volcano
    meta.helm.sh/release-namespace: topke-system
    topke.cluster.name: xggg
    topke.cluster.uuid: 131b128d-5e11-43eb-91e4-8183b514a503
    topke.createtime.unix: "1782117665"
    topke.tenant.name: ken
    topke.tenant.uuid: debe920e-5cc5-4e85-bd8b-a17cfc574602
  creationTimestamp: "2026-06-22T08:41:05Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: volcano-scheduler-configmap
  namespace: topke-system
  resourceVersion: "7000997"
  uid: b3c2d7c6-cdad-4404-8d62-4b0afc67ccc2

自动伸缩

  • 镜像列表
cat << EOF > /tmp/autoscapimage.txt 
registry.k8s.io/autoscaling/vpa-admission-controller:1.7.0
registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
registry.k8s.io/autoscaling/vpa-recommender:1.7.0
registry.k8s.io/autoscaling/vpa-updater:1.7.0
registry.aliyuncs.com/acs/kubernetes-cronhpa-controller:v1.4.3-2f290b2-aliyun
registry.k8s.io/metrics-server/metrics-server:v0.8.1
EOF

while read -r IMAGE; do
   	MY_IMAGE=$(echo "$IMAGE" | sed 's|^registry\.k8s\.io/|k8s\.flyingtang\.com/|')
   	FILE_NAME="${IMAGE##*/}"
	FILE_NAME="${FILE_NAME/:/_}.tar"
   	nerdctl pull $MY_IMAGE
   	nerdctl tag $MY_IMAGE "10.30.13.175:5000/topke-system/$IMAGE"
   	nerdctl save "10.30.13.175:5000/topke-system/$IMAGE" | gzip > $FILE_NAME
done < /tmp/autoscapimage.txt

Roce-Link

cat << EOF > /tmp/autoscapimage.txt 
ghcr.io/k8snetworkplumbingwg/sriov-network-operator:v1.6.0
ghcr.io/k8snetworkplumbingwg/sriov-network-operator-config-daemon:v1.6.0
ghcr.io/k8snetworkplumbingwg/sriov-cni:v2.10.0
ghcr.io/k8snetworkplumbingwg/ib-sriov-cni:v1.3.0
ghcr.io/k8snetworkplumbingwg/ovs-cni-plugin:v0.39.0
ghcr.io/k8snetworkplumbingwg/rdma-cni:v1.6.0
ghcr.io/k8snetworkplumbingwg/sriov-network-device-plugin:v3.11.0
ghcr.io/k8snetworkplumbingwg/network-resources-injector
ghcr.io/k8snetworkplumbingwg/sriov-network-operator-webhook
ghcr.io/k8snetworkplumbingwg/sriov-network-metrics-exporter
registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.15.0
ghcr.io/k8snetworkplumbingwg/multus-cni:snapshot 
ghcr.io/k8snetworkplumbingwg/whereabouts:v0.9.3
EOF

while read -r IMAGE; do
   	MY_IMAGE=$(echo "$IMAGE" | sed 's|^ghcr\.io/|ghcr\.flyingtang\.com/|')
   	FILE_NAME="${IMAGE##*/}"
	FILE_NAME="${FILE_NAME/:/_}.tar"
   	nerdctl pull $MY_IMAGE
   	nerdctl tag $MY_IMAGE "10.30.13.175:5000/topke-system/$IMAGE"
   	nerdctl push "10.30.13.175:5000/topke-system/$IMAGE"
   	nerdctl save "10.30.13.175:5000/topke-system/$IMAGE" | gzip > $FILE_NAME
done < /tmp/autoscapimage.txt

while read -r IMAGE; do
   	MY_IMAGE=$(echo "$IMAGE" | sed 's|^registry\.k8s\.io/|k8s\.flyingtang\.com/|')
   	FILE_NAME="${IMAGE##*/}"
	FILE_NAME="${FILE_NAME/:/_}.tar"
   	nerdctl pull $MY_IMAGE
   	nerdctl tag $MY_IMAGE "10.30.13.175:5000/topke-system/$IMAGE"
   	nerdctl push "10.30.13.175:5000/topke-system/$IMAGE"
   	nerdctl save "10.30.13.175:5000/topke-system/$IMAGE" | gzip > $FILE_NAME
done < /tmp/autoscapimage.txt

volcano-vgpu-device-plugin

docker.io/projecthami/volcano-vgpu-device-plugin:v1.12.0

Hami

docker.io/liangjw/kube-webhook-certgen:v1.1.1
docker.io/projecthami/hami:v2.9.0

三、测试

3.1 整卡测试

image.png

四、测试

4.1 x86环境测试

4.1.1 测试脚本

cat << EOF > test_all_gpu.yaml
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
  - name: ubuntu-container
    image: ubuntu:18.04
    command: ["bash", "-c", "sleep 86400"]
    resources:
      limits:
        nvidia.com/gpu: 1
      requests:
        nvidia.com/gpu: 1
EOF

cat << EOF > testhami.yaml
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  #  runtimeClassName: nvidia-legacy   # 不要用 nvidia
  containers:
  - name: ubuntu-container
    image: ubuntu:18.04
    command: ["bash", "-c", "sleep 86400"]
    resources:
      limits:
        nvidia.com/gpu: 1
        nvidia.com/gpumem: 1024
      requests:
        nvidia.com/gpu: 1
        nvidia.com/gpumem: 1024
---
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod1
spec:
  #  runtimeClassName: nvidia-legacy   # 不要用 nvidia
  containers:
  - name: ubuntu-container
    image: ubuntu:18.04
    command: ["bash", "-c", "sleep 86400"]
    resources:
      limits:
        nvidia.com/gpu: 1
        nvidia.com/gpumem: 1025
      requests:
        nvidia.com/gpu: 1
        nvidia.com/gpumem: 1025

EOF
cat << EOF > testvocalno1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:


  schedulerName: volcano
  containers:
  - name: ubuntu-container
    image: ubuntu:18.04
    command: ["bash", "-c", "sleep 86400"]
    resources:
      limits:
        volcano.sh/vgpu-number: 1
        volcano.sh/vgpu-memory: 2024
      requests:
        volcano.sh/vgpu-number: 1
        volcano.sh/vgpu-memory: 2024
EOF

4.1.2 注意事项

  • hami和vocalo vGPU切换后会数据残留,创建的资源也会带pending, 报错:0/2 nodes are available: 2 Insufficient volcano.sh/vgpu-cores
  • 为啥测试pod的scheduler不会自动注入?
    [root@10-30-15-55 compute_test]# kubectl get mutatingwebhookconfiguration | grep -iE 'volcano|hami|scheduler|gpu'
    volcano-admission-service-jobs-mutate     1          128m
    volcano-admission-service-queues-mutate   1          128m
    [root@10-30-15-55 compute_test]# kubectl get pods -A | grep -i volcano-scheduler
    topke-system        compute-card-volcano-scheduler-f64657657-8z9kr                   1/1     Running     0                 128m
    
    [root@10-30-15-55 compute_test]# kubectl get mutatingwebhookconfiguration | grep -iE 'volcano|hami|scheduler|gpu'
    compute-card-hami-webhook                 1          44s
    volcano-admission-service-jobs-mutate     1          135m
    volcano-admission-service-queues-mutate   1          135m
    

4.2 ARM环境测试

source init.sh && make &&  rm -rf /usr/local/bin/manager && cp bin/manager /usr/local/bin/manager &&   nerdctl -n system restart manager && sleep 5 &&  nerdctl -n system exec -it manager  -- tail -f /var/log/thci/manager.log

4.2.1 Hami测试脚本

Hami Ascend 官方文档

cat << EOF > hami_test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  # 不要加 huawei.com/vnpu-mode: hami-core
spec:
  runtimeClassName: ascend
  schedulerName: hami-scheduler
  containers:
    - name: ubuntu-container
      image: 10.30.15.90:5000/aarch64/mindie:2.3.1
      command: ["bash", "-c", "sleep 86400"]
      resources:
        limits:
          huawei.com/Ascend310P: "1"
          huawei.com/Ascend310P-memory: "4096"   # 会按 vir01/02/04 对齐
EOF

cat << EOF > hami_soft.yaml
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  annotations:
    huawei.com/vnpu-mode: "hami-core"

spec:
  runtimeClassName: ascend
  schedulerName: hami-scheduler
  containers:
    - name: ubuntu-container
      image: 10.30.15.90:5000/aarch64/mindie:2.3.1
      command: ["bash", "-c", "sleep 86400"]
      resources:
        limits:
          huawei.com/Ascend310P: "1"
          huawei.com/Ascend310P-memory: "4096"   # 会按 vir01/02/04 对齐
EOF

cat << EOF > volcano_test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  # 不要加 huawei.com/vnpu-mode: hami-core
spec:
  runtimeClassName: ascend
  schedulerName: volcano # 这里不一样
  containers:
    - name: ubuntu-container
      image: 10.30.15.90:5000/aarch64/mindie:2.3.1
      command: ["bash", "-c", "sleep 86400"]
      resources:
        limits:
          huawei.com/Ascend310P: "1"
          huawei.com/Ascend310P-memory: "4096"   # 会按 vir01/02/04 对齐

EOF

示例输出:

#硬切分
[root@gpu-pod HwHiAiUser]# npu-smi info
+--------------------------------------------------------------------------------------------------------+
| npu-smi 26.0.rc1                                 Version: 26.0.rc1                                     |
+-------------------------------+-----------------+------------------------------------------------------+
| NPU     Name                  | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
| Chip    Device                | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
+===============================+=================+======================================================+
| 32800   310Pvir02             | OK              | NA           49                0     / 0             |
| 0       0                     | 0000:82:00.0    | 0            366  / 10923                            |
+===============================+=================+======================================================+
+-------------------------------+-----------------+------------------------------------------------------+
| NPU     Chip                  | Process id      | Process name             | Process memory(MB)        |
+===============================+=================+======================================================+
| No running processes found in NPU 32800                                                                |
+===============================+=================+======================================================+


#软切分
[root@gpu-pod HwHiAiUser]# npu-smi info
+--------------------------------------------------------------------------------------------------------+
| npu-smi 26.0.rc1                                 Version: 26.0.rc1                                     |
+-------------------------------+-----------------+------------------------------------------------------+
| NPU     Name                  | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
| Chip    Device                | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
+===============================+=================+======================================================+
| 32800   310P3                 | OK              | NA           49                0     / 0             |
| 0       0                     | 0000:82:00.0    | 0            1530 / 43693                            |
+===============================+=================+======================================================+
+-------------------------------+-----------------+------------------------------------------------------+
| NPU     Chip                  | Process id      | Process name             | Process memory(MB)        |
+===============================+=================+======================================================+
| No running processes found in NPU 32800                                                                |
+===============================+=================+======================================================+

4.2.2 Hami注意事项

  • 昇腾应该不用掉这个接口 查询instance接口

  • huawei.com/Ascend310P-memory 不写入Capacity/Allocatable 属于正常现象

  • 硬切分:

    • [root@gpu-pod HwHiAiUser]# npu-smi info
    • DrvMngGetConsoleLogLevel failed. (ret=4) dcmi module initialize failed. ret is -8005重启kubelet 然后重建解决
  • 软切分:

    • 软切分会报错:[root@10-30-15-89 hami]# kubectl logs -f gpu-pod bash: symbol lookup error: /hami-vnpu-core/libvnpu.so: undefined symbol: rtStreamGetCaptureInfo (升级环境下解决,原因是容器的cann和驱动不一致)

    • hami-ascend-device-plugin.hamiVnpuCore.enabled 设置为true

    • 软切分支持多卡

      [root@172-16-14-122 ~]# cat test.yaml
      apiVersion: v1
      kind: Pod
      metadata:
        name: gpu-pod
        annotations:
          huawei.com/vnpu-mode: "hami-core"
      spec:
        runtimeClassName: ascend
        schedulerName: hami-scheduler
        containers:
          - name: ubuntu-container
            image: 172.16.14.123:5000/aarch64/vllm-ascend:0.23.0.0001.910b--huawei-npu-300I
            command: ["bash", "-c", "sleep 86400"]
            resources:
              limits:
                huawei.com/Ascend910B4: "2"
                huawei.com/Ascend910B4-memory: "4096"   # 会按 vir01/02/04 对齐
      

      image.png

    • 启用 device-share 模式,运行以下命令:

    npu-smi set -t device-share -i <id> -d <value>
    
    参数 说明
    id 设备 ID,通过运行npu-smi info -l 命令获取的 NPU ID 即为设备 ID。
    value 容器启用状态:0(禁用,默认值)或 1(启用)。
  • 软硬只能选择一种

4.2.3 Volcano脚本测试

Volcano官方文档 或者 hami 中对volcano 的文档

插件 作用阶段 调度对象 核心作用 详细说明 示例 适用场景
predicates allocate Node / Pod 基础资源 节点过滤 类似 Kubernetes Scheduler 的 Filter 阶段,根据 Pod 的资源需求、节点标签、亲和性、污点容忍等条件过滤不可用节点。它决定“哪些节点可以运行”,不负责最终选择。 Pod 请求nvidia.com/gpu=1,节点 A 没 GPU,则节点 A 被过滤;Pod 请求 20G 显存,节点只有 10G,也会被过滤。 所有场景必备,GPU/NPU 调度基础插件
deviceshare allocate GPU / NPU / vGPU / vNPU 设备 设备共享与切分调度 HAMI 核心插件,负责感知 GPU/NPU 设备状态,根据显存、算力、设备拓扑等信息,把物理设备切分成多个虚拟资源,并完成具体设备分配。 一张 RTX4090(24G 显存):Pod A 使用 8G,Pod B 使用 12G,deviceshare 负责判断是否能放在同一张 GPU 上。 HAMI GPU/vGPU、Ascend vNPU、AI 推理平台核心插件
deviceshare.SchedulePolicy=binpack allocate GPU/NPU 内部资源 GPU/NPU 资源集中分配 deviceshare 内部策略,不是 Volcano 的 binpack 插件。目标是让多个任务尽量复用同一块 GPU/NPU,提高单卡利用率。 GPU0 已使用 14G,剩余 10G;新任务需要 8G,则继续放 GPU0,而不是启用 GPU1。 LLM 推理、TTS 推理、多租户 GPU 共享
priority enqueue / allocate Pod 任务优先级排序 根据 Kubernetes PriorityClass 决定任务进入调度队列的顺序。高优任务可以优先获得资源。 在线推理服务 priority=100,离线训练任务 priority=10;资源不足时先调度推理服务。 线上服务、混合业务集群
gang enqueue 一组 Pod 批量调度 / 集合调度 要求一组 Pod 同时满足资源条件后才能启动,避免部分启动导致资源浪费。特别适合分布式训练。 8 卡训练任务需要 8 个 worker,如果只有 4 张 GPU 空闲,则全部等待;当 8 张 GPU 满足时一起启动。 AI 训练、MPI、Ray、分布式任务
conformance enqueue Pod 配置 Volcano 配置合法性检查 检查 Pod 是否符合 Volcano 调度要求,例如 schedulerName、queue 等配置是否正确。 Pod 没指定 Volcano scheduler 或 queue 配置错误,可以提前发现。 集群治理、生产环境规范检查
overcommit allocate CPU / Memory 等资源 资源超卖 允许资源申请量超过物理资源,提高资源利用率。类似云平台 CPU 超卖机制。 节点 CPU=64 核,允许多个低负载服务累计申请 80 核。 云平台、资源利用率优先场景
drf allocate 多用户 / 多队列资源 多租户公平调度 Dominant Resource Fairness,根据用户占用的主导资源进行公平分配,避免某个租户长期占用大量资源。 用户 A 占大量 GPU,用户 B 仍能获得调度机会,而不是一直等待。 GPU 云平台、多租户 AI 平台
proportion allocate Volcano Queue 队列资源比例控制 按 Queue 配置比例分配资源,限制不同团队或业务线资源占比。 AI 训练队列 70%,开发测试队列 30%;测试任务不会无限占用 GPU。 企业内部 AI 平台、多团队共享集群
nodeorder allocate Node 节点评分和选择 对 predicates 过滤后的候选节点进行打分,选择最合适节点。通常结合资源利用策略使用。 两个节点都满足 GPU 条件,但 node1 剩余资源更多,评分更高,优先选择 node1。 GPU 集群节点选择优化
binpack allocate Node 资源 节点资源集中调度 Volcano 通用 binpack 插件,关注 CPU、Memory、GPU 等节点资源,尽量把 Pod 集中到少量节点。和 deviceshare 的 binpack 不同。 node1 CPU 使用 50/64,node2 使用 10/64,新 Pod 优先放 node1,让 node2 保持空闲。 节省节点、提高整体利用率
spread(策略) allocate Node / Device 资源分散调度 与 binpack 相反,让任务分布到不同节点或设备,降低单点压力。 两张 GPU:每张使用 40%,而不是一张 80%。 高可靠服务、避免 GPU 热点
  • 两个 binpack 的区别(重点)
项目 deviceshare.SchedulePolicy=binpack Volcanobinpack插件
所属模块 HAMI deviceshare Volcano scheduler plugin
调度层级 GPU/NPU 设备内部 Kubernetes Node 层面
关注资源 显存、算力、GPU slice、NPU slice CPU、Memory、GPU 数量、Node 资源
目的 提高单卡利用率 提高节点利用率
示例 一个 RTX4090 分给多个 Pod 多个 Pod 尽量放到同一台机器

4.2.4 Volcano注意事项

kind: ConfigMap
apiVersion: v1
metadata:
  name: volcano-scheduler-configmap
  namespace: volcano-system
data:
  volcano-scheduler.conf: |
    actions: "enqueue, allocate, backfill"
    tiers:
    - plugins:
      - name: predicates
      - name: deviceshare
        arguments:
          deviceshare.AscendHAMiVNPUEnable: true   # enable ascend vnpu
          deviceshare.SchedulePolicy: binpack  # scheduling policy. binpack / spread
          deviceshare.KnownGeometriesCMNamespace: kube-system
          deviceshare.KnownGeometriesCMName: hami-scheduler-device