This repository has been archived by the owner on Sep 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
71fbff1
commit 049634f
Showing
30 changed files
with
606 additions
and
343 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,7 +4,7 @@ | |
|
||
* * * | ||
|
||
[![MIT 许可证](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE) [![生成状态](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/Microsoft.nni)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=6) [![问题](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) [![Bug](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [![拉取请求](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) [![版本](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![进入 https://gitter.im/Microsoft/nni 聊天室提问](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![文档状态](https://readthedocs.org/projects/nni/badge/?version=latest)](https://nni.readthedocs.io/zh/latest/?badge=latest) | ||
[![MIT 许可证](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE) [![生成状态](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/integration-test-local?branchName=master)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=17&branchName=master) [![问题](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) [![Bug](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [![拉取请求](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) [![版本](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![进入 https://gitter.im/Microsoft/nni 聊天室提问](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![文档状态](https://readthedocs.org/projects/nni/badge/?version=latest)](https://nni.readthedocs.io/zh/latest/?badge=latest) | ||
|
||
[English](README.md) | ||
|
||
|
@@ -83,6 +83,7 @@ NNI 提供命令行工具以及友好的 WebUI 来管理训练的 Experiment。 | |
<li><a href="docs/zh_CN/TrialExample/GbdtExample.md">Auto-gbdt</a></li> | ||
<li><a href="docs/zh_CN/TrialExample/Cifar10Examples.md">Cifar10-pytorch</li></a> | ||
<li><a href="docs/zh_CN/TrialExample/SklearnExamples.md">Scikit-learn</a></li> | ||
<li><a href="docs/zh_CN/TrialExample/EfficientNet.md">EfficientNet</a></li> | ||
<a href="docs/zh_CN/SupportedFramework_Library.md">更多...</a><br/> | ||
</ul> | ||
</ul> | ||
|
@@ -121,6 +122,7 @@ NNI 提供命令行工具以及友好的 WebUI 来管理训练的 Experiment。 | |
<li><a href="docs/zh_CN/NAS/Overview.md#enas">ENAS</a></li> | ||
<li><a href="docs/zh_CN/NAS/Overview.md#darts">DARTS</a></li> | ||
<li><a href="docs/zh_CN/NAS/Overview.md#p-darts">P-DARTS</a></li> | ||
<li><a href="docs/zh_CN/NAS/Overview.md#cdarts">CDARTS</a></li> | ||
<li><a href="docs/zh_CN/Tuner/BuiltinTuner.md#NetworkMorphism">Network Morphism</a> </li> | ||
</ul> | ||
</ul> | ||
|
@@ -160,7 +162,7 @@ NNI 提供命令行工具以及友好的 WebUI 来管理训练的 Experiment。 | |
</ul> | ||
</ul> | ||
</td> | ||
</tr> | ||
</tr> | ||
<tr align="center" valign="bottom"> | ||
</td> | ||
</tr> | ||
|
@@ -186,18 +188,18 @@ NNI 提供命令行工具以及友好的 WebUI 来管理训练的 Experiment。 | |
<li><a href="docs/zh_CN/TrainingService/SupportTrainingService.md">支持训练平台</li> | ||
<li><a href="docs/zh_CN/TrainingService/HowToImplementTrainingService.md">实现训练平台</a></li> | ||
</ul> | ||
</td> | ||
</tr> | ||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
|
||
## **安装和验证** | ||
## **安装** | ||
|
||
**通过 pip 命令安装** | ||
### **安装** | ||
|
||
* 当前支持 Linux,MacOS 和 Windows(本机,远程,OpenPAI 模式),在 Ubuntu 16.04 或更高版本,MacOS 10.14.1 以及 Windows 10.1809 上进行了测试。 在 `python >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。 | ||
NNI 支持并在 Ubuntu >= 16.04, macOS >= 10.14.1, 和 Windows 10 >= 1809 通过了测试。 在 `python 64-bit >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。 | ||
|
||
Linux 和 macOS | ||
Linux 或 macOS | ||
|
||
```bash | ||
python3 -m pip install --upgrade nni | ||
|
@@ -209,65 +211,39 @@ Windows | |
python -m pip install --upgrade nni | ||
``` | ||
|
||
注意: | ||
|
||
* 如果需要将 NNI 安装到自己的 home 目录中,可使用 `--user`,这样也不需要任何特殊权限。 | ||
* 目前,Windows 上的 NNI 支持本机,远程和 OpenPAI 模式。 强烈推荐使用 Anaconda 或 Miniconda 在 Windows 上安装 NNI。 | ||
* 如果遇到如`Segmentation fault` 这样的任何错误请参考[常见问题](docs/zh_CN/Tutorial/FAQ.md)。 | ||
|
||
**通过源代码安装** | ||
|
||
* 当前支持 Linux(Ubuntu 16.04 或更高版本),MacOS(10.14.1)以及 Windows 10(1809 版)。 | ||
|
||
Linux 和 MacOS | ||
|
||
* 在 `python >= 3.5` 的环境中运行命令: `git` 和 `wget`,确保安装了这两个组件。 | ||
|
||
```bash | ||
git clone -b v1.3 https://github.com/Microsoft/nni.git | ||
cd nni | ||
source install.sh | ||
``` | ||
|
||
Windows | ||
|
||
* 在 `python >=3.5` 的环境中运行命令: `git` 和 `PowerShell`,确保安装了这两个组件。 | ||
如果想要尝试最新代码,可通过源代码[安装 NNI](docs/zh_CN/Tutorial/Installation.md)。 | ||
|
||
```bash | ||
git clone -b v1.3 https://github.com/Microsoft/nni.git | ||
cd nni | ||
powershell -ExecutionPolicy Bypass -file install.ps1 | ||
``` | ||
有关 NNI 的详细系统要求,参考[这里](docs/zh_CN/Tutorial/Installation.md#system-requirements)。 | ||
|
||
参考[安装 NNI](docs/zh_CN/Tutorial/Installation.md) 了解系统需求。 | ||
注意: | ||
|
||
Windows 上参考 [Windows 上使用 NNI](docs/zh_CN/Tutorial/NniOnWindows.md)。 | ||
* 如果遇到任何权限问题,可添加 `--user` 在用户目录中安装 NNI。 | ||
* 目前,Windows 上的 NNI 支持本机,远程和 OpenPAI 模式。 强烈推荐使用 Anaconda 或 Miniconda 在 Windows 上安装 NNI。 | ||
* 如果遇到如 `Segmentation fault` 等错误参考[常见问题](docs/zh_CN/Tutorial/FAQ.md)。 Windows 上的 FAQ 参考[在 Windows 上使用 NNI](docs/zh_CN/Tutorial/NniOnWindows.md)。 | ||
|
||
**验证安装** | ||
### **验证安装** | ||
|
||
以下示例 Experiment 依赖于 TensorFlow 。 在运行前确保安装了 **TensorFlow 1.x**。 注意,**目前不支持 TensorFlow 2.0**。 | ||
以下示例基于 TensorFlow 1.x 。确保运行环境中使用的的是 ** TensorFlow 1.x**。 | ||
|
||
* 通过克隆源代码下载示例。 | ||
|
||
```bash | ||
git clone -b v1.3 https://github.com/Microsoft/nni.git | ||
``` | ||
|
||
Linux 和 MacOS | ||
|
||
* 运行 MNIST 示例。 | ||
|
||
```bash | ||
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml | ||
``` | ||
|
||
Windows | ||
|
||
```bash | ||
git clone -b v1.3 https://github.com/Microsoft/nni.git | ||
``` | ||
|
||
* 运行 MNIST 示例。 | ||
|
||
```bash | ||
nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml | ||
``` | ||
|
||
Linux 或 macOS | ||
|
||
```bash | ||
nnictl create --config nni/examples/trials/mnist-tfv1/config.yml | ||
``` | ||
|
||
Windows | ||
|
||
```bash | ||
nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml | ||
``` | ||
|
||
* 在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明 Experiment 已成功启动。 通过命令行输出的 `Web UI url` 来访问 Experiment 的界面。 | ||
|
||
|
@@ -319,11 +295,12 @@ You can use these commands to get more information about the experiment | |
|
||
该项目采用了 [ Microsoft 开源行为准则 ](https://opensource.microsoft.com/codeofconduct/)。 有关详细信息,请参阅[常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/),如有任何疑问或意见可联系 [email protected]。 | ||
|
||
熟悉贡献协议后,即可按照 NNI 开发人员教程,创建第一个 PR =): | ||
熟悉贡献协议后,即可按照 NNI 开发人员教程,创建第一个 PR: | ||
|
||
* 推荐新贡献者先找到标有 ['good first issue'](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 或 ['help-wanted'](https://github.com/microsoft/nni/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) 标签的 Issue。这些都比较简单,可以从这些问题开始。 | ||
* 推荐新贡献者先从简单的问题开始:['good first issue'](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 或 ['help-wanted'](https://github.com/microsoft/nni/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)。 | ||
* [NNI 开发环境安装教程](docs/zh_CN/Tutorial/SetupNniDeveloperEnvironment.md) | ||
* [如何调试](docs/zh_CN/Tutorial/HowToDebug.md) | ||
* 如果有使用上的问题,可先查看[常见问题解答](https://github.com/microsoft/nni/blob/master/docs/zh_CN/Tutorial/FAQ.md)。如果没能解决问题,可通过 [Gitter](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 联系 NNI 开发团队或在 GitHub 上 [报告问题](https://github.com/microsoft/nni/issues/new/choose)。 | ||
* [自定义 Tuner](docs/zh_CN/Tuner/CustomizeTuner.md) | ||
* [实现定制的训练平台](docs/zh_CN/TrainingService/HowToImplementTrainingService.md) | ||
* [在 NNI 上实现新的 NAS Trainer](https://github.com/microsoft/nni/blob/master/docs/zh_CN/NAS/NasInterface.md#implement-a-new-nas-trainer-on-nni) | ||
|
@@ -349,7 +326,7 @@ You can use these commands to get more information about the experiment | |
* [使用 NNI 为 SPTAG 自动调参](docs/zh_CN/CommunitySharings/SptagAutoTune.md) | ||
* [使用 NNI 为 scikit-learn 查找超参](https://towardsdatascience.com/find-thy-hyper-parameters-for-scikit-learn-pipelines-using-microsoft-nni-f1015b1224c1) | ||
* **博客** - [AutoML 工具(Advisor,NNI 与 Google Vizier)的对比](http://gaocegege.com/Blog/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/katib-new#%E6%80%BB%E7%BB%93%E4%B8%8E%E5%88%86%E6%9E%90) 作者:[@gaocegege](https://github.com/gaocegege) - kubeflow/katib 的设计与实现的总结与分析章节 | ||
* **Blog (中文)** - [NNI 2019 新功能汇总](https://mp.weixin.qq.com/s/7_KRT-rRojQbNuJzkjFMuA) by @squirrelsc | ||
* **博客** - [NNI 2019 新功能汇总](https://mp.weixin.qq.com/s/7_KRT-rRojQbNuJzkjFMuA) by @squirrelsc | ||
|
||
## **反馈** | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
# 来自知乎的评论: <an open source project with highly reasonable design> - 作者 Garvin Li | ||
|
||
本文由 NNI 用户在知乎论坛上发表。 在这篇文章中,Garvin 分享了在使用 NNI 进行自动特征工程方面的体验。 我们认为本文对于有兴趣使用 NNI 进行特征工程的用户非常有用。 经作者许可,将原始文章摘编如下。 | ||
|
||
**原文**: [如何看待微软最新发布的AutoML平台NNI?作者 Garvin Li](https://www.zhihu.com/question/297982959/answer/964961829?utm_source=wechat_session&utm_medium=social&utm_oi=28812108627968&from=singlemessage&isappinstalled=0) | ||
|
||
## 01 AutoML概述 | ||
|
||
作者认为 AutoML 不光是调参,应该包含自动特征工程。AutoML 是一个系统化的体系,包括:自动特征工程(AutoFeatureEng)、自动调参(AutoTuning)、自动神经网络探索(NAS)等。 | ||
|
||
## 02 NNI 概述 | ||
|
||
NNI((Neural Network Intelligence)是一个微软的开源 AutoML 工具包,通过自动而有效的方法来帮助用户设计并调优机器学习模型,神经网络架构,或复杂系统的参数。 | ||
|
||
链接:[ https://github.com/Microsoft/nni](https://github.com/Microsoft/nni) | ||
|
||
我目前只学习了自动特征工程这一个模块,总体看微软的工具都有一个比较大的特点,技术可能不一定多新颖,但是设计都非常赞。 NNI 的 AutoFeatureENG 基本包含了用户对于 AutoFeatureENG 的一切幻想。在微软做 PD 应该挺幸福吧,底层的这些个框架的设计都极为合理。 | ||
|
||
## 03 细说NNI - AutoFeatureENG | ||
> 本文使用了此项目: [https://github.com/SpongebBob/tabular_automl_NNI](https://github.com/SpongebBob/tabular_automl_NNI)。 | ||
新用户可以使用 NNI 轻松高效地进行 AutoFeatureENG。 使用是非常简单的,安装下文件中的 require,然后 pip install NNI。 | ||
|
||
![](https://pic3.zhimg.com/v2-8886eea730cad25f5ac06ef1897cd7e4_r.jpg) NNI把 AutoFeatureENG 拆分成 exploration 和 selection 两个模块。 exploration 主要是特征衍生和交叉,selection 讲的是如何做特征筛选。 | ||
|
||
## 04 特征 Exploration | ||
|
||
对于功能派生,NNI 提供了许多可自动生成新功能的操作,[列表](https://github.com/SpongebBob/tabular_automl_NNI/blob/master/AutoFEOp.md)如下: | ||
|
||
**count**:传统的统计,统计一些数据的出现频率 | ||
|
||
**target**:特征和目标列的一些映射特征 | ||
|
||
**embedding**:把特征看成句子,用 *word2vector* 的方式制作向量 | ||
|
||
**crosscount**:特征间除法,有点类似CTR | ||
|
||
**aggregete**:特征的 min/max/var/mean | ||
|
||
**nunique**:统计唯一特征的数量。 | ||
|
||
**histsta**:特征存储桶的统计信息,如直方图统计信息。 | ||
|
||
具体特征怎么交叉,哪一列和哪一列交叉,每一列特征用什么方式衍生呢?可以通过 **search_space. json** 这个文件控制。 | ||
|
||
![](https://pic1.zhimg.com/v2-3c3eeec6eea9821e067412725e5d2317_r.jpg) | ||
|
||
图片展示了定义搜索空间的过程。 NNI 为 1 阶运算提供计数编码,并为 2 阶运算提供聚合的统计(min max var mean median nunique)。 | ||
|
||
例如,希望以下列方式搜索列名称 {"C1"、"...","C26"} 上的频率编码(valuecount)功能的功能: | ||
|
||
![](https://github.com/JSong-Jia/Pic/blob/master/images/pic%203.jpg) | ||
|
||
可以在列 {"C1",...,"C26"} x {"C1",...,"C26"} 上定义交叉频率编码(交叉维度的值计数)方法: | ||
|
||
![](https://github.com/JSong-Jia/Pic/blob/master/images/pic%204.jpg) | ||
|
||
Exploration 的目的就是长生出新的特征。 在代码里可以用 **get_next_parameter** 的方式获取 tuning 的参数: | ||
> RECEIVED_PARAMS = nni.get_next_parameter() | ||
## 05 特征 Selection | ||
|
||
为了避免特征泛滥的情况,避免过拟合,一定要有 Selection 的机制挑选特征。 在 NNI-AutoFeatureENG 的 Selection 中,主要使用了微软开发的梯度提升框架 LightGBM(Light Gradient Boosting Machine)。 | ||
|
||
![](https://pic2.zhimg.com/v2-7bf9c6ae1303692101a911def478a172_r.jpg) | ||
|
||
了解 xgboost 或者 GBDT 算法同学应该知道,这种树形结构的算法是很容易计算出每个特征对于结果的影响的。 所以使用 lightGBM 可以天然的进行特征筛选。 | ||
|
||
弊病就是,如果下游是个 *LR*(逻辑回归)这种线性算法,筛选出来的特征是否具备普适性。 | ||
|
||
![](https://pic4.zhimg.com/v2-d2f919497b0ed937acad0577f7a8df83_r.jpg) | ||
|
||
## 06 总结 | ||
|
||
NNI 的 AutoFeature 模块是给整个行业制定了一个教科书般的标准,告诉大家这个东西要怎么做,有哪些模块,使用起来非常方便。 但是如果只是基于这样简单的模式,不一定能达到很好的效果。 | ||
|
||
## 对 NNI 的建议 | ||
|
||
我觉得在Exploration方面可以引用一些 DNN(如:xDeepFM) 的特征组合方式,提取更高维度的特征。 | ||
|
||
在 Selection 方面可以有更多的智能化方案,比如可以基于下游的算法自动选择 Selection 机制。 | ||
|
||
总之 NNI 在设计曾给了我一些启发,还是一个挺好的开源项目,推荐给大家~ 建议 AI 研究人员使用它来加速研究。 | ||
|
||
大家用的时候如果是 Mac 电脑可能会遇到 gcc 的问题,因为开源项目自带的脚本是基于 gcc7 编译的, 可以用下面的方法绕过去: | ||
|
||
# brew install libomp | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.