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

启用动态 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 Build 版本的 Hami

启用动态 MIG 支持

  1. 在每个 MIG 节点的 hami-device-plugin ConfigMap 中将 operatingmode 设置为 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 数组中的节点名称替换为目标节点名称。若要覆盖多个节点,请在数组中添加更多条目。
  2. 重启以下 pods 以使更改生效:
  • hami-scheduler
  • 节点 'MIG-NODE-A' 上的 hami-device-plugin

注意:上述配置在 chart 升级后会丢失;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 模板。

注意:上述配置在 chart 升级后会丢失;Hami 的未来版本将对此进行改进。

运行 MIG 作业

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

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  annotations:
    nvidia.com/vgpu-mode: "mig" #(Optional), if not set, this pod can be assigned to a MIG instance or a hami-core instance
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 分区。