K8s和共享存储准备

断点续训特性是基于MindCluster集群调度组件的高阶特性,结合昇腾软硬件全栈实现训练故障恢复,使用断点续训特性前需要满足以下前置条件。

K8s集群完成基础性能调优

MindCluster集群调度组件是基于K8s生态的功能组件,因此训练任务调度基于K8s平台时才支持使用断点续训。断点续训支持的K8s版本与MindCluster集群调度组件一致,当前为1.17.x~1.28.x(推荐使用1.19.x及以上版本)。

以下配置为万卡集群的推荐配置,实际配置时,请根据集群的规模进行调整。

表1 配置说明

配置项

说明

推荐配置

参考文件路径

修改API Server

启动参数

--max-request-inflight和--max-mutating-requests-inflight参数表示在给定时间内限制并行处理读写请求的最大数量限制。

若配置过低会出现请求超限错误,若配置过高会出现占用过多内存。

--max-request-inflight=20000
--max-mutating-requests-inflight =2000

/etc/kubernetes/manifests/kube-apiserver.yaml

--watch-cache和--watch-cache-sizes参数表示API Server的缓存量大小。

API Server获取etcd对象时,会优先访问本地cache,当cache中没有需要的信息时再访问etcd,并将etcd数据存入cache。若cache达到上限则覆盖cache,配置合理的cache大小可以提升etcd获取效率。

--watch-cache=true 
--watch-cache-sizes=node#1000,pod#2000,event#200,namespace#100,service#200

/etc/kubernetes/manifests/kube-apiserver.yaml

修改API Server资源配置

API Server配置的CPU资源将影响API Server的处理能力。

API Server request的CPU资源上限调整为35核。

resources:
  requests:
    cpu: 35000m
说明:

API Server整体的CPU占用率不受此参数限制。

/etc/kubernetes/manifests/kube-apiserver.yaml

修改etcd启动参数

--quota-backend-bytes参数为etcd的存储上限,默认为2G。

修改为8G。

--quota-backend-bytes=8589934590

/etc/kubernetes/manifests/etcd.yaml

--auto-compaction-retention:进行自动压缩,降低资源占用。

进行碎片整理,降低资源占用。

--auto-compaction-retention
说明:

--auto-compaction-retention不会实际释放空间,需要用户手动配合使用etcdctl compact和etcd defrag清理空间。

修改etcd资源配置

etcd配置的CPU和内存资源将影响etcd的处理能力。

etcd request的CPU资源上限调整为20核,memory资源上限调整为10G。

resources:
  requests:
    cpu: 20000m
    memory: 10000Mi

/etc/kubernetes/manifests/etcd.yaml

修改Volcano资源配置

Volcano配置的CPU和内存资源将影响Volcano的处理能力。

Volcano request的CPU资源上限调整为20核,memory资源上限调整为8G。

resources:
  requests:
    cpu: 20000m
    memory: 4Gi
参考配置命令:
kubectl edit deployment -n volcano-system  volcano-scheduler

具备共享存储系统

断点续训特性的部分流程依赖读取存储数据,如加载CKPT、拉起训练和编译缓存加载等,存储性能会影响断点续训整体恢复时间。为避免训练恢复时间劣化,建议进行存储性能配置优化,以下提供的推荐配置以万卡规模集群为例。