文档
注册

NPU训练任务

本章节目的在于帮助用户快速熟悉如何下发一个使用NPU的任务,基于这些基本流程,用户可以尝试后续章节,如:使用命令行或者通过编程的方式下发NPU任务。最后,还可以融入高级特性。本章基于典型场景中的内容进行说明。

典型场景章节中关于NPU训练任务分为下面两种情况:

使用Volcano作为调度器,NPU训练任务基础流程

  1. 训练任务需要通信集合配置文件(ranktable file,也叫hccl.json文件),创建如下ConfigMap资源等待配置文件生成,斜体并加粗的内容不可修改,示例如下。注意ConfigMap的名字,去掉前缀“rings-config-”后为mindx-dls-test,示例任务名以mindx-dls-test为例。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: rings-config-mindx-dls-test     
      namespace: vcjob                      
      labels:
        ring-controller.atlas: ascend-910
    data:
      hccl.json: |
        {
            "status":"initializing"
        }
  2. 创建vcjob或Deployment类型的任务。
    • vcjob资源示例
      apiVersion: batch.volcano.sh/v1alpha1
      kind: Job
      metadata:
        name: mindx-dls-test
        namespace: vcjob
        labels:
          ring-controller.atlas: ascend-910
      spec:
        minAvailable: 1
        schedulerName: volcano
        maxRetry: 3
        queue: default
        tasks:
        - name: "default-test"
          replicas: 1
          template:
            metadata:
              labels:
                app: tf
                ring-controller.atlas: ascend-910   
            spec:
              containers:
              - image: tf_arm64:b030
                imagePullPolicy: IfNotPresent
                name: tf
                env:
                - name: mindx-dls-test
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: XDL_IP
                  valueFrom:
                    fieldRef:
                      fieldPath: status.hostIP
                command: xxxxxxx
                resources:
                  requests:
                    huawei.com/Ascend910: 8
                  limits:
                    huawei.com/Ascend910: 8
                volumeMounts:
                - name: ascend-910-config
                  mountPath: /user/serverid/devindex/config
              nodeSelector:
                host-arch: huawei-arm
              volumes:
              - name: ascend-910-config
                configMap:
                  name: rings-config-mindx-dls-test
              restartPolicy: OnFailure
      • 资源的metadata.name需要与1中提到的任务名一致,本例为:mindx-dls-test
      • minAvailablereplicas建议保持一致。
      • Job的metadata.labels和spec.tasks中都必须包含标签:ring-controller.atlas: ascend-910
      • 调度器schedulerName必须为:Volcano
      • 申请的资源request和limit中需要指明NPU资源类型,且数量要一致,可通过查看K8s中节点详情确定本节点可以使用的NPU资源类型,如整卡、切分算力后的NPU等。
      • 需要将1生成的ConfigMap以文件形式挂载到容器中。
      • nodeSelector默认只支持Volcano启动时yaml中配置的键值对且必须使用“host-arch”标签,如需增加用户自己的selector,请参考Volcano调度配置
      • 目前只支持一个Pod中有一个容器使用NPU。
      • 挂载驱动相关目录。如果未安装Ascend docker runtime或者安装之后未生效时,需要用户自行挂载驱动相关目录(默认为“/usr/local/Ascend”)。
      • 用户需要增加数据集、模型代码等路径的挂载,以及增加用户需要的其他内容,如环境变量等。
      • 用户需要设置容器的启动命令,对应yaml的command字段,并且需要在任务启动之前自行解析挂载的ConfigMap,为训练任务设置必要的环境变量。
    • Deployment资源示例
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: mindx-dls-test
        labels:
          app: tf
          ring-controller.atlas: ascend-910
        namespace: vcjob
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tf
        template:
          metadata:
            labels:
              app: tf
              ring-controller.atlas: ascend-910
              deploy-name: mindx-dls-test
          spec:
            schedulerName: volcano
            nodeSelector:
              host-arch: huawei-x86
            containers:
              - image: tf_arm64:b030
                imagePullPolicy: IfNotPresent
                name: tf
                env:
                - name: mindx-dls-test
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: XDL_IP
                  valueFrom:
                    fieldRef:
                      fieldPath: status.hostIP
                command: xxx
                resources:
                  requests:
                    huawei.com/Ascend910: 8
                  limits:
                    huawei.com/Ascend910: 8
                volumeMounts:
                - name: ascend-910-config
                  mountPath: /user/serverid/devindex/config
            volumes:
            - name: ascend-910-config
              configMap:
                name: rings-config-mindx-dls-test
      • 资源的metadata.name需要与1中提到的任务名一致,本例为:mindx-dls-test
      • replicas表示节点个数,单机为1,多节点分布式任务为实际节点个数。
      • Deployment的metadata.labels和spec.template中都必须包含标签:ring-controller.atlas: ascend-910。另外spec.template中还必须包含key值“deploy-name”,value值为任务名的标签。
      • 其余请参考•vcjob资源示例中说明的第四点及其以后的内容。

不使用Volcano作为调度器,NPU训练任务基础流程

使用某种资源类型创建训练任务,如Job、Deployment或者其他资源类型。Job、Deployment资源的创建请自行参考K8s的官方示例。
  • 自行保证任务的一致性,特别是分布式场景,避免因为资源不足导致任务部分运行失败,造成资源浪费;避免单节点任务分配的2、4卡不满足亲和性导致任务失败或者性能下降。
  • 需修改request和limit中NPU的资源名字和资源数量。可通过查看K8s中节点的详情确定本节点可以使用的NPU资源类型,如整卡、切分算力后的NPU等。
  • 目前只支持一个Pod中有一个容器使用NPU。
  • 挂载驱动相关目录。如果未安装Ascend docker runtime或者安装之后未生效时,需要用户自行挂载驱动相关目录(默认为“/usr/local/Ascend”)。
  • 用户需要增加数据集、模型代码等路径的挂载,以及增加用户需要的其他内容,如环境变量等。
  • 用户需要设置容器的启动命令,对应yaml的command字段。
  • 需要自行为每个训练任务的Pod生成通信集合配置文件,如果是分布式训练任务需要保证这组任务的每个Pod中该文件内容一致。并且在训练任务执行前解析该文件来为训练任务设置必要的环境变量。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词