Skip to content

Latest commit

 

History

History
282 lines (210 loc) · 16.3 KB

examples.md

File metadata and controls

282 lines (210 loc) · 16.3 KB

示例参考

Vega提供了算法和任务的使用指导,也针对开发者,提供了算法开发的相关指导,如扩展搜索空间和搜索算法、构建适用于Vega的数据集等。

1. 示例列表

examples目录下如下子目录:

目录 说明
compression 压缩算法使用示例,包括 Quant-EAPrune-EA 两个算法示例
data augmentation 数据增广算法使用示例,包括 PBACycleSR 算法示例
hpo 超参优化算法使用示例, 包括 ASHABOTPEBOHBBOSS、Random、Random Pareto 等算法示例
nas 网络架构搜索相关示例,包括 CARSSP-NASAuto-LaneSR-EAESR-EAAdelaide-EANAGO、BackboneNas、DartsCNN、FIS、GDAS、MFKD、SegmentationEA、SGAS、ModuleNas、DNet-NAS等算法示例
fully train fully train 相关示例,包括训练 EfficientNet B0/B4 模型示例,FMD算子示例等
classification 综合使用 NAS + HPO + FullyTrain 完成一个图像分类任务的示例
features 集群、自定义数据集、模型评估、Quota等示例

2. 运行示例

2.1 运行PyTorch示例

一般一个算法示例包含了是一个配置文件,有一些算法还有一些配套的代码。

进入 examples 目录后,可以执行如下命令运行示例:

vega <algorithm config file>

比如要运行CARS算法示例,命令如下:

vega ./nas/cars/cars.yml

所有的信息都在配置文件中,配置项可分为公共配置项和算法相关配置项,公共配置项可参考配置参考,算法配置需要参考各个算法的参考文档。

在运行示例前,需要下载数据集到缺省的数据配置目录中。在运行示例前,需要创建目录/cache/datasets/,然后将各个数据集下载到该目录,并解压。Vega支持Cifar10、ImageNet、COCO、Div2K、Cityscapes、VOC2012、CULane、Avazu,请用户根据需要访问各个数据集下载网址下载数据集。

另外,对于以下算法,需要加载预训练模型。在运行示例前,需要创建目录/cache/models/,然后从相应的位置下载对应的模型后,放置到该目录:

example Pre-trained Model Default Path Model Source
adelaide_ea mobilenet_v2-b0353104.pth /cache/models/mobilenet_v2-b0353104.pth download
BackboneNas (mindspore) resnet50-19c8e357.pth /cache/models/resnet50-19c8e357.pth download
BackboneNas (tensorflow), classification, prune_ea(tensorflow) resnet_imagenet_v1_fp32_20181001 /cache/models/resnet_imagenet_v1_fp32_20181001/
keep only these files: checkpoint, graph.pbtxt, model.ckpt-225207.data-00000-of-00002, model.ckpt-225207.data-00001-of-00002, model.ckpt-225207.index, model.ckpt-225207.meta
download
dnet_nas 031-_64_12-1111-11211112-2.pth /cache/models/031-_64_12-1111-11211112-2.pth download
prune_ea(pytorch) resnet20.pth /cache/models/resnet20.pth download
prune_ea(mindspore) resnet20.ckpt /cache/models/resnet20.ckpt download
sp_nas fasterrcnn_resnet50_fpn_coco-258fb6c6.pth /cache/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth download

在每个示例的配置文件中,在 general/backend 中有该示例适用的平台说明(PyTorch、TensorFlow、MindSpore)。

比如以下配置说明该示例可以运行在三个平台中:

general:
    backend: pytorch  # pytorch | tensorflow | mindspore

以下配置只能运行在TensorFlow:

general:
    backend: tensorflow

2.2 运行TensorFlow示例

  1. 运行命令(GPU):

    vega <algorithm config file> -b t

    如:

    vega ./nas/backbone_nas/backbone_nas.yml -b t
  2. 运行命令(Ascend 910):

    vega <algorithm config file> -b t -d NPU

    如:

    vega ./nas/backbone_nas/backbone_nas.yml -b t -d NPU

2.3 运行MindSpore示例

运行命令(Ascend 910):

vega <algorithm config file> -b m -d NPU

如:

vega ./nas/backbone_nas/backbone_nas.yml -b m -d NPU

3. 示例输入和输出

