美文网首页
微软开源mlsys库之NNI

微软开源mlsys库之NNI

作者: 加油11dd23 | 来源:发表于2021-06-27 18:34 被阅读0次

    最近无论是腾讯还是ntu都在用这个库,这个库算是业内做automl比较好的仓库了,这里简单做下总结。

    一、总览

    NNI (Neural Network Intelligence) 是一个轻量但强大的工具包,帮助用户自动的进行特征工程神经网络架构搜索超参调优以及模型压缩
    NNI 管理自动机器学习 (AutoML) 的 Experiment,调度运行由调优算法生成的 Trial 任务来找到最好的神经网络架构和/或超参,支持各种训练环境,如本机远程服务器OpenPAIKubeflow基于 K8S 的 FrameworkController(如,AKS 等)DLWorkspace (又称 DLTS), AML (Azure Machine Learning), AdaptDL(又称 ADL) ,和其他的云平台甚至 混合模式

    二、支持的功能

    NNI 提供命令行工具以及友好的 WebUI 来管理训练的 Experiment。 通过可扩展的 API,可定制自动机器学习算法和训练平台。 为了方便新用户,NNI 内置了最新的自动机器学习算法,并为流行的训练平台提供了开箱即用的支持。

    • 超参优化
    1. 穷举搜索(random, grid, batch)
    2. 启发式(进化,退火,hyperband, PBT)
    3. 贝叶斯
    4. 强化学习
    • 网络架构优化
    1. ENAS
    2. DARTS
    3. P-DARTS
    4. CDARTS
    5. SPOS
    6. ProxylessNAS
    7. Network Morphism
    8. TextNAS
    9. Cream
    • 模型压缩
    • 特征工程
    • early stop
    • 训练平台

    三、模型压缩

    因为主要用到这一块,这里单另出来介绍

    剪枝算法
    ^^^^^^^^^^^^^^^^^^

    剪枝算法通过删除冗余权重或层通道来压缩原始网络,从而降低模型复杂性并解决过拟合问题。

    .. list-table::
    :header-rows: 1
    :widths: auto

      • 名称
      • 算法简介
      • Level Pruner <Pruner.rst#level-pruner>__
      • 根据权重的绝对值,来按比例修剪权重。
      • AGP Pruner <../Compression/Pruner.rst#agp-pruner>__
      • 自动的逐步剪枝(是否剪枝的判断:基于对模型剪枝的效果)参考论文 <https://arxiv.org/abs/1710.01878>__
      • Lottery Ticket Pruner <../Compression/Pruner.rst#lottery-ticket-hypothesis>__
      • "The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks" 提出的剪枝过程。 它会反复修剪模型。 参考论文 <https://arxiv.org/abs/1803.03635>__
      • FPGM Pruner <../Compression/Pruner.rst#fpgm-pruner>__
      • Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration 参考论文 <https://arxiv.org/pdf/1811.00250.pdf>__
      • L1Filter Pruner <../Compression/Pruner.rst#l1filter-pruner>__
      • 在卷积层中具有最小 L1 权重规范的剪枝滤波器(用于 Efficient Convnets 的剪枝滤波器) 参考论文 <https://arxiv.org/abs/1608.08710>__
      • L2Filter Pruner <../Compression/Pruner.rst#l2filter-pruner>__
      • 在卷积层中具有最小 L2 权重规范的剪枝滤波器
      • ActivationAPoZRankFilterPruner <../Compression/Pruner.rst#activationapozrankfilter-pruner>__
      • 基于指标 APoZ(平均百分比零)的剪枝滤波器,该指标测量(卷积)图层激活中零的百分比。 参考论文 <https://arxiv.org/abs/1607.03250>__
      • ActivationMeanRankFilterPruner <../Compression/Pruner.rst#activationmeanrankfilter-pruner>__
      • 基于计算输出激活最小平均值指标的剪枝滤波器
      • Slim Pruner <../Compression/Pruner.rst#slim-pruner>__
      • 通过修剪 BN 层中的缩放因子来修剪卷积层中的通道 (Learning Efficient Convolutional Networks through Network Slimming) 参考论文 <https://arxiv.org/abs/1708.06519>__
      • TaylorFO Pruner <../Compression/Pruner.rst#taylorfoweightfilter-pruner>__
      • 基于一阶泰勒展开的权重对滤波器剪枝 (Importance Estimation for Neural Network Pruning) 参考论文 <http://jankautz.com/publications/Importance4NNPruning_CVPR19.pdf>__
      • ADMM Pruner <../Compression/Pruner.rst#admm-pruner>__
      • 基于 ADMM 优化技术的剪枝 参考论文 <https://arxiv.org/abs/1804.03294>__
      • NetAdapt Pruner <../Compression/Pruner.rst#netadapt-pruner>__
      • 在满足计算资源预算的情况下,对预训练的网络迭代剪枝 参考论文 <https://arxiv.org/abs/1804.03230>__
      • SimulatedAnnealing Pruner <../Compression/Pruner.rst#simulatedannealing-pruner>__
      • 通过启发式的模拟退火算法进行自动剪枝 参考论文 <https://arxiv.org/abs/1907.03141>__
      • AutoCompress Pruner <../Compression/Pruner.rst#autocompress-pruner>__
      • 通过迭代调用 SimulatedAnnealing Pruner 和 ADMM Pruner 进行自动剪枝 参考论文 - <https://arxiv.org/abs/1907.03141>__
      • AMC Pruner <../Compression/Pruner.rst#amc-pruner>__
      • AMC:移动设备的模型压缩和加速 参考论文 <https://arxiv.org/pdf/1802.03494.pdf>__

    参考此 :githublink:基准测试 <../CommunitySharings/ModelCompressionComparison.rst> 来查看这些剪枝器在一些基准问题上的表现。

    量化算法
    ^^^^^^^^^^^^^^^^^^^^^^^

    量化算法通过减少表示权重或激活所需的精度位数来压缩原始网络,这可以减少计算和推理时间。

    .. list-table::
    :header-rows: 1
    :widths: auto

      • 名称
      • 算法简介
      • Naive Quantizer <../Compression/Quantizer.rst#naive-quantizer>__
      • 默认将权重量化为 8 位
      • QAT Quantizer <../Compression/Quantizer.rst#qat-quantizer>__
      • 为 Efficient Integer-Arithmetic-Only Inference 量化并训练神经网络。 参考论文 <http://openaccess.thecvf.com/content_cvpr_2018/papers/Jacob_Quantization_and_Training_CVPR_2018_paper.pdf>__
      • DoReFa Quantizer <../Compression/Quantizer.rst#dorefa-quantizer>__
      • DoReFa-Net: 通过低位宽的梯度算法来训练低位宽的卷积神经网络。 参考论文 <https://arxiv.org/abs/1606.06160>__
      • BNN Quantizer <../Compression/Quantizer.rst#bnn-quantizer>__
      • 二进制神经网络:使用权重和激活限制为 +1 或 -1 的深度神经网络。 参考论文 <https://arxiv.org/abs/1602.02830>__

    模型加速

    模型压缩的目的是减少推理延迟和模型大小。 但现有的模型压缩算法主要通过模拟的方法来检查压缩模型性能(如精度)。例如,剪枝算法中使用掩码,而量化算法中量化值仍然是以 32 位浮点数来存储。 只要给出这些算法产生的掩码和量化位,NNI 可真正的加速模型。 模型加速的详细文档参考 这里 <./ModelSpeedup.rst>__。

    压缩工具

    压缩工具包括了一些有用的工具,能帮助用户理解并分析要压缩的模型。 例如,可检查每层对剪枝的敏感度。 可很容易的计算模型的 FLOPs 和参数数量。 点击这里 <./CompressionUtils.rst>__,查看压缩工具的完整列表。

    高级用法

    NNI 模型压缩提供了简洁的接口,用于自定义新的压缩算法。 接口的设计理念是,将框架相关的实现细节包装起来,让用户能聚焦于压缩逻辑。 用户可以进一步了解我们的压缩框架,并根据我们的框架定制新的压缩算法(剪枝算法或量化算法)。 此外,还可利用 NNI 的自动调参功能来自动的压缩模型。 参考 这里 <./advanced.rst>__ 了解更多细节。

    相关文章

      网友评论

          本文标题:微软开源mlsys库之NNI

          本文链接:https://www.haomeiwen.com/subject/xybxultx.html