通过命令行使用(其他调度器)

通过命令行使用(其他调度器)和通过命令行使用(Volcano)使用流程一致,只有任务YAML有所不同,用户可以准备好相应YAML后参考通过命令行使用(Volcano)章节使用。

操作步骤

  1. 将YAML文件上传至管理节点任意目录,并根据实际情况修改文件内容。

    集群调度并未专门提供使用其他调度器的YAML示例,用户可以获取使用Volcano的YAML示例并做如下修改即可使用。

    以tensorflow_standalone_acjob.yaml为例,在一台Atlas 800T A2 训练服务器节点创建单机训练任务,执行1*8芯片训练任务,修改示例如下。
    apiVersion: mindxdl.gitee.com/v1
    kind: AscendJob
    metadata:
      name: default-test-tensorflow
      labels:
        framework: tensorflow
        ring-controller.atlas: ascend-{xxx}b   
    spec:
      schedulerName: volcano        # 使用其他调度器时,删除该字段
      runPolicy:                    # 使用其他调度器时,删除该字段
        schedulingPolicy:           
          minAvailable: 1
          queue: default
      successPolicy: AllWorkers
      replicaSpecs:
        Chief:
          replicas: 1
          restartPolicy: Never
          template:
            metadata:
              labels:
                ring-controller.atlas: ascend-{xxx}b   
            spec:
              nodeSelector:
                host-arch: huawei-arm
                accelerator-type: module-{xxx}b-8
              containers:
              - name: ascend                    
    ...
                env:
    ...
             # 使用其他调度器暂不支持ASCEND_VISIBLE_DEVICES相关字段,需要删除以下加粗字段
              - name: ASCEND_VISIBLE_DEVICES                       
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.annotations['huawei.com/Ascend910']               
    ...
                resources:
                  limits:
                    huawei.com/Ascend910: 8
                  requests:
                    huawei.com/Ascend910: 8
                volumeMounts:
    ...

  2. 若需要配置CPU、Memory资源,请参见如下示例手动添加“cpu”“memory”参数和对应的参数值,具体数值请根据实际情况配置。

    ...
              resources:  
                requests:
                  huawei.com/Ascend910: 8
                  cpu: 100m            
                  memory: 100Gi      
                limits:
                  huawei.com/Ascend910: 8
                  cpu: 100m
                  memory: 100Gi
    ...

  3. 修改训练脚本、代码的挂载路径。

    从昇腾镜像仓库拉取的基础镜像中不包含训练脚本、代码等文件,训练时通常使用挂载的方式将训练脚本、代码等文件映射到容器内。

              volumeMounts:
              - name: ascend-910-config
                mountPath: /user/serverid/devindex/config
              - name: code
                mountPath: /job/code                     # 容器中训练脚本路径
              - name: data
                mountPath: /job/data                      # 容器中训练数据集路径
              - name: output
                mountPath: /job/output                    # 容器中训练输出路径

  4. 如下所示,YAML中训练命令bash train_start.sh后跟的三个参数依次为容器内训练代码目录、输出目录(其中包括生成日志重定向文件以及TensorFlow框架模型文件)、启动脚本相对代码目录的路径。之后的以“--”开头的参数为训练脚本需要的参数。单机和分布式训练脚本、脚本参数可参考模型脚本来源处的模型说明修改。

    • TensorFlow命令参数
      command:
      - "/bin/bash"
      - "-c"
      - "cd /job/code/scripts;chmod +x train_start.sh;bash train_start.sh /job/code/ /job/output/ tensorflow/resnet_ctl_imagenet_main.py --data_dir=/job/data/imagenet_TF --distribution_strategy=one_device --use_tf_while_loop=true --epochs_between_evals=1 --skip_eval --enable_checkpoint_and_export;"
      ...
    • PyTorch命令参数
      command:
      - "/bin/bash"
      - "-c"
      - "cd /job/code/scripts;chmod +x train_start.sh;bash train_start.sh /job/code/ /job/output/ main.py --data=/job/data/resnet50/imagenet --amp --arch=resnet50 --seed=49 -j=128 --lr=1.6 --world-size=1 --dist-backend='hccl' --multiprocessing-distributed --epochs=90 --batch-size=1024;"
      ...
    • MindSpore命令参数
      command:
      - "/bin/bash"
      - "-c"
      - "cd /job/code/scripts;chmod +x train_start.sh;bash train_start.sh /job/code/ /job/output/ train.py  --config_path=/job/code/config/resnet50_imagenet2012_config.yaml --output_dir=/job/output --run_distribute=True --device_num=8 --data_path=/job/data/imagenet/train"
      ...
    TensorFlow命令参数为例。
    • /job/code/:为步骤3中用户自定义的容器中训练脚本路径。
    • /job/output/:步骤3中用户自定义的容器中训练数据集路径。
    • tensorflow/resnet_ctl_imagenet_main.py:启动训练脚本路径。

  5. YAML为使用NFS场景,需要指定NFS服务器地址、训练数据集路径、脚本路径和训练输出路径,请根据实际修改。如果不使用NFS请根据K8s相关指导自行修改。

    ...
              volumeMounts:
              - name: ascend-910-config
                mountPath: /user/serverid/devindex/config
              - name: code
                mountPath: /job/code                     # 容器中训练脚本路径
              - name: data
                mountPath: /job/data                      # 容器中训练数据集路径
              - name: output
                mountPath: /job/output                    # 容器中训练输出路径
    ...
            volumes:
    ...
            - name: code
              nfs:
                server: 127.0.0.1        # NFS服务器IP地址
                path: "xxxxxx"           # 配置训练脚本路径
            - name: data
              nfs:
                server: 127.0.0.1
                path: "xxxxxx"           # 配置训练集路径
            - name: output
              nfs:
                server: 127.0.0.1
                path: "xxxxxx"           # 设置脚本相关配置模型保存路径
    ...