⚠️ 此功能仍处于实验阶段,请谨慎使用。

启用动态 MIG 功能

HAMi 现支持使用 mig-parted 动态调整 MIG 设备,包括:

  • 动态 MIG 实例管理:用户无需直接在 GPU 节点上操作或使用 nvidia-smi -i 0 -mig 1 等命令管理 MIG 实例,HAMi-device-plugin 会自动处理。

  • 动态 MIG 调整:HAMi 管理的每个 MIG 设备会根据提交的作业需求动态调整其 MIG 模板。

  • 设备 MIG 观察:HAMi 生成的每个 MIG 实例都会显示在调度器监控中,并附带作业信息,清晰展示 MIG 节点状态。

  • 与 HAMi-Core 节点兼容:HAMi 可统一管理 HAMi-core 节点和 MIG 节点的 GPU 池。作业可调度到任一节点,除非通过 nvidia.com/vgpu-mode 注解手动指定。

  • 与 HAMi-Core 统一 API:作业无需额外操作即可兼容动态 MIG 功能。

目录

前提条件

  • NVIDIA Blackwell、Hopper™ 和 Ampere GPU
  • 已安装 Alauda 版本的 Hami

启用动态 MIG 支持

  1. 在 device-plugin 的 configMap 中将模式配置为 mig,用于 MIG 节点
    kubectl edit configmap hami-device-plugin -n kube-system
    apiVersion: v1
    data:
      config.json: |
        {
            "nodeconfig": [
                {
                    "name": "MIG-NODE-A",
                    "operatingmode": "mig",
                    "migstrategy":"mixed",
                    "filterdevices": {
                      "uuid": [],
                      "index": []
                    }
                }
            ]
        }
    kind: ConfigMap
    nodeconfig 数组中的节点名称替换为需要设置为 mig 模式的节点名称。如果有多个节点,增加数组元素数量。
  2. 重启以下 Pod 以使配置生效:
  • hami-scheduler
  • 节点 'MIG-NODE-A' 上的 hami-device-plugin

注意: 上述配置在升级过程中会丢失,未来版本的 Hami 将对此进行改进。

自定义 MIG 配置(可选)

HAMi 当前内置了 MIG 的默认配置。

您可以通过以下步骤自定义 MIG 配置:

kubectl -n kube-system edit configmap hami-scheduler-device
apiVersion: v1
data:
  device-config.yaml: >-
      knownMigGeometries:
      - models: [ "A30" ]
        allowedGeometries:
          -
            - name: 1g.6gb
              memory: 6144
              count: 4
          -
            - name: 2g.12gb
              memory: 12288
              count: 2
          -
            - name: 4g.24gb
              memory: 24576
              count: 1
      - models: [ "A100-SXM4-40GB", "A100-40GB-PCIe", "A100-PCIE-40GB", "A100-SXM4-40GB" ]
        allowedGeometries:
          -
            - name: 1g.5gb
              memory: 5120
              count: 7
          -
            - name: 2g.10gb
              memory: 10240
              count: 3
            - name: 1g.5gb
              memory: 5120
              count: 1
          -
            - name: 3g.20gb
              memory: 20480
              count: 2
          -
            - name: 7g.40gb
              memory: 40960
              count: 1
      - models: [ "A100-SXM4-80GB", "A100-80GB-PCIe", "A100-PCIE-80GB"]
        allowedGeometries:
          -
            - name: 1g.10gb
              memory: 10240
              count: 7
          -
            - name: 2g.20gb
              memory: 20480
              count: 3
            - name: 1g.10gb
              memory: 10240
              count: 1
          -
            - name: 3g.40gb
              memory: 40960
              count: 2
          -
            - name: 7g.79gb
              memory: 80896
              count: 1

然后重启 hami-scheduler 组件。 HAMi 会按照此 configMap 中定义的顺序,识别并使用第一个匹配作业的 MIG 模板。

注意: 上述配置在升级过程中会丢失,未来版本的 Hami 将对此进行改进。

运行 MIG 作业

容器现在可以像使用 hami-core 一样请求 MIG 实例,只需指定 nvidia.com/gpuallocnvidia.com/gpumem 资源类型。

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  annotations:
    nvidia.com/vgpu-mode: "mig" #(可选),若不设置,该 Pod 可被分配到 MIG 实例或 hami-core 实例
spec:
  containers:
    - name: ubuntu-container
      image: ubuntu:18.04
      command: ["bash", "-c", "sleep 86400"]
      resources:
        limits:
          nvidia.com/gpualloc: 1
          nvidia.com/gpumem: 8000

注意:

  • nvidia.com/gpualloc 的数量不能超过实际物理 GPU 数量。例如,单个 MiG 模式 GPU 只能设置为 1。这是 Hami 的限制,未来版本会改进。
  • MIG 节点无需额外操作——所有管理由 hami-device-plugin 中的 mig-parted 自动完成。
  • Ampere 架构之前的 NVIDIA 设备不支持 MIG 模式。
  • 节点上不会显示 MIG 资源(例如:nvidia.com/mig-1g.10gb)。HAMi 对 MIG 和 hami-core 节点使用统一的资源名称。
  • 在进行 MIG 分区时,部署在 MIG 节点上的 DCGM-exporter 组件必须停止,因为 MIG 分区需要重置 GPU。首次创建启用 MIG 的工作负载时,会自动执行 MIG 分区。后续工作负载不会触发额外分区。所有工作负载停止后,再次启动第一个工作负载时会再次触发 MIG 分区。