Unverified Commit 91d9a797 authored by Yuge Zhang's avatar Yuge Zhang Committed by GitHub
Browse files

Adopt symbolic links in Chinese documentation (#4345)


Co-authored-by: default avatarjiahangxu <jiahangxu@microsoft.com>
parent 0e0ee86d
自定义 One-shot Trainer
=========================================
One-shot Trainer 应继承 ``nni.retiarii.oneshot.BaseOneShotTrainer``,并需要实现``fit()`` 函数(用于进行拟合和搜索过程)和 ``export()`` 方法(用于返回搜索到的最佳架构)。
编写一个 One-Shot Trainer 与单个结构的 evaluator 有很大不同。 首先,init 方法参数没有限制,可以接收任何 Python 参数。 其次,输入到 One-Shot Trainer 中的模型可能带有 Retiarii 特定的模块(例如 LayerChoice 和 InputChoice)的模型。 这种模型不能直接向前传播,Trainer 需要决定如何处理这些模块。
一个典型的示例是 DartsTrainer,其中可学习参数用于在 LayerChoice 中组合多个 Choice。 Retiarii为模块替换提供了易于使用的函数,即 ``replace_layer_choice``, ``replace_input_choice``。 示例如下。
.. code-block:: python
from nni.retiarii.oneshot import BaseOneShotTrainer
from nni.retiarii.oneshot.pytorch import replace_layer_choice, replace_input_choice
class DartsLayerChoice(nn.Module):
def __init__(self, layer_choice):
super(DartsLayerChoice, self).__init__()
self.name = layer_choice.key
self.op_choices = nn.ModuleDict(layer_choice.named_children())
self.alpha = nn.Parameter(torch.randn(len(self.op_choices)) * 1e-3)
def forward(self, *args, **kwargs):
op_results = torch.stack([op(*args, **kwargs) for op in self.op_choices.values()])
alpha_shape = [-1] + [1] * (len(op_results.size()) - 1)
return torch.sum(op_results * F.softmax(self.alpha, -1).view(*alpha_shape), 0)
class DartsTrainer(BaseOneShotTrainer):
def __init__(self, model, loss, metrics, optimizer):
self.model = model
self.loss = loss
self.metrics = metrics
self.num_epochs = 10
self.nas_modules = []
replace_layer_choice(self.model, DartsLayerChoice, self.nas_modules)
... # 初始化 dataloaders 和 optimizers
def fit(self):
for i in range(self.num_epochs):
for (trn_X, trn_y), (val_X, val_y) in zip(self.train_loader, self.valid_loader):
self.train_architecture(val_X, val_y)
self.train_model_weight(trn_X, trn_y)
@torch.no_grad()
def export(self):
result = dict()
for name, module in self.nas_modules:
if name not in result:
result[name] = select_best_of_module(module)
return result
Retsarii 源代码提供了 DartsTrainer 的完整代码。 请参考 :githublink:`DartsTrainer <nni/retiarii/oneshot/pytorch/darts.py>`。
../../en_US/NAS/WriteOneshot.rst
\ No newline at end of file
自定义探索 Strategy
======================================
如果用户想研究一个新的探索策略,他们可以按照 NNI 提供的接口轻松定制一个新的策略。 要编写新策略,应该继承基本策略类 ``BaseStrategy``,然后实现成员函数 ``run`` 此成员函数将 ``base_model`` ``applied_mutators`` 作为输入参数, 并将用户在 ``applied_mutators`` 中指定的 Mutator 应用到 ``base_model`` 中生成新模型。 当应用一个 Mutator 时,应该与一个 sampler 绑定(例如,``RandomSampler``)。 每个 sampler 都实现了从候选值中选择值的 ``choice`` 函数。 Mutator 中调用 ``choice`` 函数是用 sampler 执行的。
下面是一个非常简单的随机策略,它使选择完全随机。
.. code-block:: python
from nni.retiarii import Sampler
class RandomSampler(Sampler):
def choice(self, candidates, mutator, model, index):
return random.choice(candidates)
class RandomStrategy(BaseStrategy):
def __init__(self):
self.random_sampler = RandomSampler()
def run(self, base_model, applied_mutators):
_logger.info('stargety start...')
while True:
avail_resource = query_available_resources()
if avail_resource > 0:
model = base_model
_logger.info('apply mutators...')
_logger.info('mutators: %s', str(applied_mutators))
for mutator in applied_mutators:
mutator.bind_sampler(self.random_sampler)
model = mutator.apply(model)
# 运行模型
submit_models(model)
else:
time.sleep(2)
您会发现此策略事先并不知道搜索空间,每次从 Mutator 调用 ``choice`` 时都会被动地做出决定。 如果一个策略想在做出任何决策(如 TPESMAC)之前知道整个搜索空间,它可以使用 ``Mutator`` 提供的 ``dry_run`` 函数来获取搜索空间。 可以在 :githublink:`这里 <nni/retiarii/strategy/tpe_strategy.py>` 找到一个示例策略。
生成新模型后,该策略可以使用 NNI 提供的API(例如 ``submit_models``, ``is_stopped_exec``)提交模型并获取其报告的结果。 更多的 API `API 参考 <./ApiReference.rst>`__ 中。
\ No newline at end of file
../../en_US/NAS/WriteStrategy.rst
\ No newline at end of file
自定义模型 Evaluator
===============================
模型评估器(Evaluator)对于评估新探索的模型的性能是必要的。 一个模型评估器通常包括训练、验证和测试一个单一的模型。 我们为用户提供了两种方法来编写新的模型评估器,下面将分别演示。
使用 FunctionalEvaluator
------------------------
定制一个新的评估器的最简单的方法是使用功能性的 API,当训练代码已经可用时,这就非常容易。 用户只需要编写一个 fit 函数来包装所有内容。 此函数接收一个位置参数(``model_cls``)和可能的关键字参数。 关键字参数(除 ``model_cls`` 外)作为 FunctionEvaluator 的初始化参数被输入。 通过这种方式,用户可以控制一切,但向框架公开的信息较少,因此进行优化的机会也较少。 示例如下。
.. code-block:: python
from nni.retiarii.evaluator import FunctionalEvaluator
from nni.retiarii.experiment.pytorch import RetiariiExperiment
def fit(model_cls, dataloader):
model = model_cls()
train(model, dataloader)
acc = test(model, dataloader)
nni.report_final_result(acc)
evaluator = FunctionalEvaluator(fit, dataloader=DataLoader(foo, bar))
experiment = RetiariiExperiment(base_model, evaluator, mutators, strategy)
.. note:: 由于我们目前的实施限制,``fit`` 函数应该放在另一个 python 文件中,而不是放在主文件中。 这个限制将在未来的版本中得到修复。
使用 PyTorch-Lightning
----------------------
NNI 建议以 PyTorch-Lightning 风格编写训练代码,即编写一个 LightningModule,定义训练所需的所有元素(例如 loss functionoptimizer),并定义一个 Trainer,使用 dataloader 来执行训练(可选)。 在此之前,请阅读 `PyTorch-lightning 文档 <https://pytorch-lightning.readthedocs.io/>` 了解 PyTorch-lightning 的基本概念和组件。 在此之前,请阅读 `PyTorch-lightning 文档 <https://pytorch-lightning.readthedocs.io/>`__ 了解 PyTorch-lightning 的基本概念和组件。
在实践中,在 NNI 中编写一个新的训练模块应继承 ``nni.retiarii.trainer.pytorch.lightning.LightningModule``,它将在 ``__init__`` 之后调用 ``set_model`` 函数,以将候选模型(由策略生成的)保存为 ``self.model`` 编写其余过程(如 ``training_step``)应与其他 lightning 模块相同。 Evaluators 还应该通过两个 API 调用与策略进行通讯(对于中间指标而言为 ``nni.report_intermediate_result``,对于最终指标而言为 ``nni.report_final_result``),分别被添加在 ``on_validation_epoch_end`` ``teardown`` 中。
示例如下。
.. code-block:: python
from nni.retiarii.evaluator.pytorch.lightning import LightningModule # please import this one
@basic_unit
class AutoEncoder(LightningModule):
def __init__(self):
super().__init__()
self.decoder = nn.Sequential(
nn.Linear(3, 64),
nn.ReLU(),
nn.Linear(64, 28*28)
)
def forward(self, x):
embedding = self.model(x) # let's search for encoder
return embedding
def training_step(self, batch, batch_idx):
# training_step 定义了训练循环
# 它独立于 forward 函数
x, y = batch
x = x.view(x.size(0), -1)
z = self.model(x) # 模型是一个被搜索的模型
x_hat = self.decoder(z)
loss = F.mse_loss(x_hat, x)
# 默认日志记录到 TensorBoard
self.log('train_loss', loss)
return loss
def validation_step(self, batch, batch_idx):
x, y = batch
x = x.view(x.size(0), -1)
z = self.model(x)
x_hat = self.decoder(z)
loss = F.mse_loss(x_hat, x)
self.log('val_loss', loss)
def configure_optimizers(self):
optimizer = torch.optim.Adam(self.parameters(), lr=1e-3)
return optimizer
def on_validation_epoch_end(self):
nni.report_intermediate_result(self.trainer.callback_metrics['val_loss'].item())
def teardown(self, stage):
if stage == 'fit':
nni.report_final_result(self.trainer.callback_metrics['val_loss'].item())
然后,用户需要将所有东西(包括 LightningModule、trainer 和 dataloaders)包装成一个 ``Lightning`` 对象,并将这个对象传递给 Retiarii Experiment。
.. code-block:: python
import nni.retiarii.evaluator.pytorch.lightning as pl
from nni.retiarii.experiment.pytorch import RetiariiExperiment
lightning = pl.Lightning(AutoEncoder(),
pl.Trainer(max_epochs=10),
train_dataloader=pl.DataLoader(train_dataset, batch_size=100),
val_dataloaders=pl.DataLoader(test_dataset, batch_size=100))
experiment = RetiariiExperiment(base_model, lightning, mutators, strategy)
../../en_US/NAS/WriteTrainer.rst
\ No newline at end of file
##################### .. bb39a6ac0ae1f5554bc38604c77fb616
构建模型空间
##################### #####################
构建模型空间
NNI为用户提供了强大的API,以方便表达模型空间(或搜索空间)。 首先,用户可以使用 mutation 原语(如 ValueChoice、LayerChoice)在他们的模型中内联一个空间。 其次,NNI为用户提供了简单的接口,可以定制新的 mutators 来表达更复杂的模型空间。 在大多数情况下,mutation 原语足以表达用户的模型空间。 #####################
.. toctree:: NNI为用户提供了强大的API,以方便表达模型空间(或搜索空间)。 首先,用户可以使用 mutation 原语(如 ValueChoice、LayerChoice)在他们的模型中内联一个空间。 其次,NNI为用户提供了简单的接口,可以定制新的 mutators 来表达更复杂的模型空间。 在大多数情况下,mutation 原语足以表达用户的模型空间。
:maxdepth: 1
.. toctree::
mutation 原语 <MutationPrimitives> :maxdepth: 1
定制 mutator <Mutators>
\ No newline at end of file mutation 原语 <MutationPrimitives>
定制 mutator <Mutators>
Hypermodule Lib <Hypermodules>
\ No newline at end of file
Multi-trial NAS .. 579c410263c842f4541cbdad14723328
===============
Multi-trial NAS
在 multi-trial NAS 中,用户需要模型评估器来评估每个采样模型的性能,并且需要一个探索策略来从定义的模型空间中采样模型。 在这里,用户可以使用 NNI 提供的模型评估器或编写自己的模型评估器。 他们可以简单地选择一种探索策略。 高级用户还可以自定义新的探索策略。 关于如何运行 multi-trial NAS 实验的简单例子,请参考 `快速入门 <./QuickStart.rst>`__。 ===============
.. toctree:: 在 multi-trial NAS 中,用户需要模型评估器来评估每个采样模型的性能,并且需要一个探索策略来从定义的模型空间中采样模型。 在这里,用户可以使用 NNI 提供的模型评估器或编写自己的模型评估器。 他们可以简单地选择一种探索策略。 高级用户还可以自定义新的探索策略。 关于如何运行 multi-trial NAS 实验的简单例子,请参考 `快速入门 <./QuickStart.rst>`__。
:maxdepth: 1
.. toctree::
模型评估器 <ModelEvaluators> :maxdepth: 1
自定义模型评估器 <WriteTrainer>
探索策略 <ExplorationStrategies> 模型评估器 <ModelEvaluators>
自定义探索策略 <WriteStrategy> 自定义模型评估器 <WriteTrainer>
探索策略 <ExplorationStrategies>
自定义探索策略 <WriteStrategy>
执行引擎 <ExecutionEngines> 执行引擎 <ExecutionEngines>
\ No newline at end of file
One-shot NAS .. c9ab8a1f91c587ad72d66b6c43e06528
============
One-shot NAS
One-Shot NAS 算法利用了搜索空间中模型间的权重共享来训练超网络,并使用超网络来指导选择出更好的模型。 与从头训练每个模型(我们称之为 "Multi-trial NAS")算法相比,此类算法大大减少了使用的计算资源。 NNI 支持下列流行的 One-Shot NAS 算法。 ============
One-Shot NAS 算法利用了搜索空间中模型间的权重共享来训练超网络,并使用超网络来指导选择出更好的模型。 与从头训练每个模型(我们称之为 "Multi-trial NAS")算法相比,此类算法大大减少了使用的计算资源。 NNI 支持下列流行的 One-Shot NAS 算法。
.. toctree::
:maxdepth: 1
.. toctree::
运行 One-shot NAS <OneshotTrainer> :maxdepth: 1
ENAS <ENAS>
DARTS <DARTS> 运行 One-shot NAS <OneshotTrainer>
SPOS <SPOS> ENAS <ENAS>
ProxylessNAS <Proxylessnas> DARTS <DARTS>
FBNet <FBNet> SPOS <SPOS>
自定义 one-shot NAS <WriteOneshot> ProxylessNAS <Proxylessnas>
\ No newline at end of file FBNet <FBNet>
自定义 One-shot NAS <WriteOneshot>
\ No newline at end of file
.. 6e45ee0ddd5d0315e5c946149d4f9c31
概述 概述
======== ========
......
.. role:: raw-html(raw)
:format: html
更改日志
==========
发布 2.3 - 6/15/2021
-----------------------
主要更新
^^^^^^^^^^^^^
神经网络架构搜索
""""""""""""""""""""""""""
* Retiarii Framework (NNI NAS 2.0) Beta 版,具有新功能:
* 支持新的高级 API:``Repeat`` 和 ``Cell`` (#3481)
* 支持纯 Python 执行引擎(#3605)
* 支持基于 policy 的 RL 策略 (#3650)
* 支持嵌套的 ModuleList (#3652)
* 完善文档 (#3785)
**注意**:在未来的版本中,Retiarii 计划有更多令人兴奋的功能,请参考 `Retiarii 功能路线图 <https://github.com/microsoft/nni/discussions/3744>`__ 了解详情。
* 增加全新 NAS 算法:Blockwise DNAS FBNet (#3532,感谢外部贡献者 @alibaba-yiwuyao)
模型压缩
"""""""""""""""""
* 支持自动压缩框架 (#3631)
* 在 TensorFlow 中支持 slim Pruner (#3614)
* 支持 LSQ Quantizer (#3503,感谢外部贡献者 @chenbohua3)
* 完善迭代式 Pruner 的 API (#3507 #3688)
训练平台 & Rest
"""""""""""""""""""""""
* 支持第三方训练平台 (#3662 #3726)
* 支持设置前缀 URL (#3625 #3674 #3672 #3643)
* 改进 NNI 管理器日志 (#3624)
* 移除 nnictl 上过时的 TensorBoard 代码 (#3613)
超参优化
""""""""""""""""""""""""""""
* 增加全新 Tuner:DNGO (#3479 #3707)
* 为 Tuner 增加基准测试 (#3644 #3720 #3689)
Web 界面
""""""""""""""""""""""""""""""""""""""""""""""""
* 改进在 Trial 详情页面的搜索框 (#3651 #3723 #3715)
* 改进在 Trial 详情页面的自动刷新设置 (#3597)
* 在本地模式下增加 Trial 输出按钮 (#3653 #3690)
示例 & 文档
""""""""""""""""""""""""
* 将所有的 Trial 示例从配置v1转换为配置v2 (#3721 #3733 #3711 #3600)
* 增加全新 Jupyter 笔记本示例 (#3599 #3700)
开发工作
"""""""""""""
* 升级 Dockerfile 中的依赖 (#3713 #3722)
* 用 PyYAML 替代 ``ruamel.yaml`` (#3702)
* 为 AML、混合训练平台和实验配置V2添加 pipeline (#3477 #3648)
* 在 README 中添加 pipeline 徽章 (#3589)
* 更新问题报告模板 (#3501)
Bug 修复 & 微小更新
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 修复 Windows 上的语法错误 (#3634)
* 修复一个与日志有关的 Bug (#3705)
* 修复 GPU 索引中的一个 Bug (#3721)
* 修复 FrameworkController 中的一个 Bug (#3730)
* 修复 ``export_data_url format`` 中的一个 Bug (#3665)
* 以警告形式报告版本检查失败 (#3654)
* 修复 nnictl 中的 Bug 和 lint (#3712)
* 修复 Web 界面 ``optimize_mode`` 中的 Bug (#3731)
* 修复在 AML v2 配置中的 ``useActiveGpu`` Bug (#3655)
* 修复 Retiarii 配置中的 ``experiment_working_directory`` Bug (#3607)
* 修复掩码冲突的 Bug (#3629,感谢外部贡献者 @Davidxswang)
* 修复模型加速形状推理中的一个 Bug (#3588,感谢外部贡献者 @Davidxswang)
* 修复 Windows 上多线程的一个 Bug (#3604,感谢外部贡献者 @Ivanfangsc)
* 删除训练平台中冗余的代码 (#3526,感谢外部贡献者 @maxsuren)
* 修复 DoReFa 压缩文档中的拼写错误 (#3693,感谢外部贡献者 @Erfandarzi)
* 更新模型压缩中的注释串 (#3647,感谢外部贡献者 @ichejun)
* 修复 Kubernetes 容器中的 Bug (#3719,感谢外部贡献者 @rmfan)
发布 2.2 - 4/26/2021
-----------------------
主要更新
^^^^^^^^^^^^^
神经网络架构搜索
""""""""""""""""""""""""""
* 改进 NAS 2.0 (Retiarii) 框架 (Alpha 发布)
* 支持本地调试模式 (#3476)
* 支持在 ``LayerChoice`` 中嵌套 ``ValueChoice`` (#3508)
* 在 ``ValueChoice`` 中支持 字典\列表类型 (#3508)
* 完善导出架构的格式 (#3464)
* 重构 NAS 示例 (#3513)
* 参考 `这里 <https://github.com/microsoft/nni/issues/3301>`__ 获取 Retiarii 功能路线图
模型压缩
"""""""""""""""""
* 支持加速混合精度量化模型(实验性) (#3488 #3512)
* 支持量化算法的模型导出 (#3458 #3473)
* 在 TensorFlow 的模型压缩中支持模型导出 (#3487)
* 完善文档 (#3482)
nnictl & nni.experiment
"""""""""""""""""""""""
* 增加对 Experiment 配置 V2 的原生支持 (#3466 #3540 #3552)
* 在 Python API ``nni.experiment`` 中添加恢复和查看模式 (#3490 #3524 #3545)
训练平台
""""""""""""""""
* 支持远程训练平台中共享存储的umount (#3456)
* 支持 Windows 作为重用模式下的远程训练平台 (#3500)
* 移除远程训练平台中重复的env文件夹 (#3472)
* 为 GPU 指标收集器添加日志信息 (#3506)
* 启用 FrameworkController 训练服务的 Pod Spec (#3379,感谢外部贡献者 @mbu93)
Web 界面
""""""""""
* 支持在 Web 界面上启动 TensorBoard (#3454 #3361 #3531)
* 升级 echarts-for-react 到 v5 (#3457)
* 为 dispatcher/nnimanager 日志 monaco 编辑器添加包装 (#3461)
修复的 Bug
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 修复 FLOPs counter 的 Bug (#3497)
* 修复超参数添加/删除轴和表格添加/删除列按钮冲突的问题 (#3491)
* 修复 monaco 编辑器搜索文本不能完全显示的问题 (#3492)
* 修复 Cream NAS 的 Bug (#3498,感谢外部贡献者 @AliCloud-PAI)
* 修复文档中的拼写错误 (#3448,感谢外部贡献者 @OliverShang)
* 修复 NAS 1.0 中的拼写错误 (#3538,感谢外部贡献者 @ankitaggarwal23)
发布 2.1 - 3/10/2021
-----------------------
主要更新
^^^^^^^^^^^^^
神经网络架构搜索
""""""""""""""""""""""""""
* 改进 NAS 2.0 (Retiarii) 框架 (完善后的实验性)
* 提高 PyTorch 模型的图形生成和代码生成的稳健性 (#3365)
* 支持内联突变 API ``ValueChoice`` (#3349 #3382)
* 改进模型评估器的设计和实施 (#3359 #3404)
* 支持随机/网格/进化探索策略(即搜索算法) (#3377)
* 参考 `这里 <https://github.com/microsoft/nni/issues/3301>`__ 获取 Retiarii 功能路线图
训练平台
""""""""""""""""
* 支持重用模式的共享存储 (#3354)
* 支持 Windows 作为混合模式下的本地训练平台 (#3353)
* 移除 PAIYarn 训练平台 (#3327)
* 增加 "recently-idle" 调度算法 (#3375)
* 移除 ``preCommand`` 并启用为远程训练平台 ``pythonPath`` (#3284 #3410)
* 重构重用模式的临时文件夹 (#3374)
nnictl & nni.experiment
"""""""""""""""""""""""
* 迁移 ``nnicli`` 到新的 Python API ``nni.experiment`` (#3334)
* 重构 Python API (\ ``nni.experiment``\ ) 中指定 Tuner 的方式,与 ``nnictl`` 对齐 (#3419)
Web 界面
"""""""""""""""
* 支持在 Web 界面上显示混合模式下每个 Trial 的指定训练平台 (#3261 #3391)
* 支持在实验管理页面中对过滤状态进行多重选择 (#3351)
* 改进概览页面 (#3316 #3317 #3352)
* 支持表中的复制 Trial ID (#3378)
文档
^^^^^^^^^^^^^
* 改进模型压缩示例和文档 (#3326 #3371)
* 增加 Python API 示例和文档 (#3396)
* 增加安全文档 (#3358)
* 在 README 中增加 "新功能" 部分 (#3395)
* 改进贡献文档 (#3398,感谢外部贡献者 @Yongxuanzhang)
修复的 Bug
^^^^^^^^^^^^^^^^^^
* 修复 AML 输出路径和 Python 进程没有被杀死的问题 (#3321)
* 修复 nnictl 无法恢复从 Python 启动 Experiment 的 Bug (#3309)
* 修复网络态射示例的导入路径 (#3333)
* 修复元组解包中的 Bug (#3340)
* 修复任意代码执行的安全性 Bug (#3311,感谢外部贡献者 @huntr-helper)
* 修复 Jupyter 笔记本中 ``NoneType`` 的问题 (#3337,感谢外部贡献者 @tczhangzhi)
* 修复 Retiarii 中的 Bug (#3339 #3341 #3357,感谢外部贡献者 @tczhangzhi)
* 修复 AdaptDL 模式中的 Bug (#3381,感谢外部贡献者 @ZeyaWang)
* 修复 Assessor 拼写错误 (#3416,感谢外部贡献者 @ByronCHAO)
* 修复 ruamel 导入的 Bug (#3430,感谢外部贡献者 @rushtehrani)
发布 2.0 - 1/14/2021
-----------------------
超参优化更新
^^^^^^^^^^^^^
神经网络架构搜索
""""""""""""""""""""""""""""""""""""""""""""""""""""
* 支持全新的 NAS 框架:Retiarii(实验性)
* 功能路线图 `issue #3301 <https://github.com/microsoft/nni/issues/3301>`__
* `相关的 issues 和 pull requests <https://github.com/microsoft/nni/issues?q=label%3Aretiarii-v2.0>`__
* 文档 (#3221 #3282 #3287)
* 支持全新的 NAS 算法:Cream (#2705)
* 为 NLP 模型搜索增加新的 NAS 基准测试 (#3140)
训练平台
""""""""""""""""
* 支持混合训练平台 (#3097 #3251 #3252)
* 支持 AdlTrainingService,一个新的基于 Kubernetes 的训练平台 (#3022,感谢外部贡献者 Petuum @pw2393)
模型压缩
"""""""""""""""""
* 为 fpgm 剪枝算法增加剪枝调度 (#3110)
* 模型加速改进:支持 torch v1.7 (更新 graph_utils.py) (#3076)
* 改进模型压缩工具:模型 flops 计数器 (#3048 #3265)
Web 界面和 nnictl
""""""""""""""""""""
* 增加实验管理 Web 界面 (#3081 #3127)
* 改进概览页布局 (#3046 #3123)
* 支持在侧边栏查看日志和配置;为表格增加扩展图标 (#3069 #3103)
其它
""""""
* 支持从 Python 代码发起 Experiment (#3111 #3210 #3263)
* 重构内置/自定义 Tuner 的安装方法 (#3134)
* 支持全新的实验配置 V2 版本 (#3138 #3248 #3251)
* 重新组织源代码目录层次结构 (#2962 #2987 #3037)
* 本地模式下取消 Trial 任务时,修改 SIGKILL 信号 为 SIGTERM 信号 (#3173)
* 重构 hyperband (#3040)
文档
^^^^^^^^^^^^^
* 将 Markdown 文档转换为 reStructuredText 文档,并引入 ``githublink`` (#3107)
* 在文档中列出相关研究工作 (#3150)
* 增加保存和加载量化模型的教程 (#3192)
* 移除 paiYarn 文档并为远程模式下的 ``reuse`` 配置添加描述 (#3253)
* 更新 EfficientNet 文档 (#3158,感谢waibu贡献者 @ahundt)
修复的 Bug
^^^^^^^^^^^^^^^^^^
* 修复 NO_MORE_TRIAL 状态下 exp-duration 停止间隔 (#3043)
* 修复 NAS SPOS Trainer 的 Bug (#3051,感谢外部贡献者 @HeekangPark)
* 修复 NAS DARTS 中 ``_compute_hessian`` 的 Bug (PyTorch 版本) (#3058,感谢外部贡献者 @hroken)
* 修复 cdarts utils 中 conv1d 的 Bug (#3073,感谢外部贡献者 @athaker)
* 修复恢复实验时对于未知 Trial 处理办法 (#3096)
* 修复 Windows 下的 kill 命令 (#3106)
* 修复懒惰日志问题 (#3108,感谢外部贡献者 @HarshCasper)
* 修复 QAT Quantizer 中加载和保存检查点的问题 (#3124,感谢外部贡献者 @eedalong)
* 修复量化 grad 函数计算失误 (#3160,感谢外部贡献者 @eedalong)
* 修复量化算法中设备分配的 Bug (#3212,感谢外部贡献者 @eedalong)
* 修复模型加速中的 Bug,并加强了 UT (#3279)
* 和其他的 Bug (#3063 #3065 #3098 #3109 #3125 #3143 #3156 #3168 #3175 #3180 #3181 #3183 #3203 #3205 #3207 #3214 #3216 #3219 #3223 #3224 #3230 #3237 #3239 #3240 #3245 #3247 #3255 #3257 #3258 #3262 #3263 #3267 #3269 #3271 #3279 #3283 #3289 #3290 #3295)
发布 1.9 - 10/22/2020
------------------------
主要更新
^^^^^^^^^^^^^
神经网络架构搜索
""""""""""""""""""""""""""""""""""""""""""""""""""""
* 在 NAS 中增加 regularized evolution 算法 (#2802)
* 在搜索空间集合中增加 NASBench201 (#2766)
模型压缩
"""""""""""""""""
* AMC Pruner 改进:支持 resnet,复现 AMC 论文中的实验(示例代码使用默认参数) (#2876 #2906)
* 在一些 Pruner 中支持“约束感知”以提高模型压缩的效率 (#2657)
* 在 TensorFlow 版本的模型压缩代码中支持 "tf.keras.Sequential" (#2887)
* 在模型 FLOPS 计数器中支持自定义的 op (#2795)
* 在 QAT quantizer 中增加量化的偏置 (#2914)
训练平台
""""""""""""""""
* 支持在远程模式中使用 "preCommand" 配置 Python 环境 (#2875)
* 在 Windows 下支持 AML 训练平台 (#2882)
* 为远程训练平台添加 reuse 模式 (#2923)
Web 界面和 nnictl
""""""""""""""""""""""""""""""""""""""""""""""""
* 重新设计 Web 界面的 "Overview" 页面 (#2914)
* 升级 node, yarn 和 FabricUI,激活 Eslint (#2894 #2873 #2744)
* 在超参调优图表和 "Trials detail" 页面的 Trial 表格中增加/删除列 (#2900)
* 美化 Web 界面的 JSON 格式显示 (#2863)
* 支持使用 nnictl 命令自动补全 (#2857)
UT & IT
^^^^^^^
* 为 Experiment 导入导出数据增加集成测试 (#2878)
* 为用户安装的内置 Tuner 增加集成测试 (#2859)
* 为 nnictl 增加单元测试 (#2912)
文档
^^^^^^^^^^^^^
* 重构了模型压缩的文档结构 (#2919)
修复的 Bug
^^^^^^^^^^^^^^^^^^
* 修复正确使用 naïve evolution Tuner,Trial 失败的 Bug (#2695)
* 修复警告 "WARNING (nni.protocol) IPC pipeline not exists, maybe you are importing tuner/assessor from trial code?" (#2864)
* 修复保存/加载 Experiment 搜索空间的问题 (#2886)
* 修复 Experiment 导入数据的 Bug (#2878)
* 修复远程模式下 annotation 出现的问题 (python 3.8 ast 更新的问题) (#2881)
* 在 Web 界面上自定义 Trial 时,支持为类型是 "choice" 的超参数配置布尔值 (#3003)
发布 1.8 - 8/27/2020
-----------------------
主要更新
^^^^^^^^^^^^^
训练平台
""""""""""""""""""""""""""""""""
* 在 Web 界面直接访问 Trial 日志 (仅支持本地模式) (#2718)
* 添加 OpenPAI Trial Job 详情链接 (#2703)
* 在可重用的环境中支持 GPU 调度器 (#2627) (#2769)
* 为 ``trial_runner`` 中的 ``web_channel`` 增加超时时间 (#2710)
* 在 AzureML 模式下展示环境配置错误信息 (#2724)
* 为在 OpenPAI 模式复制数据增加更多日志信息 (#2702)
Web 界面,nnictl 和 nnicli
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
* 改进超参数并行坐标图的绘制 (#2691) (#2759)
* 为 Trial Job 列表添加分页 (#2738) (#2773)
* 使面板可以在鼠标点击其它区域时关闭 (#2734)
* 从 Web 界面中去掉多阶段支持 (#2760)
* 支持保存和加载 Experiment (#2750)
* 在导出结果的命令中增加导出中间结果的选项 (#2706)
* 增加了依据最高/最低指标列出 Trial 的 `命令 <https://github.com/microsoft/nni/blob/v1.8/docs/zh_CN/Tutorial/Nnictl.rst#nnictl-trial>`__ (#2747)
* 提升了 `nnicli <https://github.com/microsoft/nni/blob/v1.8/docs/zh_CN/nnicli_ref.rst>`__ 的用户体验,并附上 `示例 <https://github.com/microsoft/nni/blob/v1.8/examples/notebooks/retrieve_nni_info_with_python.ipynb>`__ (#2713)
神经网络架构搜索
""""""""""""""""""""""""""""""""""""
* `搜索空间集合:ENAS 和 DARTS <https://github.com/microsoft/nni/blob/v1.8/docs/zh_CN/NAS/SearchSpaceZoo.rst>`__ (#2589)
* 用于在 NAS 基准测试中查询中间结果的 API (#2728)
模型压缩
""""""""""""""""""""""""""""""""""
* 支持 TorchModuleGraph 的 List/Tuple Construct/Unpack 操作 (#2609)
* 模型加速改进: 支持 DenseNet 和 InceptionV3 (#2719)
* 支持多个连续 tuple 的 unpack 操作 (#2768)
* `比较支持的 Pruner 的表现的文档 <https://github.com/microsoft/nni/blob/v1.8/docs/zh_CN/CommunitySharings/ModelCompressionComparison.rst>`__ (#2742)
* 新的 Pruner:`Sensitivity pruner <https://github.com/microsoft/nni/blob/v1.8/docs/zh_CN/Compressor/Pruner.md#sensitivity-pruner>`__ (#2684) and `AMC pruner <https://github.com/microsoft/nni/blob/v1.8/docs/zh_CN/Compressor/Pruner.md>`__ (#2573) (#2786)
* 支持 TensorFlow v2 的模型压缩 (#2755)
不兼容的改动
"""""""""""""""""""""""""""""
* 默认 Experiment 目录从 ``$HOME/nni/experiments`` 更新至 ``$HOME/nni-experiments``。 如果希望查看通过之前的 NNI 版本创建的 Experiment,可以将这些 Experiment 目录从 ``$HOME/nni/experiments`` 手动移动至 ``$HOME/nni-experiments``。 (#2686) (#2753)
* 不再支持 Python 3.5 和 scikit-learn 0.20 (#2778) (#2777) (2783) (#2787) (#2788) (#2790)
其它
""""""
* 更新 Docker 镜像中的 Tensorflow 版本 (#2732) (#2735) (#2720)
示例
^^^^^^^^
* 在 Assessor 示例中移除 gpuNum (#2641)
文档
^^^^^^^^^^^^^
* 改进自定义 Tuner 的文档 (#2628)
* 修复几处文档中的输入错误和语法错误 (#2637 #2638, 感谢 @tomzx)
* 改进 AzureML 训练平台的文档 (#2631)
* 改进中文翻译的 CI 流程 (#2654)
* 改进 OpenPAI 训练平台的文档 (#2685)
* 改进社区分享的文档 (#2640)
* 增加对 Colab 进行支持的教程 (#2700)
* 改进模型压缩的文档结构 (#2676)
Bug 修复
^^^^^^^^^^^^^^^^^^
* 修复训练平台的目录生成错误 (#2673)
* 修复 Remote 训练平台使用 chmod 时的 Bug (#2689)
* 通过内联导入 ``_graph_utils`` 修复依赖问题 (#2675)
* 修复了 ``SimulatedAnnealingPruner`` 中的掩码问题 (#2736)
* 修复了中间结果的图的缩放问题 (#2738)
* 修复了在查询 NAS 基准测试时字典没有经过排序的问题 (#2728)
* 修复了 Gradient Selector Dataloader Iterator 的导入问题 (#2690)
* 修复了对在 Remote 训练平台下添加数十台机器的支持 (#2725)
* 修复了 Web 界面的几个样式问题 (#2762 #2737)
* 修复了对指标中不常见类型的支持,包括 NaN 和 Infinity (#2782)
* 修复 nnictl experiment delete (#2791)
发布 1.7 - 7/8/2020
----------------------
主要功能
^^^^^^^^^^^^^^
训练平台
""""""""""""""""""""""""""""""""
* 支持 AML (Azure Machine Learning) 作为训练平台。
* OpenPAI 任务可被重用。 当 Trial 完成时, OpenPAI 任务不会停止, 而是等待下一个 Trial。 * 增加 `PAI 模式的文档 <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/TrainingService/PaiMode.md>`__
* `支持在向训练平台上传代码目录时使用 .nniignore 忽略代码目录中的文件和目录 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/TrainingService/Overview.md#how-to-use-training-service>`__.
神经网络架构搜索(NAS)
""""""""""""""""""""""""""""""""
*
`为 NAS 基准测试 (NasBench101, NasBench201, NDS) 提供了友好的 API <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/NAS/Benchmarks.md>`__。
*
`在 TensorFlow 2.X 支持 Classic NAS(即非权重共享模式) <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/NAS/ClassicNas.md>`__。
模型压缩
""""""""""""""""""""""""""""""""""
* 改进模型加速:跟踪层之间的更多依赖关系,自动解决掩码冲突,支持剪枝 ResNet 的加速
* 增加新的 Pruner,包括三个模型剪枝算法: `NetAdapt Pruner <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Compressor/Pruner.md#netadapt-pruner>`__\ , `SimulatedAnnealing Pruner <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Compressor/Pruner.md#simulatedannealing-pruner>`__\ , `AutoCompress Pruner <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Compressor/Pruner.md#autocompress-pruner>`__\ , and `ADMM Pruner <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Compressor/Pruner.md#admm-pruner>`__.
* 增加 `模型灵敏度分析工具 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Compressor/CompressionUtils.md>`__ 来帮助用户发现各层对剪枝的敏感性。
*
`用于模型压缩和 NAS 的简易 FLOPs 计算工具 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Compressor/CompressionUtils.md#model-flops-parameters-counter>`__.
*
更新 Lottery Ticket Pruner 以导出中奖彩票
示例
""""""""
* 在 NNI 上使用新的 `自定义 Tuner OpEvo <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/TrialExample/OpEvoExamples.md>`__ 自动优化张量算子。
内置 Tuner、Assessor、Advisor
""""""""""""""""""""""""""""""""""
* `允许自定义 Tuner、Assessor、Advisor 被安装为内置算法 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Tutorial/InstallCustomizedAlgos.md>`__.
Web 界面
""""""""""""""""""""""""""""""""""
* 支持更友好的嵌套搜索空间可视化。
* 在超参数图中展示 Trial 的字典的键
* 增强 Trial 持续时间展示
其它
""""""
* 提供工具函数用于合并从 NNI 获取到的参数
* 支持在 OpenPAI 模式中设置 paiStorageConfigName
文档
^^^^^^^^^^^^^
* 改进 `模型压缩文档 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/Compressor/Overview.md>`__
* 改进 `NAS 基准测试的文档 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/NAS/Benchmarks.md>`__
和 `示例 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/NAS/BenchmarksExample.ipynb>`__ 。
* 改进 `AzureML 训练平台的文档 <https://github.com/microsoft/nni/blob/v1.7/docs/zh_CN/TrainingService/AMLMode.md>`__
* 主页迁移到 readthedoc。
修复的 Bug
^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 修复模型图中含有共享的 nn.Module 时的问题
* 修复 ``make build`` 时的 nodejs OOM
* 修复 NASUI Bug
* 修复持续时间和中间结果图片更新问题
* 修复小的 Web 界面表格样式问题
发布 1.6 - 5/26/2020
-----------------------
主要功能
^^^^^^^^^^^^^^
新功能和改进
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 将 IPC 限制提高至 100W
* 修改非本机训练平台中,将上传代码到存储的逻辑
* SDK 版本支持 ``__version__``
* 支持 Windows 下开发模式安装
Web 界面
^^^^^^^^^^^^
* 显示 Trial 的错误消息
* 完善主页布局
* 重构概述页面的最佳 Trial 模块
* 从 Web 界面中去掉多阶段支持
* 在概述页面为 Trial 并发添加工具提示。
* 在超参图中显示最好的 Trial
超参优化更新
^^^^^^^^^^^^^^^^^^^^^^
* 改进 PBT 的错误处理,并支持恢复 Experiment
NAS 更新
^^^^^^^^^^^
* NAS 支持 TensorFlow 2.0 (预览版) `TF2.0 NAS 示例 <https://github.com/microsoft/nni/tree/v1.6/examples/nas/naive-tf>`__
* LayerChoice 使用 OrderedDict
* 优化导出格式
* 应用固定架构后,将 LayerChoice 替换成选择的模块
模型压缩改进
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 模型压缩支持 PyTorch 1.4
训练平台改进
^^^^^^^^^^^^^^^^^^^^^^^^
* 改进 OpenPAI YAML 的合并逻辑
* 支持 Windows 在远程模式中作为远程机器 `远程模式 <https://github.com/microsoft/nni/blob/v1.6/docs/zh_CN/TrainingService/RemoteMachineMode.md#windows>`__
修复的 Bug
^^^^^^^^^^^^^^^^
* 修复开发模式安装
* 当检查点没有 state_dict 时,SPOS 示例会崩溃
* 修复失败 Trial 造成的表格排序问题
* 支持多 Python 环境(如 conda,pyenv 等)
发布 1.5 - 4/13/2020
-----------------------
新功能和文档
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
超参优化
^^^^^^^^^^^^^^^^^^^^^^^^^^
* 全新 Tuner: `Population Based Training (PBT) <https://github.com/microsoft/nni/blob/v1.5/docs/zh_CN/Tuner/PBTTuner.md>`__
* Trial 现在可以返回无穷大和 NaN 结果
神经网络架构搜索
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 全新 NAS 算法:`TextNAS <https://github.com/microsoft/nni/blob/v1.5/docs/zh_CN/NAS/TextNAS.md>`__
* 在 Web 界面 支持 ENAS 和 DARTS的 `可视化 <https://github.com/microsoft/nni/blob/v1.5/docs/zh_CN/NAS/Visualization.md>`__
模型压缩
^^^^^^^^^^^^^^^^^
* 全新 Pruner: `GradientRankFilterPruner <https://github.com/microsoft/nni/blob/v1.5/docs/zh_CN/Compressor/Pruner.md#gradientrankfilterpruner>`__
* 默认情况下,Compressor 会验证配置
* 重构:可将优化器作为 Pruner 的输入参数,从而更容易支持 DataParallel 和其它迭代剪枝方法。 这是迭代剪枝算法用法上的重大改动。
* 重构了模型压缩示例
* 改进 `模型压缩算法 <https://github.com/microsoft/nni/blob/v1.5/docs/zh_CN/Compressor/Framework.md>`__
训练平台
^^^^^^^^^^^^^^^^
* Kubeflow 现已支持 pytorchjob crd v1 (感谢贡献者 @jiapinai)
* 实验性地支持 `DLTS <https://github.com/microsoft/nni/blob/v1.5/docs/zh_CN/TrainingService/DLTSMode.md>`__
文档的整体改进
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 语法、拼写以及措辞上的修改 (感谢贡献者 @AHartNtkn)
修复的 Bug
^^^^^^^^^^^^^^^^^^^
* ENAS 不能使用多个 LSTM 层 (感谢贡献者 @marsggbo)
* NNI 管理器的计时器无法取消订阅 (感谢贡献者 @guilhermehn)
* NNI 管理器可能会耗尽内存 (感谢贡献者 @Sundrops)
* 批处理 Tuner 不支持自定义 Trial (#2075)
* Experiment 启动失败后,无法终止 (#2080)
* 非数字的指标会破坏网页界面 (#2278)
* lottery ticket Pruner 中的 Bug
* 其它小问题
发布 1.4 - 2/19/2020
-----------------------
主要功能
^^^^^^^^^^^^^^
神经网络架构搜索
^^^^^^^^^^^^^^^^^^^^^^^^^^
* 支持 `C-DARTS <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/NAS/CDARTS.md>`__ 算法并增加 `the 示例 <https://github.com/microsoft/nni/tree/v1.4/examples/nas/cdarts>`__ using it
* 初步支持 `ProxylessNAS <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/NAS/Proxylessnas.md>`__ 并增加 `示例 <https://github.com/microsoft/nni/tree/v1.4/examples/nas/proxylessnas>`__
* 为 NAS 框架增加单元测试
模型压缩
^^^^^^^^^^^^^^^^^
* 为压缩模型增加 DataParallel,并提供 `示例 <https://github.com/microsoft/nni/blob/v1.4/examples/model_compress/multi_gpu.py>`__
* 支持模型压缩的 `加速 <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/Compressor/ModelSpeedup.md>`__ (试用版)
训练平台
^^^^^^^^^^^^^^^^
* 通过允许指定 OpenPAI 配置文件路径,来支持完整的 OpenPAI 配置
* 为新的 OpenPAI 模式(又称,paiK8S)增加示例配置 YAML 文件
* 支持删除远程模式下使用 sshkey 的 Experiment (感谢外部贡献者 @tyusr)
Web 界面
^^^^^^^^^^^^^^^^^^^^^^
* Web 界面重构:采用 fabric 框架
其它
^^^^^^
* `查看早停 Experiment <https://github.com/microsoft/nni/blob/v1.1/docs/zh_CN/Tutorial/Nnictl.md#view>`__
* 支持取消 UNKNOWN 状态的 Trial。
* 支持最大 50MB 的搜索空间文件 (感谢外部贡献者 @Sundrops)
文档
^^^^^^^^^^^^^
* 改进 NNI readthedocs 的 `索引目录结果 <https://nni.readthedocs.io/zh/latest/>`__ of NNI readthedocs
* 改进 `NAS 文档 <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/NAS/NasGuide.md>`__
* 增加 `PAI 模式的文档 <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/TrainingService/PaiMode.md>`__
* 为 `NAS <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/NAS/QuickStart.md>`__ 和 `模型压缩 <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/Compressor/QuickStart.md>`__ 增加快速入门指南
* 改进 `EfficientNet 的文档 <https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/TrialExample/EfficientNet.md>`__
Bug 修复
^^^^^^^^^^^^^^^^^^^^^^^^^^
* 修复在指标数据和 JSON 格式中对 NaN 的支持
* 修复搜索空间 ``randint`` 类型的 out-of-range Bug
* 修复模型压缩中导出 ONNX 模型时的错误张量设备的 Bug
* 修复新 OpenPAI 模式(又称,paiK8S)下,错误处理 nnimanagerIP 的 Bug
发布 1.3 - 12/30/2019
------------------------
主要功能
^^^^^^^^^^^^^^
支持神经网络架构搜索算法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 增加 `但路径一次性 <https://github.com/microsoft/nni/tree/v1.3/examples/nas/spos/>`__ 算法和示例
模型压缩算法支持
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 增加 `知识蒸馏 <https://github.com/microsoft/nni/blob/v1.3/docs/zh_CN/TrialExample/KDExample.md>`__ 算法和示例
* Pruners
* `L2Filter Pruner <https://github.com/microsoft/nni/blob/v1.3/docs/zh_CN/Compressor/Pruner.md#3-l2filter-pruner>`__
* `ActivationAPoZRankFilterPruner <https://github.com/microsoft/nni/blob/v1.3/docs/zh_CN/Compressor/Pruner.md#1-activationapozrankfilterpruner>`__
* `ActivationMeanRankFilterPruner <https://github.com/microsoft/nni/blob/v1.3/docs/zh_CN/Compressor/Pruner.md#2-activationmeanrankfilterpruner>`__
* `BNN Quantizer <https://github.com/microsoft/nni/blob/v1.3/docs/zh_CN/Compressor/Quantizer.md#bnn-quantizer>`__
训练平台
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
OpenPAI 的 NFS 支持
从 OpenPAI v0.11开始,HDFS 不再用作默认存储,可将 NFS、AzureBlob 或其他存储用作默认存储。 在本次版本中,NNI 扩展了对 OpenPAI 最近改动的支持,可与 OpenPAI v0.11 及后续版本的默认存储集成。
*
Kubeflow 更新适配
适配 Kubeflow 0.7 对 tf-operator 的新支持。
工程(代码和生成自动化)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 启用 `ESLint <https://eslint.org/>`__ 静态代码分析
小改动和 Bug 修复
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 正确识别内置 Tuner 和定制 Tuner
* Dispatcher 基类的日志
* 修复有时 Tuner、Assessor 的失败会终止 Experiment 的 Bug。
* 修复本机作为远程计算机的 `问题 <https://github.com/microsoft/nni/issues/1852>`__
* SMAC Tuner 中 Trial 配置的去重 `ticket <https://github.com/microsoft/nni/issues/1364>`__
发布 1.2 - 12/02/2019
------------------------
主要功能
^^^^^^^^^^^^^^
* `特征工程 <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/FeatureEngineering/Overview.md>`__
* 新增特征工程接口
* 新增特征选择算法:`Gradient feature selector <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/FeatureEngineering/GradientFeatureSelector.md>`__ 和 `GBDT selector <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/FeatureEngineering/GBDTSelector.md>`__
* `特征工程示例 <https://github.com/microsoft/nni/tree/v1.2/examples/feature_engineering>`__
* 神经网络结构搜索在 NNI 上的应用
* `全新 NAS 接口 <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/NAS/NasInterface.md>`__
* NAS 算法:`ENAS <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/NAS/Overview.md#enas>`__\ , `DARTS <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/NAS/Overview.md#darts>`__\ , `P-DARTS <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/NAS/Overview.md#p-darts>`__ (PyTorch)
* 经典模式下的 NAS(每次 Trial 独立运行)
* 模型压缩
* `全新模型剪枝算法 <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/Compressor/Overview.md>`__: lottery ticket 修剪, L1Filter Pruner, Slim Pruner, FPGM Pruner
* `全新模型量化算法 <https://github.com/microsoft/nni/blob/v1.2/docs/zh_CN/Compressor/Overview.md>`__\ : QAT quantizer, DoReFa quantizer
* 支持导出压缩后模型的 API。
* 训练平台
* 支持 OpenPAI 令牌身份验证
* 示例:
* `使用 NNI 自动调优 rocksdb 配置示例 <https://github.com/microsoft/nni/tree/v1.2/examples/trials/systems/rocksdb-fillrandom>`__.
* `支持 TensorFlow 2.0 的 MNIST Trial 示例 <https://github.com/microsoft/nni/tree/v1.2/examples/trials/mnist-tfv2>`__.
* 改进
* 远程训练平台中不需要 GPU 的 Trial 任务改为使用随机调度,不再使用轮询调度。
* 添加 pylint 规则来检查拉取请求,新的拉取请求需要符合 `pylint 规则 <https://github.com/microsoft/nni/blob/v1.2/pylintrc>`__。
* Web 门户和用户体验
* 支持用户添加自定义 Trial。
* 除了超参外,用户可放大缩小详细图形。
* 文档
* 改进了 NNI API 文档,增加了更多的 docstring。
Bug 修复
^^^^^^^^^^^^^^
* 修复当失败的 Trial 没有指标时,表格的排序问题。 -Issue #1773
* 页面切换时,保留选择的(最大、最小)状态。 -PR#1710
* 使超参数图的默认指标 yAxis 更加精确。 -PR#1736
* 修复 GPU 脚本权限问题。 -Issue #1665
发布 1.1 - 10/23/2019
------------------------
主要功能
^^^^^^^^^^^^^^
* Tuner 可使用专门的 GPU 资源(参考 `tutorial <https://github.com/microsoft/nni/blob/v1.1/docs/zh_CN/Tutorial/ExperimentConfig.md>`__ 中的 ``gpuIndices`` 了解详情)
* 支持配置 `log 目录 <https://github.com/microsoft/nni/blob/v0.5.1/docs/ExperimentConfig.md>`__
* Tuner 可使用专门的 GPU 资源(参考 `tutorial <https://github.com/microsoft/nni/blob/v1.1/docs/zh_CN/Tutorial/ExperimentConfig.md>`__ 中的 ``gpuIndices`` 了解详情)
* 改进 WEB 界面
* Trial 详情页面可列出每个 Trial 的超参,以及开始结束时间(需要通过 "add column" 添加)
* 优化大型 Experiment 的显示性能
* 更多示例
* `EfficientNet PyTorch 示例 <https://github.com/ultmaster/EfficientNet-PyTorch>`__
* `Cifar10 NAS 示例 <https://github.com/microsoft/nni/blob/v1.1/examples/trials/nas_cifar10/README.md>`__
* `模型压缩工具包 - Alpha 阶段 <https://github.com/microsoft/nni/blob/v1.1/docs/zh_CN/Compressor/Overview.md>`__:我们很高兴的宣布 NNI 的模型压缩工具包发布了。它还处于试验阶段,会根据使用反馈来改进。 诚挚邀请您使用、反馈,或更多贡献 诚挚邀请您使用、反馈,或更多贡献
修复的 Bug
^^^^^^^^^^^^^^^^^^^
* 当搜索空间结束后,多阶段任务会死锁 (issue #1204)
* 没有日志时,``nnictl`` 会失败 (issue #1548)
发布1.0 - 9/2/2019
----------------------
主要功能
^^^^^^^^^^^^^^
*
Tuners 和 Assessors
* 支持自动特征生成和选择 -Issue#877 -PR #1387
* 提供自动特征接口
* 基于 Beam 搜索的 Tuner
* `增加 Pakdd 示例 <https://github.com/microsoft/nni/tree/v1.0/examples/trials/auto-feature-engineering>`__
* 添加并行算法提高 TPE 在高并发下的性能。 -PR #1052
* 为 hyperband 支持多阶段 -PR #1257
*
训练平台
* 支持私有 Docker Registry -PR #755
* 改进
* 增加 RestFUL API 的 Python 包装,支持通过代码获取指标的值 PR #1318
* 新的 Python API : get_experiment_id(), get_trial_id() -PR #1353 -Issue #1331 &amp; -Issue#1368
* 优化 NAS 搜索空间 -PR #1393
* 使用 _type 统一 NAS 搜索空间 -- "mutable_type"e
* 更新随机搜索 Tuner
* 将 gpuNum 设为可选 -Issue #1365
* 删除 OpenPAI 模式下的 outputDir 和 dataDir 配置 -Issue #1342
* 在 Kubeflow 模式下创建 Trial 时,codeDir 不再被拷贝到 logDir -Issue #1224
*
Web 门户和用户体验
* 在 Web 界面的搜索过程中显示最好指标的曲线 -Issue #1218
* 在多阶段 Experiment 中,显示参数列表的当前值 -Issue1210 -PR #1348
* 在 AddColumn 中增加 "Intermediate count" 选项。 -Issue #1210
* 在 Web 界面中支持搜索参数的值 -Issue #1208
* 在默认指标图中,启用指标轴的自动缩放 -Issue #1360
* 在命令行中为 nnictl 命令增加详细文档的连接 -Issue #1260
* 用户体验改进:显示 Error 日志 -Issue #1173
*
文档
* 更新文档结构 -Issue #1231
* (已删除) 多阶段文档的改进 -Issue #1233 -PR #1242
* 添加配置示例
* `改进 WebUI 描述 <Tutorial/WebUI.rst>`__ -PR #1419
Bug 修复
^^^^^^^^^^^^^^
* (Bug 修复)修复 0.9 版本中的链接 -Issue #1236
* (Bug 修复)自动完成脚本
* (Bug 修复) 修复管道中仅检查脚本中最后一个命令退出代码的问题。 -PR #1417
* (Bug 修复) Tuner 的 quniform -Issue #1377
* (Bug fix) 'quniform' 在 GridSearch 和其它 Tuner 之间的含义不同。 * -Issue #1335
* (Bug 修复)"nnictl experiment list" 将 "RUNNING" 状态的 Experiment 显示为了 "INITIALIZED" -PR #1388
* (Bug 修复) 在 NNI dev 安装模式下无法安装 SMAC。 -Issue #1376
* (Bug 修复) 无法点击中间结果的过滤按钮 -Issue #1263
* (Bug 修复) API "/api/v1/nni/trial-jobs/xxx" 在多阶段 Experiment 无法显示 Trial 的所有参数 -Issue #1258
* (Bug 修复) 成功的 Trial 没有最终结果,但 Web 界面显示成了 ×××(FINAL) -Issue #1207
* (Bug 修复) nnictl stop -Issue #1298
* (Bug 修复) 修复安全警告
* (Bug 修复) 超参页面损坏 -Issue #1332
* (Bug 修复) 运行 flake8 测试来查找 Python 语法错误和未定义的名称 -PR #1217
发布 0.9 - 7/1/2019
----------------------
主要功能
^^^^^^^^^^^^^^
* 生成 NAS 编程接口
* 为 NAS 接口增加 ``enas-mode`` and ``oneshot-mode``: `PR #1201 <https://github.com/microsoft/nni/pull/1201#issue-291094510>`__
*
`有 Matern 核的高斯过程 Tuner <Tuner/GPTuner.rst>`__
*
(已删除) 支持多阶段 Experiment
* 为多阶段 Experiment 增加新的训练平台:pai 模式从 v0.9 开始支持多阶段 Experiment。
* 为以下内置 Tuner 增加多阶段的功能:
* TPE, Random Search, Anneal, Naïve Evolution, SMAC, Network Morphism, Metis Tuner。
*
Web 界面
* 在 Web 界面中可比较 Trial。 详情参考 `查看 Trial 状态 <Tutorial/WebUI.rst>`__
* 允许用户调节 Web 界面的刷新间隔。 详情参考 `查看 Summary 界面 <Tutorial/WebUI.rst>`__
* 更友好的显示中间结果。 详情参考 `查看 Trial 状态 <Tutorial/WebUI.rst>`__
* `命令行接口 <Tutorial/Nnictl.rst>`__
* ``nnictl experiment delete``:删除一个或多个 Experiment,包括其日志,结果,环境信息核缓存。 用于删除无用的 Experiment 结果,或节省磁盘空间。
* ``nnictl platform clean``:用于清理目标平台的磁盘空间。 所提供的 YAML 文件包括了目标平台的信息,与 NNI 配置文件的格式相同。
Bug 修复和其它更新
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 改进 Tuner 安装过程:增加 < `sklearn <https://scikit-learn.org/stable/>`__ 依赖。
* (Bug 修复) 连接 OpenPAI 失败的 HTTP 代码 - `Issue #1076 <https://github.com/microsoft/nni/issues/1076>`__
* (Bug 修复) 为 OpenPAI 平台验证文件名 - `Issue #1164 <https://github.com/microsoft/nni/issues/1164>`__
* (Bug 修复) 更新 Metis Tunerz 中的 GMM
* (Bug 修复) Web 界面负数的刷新间隔时间 - `Issue #1182 <https://github.com/microsoft/nni/issues/1182>`__ , `Issue #1185 <https://github.com/microsoft/nni/issues/1185>`__
* (Bug 修复) 当只有一个超参时,Web 界面的超参无法正确显示 - `Issue #1192 <https://github.com/microsoft/nni/issues/1192>`__
发布 0.8 - 6/4/2019
----------------------
主要功能
^^^^^^^^^^^^^^
* 在 Windows 上支持 NNI 的 OpenPAI 和远程模式
* NNI 可在 Windows 上使用 OpenPAI 模式
* NNI 可在 Windows 上使用 OpenPAI 模式
* GPU 的高级功能
* 在本机或远程模式上,可在同一个 GPU 上运行多个 Trial。
* 在已经运行非 NNI 任务的 GPU 上也能运行 Trial
* 支持 Kubeflow v1beta2 操作符
* 支持 Kubeflow TFJob/PyTorchJob v1beta2
* `权重共享的 <https://github.com/microsoft/nni/blob/v0.5/docs/AdvancedNAS.md>`__ 高级支持:为 NAS Tuner 提供权重共享,当前支持 NFS。
* 实现了 NAS 的编程接口,可通过 NNI Annotation 很容易的表达神经网络架构搜索空间
* 提供新命令 ``nnictl trial codegen`` 来调试 NAS 代码生成部分
* 提供 NAS 编程接口教程,NAS 在 MNIST 上的示例,用于 NAS 的可定制的随机 Tuner
* 支持在恢复 Experiment 时,同时恢复 Tuner 和 Advisor 的状态
* 在恢复 Experiment 时,Tuner 和 Advisor 会导入已完成的 Trial 的数据。
* Web 界面
* 改进拷贝 Trial 参数的设计
* 在 hyper-parameter 图中支持 'randint' 类型
* 使用 ComponentUpdate 来避免不必要的刷新
Bug 修复和其它更新
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 修复 ``nnictl update`` 不一致的命令行风格
* SMAC Tuner 支持导入数据
* 支持 Experiment 状态从 ERROR 回到 RUNNING
* 修复表格的 Bug
* 优化嵌套搜索空间
* 优化 'randint' 类型,并支持下限
* `超参调优算法的对比 <CommunitySharings/HpoComparison.rst>`__
* `NAS 算法对比 <CommunitySharings/NasComparison.rst>`__
* `NNI 在推荐上的应用 <CommunitySharings/RecommendersSvd.rst>`__
发布 0.7 - 4/29/2018
-----------------------
主要功能
^^^^^^^^^^^^^^
* `在 WIndows 上支持 NNI <Tutorial/InstallationWin.rst>`__
* NNI 可在 Windows 上使用本机模式
* `全新 advisor: BOHB <Tuner/BohbAdvisor.rst>`__
* 支持新的 BOHB Advisor,这是一个健壮而有效的超参调优算法,囊括了贝叶斯优化和 Hyperband 的优点
* `支持通过 nnictl 来导入导出 Experiment 数据 <Tutorial/Nnictl.rst>`__
* 在 Experiment 执行完后,可生成分析结果报告
* 支持将先前的调优数据导入到 Tuner 和 Advisor 中
* `为 NNI Trial 任务指定 GPU 设备 <Tutorial/ExperimentConfig.rst#localConfig>`__
* 通过 gpuIndices 配置来为 Trial 任务指定GPU。如果 Experiment 配置文件中有 gpuIndices,则只有指定的 GPU 会被用于 NNI 的 Trial 任务。
* 改进 Web 界面
* 在 Web 界面上使用十进制格式的指标
* 添加多阶段训练相关的提示
* 可将超参复制为 Python dict 格式
* 可将提前终止的 Trial 数据传入 Tuner。
* 为 nnictl 提供更友好的错误消息
* 为 YAML 文件格式错误提供更有意义的错误信息
Bug 修复
^^^^^^^^^^^^^^^^
* 运行 nnictl stop 的异步 Dispatcher 模式时,无法杀掉所有的 Python 线程
* nnictl --version 不能在 make dev-install 下使用
* OpenPAI 平台下所有的 Trial 任务状态都是 'WAITING'
发布 0.6 - 4/2/2019
----------------------
主要功能
^^^^^^^^^^^^^^
* `版本检查 <TrainingService/PaiMode.rst>`__
* 检查 nniManager 和 trialKeeper 的版本是否一致
* `为早停的任务报告最终指标 <https://github.com/microsoft/nni/issues/776>`__
* 如果 includeIntermediateResults 为 true,最后一个 Assessor 的中间结果会被发送给 Tuner 作为最终结果。 includeIntermediateResults 的默认值为 false。
* `独立的 Tuner/Assessor <https://github.com/microsoft/nni/issues/841>`__
* 增加两个管道来分离 Tuner 和 Assessor 的消息
* 使日志集合功能可配置
* 为所有 Trial 增加中间结果的视图
Bug 修复
^^^^^^^^^^^^^^^^
* `为 OpenPAI 增加 shmMB 配置 <https://github.com/microsoft/nni/issues/842>`__
* 修复在指标为 dict 时,无法显示任何结果的 Bug。
* 修复 hyperband 中浮点类型的计算问题
* 修复 SMAC Tuner 中搜索空间转换的错误
* 修复 Web 界面中解析 Experiment 的错误格式
* 修复 Metis Tuner 冷启动时的错误
发布 0.5.2 - 3/4/2019
------------------------
改进
^^^^^^^^^^^^
* 提升 Curve fitting Assessor 的性能。
文档
^^^^^^^^^^^^^
* 发布中文文档网站:https://nni.readthedocs.io/zh/latest/
* 调试和维护:https://nni.readthedocs.io/zh/latest/Tutorial/HowToDebug.html
* Tuner、Assessor 参考:https://nni.readthedocs.io/zh/latest/sdk_reference.html#tuner
Bug 修复和其它更新
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 修复了在某些极端条件下,不能正确存储任务的取消状态。
* 修复在使用 SMAC Tuner 时,解析搜索空间的错误。
* 修复 CIFAR-10 样例中的 broken pipe 问题。
* 为本地训练服务和 NNI 管理器添加单元测试。
* 为远程服务器、OpenPAI 和 Kubeflow 训练平台在 Azure 中增加集成测试。
* 在 OpenPAI 客户端中支持 Pylon 路径。
发布 0.5.1 - 1/31/2018
-------------------------
改进
^^^^^^^^^^^^
* 支持 `不同级别的日志 <https://github.com/microsoft/nni/blob/v0.5.1/docs/ExperimentConfig.md>`__,使其更易于调试。
* 支持 `不同级别的日志 <https://github.com/microsoft/nni/blob/v0.5.1/docs/ExperimentConfig.md>`__,使其更易于调试。
文档
^^^^^^^^^^^^^
* 重新组织文档,新的主页位置:https://nni.readthedocs.io/zh/latest/
Bug 修复和其它更新
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 修复了 Python 虚拟环境中安装的 Bug,并重构了安装逻辑。
* 修复了在最新的 OpenPAI 下存取 HDFS 失败的问题。
* 修复了有时刷新 stdout 会造成 Experiment 崩溃的问题。
发布 0.5.0 - 01/14/2019
--------------------------
主要功能
^^^^^^^^^^^^^^
支持新的 Tuner 和 Assessor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 支持 `Metis tuner <Tuner/MetisTuner.rst>`__ 对于\ **在线**\ 超参调优的场景,Metis 算法已经被证明非常有效。
* 支持 `ENAS customized tuner <https://github.com/countif/enas_nni>`__。由 GitHub 社区用户所贡献。它是神经网络的搜索算法,能够通过强化学习来学习神经网络架构,比 NAS 的性能更好。
* 支持 `Curve fitting assessor <Assessor/CurvefittingAssessor.rst>`__,通过曲线拟合的策略来实现提前终止 Trial。
* `权重共享的 <https://github.com/microsoft/nni/blob/v0.5/docs/AdvancedNAS.md>`__ 高级支持:为 NAS Tuner 提供权重共享,当前支持 NFS。
改进训练平台
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* `FrameworkController 训练服务 <TrainingService/FrameworkControllerMode.rst>`__:支持使用在 Kubernetes 上使用 FrameworkController 运行。
* FrameworkController 是 Kubernetes 上非常通用的控制器(Controller),能用来运行基于各种机器学习框架的分布式作业,如 TensorFlow,Pytorch, MXNet 等。
* NNI 为作业定义了统一而简单的规范。
* 如何使用 FrameworkController 的 MNIST 样例。
改进用户体验
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 为 OpenPAI, Kubeflow 和 FrameworkController 模式提供更好的日志支持。
* 改进后的日志架构能将尝试的 stdout/stderr 通过 HTTP POST 方式发送给 NNI 管理器。 NNI 管理器将 Trial 的 stdout/stderr 消息存储在本地日志文件中。
* 在 WEB 界面上显示 Trial 日志的链接。
* 支持将最终结果显示为键值对。
发布 0.4.1 - 12/14/2018
--------------------------
主要功能
^^^^^^^^^^^^^^
支持新的 Tuner
^^^^^^^^^^^^^^^^^^
* 支持 `network morphism <Tuner/NetworkmorphismTuner.rst>`__ Tuner
改进训练服务
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
将 `Kubeflow 训练平台 <TrainingService/KubeflowMode.rst>`__ 的依赖从 kubectl CLI 迁移到 `Kubernetes API <https://kubernetes.io/docs/concepts/overview/kubernetes-api/>`__ 客户端。
* Kubeflow 训练服务支持 `Pytorch-operator <https://github.com/kubeflow/pytorch-operator>`__。
* 改进将本地代码文件上传到 OpenPAI HDFS 的性能。
* 修复 OpenPAI 在 WEB 界面的 Bug:当 OpenPAI 认证过期后,Web 界面无法更新 Trial 作业的状态。
改进 NNICTL
^^^^^^^^^^^^^^^^^^^
* 在 nnictl 和 WEB 界面中显示 NNI 的版本信息。 可使用 **nnictl -v** 来显示安装的 NNI 版本。
改进 WEB 界面
^^^^^^^^^^^^^^^^^^
* 在 Experiment 运行中可修改并发数量
* 增加指向 NNI Github 的反馈链接,可直接创建问题
* 可根据指标,定制选择(最大或最小)的前 10 个 Trial。
* 为 dispatcher 和 nnimanager 提供下载日志的功能
* 为指标数值图提供自动缩放的数轴
* 改进 Annotation,支持在搜索空间中显示实际的选项
新样例
^^^^^^^^^^^^
* `FashionMnist <https://github.com/microsoft/nni/tree/v0.5/examples/trials/network_morphism>`__ 使用 network morphism Tuner
* 改进 PyTorch 中的 `分布式 MNIST 示例 <https://github.com/microsoft/nni/tree/v0.5/examples/trials/mnist-distributed-pytorch>`__
发布 0.4 - 12/6/2018
-----------------------
主要功能
^^^^^^^^^^^^^^
* `Kubeflow 训练平台 <TrainingService/KubeflowMode.rst>`__
* 支持 tf-operator
* Kubeflow 上的 `分布式 Trial 示例 <https://github.com/microsoft/nni/tree/v0.4/examples/trials/mnist-distributed/dist_mnist.py>`__
* `Grid search tuner <Tuner/GridsearchTuner.rst>`__
* `Hyperband tuner <Tuner/HyperbandAdvisor.rst>`__
* 支持在 MAC 上运行 NNI 实验
* Web 界面
* 支持 hyperband 调参器
* 移除 tensorboard 按钮
* 显示实验的错误消息
* 显示搜索空间和尝试配置的行号
* 支持通过指定的尝试 id 来搜索
* 显示尝试的 hdfsLogPath
* 下载实验参数
其它
^^^^^^
* 异步调度
* 更新 Docker 文件,增加 pytorch 库
* 重构 'nnictl stop' 过程,发送 SIGTERM 给 NNI 管理器进程,而不是调用停止 Restful API.
* OpenPAI 训练服务修复缺陷
* 在 NNI 管理器中为 OpenPAI 集群配置文件支持 IP 配置(nniManagerIp),来修复用户计算机没有 eth0 设备的问题。
* codeDir 中的文件数量上限改为1000,避免用户无意中填写了 root 目录。
* 移除 OpenPAI 作业的 stdout 日志中无用的 ‘metrics is empty’。 在新指标被记录时,仅输出有用的消息,来减少用户检查 OpenPAI Trial 输出时的困惑。
* 在尝试 keeper 的开始增加时间戳。
发布 0.3.0 - 11/2/2018
-------------------------
NNICTL 的新功能和更新
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
支持同时运行多个实验。
在 v0.3 以前,NNI 仅支持一次运行一个实验。 此版本开始,用户可以同时运行多个 Experiment。 每个实验都需要一个唯一的端口,第一个实验会像以前版本一样使用默认端口。 需要为其它实验指定唯一端口:
.. code-block:: bash
nnictl create --port 8081 --config <config file path>
*
支持更新最大尝试的数量。
使用 ``nnictl update --help`` 了解详情。 或参考 `NNICTL Spec <Tutorial/Nnictl.rst>`__ 查看完整帮助。
API 的新功能和更新
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
不兼容的变化:nn.get_parameters() 改为 nni.get_next_parameter。 所有以前版本的样例将无法在 v0.3 上运行,需要重新克隆 NNI 代码库获取新样例。 如果在自己的代码中使用了 NNI,也需要相应的更新。 所有以前版本的样例将无法在 v0.3 上运行,需要重新克隆 NNI 代码库获取新样例。 如果在自己的代码中使用了 NNI,也需要相应的更新。
*
新 API **nni.get_sequence_id()**。
每个尝试任务都会被分配一个唯一的序列数字,可通过 nni.get_sequence_id() API 来获取。
.. code-block:: bash
git clone -b v0.3 https://github.com/microsoft/nni.git
*
**nni.report_final_result(result)** API 对结果参数支持更多的数据类型。
可用类型:
* int
* float
* 包含有 'default' 键值的 dict,'default' 的值必须为 int 或 float。 dict 可以包含任何其它键值对。
新的内置调参器
^^^^^^^^^^^^^^^^^
**Batch Tuner(批处理调参器)** 会执行所有曹参组合,可被用来批量提交尝试任务。
新样例
^^^^^^^^^^^^
*
公共的 NNI Docker 映像:
.. code-block:: bash
docker pull msranni/nni:latest
*
新的 Trial 示例: `NNI Sklearn Example <https://github.com/microsoft/nni/tree/v0.3/examples/trials/sklearn>`__
* 全新比赛示例 `Kaggle Competition TGS Salt Example <https://github.com/microsoft/nni/tree/v0.2/examples/trials/kaggle-tgs-salt>`__
其它
^^^^^^
* 界面重构,参考 `WebUI 文档 <Tutorial/WebUI.rst>`__,了解如何使用新界面。
* 持续集成:NNI 已切换到 Azure pipelines。
发布 0.2.0 - 9/29/2018
-------------------------
主要功能
^^^^^^^^^^^^^^
* 支持 `OpenPAI <https://github.com/microsoft/pai>`__ (又称 pai) 训练平台 (参考 `这里 <TrainingService/PaiMode.rst>`__ 来了解如何在 OpenPAI 下提交 NNI 任务)
* 支持 pai 模式的训练服务。 NNI 尝试可发送至 OpenPAI 集群上运行
* NNI 尝试输出 (包括日志和模型文件) 会被复制到 OpenPAI 的 HDFS 中。
* 支持 `SMAC <https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf>`__ tuner (参考 `这里 <Tuner/SmacTuner.rst>`__ 来了解如何使用 SMAC tuner)
* `SMAC <https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf>`__ 基于 Sequential Model-Based Optimization (SMBO). 它会利用使用过的突出的模型(高斯随机过程模型),并将随机森林引入到SMBO中,来处理分类参数。 * `通用 NAS 编程接口 <https://github.com/microsoft/nni/blob/v0.8/docs/zh_CN/GeneralNasInterfaces.md>`__
* 支持将 NNI 安装在 `conda <https://conda.io/docs/index.html>`__ 和 Python 虚拟环境中。
* 其它
* 更新 ga squad 样例与相关文档
* 用户体验改善及缺陷修复
发布 0.1.0 - 9/10/2018 (首个版本)
-------------------------------------------
首次发布 Neural Network Intelligence (NNI)。
主要功能
^^^^^^^^^^^^^^
* 安装和部署
* 支持 pip 和源代码安装
* 支持本机(包括多 GPU 卡)训练和远程多机训练模式
* 调参器,评估器和尝试
* 支持的自动机器学习算法包括: hyperopt_tpe, hyperopt_annealing, hyperopt_random, 和 evolution_tuner。
* 支持评估器(提前终止)算法包括:medianstop。
* 提供 Python API 来自定义调参器和评估器
* 提供 Python API 来包装尝试代码,以便能在 NNI 中运行
* 实验
* 提供命令行工具 'nnictl' 来管理实验
* 提供网页界面来查看并管理实验
* 持续集成
* 使用 Ubuntu 的 `travis-ci <https://github.com/travis-ci>`__ 来支持持续集成
* 其它
* 支持简单的 GPU 任务调度
../en_US/Release.rst
\ No newline at end of file
<p align="center">
<img src=".././img/release-1-title-1.png" width="100%" />
</p>
从 2018 年 9 月到 2019 年 9 月,我们一直在前进 ...
**好消息!**&nbsp;&nbsp;NNI v1.0 带来了更强的**伸缩性****易用性**。 基于各种[调参算法](./Tuner/BuiltinTuner.md),NNI 已经支持了超参调优,神经网络结构搜索,自动特侦工程等,对算法工程师非常有用的功能。除此之外,NNI v1.0 带来了大量的改进,包括调优算法的优化,[Web 界面简化并更加直观](./Tutorial/WebUI.md),以及[更多样的平台](./TrainingService/SupportTrainingService.md)。 NNI 已经成为了一个更加智能的自动机器学习(AutoML)工具包。
<p align="center">
<img src=".././img/nni-1.png" width="80%" />
</p>
<p align="center">
<img src=".././img/release-1-title-2.png" width="100%" />
</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**第一步**: 根据[教程](./Tutorial/Installation.md)安装 NNI v1.0。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**第二步**:找到 "Hello world" 示例,按照[教程](./Tutorial/QuickStart.md)入门。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**第三步**:熟悉 [Web 界面](./Tutorial/WebUI.md),用 NNI 进行自动机器学习!
全自动工具极大地提高了调优过程的效率。 关于 v1.0 的更多细节,可参考 [Release 1.0](https://github.com/microsoft/nni/releases)。 关于进一步计划,可参考[路线图](https://github.com/microsoft/nni/wiki/Roadmap)。 此外,欢迎更多的参与者加入我们。可参考[如何贡献](./Tutorial/Contributing.md),来了解多种参与方法。
\ No newline at end of file
../en_US/Release_v1.0.md
\ No newline at end of file
研究和出版物
=========================
为了使自动模型设计、调优真正实用和强大,我们同时致力于工具链的开发和科学研究。 一方面,我们的主要工作是工具链的开发。 另一方面,我们的工作旨在改进这个工具链,重新思考 AutoML 中具有挑战性问题(包括系统和算法),并提出优雅的解决方案。 下面列出了我们的一些研究成果,我们鼓励在 AutoML 涌现出更多的研究工作,并希望和更多优秀的研究者合作。
系统研究
---------------
* `Retiarii: A Deep Learning Exploratory-Training Framework <https://www.usenix.org/system/files/osdi20-zhang_quanlu.pdf>`__
.. code-block:: bibtex
@inproceedings{zhang2020retiarii,
title={Retiarii: A Deep Learning Exploratory-Training Framework},
author={Zhang, Quanlu and Han, Zhenhua and Yang, Fan and Zhang, Yuge and Liu, Zhe and Yang, Mao and Zhou, Lidong},
booktitle={14th $\{$USENIX$\}$ Symposium on Operating Systems Design and Implementation ($\{$OSDI$\}$ 20)},
pages={919--936},
year={2020}
}
* `AutoSys: The Design and Operation of Learning-Augmented Systems <https://www.usenix.org/system/files/atc20-liang-chieh-jan.pdf>`__
.. code-block:: bibtex
@inproceedings{liang2020autosys,
title={AutoSys: The Design and Operation of Learning-Augmented Systems},
author={Liang, Chieh-Jan Mike and Xue, Hui and Yang, Mao and Zhou, Lidong and Zhu, Lifei and Li, Zhao Lucis and Wang, Zibo and Chen, Qi and Zhang, Quanlu and Liu, Chuanjie and others},
booktitle={2020 $\{$USENIX$\}$ Annual Technical Conference ($\{$USENIX$\}$$\{$ATC$\}$ 20)},
pages={323--336},
year={2020}
}
* `Gandiva: Introspective Cluster Scheduling for Deep Learning <https://www.usenix.org/system/files/osdi18-xiao.pdf>`__
.. code-block:: bibtex
@inproceedings{xiao2018gandiva,
title={Gandiva: Introspective cluster scheduling for deep learning},
author={Xiao, Wencong and Bhardwaj, Romil and Ramjee, Ramachandran and Sivathanu, Muthian and Kwatra, Nipun and Han, Zhenhua and Patel, Pratyush and Peng, Xuan and Zhao, Hanyu and Zhang, Quanlu and others},
booktitle={13th $\{$USENIX$\}$ Symposium on Operating Systems Design and Implementation ($\{$OSDI$\}$ 18)},
pages={595--610},
year={2018}
}
算法研究
------------------
全新算法
^^^^^^^^^^^^^^
* `TextNAS: A Neural Architecture Search Space Tailored for Text Representation <https://arxiv.org/pdf/1912.10729.pdf>`__
.. code-block:: bibtex
@inproceedings{wang2020textnas,
title={TextNAS: A Neural Architecture Search Space Tailored for Text Representation.},
author={Wang, Yujing and Yang, Yaming and Chen, Yiren and Bai, Jing and Zhang, Ce and Su, Guinan and Kou, Xiaoyu and Tong, Yunhai and Yang, Mao and Zhou, Lidong},
booktitle={AAAI},
pages={9242--9249},
year={2020}
}
* `Cream of the Crop: Distilling Prioritized Paths For One-Shot Neural Architecture Search <https://papers.nips.cc/paper/2020/file/d072677d210ac4c03ba046120f0802ec-Paper.pdf>`__
.. code-block:: bibtex
@article{peng2020cream,
title={Cream of the Crop: Distilling Prioritized Paths For One-Shot Neural Architecture Search},
author={Peng, Houwen and Du, Hao and Yu, Hongyuan and Li, Qi and Liao, Jing and Fu, Jianlong},
journal={Advances in Neural Information Processing Systems},
volume={33},
year={2020}
}
* `Metis: Robustly tuning tail latencies of cloud systems <https://www.usenix.org/system/files/conference/atc18/atc18-li-zhao.pdf>`__
.. code-block:: bibtex
@inproceedings{li2018metis,
title={Metis: Robustly tuning tail latencies of cloud systems},
author={Li, Zhao Lucis and Liang, Chieh-Jan Mike and He, Wenjia and Zhu, Lianjie and Dai, Wenjun and Jiang, Jin and Sun, Guangzhong},
booktitle={2018 $\{$USENIX$\}$ Annual Technical Conference ($\{$USENIX$\}$$\{$ATC$\}$ 18)},
pages={981--992},
year={2018}
}
* `OpEvo: An Evolutionary Method for Tensor Operator Optimization <https://arxiv.org/abs/2006.05664>`__
.. code-block:: bibtex
@article{gao2020opevo,
title={OpEvo: An Evolutionary Method for Tensor Operator Optimization},
volume={35},
url={https://ojs.aaai.org/index.php/AAAI/article/view/17462},
number={14},
journal={Proceedings of the AAAI Conference on Artificial Intelligence},
author={Gao, Xiaotian and Wei, Cui and Zhang, Lintao and Yang, Mao},
year={2021}, month={May}, pages={12320-12327}
}
评估和理解
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* `Deeper insights into weight sharing in neural architecture search <https://arxiv.org/pdf/2001.01431.pdf>`__
.. code-block:: bibtex
@article{zhang2020deeper,
title={Deeper insights into weight sharing in neural architecture search},
author={Zhang, Yuge and Lin, Zejun and Jiang, Junyang and Zhang, Quanlu and Wang, Yujing and Xue, Hui and Zhang, Chen and Yang, Yaming},
journal={arXiv preprint arXiv:2001.01431},
year={2020}
}
* `How Does Supernet Help in Neural Architecture Search? <https://arxiv.org/abs/2010.08219>`__
.. code-block:: bibtex
@article{zhang2020does,
title={How Does Supernet Help in Neural Architecture Search?},
author={Zhang, Yuge and Zhang, Quanlu and Yang, Yaming},
journal={arXiv preprint arXiv:2010.08219},
year={2020}
}
应用
^^^^^^^^^^^^
* `AutoADR: Automatic Model Design for Ad Relevance <https://arxiv.org/pdf/2010.07075.pdf>`__
.. code-block:: bibtex
@inproceedings{chen2020autoadr,
title={AutoADR: Automatic Model Design for Ad Relevance},
author={Chen, Yiren and Yang, Yaming and Sun, Hong and Wang, Yujing and Xu, Yu and Shen, Wei and Zhou, Rong and Tong, Yunhai and Bai, Jing and Zhang, Ruofei},
booktitle={Proceedings of the 29th ACM International Conference on Information \& Knowledge Management},
pages={2365--2372},
year={2020}
}
../en_US/ResearchPublications.rst
\ No newline at end of file
.. role:: raw-html(raw)
:format: html
框架和库的支持
==============================
通过内置的 Python API,NNI 天然支持所有 Python( ``版本 >= 3.6`` )语言的 AI 框架,可使用所有超参调优和神经网络搜索算法。 NNI 还为常见场景提供了一些示例和教程,使上手更容易。
支持的 AI 框架
-----------------------
* `PyTorch <https://github.com/pytorch/pytorch>`__
* :githublink:`MNIST-pytorch <examples/trials/mnist-distributed-pytorch>`
* `CIFAR-10 <./TrialExample/Cifar10Examples.rst>`__
* :githublink:`TGS 盐识别挑战 <examples/trials/kaggle-tgs-salt/README.md>`
* :githublink:`Network_morphism <examples/trials/network_morphism/README.md>`
* `TensorFlow <https://github.com/tensorflow/tensorflow>`__
* :githublink:`MNIST-tensorflow <examples/trials/mnist-distributed>`
* :githublink:`Squad <examples/trials/ga_squad/README.md>`
* `Keras <https://github.com/keras-team/keras>`__
* :githublink:`MNIST-keras <examples/trials/mnist-keras>`
* :githublink:`Network_morphism <examples/trials/network_morphism/README.md>`
* `MXNet <https://github.com/apache/incubator-mxnet>`__
* `Caffe2 <https://github.com/BVLC/caffe>`__
* `CNTK(Python) <https://github.com/microsoft/CNTK>`__
* `Spark MLlib <http://spark.apache.org/mllib/>`__
* `Chainer <https://chainer.org/>`__
* `Theano <https://pypi.org/project/Theano/>`__
鼓励您 `贡献更多示例 <Tutorial/Contributing.rst>`__ 为其他的 NNI 用户
支持的库
-----------------
NNI 也支持其它 Python 库,包括一些基于 GBDT 的算法:XGBoost, CatBoost 以及 lightGBM。
* `Scikit-learn <https://scikit-learn.org/stable/>`__
* `Scikit-learn <TrialExample/SklearnExamples.rst>`__
* `XGBoost <https://xgboost.readthedocs.io/en/latest/>`__
* `CatBoost <https://catboost.ai/>`__
* `LightGBM <https://lightgbm.readthedocs.io/en/latest/>`__
* `Auto-gbdt <TrialExample/GbdtExample.rst>`__
这只是 NNI 支持的一小部分库。 如果对 NNI 感兴趣,可参考 `此教程 <TrialExample/Trials.rst>`__ 来继续学习。
除了这些案例,也欢迎更多的用户将 NNI 应用到自己的工作中,如果有任何疑问,请参考 `在 NNI 上实现 Trial <TrialExample/Trials.rst>`__ 。 如果想成为 NNI 的贡献者,无论是分享示例,还是实现 Tuner 或其它内容,我们都非常期待您的参与。更多信息请参考 `这里 <Tutorial/Contributing.rst>`__ 。
../en_US/SupportedFramework_Library.rst
\ No newline at end of file
**在 Azure Machine Learning 上运行 Experiment**
===================================================
NNI 支持在 `AML <https://azure.microsoft.com/zh-cn/services/machine-learning/>`__ 上运行 Experiment,称为 aml 模式。
设置环境
-----------------
步骤 1. 参考 `指南 <../Tutorial/QuickStart.rst>`__ 安装 NNI。
步骤 2. 通过此 `链接 <https://azure.microsoft.com/zh-cn/free/services/machine-learning/>`__ 创建 Azure 账户/订阅。 如果已有 Azure 账户/订阅,跳过此步骤。
步骤 3. 在机器上安装 Azure CLI,参照 `此 <https://docs.microsoft.com/zh-cn/cli/azure/install-azure-cli?view=azure-cli-latest>`__ 安装指南。
步骤 4. 从 CLI 验证您的 Azure 订阅。 要进行交互式身份验证,请打开命令行或终端并使用以下命令:
.. code-block:: bash
az login
步骤 5. 使用 Web 浏览器登录 Azure 帐户,并创建机器学习资源。 需要选择资源组并指定工作空间的名称。 之后下载 ``config.json``,该文件将会在后面用到。
.. image:: ../../img/aml_workspace.png
:target: ../../img/aml_workspace.png
:alt:
步骤 6. 创建 AML 集群作为计算集群。
.. image:: ../../img/aml_cluster.png
:target: ../../img/aml_cluster.png
:alt:
步骤 7. 打开命令行并安装 AML 环境。
.. code-block:: bash
python3 -m pip install azureml
python3 -m pip install azureml-sdk
运行实验
-----------------
以 ``examples/trials/mnist-pytorch`` 为例。 NNI 的 YAML 配置文件如下:
.. code-block:: yaml
authorName: default
experimentName: example_mnist
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 10
trainingServicePlatform: aml
searchSpacePath: search_space.json
#choice: true, false
useAnnotation: false
tuner:
#choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner, GPTuner
#SMAC (SMAC should be installed through nnictl)
builtinTunerName: TPE
classArgs:
#choice: maximize, minimize
optimize_mode: maximize
trial:
command: python3 mnist.py
codeDir: .
image: msranni/nni
gpuNum: 1
amlConfig:
subscriptionId: ${replace_to_your_subscriptionId}
resourceGroup: ${replace_to_your_resourceGroup}
workspaceName: ${replace_to_your_workspaceName}
computeTarget: ${replace_to_your_computeTarget}
注意:如果用 aml 模式运行,需要在 YAML 文件中设置 ``trainingServicePlatform: aml`` 。
与 `本机模式 <LocalMode.rst>`__ 的 Trial 配置相比,aml 模式下的键值还有:
* image
* 必填。 作业中使用的 Docker 映像名称。 NNI 支持 ``msranni/nni`` 的映像来跑 jobs。
.. Note:: 映像是基于 cuda 环境来打包的,可能并不适用于 aml 模式 CPU 集群。
amlConfig:
* subscriptionId
* 必填,Azure 订阅的 Id
* resourceGroup
* 必填,Azure 订阅的资源组
* workspaceName
* 必填,Azure 订阅的工作空间
* computeTarget
* 必填,要在 AML 工作区中使用的计算机集群名称。 `参考文档 <https://docs.microsoft.com/zh-cn/azure/machine-learning/concept-compute-target>`__ 了解步骤 6。
* maxTrialNumPerGpu
* 可选,默认值为 1。 用于指定 GPU 设备上的最大并发 Trial 的数量。
* useActiveGpu
* 可选,默认为 false。 用于指定 GPU 上存在其他进程时是否使用此 GPU。 默认情况下,NNI 仅在 GPU 中没有其他活动进程时才使用 GPU。
amlConfig 需要的信息可以从步骤 5 下载的 ``config.json`` 找到。
运行以下命令来启动示例示例 Experiment:
.. code-block:: bash
git clone -b ${NNI_VERSION} https://github.com/microsoft/nni
cd nni/examples/trials/mnist-pytorch
# modify config_aml.yml ...
nnictl create --config config_aml.yml
将 ``${NNI_VERSION}`` 替换为发布的版本或分支名称,例如:``v2.0``。
通过使用工作室监控你在云端的代码
--------------------------------------------------
要监控你的任务的代码,你需要访问你在第5步创建的工作室。 一旦任务完成,进入 Outputs + logs 栏。 在那里你可以看到一个 70_driver_log.txt 文件,这个文件包含了运行的标准输出,当你在云端调试远程运行时,这个文件很有用。 从 `这里 <https://docs.microsoft.com/zh-cn/azure/machine-learning/tutorial-1st-experiment-hello-world>`__ 了解更多关于 AML 的信息。
../../en_US/TrainingService/AMLMode.rst
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment