配置组件

如果用户要使用断点续训特性,需要在对组件进行Ascend Device Plugin配置NodeD配置Volcano配置等配置才能正常使用本特性。

Ascend Device Plugin配置

在重调度策略开启的情况下,Ascend Device Plugin的异常也会触发故障重调度。

以容器化方式启动

  1. 修改Ascend Device Plugin组件的启动yaml,修改如下所示加粗部分。

    ...
          containers:
          - image: ascend-k8sdeviceplugin:v5.0.RC1
            name: device-plugin-01
            resources:
              requests:
                memory: 500Mi
                cpu: 500m
              limits:
                memory: 500Mi
                cpu: 500m
            command: [ "/bin/bash", "-c", "--"]
            args: [ "device-plugin  
                     -useAscendDocker=true 
                     -volcanoType=true                    # 重调度场景下必须使用volcano。
                     -autoStowing=true                    # 是否开启自动纳管开关,默认为true;设置为false代表关闭自动纳管,当芯片健康状态由unhealth变为health后,不会自动加入到可调度资源池中;关闭自动纳管,当芯片参数面网络故障恢复后,不会自动加入到可调度资源池中。该特性仅适用于昇腾910芯片。
                     -listWatchPeriod=5                   # 健康状态检查周期,范围[3,60];默认5秒。
                     -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log 
                     -logLevel=0" ]
            securityContext:
              privileged: true
              readOnlyRootFilesystem: true
    ...

  2. 在K8s管理节点执行以下命令,启动Ascend Device Plugin。

    kubectl apply -f device-plugin-xxx-v{version}.yaml
    如在昇腾910 AI处理器环境下启动该组件,示例如下。
    kubectl apply -f device-plugin-910-v5.0.RC1.yaml

NodeD配置

NodeD组件配置有三条内容,分别是:标签配置、节点使用NodeD监测配置开关、心跳发送间隔配置(可选)。具体操作参考如下示例。

标签配置

NodeD需要安装到所有的计算节点,因此在安装NodeD之前需要给所有计算节点打上标签workerselector=dls-worker-node,命令如下所示。

kubectl label node nodename workerselector=dls-worker-node --overwrite

其中“nodeName”表示K8s集群中节点的名称。

心跳发送间隔配置(可选)

编辑NodeD组件的启动yaml文件,修改NodeD发送心跳的间隔时间(参数为:-heartbeatInterval)。

vi noded-*.yaml

在“args”行增加“-heartbeatInterval”参数,如下所示:

K8s默认40秒未收到节点响应时将该节点置为NotReady,如未修改K8s的该配置,NodeD的“心跳发送间隔”使用默认值“5”即可,无需修改;如修改了K8s的该配置,则需要修改NodeD的“心跳发送间隔”的值,“心跳发送间隔”的值需要小于等于K8s中配置值的六分之一(向下取整)。

...
          env:
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
          imagePullPolicy: Never
          command: [ "/bin/bash", "-c", "--"]
          args: [ "noded -logFile=/var/log/mindx-dl/noded/noded.log -logLevel=0 -heartbeatInterval=5" ]
          securityContext:
            readOnlyRootFilesystem: true
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ "ALL" ]
            runAsUser: 9000
            runAsGroup: 9000
          volumeMounts:
            - name: log-noded
...

节点使用NodeD监测配置开关

集群调度组件中NodeD组件会定期上报节点状态。通过配置“nodeDEnable=on/off”参数开关来控制是否获取节点的状态信息并用于判断节点故障(获取信息需先安装NodeD),“on”表示开启NodeD对本节点的信息获取,使用获取的信息判断节点是否故障,其他值或无该参数表示仅上报节点信息但不判断节点故障。

在master管理节点上执行命令如下:

kubectl label nodes nodeName nodeDEnable=on --overwrite

其中“nodeName”表示需要使用NodeD上报信息的节点。

Volcano配置

“volcano-*.yaml”中可配置优雅删除原Pod的时间,请根据实际情况合理配置该值。若使用断点续训中的临终遗言功能,会使用该项配置。该配置全局生效,会影响当前环境中的训练任务,建议在安装Volcano的时候配置,在系统运行过程中不建议修改,参数默认值及示例如下。

表1 优雅删除原Pod时间参数说明

名称

默认值

范围

含义

grace-over-time

900,单位:秒

[2, 3600]

表示从触发Pod删除,到Pod被强制删除的这段时间间隔,超过这个时间之后会强制删除原Pod

“volcano-*.yaml”示例。

...
apiVersion: v1
kind: ConfigMap
metadata:
  name: volcano-scheduler-configmap
  namespace: volcano-system
data:
  volcano-scheduler.conf: |
    actions: "enqueue, allocate, backfill"
    tiers:
    - plugins:
      - name: priority
      - name: gang
      - name: conformance
      - name: volcano-npu-v5.0.RC1
    - plugins:
      - name: drf
      - name: predicates
      - name: proportion
      - name: nodeorder
      - name: binpack
    configurations:
     ...
      - name: init-params
        arguments: {"grace-over-time":"900","presetVirtualDevice":"true"}
...