使用故障重调度需要在下发vcjob的yaml中增加“fault-scheduling”,"terminationGracePeriodSeconds","maxRetry"参数,具体说明如下所示:
序号 |
值 |
含义 |
---|---|---|
1 |
grace |
任务使用重调度,并在过程中先优雅删除原pod,15分钟(配置可参考Volcano配置)后若还未成功,使用强制删除原pod。若使用临终遗言方案,则需要使用该项配置。 |
2 |
force |
任务使用重调度,并在过程中强制删除原pod。 |
3 |
off |
该任务不使用故障重调度特性。k8s的maxRetry仍然生效。 |
4 |
无(无fault-scheduling) |
同off。 |
5 |
其他值 |
同off。 |
序号 |
值 |
含义 |
---|---|---|
1 |
0< terminationGracePeriodSeconds <"grace-over-time”参数的值 |
容器收到停止信号到被K8s强制停止经历的时间;该时间需要大于0且小于volcano-*.yaml文件中“grace-over-time”参数的值,同时还需要保证能够保存完ckpt文件,请根据实际情况修改。具体说明请参考K8s官网容器生命周期回调。 |
此外还要使用"maxRetry"机制,以yaml模板为例,具体如下:
apiVersion: v1 kind: ConfigMap metadata: name: rings-config-mindx-dls-test namespace: vcjob labels: ring-controller.atlas: ascend-910 data: hccl.json: | { "status":"initializing" } --- apiVersion: v1 kind: ConfigMap metadata: name: fault-config-mindx-dls-test namespace: vcjob data: fault-npus: | { "status":"initializing" } --- apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: mindx-dls-test #注意和 ConfigMap的name的对应关系 namespace: vcjob #根据实际需要选择合适的namespace(ConfigMap, Job需要保持一致) labels: ring-controller.atlas: ascend-910 #hccl_controller 根据该标签来区分配置Ascend910和非Ascend910的场景 fault-scheduling: "force" spec: minAvailable: 1 schedulerName: volcano #使用volcano调度器调度任务 policies: - event: PodEvicted action: RestartJob plugins: ssh: [] env: [] svc: [] maxRetry: 3 ... spec: containers: - image: mindspore:b035 # 训练框架镜像,可修改 imagePullPolicy: IfNotPresent name: mindspore ... command: - "/bin/bash" - "-c" - "cd /job/code/resnet/scripts; chmod +x train_start.sh; ./train_start.sh;" # 训练脚本执行命令。确保Docker上存在相关命令和路径。 #args: [ "while true; do sleep 30000; done;" ] # 注释掉上一行并启用该行。用户可以在容器中手动运行训练脚本方便调试。 # 命令为'kubectl exec -it -n {namespace} {podname} bash' lifecycle: #使用临终遗言功能需要添加加粗代码 preStop: exec: command: ["/bin/bash", "-c", "cd /job/code/resnet/scripts; bash pre_stop.sh"] resources: requests: huawei.com/Ascend910: 1 # 请求的NPU数量,最大值为8。用户可在下方添加行配置内存、CPU等资源 limits: huawei.com/Ascend910: 1 # 数值与请求数量保持一致 ...