3.1 模型压缩示例

  1. Prune-EA

    阶段 选项 内容
    nas 输入 配置文件:compression/prune-ea/prune.yml
    预训练模型:/cache/models/resnet20.pth
    数据集:/cache/datasets/cifar10
    nas 输出 网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    nas 运行时间估算 (random_samples + num_generation * num_individual) * epochs / GPU数 * 1个epoch的训练时间
    fully train 输入 配置文件:compression/prune-ea/prune.yml
    网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    数据集:/cache/datasets/cifar10
    fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  2. Quant-EA

    阶段 选项 内容
    nas 输入 配置文件:compression/quant-ea/quant.yml
    数据集:/cache/datasets/cifar10
    nas 输出 网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    nas 运行时间估算 (random_samples + num_generation * num_individual) * epochs / GPU数 * 1个epoch的训练时间
    fully train 输入 配置文件:compression/quant-ea/quant.yml
    网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    数据集:/cache/datasets/cifar10
    fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间

3.2 网络架构搜索

  1. CARS

    阶段 选项 内容
    nas 输入 配置文件:nas/cars/cars.yml
    数据集:/cache/datasets/cifar10
    nas 输出 网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    nas 运行时间估算 epochs * 1个epoch的训练时间 (epoch的时间受到num_individual的影响)
    fully train 输入 配置文件:nas/cars/cars.yml
    网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    数据集:/cache/datasets/cifar10
    fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  2. Adelaide-EA

    阶段 选项 内容
    random 输入 配置文件:nas/adelaide_ea/adelaide_ea.yml
    数据集:/cache/datasets/cityscapes
    random 输出 网络描述文件:tasks/<task id>/output/random/model_desc_<id>.json
    random 运行时间估算 max_sample * epochs / GPU数目 * 1个epoch的训练时间
    mutate 输入 配置文件:nas/adelaide_ea/adelaide_ea.yml
    数据集:/cache/datasets/cityscapes
    网络描述文件:tasks/<task id>/output/random/model_desc_<id>.json
    mutate 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    mutate 运行时间估算 max_sample * epochs / GPU数目 * 1个epoch的训练时间
    fully train 输入 配置文件:nas/adelaide_ea/adelaide_ea.yml
    网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    数据集:/cache/datasets/cityscapes
    fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  3. ESR-EA

    阶段 选项 内容
    nas 输入 配置文件:nas/esr_ea/esr_ea.yml
    数据集:/cache/datasets/DIV2K
    nas 输出 网络描述文件:tasks/<task id>/output/nas/selected_arch.npy
    nas 运行时间估算 num_generation * num_individual * epochs / GPU数目 * 1个epoch的训练时间
    fully train 输入 配置文件:nas/esr_ea/esr_ea.yml
    网络描述文件:tasks/<task id>/output/nas/selected_arch.npy
    数据集:/cache/datasets/DIV2K
    fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  4. SR-EA

    阶段 选项 内容
    random 输入 配置文件:nas/sr_ea/sr_ea.yml
    数据集:/cache/datasets/DIV2K
    random 输出 网络描述文件:tasks/<task id>/output/random/model_desc_<id>.json
    random 运行时间估算 num_sample * epochs / GPU数目 * 1个epoch的训练时间
    mutate 输入 配置文件:nas/sr_ea/sr_ea.yml
    数据集:/cache/datasets/DIV2K
    网络描述文件:tasks/<task id>/output/random/model_desc_<id>.json
    mutate 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    mutate 运行时间估算 num_sample * num_mutate * epochs / GPU数目 * 1个epoch的训练时间
    fully train 输入 配置文件:nas/sr_ea/sr_ea.yml
    网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    数据集:/cache/datasets/DIV2K
    fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  5. SP-NAS

    阶段 选项 内容
    nas1 输入 配置文件:nas/sp_nas/spnas.yml
    数据集:/cache/datasets/COCO2017
    预训练模型:/cache/models/resnet50-19c8e357.pth
    配置文件: nas/sp_nas/faster_rcnn_r50_fpn_1x.py
    nas1 输出 网络描述文件:tasks/<task id>/output/nas1/model_desc_<id>.json
    模型列表:tasks/<task id>/output/total_list_p.csv
    nas1 运行时间估算 max_sample * epoch / GPU数目 * 1个epoch的训练时间
    nas2 输入 配置文件:nas/sp_nas/spnas.yml
    数据集:/cache/datasets/COCO2017
    网络描述文件:tasks/<task id>/output/nas1/model_desc_<id>.json
    模型列表:tasks/<task id>/output/total_list_p.csv
    配置文件: nas/sp_nas/faster_rcnn_r50_fpn_1x.py
    nas2 输出 网络描述文件:tasks/<task id>/output/nas2/model_desc_<id>.json
    模型列表:tasks/<task id>/output/total_list_s.csv
    nas2 运行时间估算 max_sample * epoch / GPU数目 * 1个epoch的训练时间
    fully train 输入 配置文件:nas/sp_nas/spnas.yml
    数据集:/cache/datasets/COCO2017
    网络描述文件:tasks/<task id>/output/nas2/model_desc_<id>.json
    模型列表:tasks/<task id>/output/total_list_s.csv
    配置文件: nas/sp_nas/faster_rcnn_r50_fpn_1x.py
    fully train 输出 模型:tasks/<task id>/output/fullytrain/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  6. Auto_Lane

    阶段 选项 内容
    nas 输入 配置文件:nas/auto_lane/auto_lane.yml
    数据集:/cache/datasets/CULane OR /cache/datasets/CurveLane
    nas 输出 网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    nas 运行时间估算 max_sample * epoch / GPU数目 * 1个epoch的训练时间
    fully train 输入 配置文件:nas/sp_nas/auto_lane.yml
    数据集:/cache/datasets/CULane OR /cache/datasets/CurveLane
    网络描述文件:tasks/<task id>/output/nas/model_desc_<id>.json
    fully train 输出 模型:tasks/<task id>/output/fullytrain/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  7. AutoGroup

    阶段 选项 内容
    fully train 输入 配置文件 nas/fis/autogroup.yml
    数据集"/cache/datasets/avazu
    fully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    模型:tasks/<task id>/output/fully_train/model_0.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  8. AutoFis

    阶段 选项 内容
    search 输入 配置文件 nas/fis/autogate_grda.yml
    数据集"/cache/datasets/avazu
    search 输出 模型:tasks/<task id>/output/search/0/model.pth
    search 运行时间估算 epochs * 1个epoch的训练时间
    retrain 输入 配置文件 nas/fis/autogate_grda.yml
    数据集"/cache/datasets/avazu
    retrain 输出 模型:tasks/<task id>/output/retrain/0/model.pth
    retrain 运行时间估算 epochs * 1个epoch的训练时间

3.3 数据增广

  1. PBA

    阶段 选项 内容
    pba 输入 配置文件:data_augmentation/pba/pba.yml
    数据集:/cache/datasets/cifar10
    pba 输出 Transformer列表:tasks/<task id>/output/pba/best_hps.json
    pba 运行时间估算 total_rungs * each_epochs * config_count / GPU数目 * 1个epoch的训练时间
  2. CycleSR

    阶段 选项 内容
    fully train 输入 配置文件:data_augmentation/cyclesr/cyclesr.yml
    数据集:/cache/datasets/DIV2K_unpair
    fully train 输出 模型:tasks/<task id>/output/fully_train/model_0.pth
    fully train 运行时间估算 n_epoch * 1个epoch的训练时间

3.4 超参优化

  1. ASHA、BOHB、BOSS

    阶段 选项 内容
    hpo 输入 配置文件:hpo/asha|bohb|boss/hpo/asha|bohb|boss.yml
    数据集:/cache/datasets/cifar10
    hpo 输出 超参描述文件:tasks/<task id>/output/hpo/best_hps.json

3.5 Fully Train

  1. EfficientNet

    阶段 选项 内容
    fully train 输入 配置文件:fully_train/efficientnet/efficientnet_b0.yml
    数据集:/cache/datasets/ILSVRC
    fully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    模型:tasks/<task id>/output/fully_train/model_<id>.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  2. FMD

    阶段 选项 内容
    fully train 输入 配置文件:fully_train/fmd/fmd.yml
    数据集:/cache/datasets/cifar10
    fully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    模型:tasks/<task id>/output/fully_train/model_0.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间
  3. ResNet

    阶段 选项 内容
    fully train 输入 配置文件 fully_train/trainer/resnet.yml
    数据集"/cache/datasets/ILSVRC
    fully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
    模型:tasks/<task id>/output/fully_train/model_0.pth
    fully train 运行时间估算 epochs * 1个epoch的训练时间