启用 Mthreads GPU 共享
简介
本组件支持复用摩尔线程 GPU 设备,并为此提供以下几种与 vGPU 类似的复用功能,包括:
GPU 共享: 每个任务可以只占用一部分显卡,多个任务可以共享一张显卡
可限制分配的显存大小: 你现在可以用显存单位数(例如 32 个单位,即 16 GiB)来分配 GPU,本组件会确保任务使用的显存不会超过分配数值
可限制分配的算力核组比例: 你现在可以用算力核组数量(例如 8 个)来分配 GPU,本组件会确保任务使用的算力不会超过分配数值
注意事项
-
暂时不支持多卡切片,多卡任务只能分配整卡
-
一个 pod 只能使用一个 GPU 生成的切片,即使该 pod 中有多个容器
-
支持独占模式,只指定
mthreads.com/vgpu即为独占申请 -
本特性目前已在 MTT S4000 和 MTT S5000 设备上测试通过。MTT S5000 集群在安装 HAMi 时需将
devices.mthreads.memoryPerCard设置为[160],参见下文开启 GPU 复用。
卡片规格
两种卡型号每卡均提供 16 个算力核组。显存以 512 MiB 为单位申请,有效取值取决于卡的容量:
| 卡型号 | 显存 | sgpu-memory 总单位数 | 有效 sgpu-memory 取值 |
|---|---|---|---|
| MTT S4000 | 48 GiB | 96 | 2、4、8、16、32、64、96 |
| MTT S5000 | 80 GiB | 160 | 2、4、8、16、32、64、128、160 |
取值不在有效列表内的请求会被准入 webhook 拒绝。每卡容量由集群级的 devices.mthreads.memoryPerCard 参数控制,它是一个按卡型号一项一值的列表。混合 S4000/S5000 的集群可填写 [96, 160],因此无需划分独立节点池。每卡超过 96 的取值还需要包含 memoryPerCard 特性的 HAMi 版本,见在 HAMi 中使用摩尔线程 MTT S5000。
节点需求
- MT CloudNative Toolkits > 1.9.0
- 驱动版本 >= 1.2.0
- MTT S5000 使用 sGPU 时:MT Container Toolkit >= 2.1.0 且 MTML >= 2.1.0,并通过摩尔线程 GPU Operator 启用 sGPU。完整安装步骤参见在 Mthreads MTT S5000 上使用 HAMi。
开启 GPU 复用
- 部署'gpu-manager',摩尔线程的 GPU 共享需要配合厂家提供的'MT-CloudNative Toolkit'一起使用,联系设备提供方获取
(可选),部署完之后,卸载掉 mt-mutating-webhook 与 mt-scheduler 组件,因为这部分功能将由 HAMi 调度器提供。在运行摩尔线程 GPU Operator 的 MTT S5000 集群上,请按 MTT S5000 安装指南的说明通过 ClusterPolicy 关闭厂商组件。
- 在安装 HAMi 时配置参数
devices.mthreads.enabled=true。默认安装方式(MTT S4000 或其他 96 单位的卡)直接执行:
helm install hami hami-charts/hami --set scheduler.kubeScheduler.image.tag={your kubernetes version} --set devices.mthreads.enabled=true -n kube-system
- 在 MTT S5000 集群上,改用 values 文件设置每卡显存容量(需同时带上 kubeScheduler tag 与每卡显存容量,替代上面的单行命令,二者选其一):
# 设置与你的 Kubernetes 版本对应的调度器镜像 tag。
scheduler:
kubeScheduler:
image:
tag: { your kubernetes version }
devices:
mthreads:
enabled: true
# MTT S5000 每卡 80 GiB 显存 = 160 x 512 MiB 单位。
# chart 默认值(96)对应 MTT S4000,S5000 必须覆盖该值。
memoryPerCard:
- 160
helm install hami hami-charts/hami -n kube-system -f values.yaml
- 如果 HAMi 已安装,请用
helm upgrade应用同样的 values,而不是重新安装:
helm upgrade hami hami-charts/hami -n kube-system -f values.yaml
chart 不会自动滚动更新调度器,升级后需要手动重启使其加载新的设备配置:
kubectl -n kube-system rollout restart deploy/hami-scheduler
运行 GPU 任务
通过指定mthreads.com/vgpu, mthreads.com/sgpu-memory and mthreads.com/sgpu-core这 3 个参数,可以确定容器申请的切片个数,对应的显存和算力核组
apiVersion: v1
kind: Pod
metadata:
name: gpushare-pod-default
spec:
restartPolicy: OnFailure
containers:
- image: core.harbor.zlidc.mthreads.com:30003/mt-ai/lm-qy2:v17-mpc
imagePullPolicy: IfNotPresent
name: gpushare-pod-1
command: ["sleep"]
args: ["100000"]
resources:
limits:
mthreads.com/vgpu: 1
mthreads.com/sgpu-memory: 32
mthreads.com/sgpu-core: 8
每个 mthreads.com/sgpu-memory 单位代表 512 MiB 显存。各卡型号的有效取值见卡片规格。
查看更多的用例.