Vega提供了算法和任务的使用指导,也针对开发者,提供了算法开发的相关指导,如扩展搜索空间和搜索算法、构建适用于Vega的数据集等。
在examples
目录下如下子目录:
目录 | 说明 |
---|---|
compression | 压缩算法使用示例,包括 Quant-EA、 Prune-EA 两个算法示例 |
data augmentation | 数据增广算法使用示例,包括 PBA、CycleSR 算法示例 |
hpo | 超参优化算法使用示例, 包括 ASHA、BO、TPE、BOHB、BOSS、Random、Random Pareto 等算法示例 |
nas | 网络架构搜索相关示例,包括 CARS、SP-NAS、Auto-Lane、SR-EA、ESR-EA、Adelaide-EA、NAGO、BackboneNas、DartsCNN、FIS、GDAS、MFKD、SegmentationEA、SGAS、ModuleNas、DNet-NAS等算法示例 |
fully train | fully train 相关示例,包括训练 EfficientNet B0/B4 模型示例,FMD算子示例等 |
classification | 综合使用 NAS + HPO + FullyTrain 完成一个图像分类任务的示例 |
features | 集群、自定义数据集、模型评估、Quota等示例 |
一般一个算法示例包含了是一个配置文件,有一些算法还有一些配套的代码。
进入 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
-
运行命令(GPU):
vega <algorithm config file> -b t
如:
vega ./nas/backbone_nas/backbone_nas.yml -b t
-
运行命令(Ascend 910):
vega <algorithm config file> -b t -d NPU
如:
vega ./nas/backbone_nas/backbone_nas.yml -b t -d NPU
运行命令(Ascend 910):
vega <algorithm config file> -b m -d NPU
如:
vega ./nas/backbone_nas/backbone_nas.yml -b m -d NPU
-
Prune-EA
阶段 选项 内容 nas 输入 配置文件:compression/prune-ea/prune.yml
预训练模型:/cache/models/resnet20.pth
数据集:/cache/datasets/cifar10nas 输出 网络描述文件: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/cifar10fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间 -
Quant-EA
阶段 选项 内容 nas 输入 配置文件:compression/quant-ea/quant.yml
数据集:/cache/datasets/cifar10nas 输出 网络描述文件: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/cifar10fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间
-
CARS
阶段 选项 内容 nas 输入 配置文件:nas/cars/cars.yml
数据集:/cache/datasets/cifar10nas 输出 网络描述文件: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/cifar10fully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间 -
Adelaide-EA
阶段 选项 内容 random 输入 配置文件:nas/adelaide_ea/adelaide_ea.yml
数据集:/cache/datasets/cityscapesrandom 输出 网络描述文件: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>.jsonmutate 输出 网络描述文件: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/cityscapesfully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间 -
ESR-EA
阶段 选项 内容 nas 输入 配置文件:nas/esr_ea/esr_ea.yml
数据集:/cache/datasets/DIV2Knas 输出 网络描述文件: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/DIV2Kfully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间 -
SR-EA
阶段 选项 内容 random 输入 配置文件:nas/sr_ea/sr_ea.yml
数据集:/cache/datasets/DIV2Krandom 输出 网络描述文件: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>.jsonmutate 输出 网络描述文件: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/DIV2Kfully train 输出 模型:tasks/<task id>/output/fully_train/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间 -
SP-NAS
阶段 选项 内容 nas1 输入 配置文件:nas/sp_nas/spnas.yml
数据集:/cache/datasets/COCO2017
预训练模型:/cache/models/resnet50-19c8e357.pth
配置文件: nas/sp_nas/faster_rcnn_r50_fpn_1x.pynas1 输出 网络描述文件:tasks/<task id>/output/nas1/model_desc_<id>.json
模型列表:tasks/<task id>/output/total_list_p.csvnas1 运行时间估算 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.pynas2 输出 网络描述文件:tasks/<task id>/output/nas2/model_desc_<id>.json
模型列表:tasks/<task id>/output/total_list_s.csvnas2 运行时间估算 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.pyfully train 输出 模型:tasks/<task id>/output/fullytrain/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间 -
Auto_Lane
阶段 选项 内容 nas 输入 配置文件:nas/auto_lane/auto_lane.yml
数据集:/cache/datasets/CULane OR /cache/datasets/CurveLanenas 输出 网络描述文件: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>.jsonfully train 输出 模型:tasks/<task id>/output/fullytrain/model_<id>.pth fully train 运行时间估算 epochs * 1个epoch的训练时间 -
AutoGroup
阶段 选项 内容 fully train 输入 配置文件 nas/fis/autogroup.yml
数据集"/cache/datasets/avazufully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
模型:tasks/<task id>/output/fully_train/model_0.pthfully train 运行时间估算 epochs * 1个epoch的训练时间 -
AutoFis
阶段 选项 内容 search 输入 配置文件 nas/fis/autogate_grda.yml
数据集"/cache/datasets/avazusearch 输出 模型:tasks/<task id>/output/search/0/model.pth search 运行时间估算 epochs * 1个epoch的训练时间 retrain 输入 配置文件 nas/fis/autogate_grda.yml
数据集"/cache/datasets/avazuretrain 输出 模型:tasks/<task id>/output/retrain/0/model.pth retrain 运行时间估算 epochs * 1个epoch的训练时间
-
PBA
阶段 选项 内容 pba 输入 配置文件:data_augmentation/pba/pba.yml
数据集:/cache/datasets/cifar10pba 输出 Transformer列表:tasks/<task id>/output/pba/best_hps.json pba 运行时间估算 total_rungs * each_epochs * config_count / GPU数目 * 1个epoch的训练时间 -
CycleSR
阶段 选项 内容 fully train 输入 配置文件:data_augmentation/cyclesr/cyclesr.yml
数据集:/cache/datasets/DIV2K_unpairfully train 输出 模型:tasks/<task id>/output/fully_train/model_0.pth fully train 运行时间估算 n_epoch * 1个epoch的训练时间
-
ASHA、BOHB、BOSS
阶段 选项 内容 hpo 输入 配置文件:hpo/asha|bohb|boss/hpo/asha|bohb|boss.yml
数据集:/cache/datasets/cifar10hpo 输出 超参描述文件:tasks/<task id>/output/hpo/best_hps.json
-
EfficientNet
阶段 选项 内容 fully train 输入 配置文件:fully_train/efficientnet/efficientnet_b0.yml
数据集:/cache/datasets/ILSVRCfully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
模型:tasks/<task id>/output/fully_train/model_<id>.pthfully train 运行时间估算 epochs * 1个epoch的训练时间 -
FMD
阶段 选项 内容 fully train 输入 配置文件:fully_train/fmd/fmd.yml
数据集:/cache/datasets/cifar10fully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
模型:tasks/<task id>/output/fully_train/model_0.pthfully train 运行时间估算 epochs * 1个epoch的训练时间 -
ResNet
阶段 选项 内容 fully train 输入 配置文件 fully_train/trainer/resnet.yml
数据集"/cache/datasets/ILSVRCfully train 输出 网络描述文件:tasks/<task id>/output/mutate/model_desc_<id>.json
模型:tasks/<task id>/output/fully_train/model_0.pthfully train 运行时间估算 epochs * 1个epoch的训练时间