准备模型脚本

本节中使用的数据集为imagenet2012数据集(注:如使用该数据集需按照数据集提供者的使用规范使用)。TensorFlow框架请参考训练前准备数据集准备部分内容进行数据集预处理。

根据模型框架选择对应示例。

TensorFlow

  1. 下载TensorFlow代码仓中master分支中的“ResNet50_ID0360_for_TensorFlow2.X”作为训练代码。
  2. 管理员用户上传数据集到存储节点。

    1. 进入“/data/atlas_dls/public”目录,将数据集上传到任意位置,如“/data/atlas_dls/public/dataset/resnet50/imagenet_TF”
      root@ubuntu:/data/atlas_dls/public/dataset/resnet50/imagenet_TF# pwd
      /data/atlas_dls/public/dataset/resnet50/imagenet_TF
    2. 执行du -sh命令,查看数据集大小。
      root@ubuntu:/data/atlas_dls/public/dataset/resnet50/imagenet_TF# du -sh
      42G

  3. 在本地解压1中下载的训练代码,将“ModelZoo-TensorFlow-master/TensorFlow2/built-in/cv/image_classification/”下的“ResNet50_ID0360_for_TensorFlow2.X”目录重命名为“ResNet50_for_TensorFlow_2.6_code/”目录。
  4. 进入“MindXDL-deploy”仓库,选择“3.0.0”分支。获取“samples/train”目录中的“train_start.sh”“rank_table.sh”“utils.sh”文件,结合3中的“ResNet50_for_TensorFlow_2.6_code”目录,在host的“/data/atlas_dls/public/code”路径下,构造如下的目录结构。

    /data/atlas_dls/public/code/ResNet50_for_TensorFlow_2.6_code/
    ├──  scripts
    │   ├──  train_start.sh
    │   ├──  utils.sh
    │   ├──  rank_table.sh
    │    ...
    │        ...
    ├──  tensorflow
    │   ├──  resnet_ctl_imagenet_main.py
    │   ├──  resnet_model.py
    │   ├──  resnet_runnable.py
    │    ...
    │        ...
    ├──  benchmark.sh
    ├──  modelzoo_level.txt
     ...
    └──  requirements.txt

  5. 进入“/data/atlas_dls/public/code/ResNet50_for_TensorFlow_2.6_code/tensorflow/”目录,修改”resnet_ctl_imagenet_main.py”文件的对应部分,如下所示。

       ...
       import json
       import npu_device
       import os  # 添加此行
    
       flags.DEFINE_boolean(name='use_tf_function', default=True,
       ...
    
       ...
       checkpoint_manager = tf.train.CheckpointManager(
            runnable.checkpoint,
            directory=flags_obj.model_dir+"/tf-checkpoint/ckpt-"+os.getenv("RANK_ID"), # 修改该行
            max_to_keep=10,
            step_counter=runnable.global_step,
            checkpoint_interval=checkpoint_interval)
       ...

Pytorch

  1. 下载PyTorch代码仓中master分支的“ResNet50_for_PyTorch”作为训练代码。
  2. 自行准备ResNet-50对应的数据集,使用时请遵守对应规范。
  3. 管理员用户上传数据集到存储节点。

    1. 进入“/data/atlas_dls/public”目录,将数据集上传到任意位置,如“/data/atlas_dls/public/dataset/resnet50/imagenet”
      root@ubuntu:/data/atlas_dls/public/dataset/resnet50/imagenet# pwd
      /data/atlas_dls/public/dataset/resnet50/imagenet
    2. 执行du -sh命令,查看数据集大小。
      root@ubuntu:/data/atlas_dls/public/dataset/resnet50/imagenet# du -sh
      11G 

  4. 1中下载的训练代码解压到本地,将解压后的训练代码中“ModelZoo-PyTorch/PyTorch/built-in/cv/classification/ResNet50_for_PyTorch”目录重命名为“ResNet50_for_PyTorch_1.5_code/”目录。
  5. 进入“MindXDL-deploy”仓库,选择“3.0.0”分支。获取“samples/train”目录中的“train_start.sh”“rank_table.sh”“utils.sh”文件,结合4中的“ResNet50_for_PyTorch_1.5_code”目录,在host的“/data/atlas_dls/public/code”路径下,构造如下的目录结构。

    root@ubuntu:/data/atlas_dls/public/code/ResNet50_for_PyTorch_1.5_code/#
    ResNet50_for_PyTorch_1.5_code/
    ├── DistributedResnet50
    ├── infer
    ├── test
    ├── ...
    ├── Dockerfile
    ├── eval.sh
    ├── python2onx.py
    ├── pytorch_resnet50_apex.py
    └── scripts
         ├── train_start.sh
         ├── utils.sh
         └── rank_table.sh

  6. (可选)进入“/data/atlas_dls/public/code/ResNet50_for_PyTorch_1.5_code/scripts/”目录,修改“train_start.sh”文件,如下所示,如已修改则跳过该步骤。

     ...
        if [ "${framework}" == "PyTorch" ]; then
          get_env_for_pytorch_multi_node_job
          ${DLS_PROGRAM_EXECUTOR} ${boot_file_path}${boot_file} ${train_param} --addr=${MASTER_ADDR} --world-size=${WORLD_SIZE} --rank=${RANK} && tee ${log_url}  # 修改此行
          check_return_code
          if [[ $@ =~ need_freeze ]]; then
            ${DLS_PROGRAM_EXECUTOR} ${boot_file_path}${freeze_cmd} --addr=${MASTER_ADDR} --world-size=${WORLD_SIZE} --rank=${RANK} && tee ${log_url}   
            check_return_code
          fi
     ...

MindSpore

  1. 下载MindSpore代码仓中r1.9分支的“resnet”代码作为训练代码。
  2. 自行准备ResNet-50对应的数据集,使用时请遵守对应规范。
  3. 管理员用户上传数据集到存储节点。

    1. 进入“/data/atlas_dls/public”目录,将数据集上传到任意位置,如“/data/atlas_dls/public/dataset/imagenet”
      root@ubuntu:/data/atlas_dls/public/dataset/imagenet# pwd
      /data/atlas_dls/public/dataset/imagenet
    2. 执行du -sh命令,查看数据集大小。
      root@ubuntu:/data/atlas_dls/public/dataset/imagenet# du -sh
      11G

  4. 在本地解压1中下载的训练代码,将“models-r1.9/models-r1.9/official/cv/”下的“resnet”目录重命名为“ResNet50_for_MindSpore_1.9_code”。后续步骤以“ResNet50_for_MindSpore_1.9_code”目录为例。
  5. 进入“MindXDL-deploy”仓库,选择“3.0.0”分支。获取“samples/train”目录中的“train_start.sh”“utils.sh”“rank_table.sh”文件,结合训练代码中“scripts”目录,在host上构造成如下的目录结构。

    root@ubuntu:/data/atlas_dls/public/code/ResNet50_for_MindSpore_1.9_code/scripts/#
    scripts/
    ├── docker_start.sh
    ├── run_standalone_train_gpu.sh
    ├── run_standalone_train.sh
     ...
    ├── rank_table.sh
    ├── utils.sh
    └── train_start.sh