概述
VEGA是华为诺亚方舟实验室开发的AutoML开源工具链,致力于降低深度学习入门门槛、提高研发人员研究效率以及快速的商业化落地。VEGA具备以下关键特性:
- 完备的AutoML能力:涵盖HPO(超参优化, HyperParameter Optimization)、Data-Augmentation、NAS(网络架构搜索, Network Architecture Search)、Model Compression、Fully Train等关键功能。
- 简单易用的Pipeline配置: 使用基于配置的pipeline降AutoML的流程组合起来,面对不同类型的用户群体,提供不同的配置选项和扩展能力。
- 业界标杆的自研算法:提供了诺亚方舟实验室自研的 业界标杆(Benchmark) 算法,并提供 Model Zoo 下载SOTA(State-of-the-art)模型。
- 高并发模型训练能力:提供高性能Trainer,加速模型训练和评估。
- 细粒度SearchSpace:可以自由定义网络搜索空间,提供了丰富的网络架构参数供搜索空间使用,可同时搜索网络架构参数和模型训练超参,并且该搜索空间可以同时适用于Pytorch、TensorFlow和MindSpore。
- 多Backend支持:支持PyTorch,TensorFlow,MindSpore
基于模块化的工作流架构
在开始之前,我们需要先了解一下使用一个AutoML工具设计和训练一个网络的一般流程,首先我们拿到一些数据通过dataset加载起来作为整个流程的输入,然后定义一个搜索空间,通过搜索算法对搜索空间进行采样,采样的结果可以转换为超参或者一个新的模型,将模型和数据输入给训练器做训练和评估,这个过程称为一次搜索迭代。搜索算法通过接收每一次迭代评估的结果,不断的去优化采样空间,生成新的采样,重复每次迭代训练,最终会得到一个最优的模型或者超参。
然而在实际应用中,为了降低AutoML算法对于算力的需求,算法搜索得到的模型一般都是基于少量epoch的相对最优的模型,不能直接用于业务场景,所以我们需要进行一次全精度的训练直到其收敛,这个过程我们叫做fullytrain。
为了提高最终模型的效果,我们一般会采用多种搜索算法做联合优化,如先对数据进行数据增广,然后使用NAS算法搜索出一个较优的网络架构,最后在用HPO去优化训练超参。
于是对于整个AutoML的流程我们进行了一个抽象和建模。
- Pipeline: 用于组合多个搜索阶段,每一个搜索阶段我们称为一个PipeStep。
- DataSet:加载和解析数据集,将数据集拆分为训练集、验证集和测试,同时包含了众多数据增强的transform。
- SearchAlgorithm:AutoML搜索算法的具体实现。
- SearchSpace:定义搜索空间,用于统一搜索算法的采样范围和采样类型,通过统一的描述语言来表示网络架构和超参。
- Model:预置了大量的网络和网络模块,支持将多个网络模块组合成一个新的网络。
- Trainer:使用训练集和验证集进行训练,包含了loss、optimimizer、lr_scheduler、metric等子模块,提供了对tensorflow、pytorch、mindspore三种框架的支持,同时也封装了多机多卡的处理。
- Evaluator:使用测试集对训练后的模型进行评估,通过rest服务发布到不同的机器上进行端测评估。
一个简单的样例
VEGA中使用yml文件完成一个对SampleCNN网络的随机搜索:
pipeline: [nas]
nas:
pipe_step:
type: NasPipeStep
dataset:
type: Cifar10
common:
data_path: /cache/datasets/cifar10/
batch_size: 64
search_algorithm:
type: RandomSearch
policy:
num_sample: 50
search_space:
hyperparameters:
- key: network.backbone.blocks
type: CATEGORY
range: [1, 2, 3, 4]
- key: network.backbone.channels
type: CATEGORY
range: [32, 48, 56, 64]
model:
model_desc:
modules: [backbone]
backbone:
type: SimpleCnn
num_class: 10
trainer:
type: Trainer
epochs: 3
evaluator:
type: Evaluator
gpu_evaluator:
type: GpuEvaluator
然后执行vega.run('xxx.yml')即可运行,运行完成后会将输出最佳模型的描述文件,存储在task/{task_id}/output目录下。
覆盖全领域的丰富的算法
VEGA提供了丰富的AutoML算法,覆盖了架构搜索(NAS)、超参优化(HPO)、数据增强(DataAugmentation)、模型压缩(ModelCompression)多种领域,支持了分类、超分、目标检测、自动驾驶等多种业务场景。
具体的算法列表和细节可在官网查看:
Vegawww.noahlab.com.hk安装和部署Vega安装和部署
VEGA最新的安装包已经上传到pip库中,我们也提供了一键式的安装脚本安装相关的依赖包,可以执行如下命令安装Vega和相关开源软件:
pip3 install --user noah-vega
python3 -m vega.tools.install_pkgs
结语
AutoML在深度学习各个领域都发挥了极大的成效,但是到目前为止各个算法很多都是独立运作,很难形成一套统一的体系和解决方案,我们希望能够通过高层次的抽象和建模,沉淀AutoML过程中一些共性的特性,能够实现更为简单和通用的算法。
未来,研究人员只需要关注与AutoML搜索策略本身,通过简单的开发和复用就能够快速的完成一个AutoML算法的开发。用户通过组合一些配置选项就能够将算法应用于其特定的数据集和场景中。
在接下来的一段时间内,我们会持续不断的发表一些文章,给大家详细解剖VEGA的关键特性、设计理念和实际业务场景。
VEGA作为一个开源项目,希望大家能够多多使用提出问题,贡献自己的代码和建议,欢迎大家试用。