Unverified Commit 39432390 authored by kvartet's avatar kvartet Committed by GitHub
Browse files

Update Chinese documentation (#3886)

parent 93dbaf3e
如何在 Web 界面中使用 TensorBoard
====================================================
从 NNI v2.2 开始,您可以在 Web 界面中跨一个或多个 Trial 启动 TensorBoard 进程。 该功能目前支持本地训练平台和共享存储的重用模式下的训练平台,并将在未来的 NNI 版本中支持更多场景。
准备
-----------
确保在您的环境中安装了 TensorBoard。 如果您从未使用过 TensorBoard,这里有入门教程供您参考:`在 TensorFlow 下使用 TensorBoard <https://www.tensorflow.org/tensorboard/get_started>`__, `在 PyTorch 下使用 TensorBoard <https://pytorch.org/tutorials/recipes/recipes/tensorboard_with_pytorch.html>`__。
使用 Web 界面启动 TensorBoard
--------------------------------------------------------
1. 保存日志
^^^^^^^^^^^^
NNI 将自动获取 Trial 输出文件夹下的 ``tensorboard`` 子文件夹作为 tensorboard logdir。 所以在 Trial 的源代码中,你需要将 TensorBoard 日志保存在 ``NNI_OUTPUT_DIR/tensorboard`` 下。 此日志路径可以连接为:
.. code-block:: python
log_dir = os.path.join(os.environ["NNI_OUTPUT_DIR"], 'tensorboard')
2. 启动 TensorBoard
^^^^^^^^^^^^^^^^^^^^^
像比较一样,首先选择要组合的 Trial 来启动 TensorBoard,然后单击 ``Tensorboard`` 按钮。
.. image:: ../../img/Tensorboard_1.png
:target: ../../img/Tensorboard_1.png
:alt:
点击弹出框中的 "OK "按钮后,你将跳转到 TensorBoard 门户。
.. image:: ../../img/Tensorboard_2.png
:target: ../../img/Tensorboard_2.png
:alt:
你可以在 TensorBoard 门户上看到 ``SequenceID-TrialID``。
.. image:: ../../img/Tensorboard_3.png
:target: ../../img/Tensorboard_3.png
:alt:
3. 全部停用
^^^^^^^^^^^^
如果你想打开已经启动的门户,请点击 tensorboard id。 如果你不再需要 TensorBoard,点击 ``Stop all tensorboard`` 按钮。
.. image:: ../../img/Tensorboard_4.png
:target: ../../img/Tensorboard_4.png
:alt:
Web 界面
===============
==================
Experiment 管理
-----------------------
......@@ -144,7 +144,7 @@ Experiment 管理
查看超参
--------------------
击 ``Hyper Parameter`` 标签查看图
击 ``Intermediate Result`` 标签查看折线图。
* 可以 ``添加/删除`` 轴,或者拖动以交换图表上的轴。
......@@ -195,7 +195,7 @@ Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解
查看 Trial 状态
------------------
点击 ``Trials Detail`` 标签查看所有 Trial 的状态。 特别是:
点击 ``Trials Detail`` 标签查看所有 Trial 的状态。 特别是: 特别是:
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间文件。
......@@ -207,7 +207,44 @@ Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解
* ``Add column`` 按钮可选择在表格中显示的列。 如果 Experiment 的最终结果是 dict,则可以在表格中查看其它键。 可选择 ``Intermediate count`` 列来查看 Trial 进度。
* 支持通过 id,状态,Trial 编号, 以及参数来搜索。
1. Trial id:
.. image:: ../../img/webui-img/search-trial.png
:target: ../../img/webui-img/search-trial.png
:alt: searchTrial
2. Trial No.:
.. image:: ../../img/webui-img/detail/searchNo.png
:target: ../../img/webui-img/detail/searchNo.png
:alt: searchTrialNo.
3. Trial 状态:
.. image:: ../../img/webui-img/detail/searchStatus.png
:target: ../../img/webui-img/detail/searchStatus.png
:alt: searchStatus
4. Trial 参数:
(1) 类型为 choice 的参数:
.. image:: ../../img/webui-img/detail/searchParameterChoice.png
:target: ../../img/webui-img/detail/searchParameterChoice.png
:alt: searchParameterChoice
(2) 类型不是 choice 的参数:
.. image:: ../../img/webui-img/detail/searchParameterRange.png
:target: ../../img/webui-img/detail/searchParameterRange.png
:alt: searchParameterRange
* ``Add column`` 按钮可选择在表格中显示的列。 如果 Experiment 的最终结果是 dict,则可以在表格中查看其它键。 * ``Add column`` 按钮可选择在表格中显示的列。 如果 Experiment 的最终结果是 dict,则可以在表格中查看其它键。 可选择 ``Intermediate count`` 列来查看 Trial 进度。
.. image:: ../../img/webui-img/addColumn.png
......@@ -229,13 +266,7 @@ Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解
:alt: compareTrialsGraph
* 支持通过 id,状态,Trial 编号, 以及参数来搜索。
.. image:: ../../img/webui-img/search-trial.png
:target: ../../img/webui-img/search-trial.png
:alt: searchTrial
* ``Tensorboard`` 请参考 `此文档 <Tensorboard.rst>`__。
......@@ -248,15 +279,22 @@ Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解
* 如果在 OpenPAI 或 Kubeflow 平台上运行,还可以看到 hdfsLog。
* 您可以在 ``Log`` 选项卡上看到 Trial 日志。 在本地模式下有 ``View trial log``, ``View trial error`` 和 ``View trial stdout`` 三个按钮。 * 如果在 OpenPAI 或 Kubeflow 平台上运行,还可以看到 hdfsLog。
1. 本机模式
.. image:: ../../img/webui-img/detail/log-local.png
:target: ../../img/webui-img/detail/log-local.png
:alt: logOnLocal
2. OpenPAI、Kubeflow 等模式:
.. image:: ../../img/webui-img/detail-pai.png
:target: ../../img/webui-img/detail-pai.png
:alt: detailPai
* 中间结果图:可在此图中通过点击 intermediate 按钮来查看默认指标。
......@@ -273,3 +311,16 @@ Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解
:target: ../../img/webui-img/kill-running.png
:alt: killTrial
* 自定义 Trial:您可以更改此 Trial 参数,然后将其提交给 Experiment。 如果您想重新运行失败的 Trial ,您可以向 Experiment 提交相同的参数。
.. image:: ../../img/webui-img/detail/customizedTrialButton.png
:target: ../../img/webui-img/detail/customizedTrialButton.png
:alt: customizedTrialButton
.. image:: ../../img/webui-img/detail/customizedTrial.png
:target: ../../img/webui-img/detail/customizedTrial.png
:alt: customizedTrial
......@@ -26,7 +26,6 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-02-25 07:50:38] Tuner not set, wait for connect...\n",
"[2021-02-25 07:50:38] Connect to port 8080 success, experiment id is IF0JnfLE, status is RUNNING.\n"
]
}
......@@ -55,7 +54,7 @@
"text/plain": [
"{'id': 'IF0JnfLE',\n",
" 'revision': 6,\n",
" 'execDuration': 28,\n",
" 'maxTrialNum': 10,\n",
" 'logDir': '/home/ningshang/nni-experiments/IF0JnfLE',\n",
" 'nextSequenceId': 2,\n",
" 'params': {'authorName': 'default',\n",
......@@ -90,7 +89,15 @@
"execution_count": 3,
"id": "printable-bookmark",
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-03-05 12:18:32] (root) Successfully update maxTrialNum.\n"
]
}
],
"source": [
"experiment.update_max_trial_number(10)"
]
......@@ -106,14 +113,14 @@
"text/plain": [
"{'id': 'IF0JnfLE',\n",
" 'revision': 8,\n",
" 'execDuration': 32,\n",
" 'execDuration': 28,\n",
" 'logDir': '/home/ningshang/nni-experiments/IF0JnfLE',\n",
" 'nextSequenceId': 2,\n",
" 'params': {'authorName': 'default',\n",
" 'experimentName': 'example_sklearn-classification',\n",
" 'trialConcurrency': 1,\n",
" 'maxExecDuration': 3600,\n",
" 'maxTrialNum': 10,\n",
" 'maxTrialNum': 200,\n",
" 'searchSpace': '{\"C\": {\"_type\": \"uniform\", \"_value\": [0.1, 1]}, \"kernel\": {\"_type\": \"choice\", \"_value\": [\"linear\", \"rbf\", \"poly\", \"sigmoid\"]}, \"degree\": {\"_type\": \"choice\", \"_value\": [1, 2, 3, 4]}, \"gamma\": {\"_type\": \"uniform\", \"_value\": [0.01, 0.1]}, \"coef0\": {\"_type\": \"uniform\", \"_value\": [0.01, 0.1]}}',\n",
" 'trainingServicePlatform': 'local',\n",
" 'tuner': {'builtinTunerName': 'TPE',\n",
......
......@@ -8,36 +8,17 @@
"## 启动并管理一个新的 Experiment"
]
},
{
"cell_type": "markdown",
"id": "immediate-daily",
"metadata": {},
"source": [
"### 1. 初始化 Tuner"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "formed-grounds",
"metadata": {},
"outputs": [],
"source": [
"from nni.algorithms.hpo.gridsearch_tuner import GridSearchTuner\n",
"tuner = GridSearchTuner()"
]
},
{
"cell_type": "markdown",
"id": "reported-somerset",
"metadata": {},
"source": [
"### 2. 定义搜索空间"
"### 1. 定义搜索空间"
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"id": "potential-williams",
"metadata": {},
"outputs": [],
......@@ -56,24 +37,27 @@
"id": "greek-archive",
"metadata": {},
"source": [
"### 3. 配置 Experiment "
"### 2. 配置 Experiment "
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 2,
"id": "fiscal-expansion",
"metadata": {},
"outputs": [],
"source": [
"from nni.experiment import Experiment\n",
"experiment = Experiment(tuner, 'local')\n",
"experiment.config.experiment_name = 'test'\n",
"experiment = Experiment('local')\n",
"experiment.config.experiment_name = 'Example'\n",
"experiment.config.trial_concurrency = 2\n",
"experiment.config.max_trial_number = 5\n",
"experiment.config.max_trial_number = 10\n",
"experiment.config.search_space = search_space\n",
"experiment.config.trial_command = 'python3 main.py'\n",
"experiment.config.trial_code_directory = './'"
"experiment.config.trial_code_directory = './'\n",
"experiment.config.tuner.name = 'TPE'\n",
"experiment.config.tuner.class_args['optimize_mode'] = 'maximize'\n",
"experiment.config.training_service.use_active_gpu = True"
]
},
{
......@@ -81,12 +65,12 @@
"id": "received-tattoo",
"metadata": {},
"source": [
"### 4. 启动 Experiment"
"### 3. 启动 Experiment"
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 3,
"id": "pleasant-patent",
"metadata": {},
"outputs": [
......@@ -94,17 +78,15 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-02-22 12:27:11] Creating experiment, Experiment ID: bj025qo4\n",
"[2021-02-22 12:27:11] Connecting IPC pipe...\n",
"[2021-02-22 12:27:15] Statring web server...\n",
"[2021-02-22 12:27:16] Setting up...\n",
"[2021-02-22 12:27:16] Dispatcher started\n",
"[2021-02-22 12:27:16] Web UI URLs: http://127.0.0.1:8081 http://10.0.1.5:8081 http://172.17.0.1:8081\n"
"[2021-03-05 12:12:19] Creating experiment, Experiment ID: wdt0le3v\n",
"[2021-03-05 12:12:19] Starting web server...\n",
"[2021-03-05 12:12:20] Setting up...\n",
"[2021-03-05 12:12:20] Web UI URLs: http://127.0.0.1:8080 http://10.0.1.5:8080 http://172.17.0.1:8080\n"
]
}
],
"source": [
"experiment.start(8081)"
"experiment.start(8080)"
]
},
{
......@@ -112,12 +94,12 @@
"id": "miniature-prison",
"metadata": {},
"source": [
"### 5. Experiment 查看和管理"
"### 4. Experiment 查看和管理"
]
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 4,
"id": "animated-english",
"metadata": {},
"outputs": [
......@@ -127,7 +109,7 @@
"'RUNNING'"
]
},
"execution_count": 5,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
......@@ -138,18 +120,18 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 5,
"id": "alpha-ottawa",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[TrialResult(parameter={'coef0': 0.01, 'gamma': 0.01, 'degree': 1, 'kernel': 'linear', 'C': 0.1}, value=0.9866666666666667, trialJobId='B55mT'),\n",
" TrialResult(parameter={'coef0': 0.02, 'gamma': 0.01, 'degree': 1, 'kernel': 'linear', 'C': 0.1}, value=0.9866666666666667, trialJobId='QkhD0')]"
"[TrialResult(parameter={'C': 0.30000000000000004, 'kernel': 'linear', 'degree': 3, 'gamma': 0.03, 'coef0': 0.07}, value=0.9888888888888889, trialJobId='VLqU9'),\n",
" TrialResult(parameter={'C': 0.5, 'kernel': 'sigmoid', 'degree': 1, 'gamma': 0.03, 'coef0': 0.07}, value=0.8888888888888888, trialJobId='DLo6r')]"
]
},
"execution_count": 6,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
......@@ -160,18 +142,18 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 6,
"id": "unique-rendering",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'B55mT': [TrialMetricData(timestamp=1613996853005, trialJobId='B55mT', parameterId='0', type='FINAL', sequence=0, data=0.9866666666666667)],\n",
" 'QkhD0': [TrialMetricData(timestamp=1613996853843, trialJobId='QkhD0', parameterId='1', type='FINAL', sequence=0, data=0.9866666666666667)]}"
"{'DLo6r': [TrialMetricData(timestamp=1614946351592, trialJobId='DLo6r', parameterId='1', type='FINAL', sequence=0, data=0.8888888888888888)],\n",
" 'VLqU9': [TrialMetricData(timestamp=1614946351607, trialJobId='VLqU9', parameterId='0', type='FINAL', sequence=0, data=0.9888888888888889)]}"
]
},
"execution_count": 7,
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
......@@ -185,12 +167,12 @@
"id": "welsh-difference",
"metadata": {},
"source": [
"### 6. 停止 Experiment"
"### 5. 停止 Experiment"
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 7,
"id": "technological-cleanup",
"metadata": {},
"outputs": [
......@@ -198,10 +180,8 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-02-22 12:28:16] Stopping experiment, please wait...\n",
"[2021-02-22 12:28:16] Dispatcher exiting...\n",
"[2021-02-22 12:28:17] Experiment stopped\n",
"[2021-02-22 12:28:19] Dispatcher terminiated\n"
"[2021-03-05 12:12:40] Stopping experiment, please wait...\n",
"[2021-03-05 12:12:42] Experiment stopped\n"
]
}
],
......@@ -231,4 +211,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
\ No newline at end of file
......@@ -5,7 +5,7 @@
{% block document %}
<div>
<div class="chinese"><a href="https://nni.readthedocs.io/en/latest/">English</a></div>
<div class="chinese"><a href="https://nni.readthedocs.io/zh/stable/">English</a></div>
<b>NNI (Neural Network Intelligence)</b> 是一个轻量但强大的工具包,帮助用户<b>自动</b>的进行
<a href="{{ pathto('FeatureEngineering/Overview') }}">特征工程</a><a href="{{ pathto('NAS/Overview') }}">神经网络架构搜索</a><a href="{{ pathto('Tuner/BuiltinTuner') }}">超参调优</a>以及<a href="{{ pathto('Compression/Overview') }}">模型压缩</a>
</div>
......@@ -99,13 +99,14 @@
<ul class="circle">
<li><a href="https://github.com/microsoft/nni/tree/master/examples/trials/mnist-pytorch">MNIST-pytorch</li>
</a>
<li><a href="https://github.com/microsoft/nni/tree/master/examples/trials/mnist-tfv1">MNIST-tensorflow</li>
<li><a href="https://github.com/microsoft/nni/tree/master/examples/trials/mnist-tfv2">MNIST-tensorflow</li>
</a>
<li><a href="https://github.com/microsoft/nni/tree/master/examples/trials/mnist-keras">MNIST-keras</li></a>
<li><a href="{{ pathto('TrialExample/GbdtExample') }}">Auto-gbdt</a></li>
<li><a href="{{ pathto('TrialExample/Cifar10Examples') }}">Cifar10-pytorch</li></a>
<li><a href="{{ pathto('TrialExample/SklearnExamples') }}">Scikit-learn</a></li>
<li><a href="{{ pathto('TrialExample/EfficientNet') }}">EfficientNet</a></li>
<li><a href="{{ pathto('TrialExample/OpEvoExamples') }}">GPU Kernel 调优</li></a>
<a href="{{ pathto('SupportedFramework_Library') }}">更多...</a><br />
</ul>
</ul>
......@@ -115,27 +116,25 @@
<ul class="firstUl">
<div><b>穷举搜索</b></div>
<ul class="circle">
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">Random Search(随机搜索)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">Grid Search(遍历搜索)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">Batch(批处理)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#Random">Random Search(随机搜索)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#GridSearch">Grid Search(遍历搜索)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#Batch">Batch(批处理)</a></li>
</ul>
<div><b>启发式搜索</b></div>
<ul class="circle">
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">Naïve Evolution(朴素进化)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">Anneal(退火算法)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">Hyperband</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#Evolution">Naïve Evolution(朴素进化)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#Anneal">Anneal(退火算法)</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#Hyperband">Hyperband</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#PBTTuner">P-DARTS</a></li>
</ul>
<div><b>贝叶斯优化</b></div>
<ul class="circle">
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">BOHB</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">TPE</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">SMAC</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">Metis Tuner</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">GP Tuner</a> </li>
</ul>
<div><b>基于强化学习</b></div>
<ul class="circle">
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}">PPO Tuner</a> </li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#BOHB">BOHB</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#TPE">TPE</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#SMAC">SMAC</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#MetisTuner">Metis Tuner</a></li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#GPTuner">GP Tuner</a> </li>
<li><a href="{{ pathto('Tuner/BuiltinTuner') }}#DNGOTuner">PPO Tuner</a></li>
</ul>
</ul>
<a href="{{ pathto('NAS/Overview') }}">神经网络架构搜索</a>
......@@ -143,26 +142,32 @@
<ul class="circle">
<li><a href="{{ pathto('NAS/ENAS') }}">ENAS</a></li>
<li><a href="{{ pathto('NAS/DARTS') }}">DARTS</a></li>
<li><a href="{{ pathto('NAS/PDARTS') }}">P-DARTS</a></li>
<li><a href="{{ pathto('NAS/CDARTS') }}">CDARTS</a></li>
<li><a href="{{ pathto('NAS/SPOS') }}">SPOS</a></li>
<li><a href="{{ pathto('NAS/Proxylessnas') }}">ProxylessNAS</a></li>
<li><a href="{{ pathto('Tuner/NetworkmorphismTuner') }}">Network Morphism</a> </li>
<li><a href="{{ pathto('NAS/TextNAS') }}">TextNAS</a> </li>
<li><a href="{{ pathto('NAS/FBNet') }}">微信</a></li>
<li><a href="{{ pathto('NAS/ExplorationStrategies') }}">基于强化学习</a></li>
<li><a href="{{ pathto('NAS/ExplorationStrategies') }}">Network Morphism</a></li>
<li><a href="{{ pathto('NAS/Overview') }}">TextNAS</a></li>
</ul>
</ul>
<a href="{{ pathto('Compression/Overview') }}">模型压缩</a>
<ul class="firstUl">
<div><b>剪枝</b></div>
<ul class="circle">
<li><a href="{{ pathto('Compression/Pruner') }}">AGP Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}">Slim Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}">FPGM Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}#agp-pruner">AGP Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}#slim-pruner">Slim Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}#fpgm-pruner">FPGM Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}#netadapt-pruner">NetAdapt Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}#simulatedannealing-pruner">SimulatedAnnealing Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}#admm-pruner">ADMM Pruner</a></li>
<li><a href="{{ pathto('Compression/Pruner') }}#autocompress-pruner">AutoCompress Pruner</a></li>
<li><a href="{{ pathto('Compression/Overview') }}">更多...</a></li>
</ul>
<div><b>量化</b></div>
<ul class="circle">
<li><a href="{{ pathto('Compression/Quantizer') }}">QAT Quantizer</a></li>
<li><a href="{{ pathto('Compression/Quantizer') }}">DoReFa Quantizer</a></li>
<li><a href="{{ pathto('Compression/Quantizer') }}#qat-quantize">QAT Quantizer</a></li>
<li><a href="{{ pathto('Compression/Quantizer') }}#dorefa-quantizer">DoReFa Quantizer</a></li>
<li><a href="{{ pathto('Compression/Quantizer') }}#bnn-quantizer">BNN Quantizer</a></li>
</ul>
</ul>
<a href="{{ pathto('FeatureEngineering/Overview') }}">特征工程(测试版)</a>
......@@ -172,22 +177,23 @@
</ul>
<a href="{{ pathto('Assessor/BuiltinAssessor') }}">提前终止算法</a>
<ul class="circle">
<li><a href="{{ pathto('Assessor/BuiltinAssessor') }}">Median Stop(中位数终止)</a></li>
<li><a href="{{ pathto('Assessor/BuiltinAssessor') }}">Curve Fitting(曲线拟合)</a></li>
<li><a href="{{ pathto('Assessor/BuiltinAssessor') }}#MedianStop">Median Stop(中位数终止)</a></li>
<li><a href="{{ pathto('Assessor/BuiltinAssessor') }}#Curvefitting">Curve Fitting(曲线拟合)</a></li>
</ul>
</td>
<td>
<ul class="firstUl">
<li><a href="{{ pathto('TrainingService/LocalMode') }}">本机</a></li>
<li><a href="{{ pathto('TrainingService/RemoteMachineMode') }}">远程计算机</a></li>
<li><a href="{{ pathto('TrainingService/HybridMode') }}">混合模式</a></li>
<li><a href="{{ pathto('TrainingService/AMLMode') }}">AML(Azure Machine Learning)</a></li>
<li><b>基于 Kubernetes 的平台</b></li>
<ul class="circle">
<ul>
<li><a href="{{ pathto('TrainingService/PaiMode') }}">OpenPAI</a></li>
<li><a href="{{ pathto('TrainingService/KubeflowMode') }}">Kubeflow</a></li>
<li><a href="{{ pathto('TrainingService/FrameworkControllerMode') }}">基于 K8S 的 FrameworkController (如 AKS 等)</a>
</li>
<li><a href="{{ pathto('TrainingService/FrameworkControllerMode') }}">基于 K8S 的 FrameworkController (如 AKS 等)</a></li>
<li><a href="{{ pathto('TrainingService/DLTSMode') }}">DLWorkspace (又称 DLTS)</a></li>
<li><a href="{{ pathto('TrainingService/AMLMode') }}">AML (Azure Machine Learning)</a></li>
<li><a href="{{ pathto('TrainingService/AdaptDLMode') }}">AML (Azure Machine Learning)</a></li>
</ul>
</ul>
</td>
......@@ -196,9 +202,9 @@
<td class="verticalMiddle"><b>参考</b></td>
<td>
<ul class="firstUl">
<li><a href="https://nni.readthedocs.io/zh/latest/autotune_ref.html#trial">Python API</a></li>
<li><a href="{{ pathto('Tutorial/HowToLaunchFromPython') }}">Python API</a></li>
<li><a href="{{ pathto('Tutorial/AnnotationSpec') }}">NNI Annotation</a></li>
<li><a href="https://nni.readthedocs.io/zh/latest/installation.html">支持的操作系统</a></li>
<li><a href="{{ pathto('installation') }}">支持的操作系统</a></li>
</ul>
</td>
<td>
......@@ -206,6 +212,8 @@
<li><a href="{{ pathto('Tuner/CustomizeTuner') }}">自定义 Tuner</a></li>
<li><a href="{{ pathto('Assessor/CustomizeAssessor') }}">自定义 Assessor</a></li>
<li><a href="{{ pathto('Tutorial/InstallCustomizedAlgos') }}">安装自定义的 Tuner,Assessor,Advisor</a></li>
<li><a href="{{ pathto('NAS/QuickStart') }}">定义 NAS 模型空间</a></li>
<li><a href="{{ pathto('NAS/ApiReference') }}">NAS/Retiarii APIs</a></li>
</ul>
</td>
<td>
......@@ -224,7 +232,7 @@
<div>
<h2 class="second-title">安装</h2>
<p>
NNI 支持并在 Ubuntu >= 16.04, macOS >= 10.14.1, 和 Windows 10 >= 1809 通过了测试。 在 `python 64 >= 3.6` 的环境中,只需要运行 `pip install` 即可完成安装。
NNI 支持并在 Ubuntu >= 16.04, macOS >= 10.14.1, 和 Windows 10 >= 1809 通过了测试。 在 <code>python 64-bit >= 3.6</code> 的环境中,只需要运行 <code>pip install</code> 即可完成安装。
</p>
<div class="command-intro">Linux 或 macOS</div>
<div class="command">python3 -m pip install --upgrade nni</div>
......@@ -241,7 +249,7 @@
<li>如果遇到任何权限问题,可添加 --user 在用户目录中安装 NNI。</li>
<li>目前,Windows 上的 NNI 支持本机,远程和 OpenPAI 模式。 强烈推荐使用 Anaconda 或 Miniconda <a href="{{ pathto('Tutorial/InstallationWin') }}">在 Windows 上安装 NNI</a></li>
<li>如果遇到如 Segmentation fault 这样的任何错误请参考 <a
href="{{ pathto('installation') }}">常见问题</a>。 Windows 上的常见问题,参考在 <a href="{{ pathto('Tutorial/InstallationWin') }}">Windows 上使用 NNI</a></li>
href="{{ pathto('installation') }}">常见问题</a>。 Windows 上的常见问题,参考在 <a href="{{ pathto('Tutorial/InstallationWin') }}">Windows 上使用 NNI</a>。 Windows 上的常见问题,参考在 <a href="{{ pathto('Tutorial/InstallationWin') }}">Windows 上使用 NNI</a></li>
</ul>
</div>
<div>
......@@ -296,10 +304,7 @@ You can use these commands to get more information about the experiment
</li>
<li>
在浏览器中打开 Web UI 地址,可看到下图的 Experiment 详细信息,以及所有的 Trial 任务。 查看<a href="{{ pathto('Tutorial/WebUI') }}">这里的</a>更多页面示例。
<div class="ui-img">
<img src="_images/webui_overview_page.png">
<img src="_images/webui_trialdetail_page.png">
</div>
<img src="_static/img/webui.gif" width="100%"/>
</div>
</li>
</ul>
......@@ -360,8 +365,7 @@ You can use these commands to get more information about the experiment
<h2>外部代码库</h2>
<li>在 NNI 中运行 <a href="{{ pathto('NAS/ENAS') }}">ENAS</a></li>
<li>
<a
href="https://github.com/microsoft/nni/blob/master/examples/feature_engineering/auto-feature-engineering/README_zh_CN.md">NNI 中的自动特征工程</a>
https://github.com/microsoft/nni/blob/master/examples/feature_engineering/auto-feature-engineering/README_zh_CN.md
</li>
<li>使用 NNI 的 <a
href="https://github.com/microsoft/recommenders/blob/master/examples/04_model_select_and_optimize/nni_surprise_svd.ipynb">矩阵分解超参调优</a></li>
......
......@@ -10,9 +10,7 @@ Tuner 从 Trial 接收指标结果,来评估一组超参或网络结构的性
:maxdepth: 1
概述<Tuner/BuiltinTuner>
TPE<Tuner/HyperoptTuner>
Random Search(随机搜索)<Tuner/HyperoptTuner>
Anneal(退火)<Tuner/HyperoptTuner>
Naïve Evolution(朴素进化)<Tuner/EvolutionTuner>
SMAC<Tuner/SmacTuner>
Metis Tuner<Tuner/MetisTuner>
......@@ -22,5 +20,4 @@ Tuner 从 Trial 接收指标结果,来评估一组超参或网络结构的性
Network Morphism<Tuner/NetworkmorphismTuner>
Hyperband<Tuner/HyperbandAdvisor>
BOHB<Tuner/BohbAdvisor>
PPO Tuner <Tuner/PPOTuner>
PBT Tuner <Tuner/PBTTuner>
......@@ -27,7 +27,7 @@ author = 'Microsoft'
# The short X.Y version
version = ''
# The full version, including alpha/beta/rc tags
release = 'v2.0'
release = 'v2.3'
# -- General configuration ---------------------------------------------------
......@@ -51,7 +51,7 @@ extensions = [
]
# 添加示例模块
autodoc_mock_imports = ['apex', 'nni_node']
autodoc_mock_imports = ['apex', 'nni_node', 'tensorrt', 'pycuda']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
......@@ -201,4 +201,4 @@ extlinks = {
# -- Extension configuration -------------------------------------------------
def setup(app):
app.add_stylesheet('css/custom.css')
app.add_css_file('css/custom.css')
Tuner 基准测试
====================
我们提供了一个基准测试工具来比较 NNI 提供的 Tuner(和用户自定义的 Tuner)在不同任务上的性能。 该工具的实现基于 automlbenchmark 存储库(https://github.com/openml/automlbenchmark),该存储库提供针对由多个 *tasks* 组成的不同 *benchmarks* 运行不同 *frameworks* 的服务。 该工具位于 ``examples/trials/benchmarking/automlbenchmark``。 本文件简要介绍了该工具及其使用方法。
术语
^^^^^^^^^^^
* **task**\ : 一个任务可以被认为是(数据集,评估器)。 它给出了一个包含(训练、验证、测试)的数据集,评估器根据收到的预测结果评估一个给定的指标(例如,回归的 mse,分类的f1)。
* **benchmark**\ : 基准测试是一组任务,以及其他外部约束,例如时间和资源。
* **framework**\ : 给定一个任务,一个框架构思出对所提出的回归或分类问题的答案并产生预测。 请注意,automlbenchmark 框架对框架的假设空间没有任何限制。 在我们在这个文件夹中的实现中,每个框架都是一个元组(tuner,architecture),其中架构提供了假设空间(和 Tuner 的搜索空间),tuner 决定了超参数优化的策略。
* **tuner**\ : hpo 文件夹中定义的 Tuner 或 Advisor,或用户提供的自定义 Tuner。
* **architecture**\ : 架构是解决任务的特定方法,以及一组要优化的超参数(即搜索空间)。 在我们的实现中,该架构多次调用 Tuner 以获得可能的超参数配置,并为任务生成最终预测。在我们的实现中,该架构多次调用 Tuner 以获得可能的超参数配置,并为任务生成最终预测。 查看 ``./nni/extensions/NNI/architectures`` 获取示例。
注意:目前,唯一支持的架构是随机森林。 架构实现和搜索空间定义可以在 ``./nni/extensions/NNI/architectures/run_random_forest.py`` 中找到。 基准测试 “nnivalid” 和 “nnismall” 中的任务适合用随机森林解决。
设置
^^^^^
由于 automlbenchmark 和 python 3.8 之间存在一些不兼容,建议使用 python 3.7 运行此文件夹中包含的实验。 首先,运行以下 shell 脚本来克隆 automlbenchmark 存储库。 注意:建议在单独的虚拟环境中执行以下步骤,因为安装代码可能会安装多个包。
.. code-block:: bash
./setup.sh
在现有 Tuner 上运行预定义的基准测试
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
./runbenchmark_nni.sh [tuner-names]
该脚本运行基准 “nnivalid”,它由一个回归任务、一个二元分类任务和一个多类分类任务组成。 脚本完成后,您可以在文件夹 results_[time]/reports/ 中找到结果摘要。 要在其他预定义基准上运行,请更改 ``runbenchmark_nni.sh`` 中的 ``benchmark`` 变量。 一些基准在 ``/examples/trials/benchmarking/automlbenchmark/nni/benchmarks``\ 中定义,其他基准测试在 ``/examples/trials/benchmarking/automlbenchmark/automlbenchmark/resources/benchmarks/`` 中定义。 大型基准的一个例子是 "nnismall",它包括8个回归任务、8个二元分类任务和8个多类分类任务。
默认情况下,该脚本在NNI的所有嵌入式 Tuner 上运行该基准测试。 如果在 [tuner-names] 中提供了一个 Tuner 的列表,它只运行列表中的 Tuner。 目前,支持以下 Tuner:"TPE", "Random", "Anneal", "Evolution", "SMAC", "GPTuner", "MetisTuner", "DNGOTuner", "Hyperband", "BOHB"。 也可以评估定制 Tuner。 可参考下一章节。
默认情况下,该脚本针对指定的基准逐一运行指定的 Tuner。 为了在后台同时运行所有的实验,在 ``runbenchmark_nni.sh`` 中设置 "serialize" 标志为 false。
注意:SMAC Tuner 、DNGO Tuner 和 BOHB Advisor 必须在运行任何实验之前手动安装。 关于安装SMAC和BOHB的更多细节,请参考 `本页面 <https://nni.readthedocs.io/zh/stable/Tuner/BuiltinTuner.html?highlight=nni>`_ 。
在自定义 Tuner 上运行预定义的基准测试
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
要运行自定义的基准,在 ``./nni/benchmarks`` 文件夹中添加 benchmark_name.yaml 文件,并在 ``runbenchmark_nni.sh`` 中改变 ``benchmark`` 变量。 参见 ``./automlbenchmark/resources/benchmarks/``,了解一些定义自定义基准的例子。
在自定义 Tuner 上运行基准测试
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
要使用自定义 Tuner,首先要确保 Tuner 继承自 ``nni.tuner.Tuner`` 并正确实现所需的API。 关于实现自定义调谐器的更多信息,请参考 `这里 <https://nni.readthedocs.io/zh/stable/Tuner/CustomizeTuner.html>`_ 。 接下来,执行以下步骤:
#. 用 ``nnictl algo register`` 命令安装自定义 Tuner。 详情请查看 `本文档 <https://nni.readthedocs.io/zh/stable/Tutorial/Nnictl.html>`_ 。
#. 在 ``./nni/frameworks.yaml``\ 中,添加一个扩展基础框架 NNI 的新框架。 确保参数 ``tuner_type`` 对应于在步骤 1 中安装 Tuner 的 “builtinName”。
#. 运行命令
.. code-block:: bash
./runbenchmark_nni.sh new-tuner-builtinName
基准测试示例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
例如,我们在以下8个 Tuner 上运行 “nnismall” 基准: "TPE", "Random", "Anneal", "Evolution", "SMAC", "GPTuner", "MetisTuner", "DNGOTuner". 由于一些任务包含相当数量的训练数据,在一个 Tuner 上使用单个 CPU 核心运行整个基准测试大约需要2天。 关于任务的详细描述,请查看 ``/examples/trials/benchmarking/automlbenchmark/nni/benchmarks/nnismall_description.txt`` 。 对于二类和多类分类任务,使用了 "AUC "和 "logloss" 指标进行评估,而对于回归,则使用了 "r2" 和 "rmse" 指标。
脚本完成后,每个 Tuner 的最终得分被总结在文件中 ``results[time]/reports/performances.txt``。 由于该文件很大,我们只显示以下屏幕截图并总结其他重要统计数据。
.. image:: ../img/hpo_benchmark/performances.png
:target: ../img/hpo_benchmark/performances.png
:alt:
此外,在对结果进行解析时,根据最终的性能对 Tuner 进行排名。 ``results[time]/reports/rankings.txt`` 显示了在每个指标(logloss, rmse, auc)下,Tuner 的平均排名。 在这里,我们介绍了前三个表中的数据。 此外,对于每个 Tuner,我们总结了对每种类型度量的性能(相同数据的另一视图)。 我们在第四个表格中介绍了这一统计数据。
指标 rmse 的平均排名:
.. list-table::
:header-rows: 1
* - Tuner 名字
- 平均排名
* - Anneal
- 3.75
* - Random
- 4.00
* - Evolution
- 4.44
* - DNGOTuner
- 4.44
* - SMAC
- 4.56
* - TPE
- 4.94
* - GPTuner
- 4.94
* - MetisTuner
- 4.94
指标 auc 的平均排名:
.. list-table::
:header-rows: 1
* - Tuner 名字
- 平均排名
* - SMAC
- 3.67
* - GPTuner
- 4.00
* - Evolution
- 4.22
* - Anneal
- 4.39
* - MetisTuner
- 4.39
* - TPE
- 4.67
* - Random
- 5.33
* - DNGOTuner
- 5.33
指标 logloss 的平均排名:
.. list-table::
:header-rows: 1
* - Tuner 名字
- 平均排名
* - Random
- 3.36
* - DNGOTuner
- 3.50
* - SMAC
- 3.93
* - GPTuner
- 4.64
* - TPE
- 4.71
* - Anneal
- 4.93
* - Evolution
- 5.00
* - MetisTuner
- 5.93
Tuner 的平均排名:
.. list-table::
:header-rows: 1
* - Tuner 名字
- rmse
- auc
- logloss
* - TPE
- 4.94
- 4.67
- 4.71
* - Random
- 4.00
- 5.33
- 3.36
* - Anneal
- 3.75
- 4.39
- 4.93
* - Evolution
- 4.44
- 4.22
- 5.00
* - GPTuner
- 4.94
- 4.00
- 4.64
* - MetisTuner
- 4.94
- 4.39
- 5.93
* - SMAC
- 4.56
- 3.67
- 3.93
* - DNGOTuner
- 4.44
- 5.33
- 3.50
除了这些报告,我们的脚本还为每个任务的每个文件夹生成两个图表。 第一个图表显示了每个 Tuner 在第 x 个 Trial 之前的最佳分数,第二图表显示了 Trial x 中每个 Tuner 的分数。 这两张图可以提供一些关于 Tuner 如何 "收敛" 的信息。 我们发现,对于 "nnismall",随机森林模型上的 Tuner,其搜索空间定义在 ``/examples/trials/benchmarking/automlbenchmark/nni/extensions/NNI/architectures/run_random_forest.py`` ,一般在40到60次试验后收敛到最终解决方案。 由于图表太多,无法包含在一份报告中(共96张图表),我们在此只介绍10张图表。
.. image:: ../img/hpo_benchmark/car_fold1_1.jpg
:target: ../img/hpo_benchmark/car_fold1_1.jpg
:alt:
.. image:: ../img/hpo_benchmark/car_fold1_2.jpg
:target: ../img/hpo_benchmark/car_fold1_2.jpg
:alt:
例如,前面两个图是为任务 "汽车" 的文件夹1生成的。 在第一张图中,我们可以观察到,大多数 Tuner 在40次 Trial 中找到了一个相对较好的解决方案。 在这个实验中,在所有的 Tuner 中,DNGOTuner 最快收敛到最佳解决方案(在10次 Trial 内)。 它的分数在整个实验中提高了三次。 在第二张图中,我们观察到大多数 Tuner 的分数在整个实验期间都在0.8和1之间波动。 然而,似乎 Anneal 调谐器(绿线)更不稳定(有更多的波动),而 GPTune r有一个更稳定的模式。 无论如何,虽然这种模式可以在某种程度上被解释为 Tuner 对探索开采权衡的位置,但它不能用于综合评估 Tuner 的效率。
.. image:: ../img/hpo_benchmark/christine_fold0_1.jpg
:target: ../img/hpo_benchmark/christine_fold0_1.jpg
:alt:
.. image:: ../img/hpo_benchmark/christine_fold0_2.jpg
:target: ../img/hpo_benchmark/christine_fold0_2.jpg
:alt:
.. image:: ../img/hpo_benchmark/cnae-9_fold0_1.jpg
:target: ../img/hpo_benchmark/cnae-9_fold0_1.jpg
:alt:
.. image:: ../img/hpo_benchmark/cnae-9_fold0_2.jpg
:target: ../img/hpo_benchmark/cnae-9_fold0_2.jpg
:alt:
.. image:: ../img/hpo_benchmark/credit-g_fold1_1.jpg
:target: ../img/hpo_benchmark/credit-g_fold1_1.jpg
:alt:
.. image:: ../img/hpo_benchmark/credit-g_fold1_2.jpg
:target: ../img/hpo_benchmark/credit-g_fold1_2.jpg
:alt:
.. image:: ../img/hpo_benchmark/titanic_2_fold1_1.jpg
:target: ../img/hpo_benchmark/titanic_2_fold1_1.jpg
:alt:
.. image:: ../img/hpo_benchmark/titanic_2_fold1_2.jpg
:target: ../img/hpo_benchmark/titanic_2_fold1_2.jpg
:alt:
......@@ -24,4 +24,5 @@ NNI 具有高扩展性,高级用户可以定制自己的 Tuner、 Assessor,
示例 <examples>
Web 界面 <Tutorial/WebUI>
如何调试 <Tutorial/HowToDebug>
高级 <hpo_advanced>
\ No newline at end of file
高级 <hpo_advanced>
Tuner 基准测试 <hpo_benchmark>
......@@ -10,20 +10,24 @@
为了促进 NAS 创新 (如, 设计实现新的 NAS 模型,比较不同的 NAS 模型),
易于使用且灵活的编程接口非常重要。
因此,我们为 NAS 提供了统一的接口,
来加速 NAS 创新,并更快的将最先进的算法用于现实世界的问题上。
详细信息,参考以下教程:
因此,NNI 设计了 `Retiarii <https://www.usenix.org/system/files/osdi20-zhang_quanlu.pdf>`__, 它是一个深度学习框架,支持在神经网络模型空间,而不是单个神经网络模型上进行探索性训练。
Retiarii 的探索性训练允许用户以高度灵活的方式表达 *神经网络架构搜索* 和 *超参数调整* 的各种搜索空间。
本文档中的一些常用术语:
* *Model search space(模型搜索空间)* :它意味着一组模型,用于从中探索/搜索出最佳模型。 有时我们简称为 *search space(搜索空间)* 或 *model space(模型空间)* 。
* *Exploration strategy(探索策略)*:用于探索模型搜索空间的算法。
* *Model evaluator(模型评估器)*:用于训练模型并评估模型的性能。
按照以下说明开始您的 Retiarii 之旅。
.. toctree::
:maxdepth: 2
概述 <NAS/Overview>
编写搜索空间 <NAS/WriteSearchSpace>
经典 NAS <NAS/ClassicNas>
快速入门 <NAS/QuickStart>
构建模型空间 <NAS/construct_space>
Multi-trial NAS <NAS/multi_trial_nas>
One-Shot NAS <NAS/one_shot_nas>
Retiarii NAS(实验性) <NAS/retiarii/retiarii_index>
自定义 NAS 算法 <NAS/Advanced>
NAS 可视化 <NAS/Visualization>
搜索空间集合 <NAS/SearchSpaceZoo>
NAS 基准测试 <NAS/Benchmarks>
API 参考 <NAS/NasReference>
NAS API 参考 <NAS/ApiReference>
......@@ -5,11 +5,12 @@
:maxdepth: 2
nnictl 命令 <Tutorial/Nnictl>
Experiment 配置 <Tutorial/ExperimentConfig>
Experiment 配置第二版 <reference/experiment_config>
Experiment 配置 <reference/experiment_config>
Experiment 配置(遗产) <Tutorial/ExperimentConfig>
搜索空间<Tutorial/SearchSpaceSpec>
NNI Annotation<Tutorial/AnnotationSpec>
SDK API 参考 <sdk_reference>
支持的框架和库 <SupportedFramework_Library>
从 Python 发起实验 <Tutorial/HowToLaunchFromPython>
共享存储 <Tutorial/HowToUseSharedStorage>
Tensorboard <Tutorial/Tensorboard>
===========================
Experiment(实验)配置参考
Experiment 配置
===========================
注意
=====
创建 Experiment 所需要的配置文件。 本文介绍了配置文件的内容,并提供了一些示例。
.. Note::
1. 此文档的字段使用 ``camelCase`` 法命名。 对于 Python 库 ``nni.experiment``,需要转换成 ``snake_case`` 形式。
1. 此文档的字段使用 ``camelCase`` 法命名。
对于 Python 库 ``nni.experiment``,需要转换成 ``snake_case`` 形式。
2. 在此文档中,字段类型被格式化为 `Python 类型提示 <https://docs.python.org/3.10/library/typing.html>`__。 因此,JSON 对象被称为 `dict`,数组被称为 `list`。
2. 在此文档中,字段类型被格式化为 `Python 类型提示 <https://docs.python.org/3.10/library/typing.html>`__。
因此,JSON 对象被称为 `dict`,数组被称为 `list`。
.. _path:
.. _路径:
3. 一些字段采用文件或目录的路径, 除特别说明,均支持绝对路径和相对路径,``~`` 将扩展到 home 目录。
3. 一些字段采用文件或目录的路径,
除特别说明,均支持绝对路径和相对路径,``~`` 将扩展到 home 目录。
- 在写入 YAML 文件时,相对路径是相对于包含该文件目录的路径。
- 在 Python 代码中赋值时,相对路径是相对于当前工作目录的路径。
- 在将 YAML 文件加载到 Python 类,以及将 Python 类保存到 YAML 文件时,所有相对路径都转换为绝对路径。
- 在写入 YAML 文件时,相对路径是相对于包含该文件目录的路径。
- 在 Python 代码中赋值时,相对路径是相对于当前工作目录的路径。
- 在将 YAML 文件加载到 Python 类,以及将 Python 类保存到 YAML 文件时,所有相对路径都转换为绝对路径。
4. 将字段设置为 ``None`` 或 ``null`` 时相当于不设置该字段。
4. 将字段设置为 ``None`` 或 ``null`` 时相当于不设置该字段。
.. contents:: Contents
:local:
:depth: 3
示例
========
......@@ -35,6 +38,7 @@ Experiment(实验)配置参考
trialCommand: python mnist.py
trialCodeDirectory: .
trialGpuNumber: 1
trialConcurrency: 2
maxExperimentDuration: 24h
maxTrialNumber: 100
tuner:
......@@ -59,6 +63,7 @@ Experiment(实验)配置参考
_value: [0.0001, 0.1]
trialCommand: python mnist.py
trialGpuNumber: 1
trialConcurrency: 2
tuner:
name: TPE
classArgs:
......@@ -77,6 +82,7 @@ Experiment(实验)配置参考
trialCommand: python mnist.py
trialCodeDirectory: .
trialGpuNumber: 1
trialConcurrency: 2
maxExperimentDuration: 24h
maxTrialNumber: 100
tuner:
......@@ -96,8 +102,8 @@ Experiment(实验)配置参考
参考
=========
Experiment 配置
^^^^^^^^^^^^^^^^
Experiment(实验)配置参考
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
experimentName
--------------
......@@ -110,11 +116,11 @@ Experiment 的助记名称, 这将显示在 WebUI 和 nnictl 中。
searchSpaceFile
---------------
包含搜索空间 JSON 文件的\ 路径_
包含搜索空间 JSON 文件的路径(path_)
类型:``Optional[str]``
搜索空间格式由 Tuner 决定, 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。
搜索空间格式由 Tuner 决定, 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。
与 `searchSpace`_ 互斥。
......@@ -126,7 +132,7 @@ searchSpace
类型:``Optional[JSON]``
格式由 Tuner 决定, 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。
格式由 Tuner 决定, 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。 内置 Tuner 的通用格式在 `这里 <../Tutorial/SearchSpaceSpec.rst>`__。
注意,``None`` 意味着“没有这样的字段”,所以空的搜索空间应该写成 ``{}``。
......@@ -142,11 +148,13 @@ trialCommand
该命令将在 Linux 和 macOS 上的 bash 中执行,在 Windows 上的 PowerShell 中执行。
注意在 Linux 和 macOS 中使用``python3``,在 Windows 中使用 ``python``。
trialCodeDirectory
------------------
到 Trial 源文件的目录的 路径_
到 Trial 源文件的目录的路径(path_)
类型:``str``
......@@ -175,7 +183,7 @@ trialGpuNumber
对于各种训练平台,这个字段的含义可能略有不同,
尤其是设置为 ``0`` 或者 ``None`` 时,
详情请参阅训练平台文件
指定 `训练平台 <../TrainingService/Overview.rst>`__
在本地模式下,将该字段设置为零将阻止 Trial 获取 GPU(通过置空 ``CUDA_VISIBLE_DEVICES`` )。
当设置为 ``None`` 时,Trial 将被创建和调度,就像它们不使用 GPU 一样,
......@@ -209,13 +217,13 @@ maxTrialNumber
nniManagerIp
------------
当前机器的 IP,用于训练机器访问 NNI 管理器。 本机模式下不可选。
当前机器的 IP,用于训练机器访问 NNI 管理器。 本机模式下不可选。 本机模式下不可选。
类型:``Optional[str]``
如果未指定,将使用 ``eth0`` 的 IPv4 地址。
必须在 Windows 和使用可预测网络接口名称的系统上设置,本地模式除外
除本地模式外,强烈建议手动设置此字段
useAnnotation
......@@ -223,7 +231,7 @@ useAnnotation
启动 `annotation <../Tutorial/AnnotationSpec.rst>`__。
类型:``bool``
类型:``Optional[bool]``
默认值:``false``
......@@ -235,7 +243,7 @@ debug
启动调试模式
类型:``bool``
类型:``str``
默认值:``false``
......@@ -251,7 +259,7 @@ logLevel
候选项:``"trace"``, ``"debug"``, ``"info"``, ``"warning"``, ``"error"``, ``"fatal"``
默认为 "info" 或 "debug",取决于 `debug`_ 选项。
默认为 "info" 或 "debug",取决于 `debug`_ 选项。 启用调试模式时,LogLevel 设置为 “debug”,否则,LogLevel 设置为 “Info”。
NNI 的大多数模块都会受到此值的影响,包括 NNI 管理器、Tuner、训练平台等。
......@@ -277,7 +285,7 @@ tunerGpuIndices
设定对 Tuner、Assessor 和 Advisor 可见的 GPU。
类型:``Optional[list[int] | str]``
类型: ``Optional[list[int] | str | int]``
这将是 Tuner 进程的 ``CUDA_VISIBLE_DEVICES`` 环境变量,
......@@ -287,35 +295,49 @@ tunerGpuIndices
tuner
-----
指定 Tuner。
指定 Tuner。
类型:Optional `AlgorithmConfig`_
内置的 Tuner 可以在 `这里 <../builtin_tuner.rst>`__ 找到,你可以按照 `此教程 <../Tuner/CustomizeTuner.rst>`__ 来定制一个新的 Tuner。
assessor
--------
指定 Assessor。
指定 Assessor。
类型:Optional `AlgorithmConfig`_
内置的 Assessor 可以在 `这里 <../builtin_assessor.rst>`__ 找到,你可以按照 `此教程 <../Assessor/CustomizeAssessor.rst>`__ 来定制一个新的 Assessor。
advisor
-------
指定 Advisor。
指定 Advisor。
类型:Optional `AlgorithmConfig`_
NNI 提供了两个内置的 Advisor:`BOHB <../Tuner/BohbAdvisor.rst>`__ 和 `Hyperband <../Tuner/HyperbandAdvisor.rst>`__,你可以按照 `此教程 <../Tuner/CustomizeAdvisor.rst>`__ 来定制一个新的 Advisor。
trainingService
---------------
指定 `训练平台 <../TrainingService/Overview.rst>`__。
详情查看 `这里 <../TrainingService/LocalMode.rst>`__。
类型:`TrainingServiceConfig`_
sharedStorage
-------------
配置共享存储,详细的用法可以在 `这里 <../Tutorial/HowToUseSharedStorage.rst>`__ 找到。
类型:Optional `SharedStorageConfig`_
AlgorithmConfig
^^^^^^^^^^^^^^^
......@@ -323,7 +345,7 @@ AlgorithmConfig
对于自定义算法,有两种方法来描述它们:
1. `注册算法 <../Tuner/InstallCustomizedTuner.rst>`__ ,像内置算法一样使用。 (首选)
1. `注册算法 <../Tuner/InstallCustomizedTuner.rst>`__ ,像内置算法一样使用。 (首选) (首选)
2. 指定代码目录和类名。
......@@ -333,7 +355,7 @@ name
内置或注册算法的名称。
类型:对于内置和注册算法使用 ``str``,其他自定义算法使用 ``None``
类型:对于内置和注册算法使用 ``None``,其他自定义算法使用 ``str``
className
......@@ -349,9 +371,9 @@ className
codeDirectory
-------------
到自定义算法类的目录的 路径_
到自定义算法类的目录的路径(path_)
类型:对于内置和注册算法使用 ``None``,其他自定义算法使用 ``str``
类型:对于内置和注册算法使用 ``str``,其他自定义算法使用 ``None``
classArgs
......@@ -371,37 +393,47 @@ TrainingServiceConfig
- `LocalConfig`_
- `RemoteConfig`_
- `OpenpaiConfig <openpai-class>`_
- :ref:`OpenpaiConfig <openpai-class>`
- `AmlConfig`_
- `HybridConfig`_
对于其他训练平台,目前 NNI 建议使用 `v1 配置模式 <../Tutorial/ExperimentConfig.rst>`_ 。
对于 `Kubeflow <../TrainingService/KubeflowMode.rst>`_, `FrameworkController <../TrainingService/FrameworkControllerMode.rst>`_, 和 `AdaptDL <../TrainingService/AdaptDLMode.rst>`_ 训练平台,目前 NNI 建议使用 `v1 配置模式 <../Tutorial/ExperimentConfig.rst>`_ 。
LocalConfig
^^^^^^^^^^^
-----------
详情查看 `这里 <../TrainingService/LocalMode.rst>`__。
详情查看 `这里 <../TrainingService/AMLMode.rst>`__。
platform
--------
""""""""
字符串常量 ``"local"``。
useActiveGpu
------------
""""""""""""
指定 NNI 是否应向被其他任务占用的 GPU 提交 Trial。
类型:``Optional[bool]``
类型:``Optional[str]``
必须在 ``trialgpunmber`` 大于零时设置。
如果您使用带有 GUI 的桌面系统,请将其设置为 ``True``。
以下过程可以使GPU "active" 起来:
- 非 NNI 的 CUDA 程序
- 图形化桌面
- 其他 NNI 实例提交的 Trial,如果您在同一时间运行了多个 NNI Experiment
- 其他用户的 CUDA 程序,如果你使用共享服务器
如果你使用的是图形操作系统,如 Windows 10 或 Ubuntu 桌面,请将此字段设置为 ``True``,否则,图形用户界面将阻止 NNI 启动任何 Trial。
当你创建多个 NNI Experiment 并且将 ``useActiveGpu`` 设置为 ``True`` 时,它们将同时提交多个 Trial 到同一个 GPU。
maxTrialNumberPerGpu
---------------------
""""""""""""""""""""
指定可以共享一个 GPU 的 Trial 数目。
......@@ -411,11 +443,11 @@ maxTrialNumberPerGpu
gpuIndices
----------
""""""""""
设定对 Trial 进程可见的 GPU。
类型:``Optional[list[int] | str]``
类型: ``Optional[list[int] | str | int]``
如果 `trialGpuNumber`_ 小于此值的长度,那么每个 Trial 只能看到一个子集。
......@@ -423,18 +455,18 @@ gpuIndices
RemoteConfig
^^^^^^^^^^^^
------------
详情查看 `这里 <../TrainingService/RemoteMachineMode.rst>`__。
platform
--------
""""""""
字符串常量 ``"remote"``。
machineList
-----------
"""""""""""
训练机器列表
......@@ -442,18 +474,18 @@ machineList
reuseMode
---------
"""""""""
启动 `重用模式 <../Tutorial/ExperimentConfig.rst#reuse>`__。
类型:``bool``
类型:``str``
RemoteMachineConfig
^^^^^^^^^^^^^^^^^^^
"""""""""""""""""""
host
----
****
机器的 IP 或主机名(域名)。
......@@ -461,7 +493,7 @@ host
port
----
****
SSH 服务端口。
......@@ -471,7 +503,7 @@ SSH 服务端口。
user
----
****
登录用户名。
......@@ -479,7 +511,7 @@ user
password
--------
********
登录密码。
......@@ -489,9 +521,9 @@ password
sshKeyFile
----------
**********
到 sshKeyFile的 路径_
到 sshKeyFile的路径(path_)
类型:``Optional[str]``
......@@ -499,7 +531,7 @@ sshKeyFile
sshPassphrase
-------------
*************
SSH 标识文件的密码。
......@@ -507,17 +539,30 @@ SSH 标识文件的密码。
useActiveGpu
------------
************
指定 NNI 是否应向被其他任务占用的 GPU 提交 Trial。
类型:``bool``
类型:``str``
默认值:``false``
必须在 ``trialgpunmber`` 大于零时设置。
以下过程可以使GPU "active" 起来:
- 非 NNI 的 CUDA 程序
- 图形化桌面
- 其他 NNI 实例提交的 Trial,如果您在同一时间运行了多个 NNI Experiment
- 其他用户的 CUDA 程序,如果你使用共享服务器
如果你使用的是图形操作系统,如 Ubuntu 桌面,请将此字段设置为 ``True``,否则,图形用户界面将阻止 NNI 启动任何 Trial。
当你创建多个 NNI Experiment 并且将 ``useActiveGpu`` 设置为 ``True`` 时,它们将同时提交多个 Trial 到同一个 GPU。
maxTrialNumberPerGpu
--------------------
********************
指定可以共享一个 GPU 的 Trial 数目。
......@@ -527,41 +572,51 @@ maxTrialNumberPerGpu
gpuIndices
----------
**********
设定对 Trial 进程可见的 GPU。
类型:``Optional[list[int] | str]``
类型: ``Optional[list[int] | str | int]``
如果 `trialGpuNumber`_ 小于此值的长度,那么每个 Trial 只能看到一个子集。
这用作环境变量 ``CUDA_VISIBLE_DEVICES``。
trialPrepareCommand
-------------------
pythonPath
**********
启动 Trial 之前运行的命令
指定 Python 环境
类型:``Optional[str]``
类型:``Optional[list[int] | str]``
这个路径将被插入到 PATH 的前面。 以下之一:
- (linux) pythonPath: ``/opt/python3.7/bin``
- (windows) pythonPath: ``C:/Python37``
如果你是在 Anaconda 上工作,那就有所不同。 在Windows上,你还必须添加 ``.../script`` 和 ``.../Library/bin``,并用 ``;`` 分隔。 示例如下:
- (linux anaconda) pythonPath: ``/home/yourname/anaconda3/envs/myenv/bin/``
- (windows anaconda) pythonPath: ``C:/Users/yourname/.conda/envs/myenv;C:/Users/yourname/.conda/envs/myenv/Scripts;C:/Users/yourname/.conda/envs/myenv/Library/bin``
如果不同机器的准备步骤不同,这将非常有用。
.. _openpai-class:
OpenpaiConfig
^^^^^^^^^^^^^
-------------
详情查看 `这里 <../TrainingService/PaiMode.rst>`__。
platform
--------
""""""""
字符串常量 ``"openpai"``。
host
----
""""
OpenPAI 平台的主机名。
......@@ -573,7 +628,7 @@ OpenPAI 平台的主机名。
username
--------
""""""""
OpenPAI 用户名。
......@@ -581,7 +636,7 @@ OpenPAI 用户名。
token
-----
"""""
OpenPAI 用户令牌。
......@@ -590,8 +645,36 @@ OpenPAI 用户令牌。
这可以在 OpenPAI 用户设置页面中找到。
trialCpuNumber
""""""""""""""
指定每个 Trial 在 OpenPAI 容器中使用的 CPU 数。
类型:``bool``
trialMemorySize
"""""""""""""""
指定每个 Trial 在 OpenPAI 容器中的内存限制。
类型:``str``
格式:``数字 + tb|gb|mb|kb``
示例:``"8gb"``, ``"8192mb"``
storageConfigName
"""""""""""""""""
设置 OpenPAI 中使用的存储名称。
类型:``str``
dockerImage
-----------
"""""""""""
运行 Trial 的 Docker 镜像的名称和标签。
......@@ -600,8 +683,8 @@ dockerImage
默认:``"msranni/nni:latest"``
nniManagerStorageMountPoint
---------------------------
localStorageMountPoint
""""""""""""""""""""""
当前机器中存储服务(通常是NFS)的挂载点路径。
......@@ -609,27 +692,27 @@ nniManagerStorageMountPoint
containerStorageMountPoint
--------------------------
""""""""""""""""""""""""""
Docker 容器中存储服务(通常是NFS)的挂载点。
类型:``str``
类型:``Optional[str]``
这必须是绝对路径。
reuseMode
---------
"""""""""
启动 `重用模式 <../Tutorial/ExperimentConfig.rst#reuse>`__。
类型:``bool``
类型:``str``
默认值:``false``
openpaiConfig
-------------
"""""""""""""
嵌入的 OpenPAI 配置文件。
......@@ -637,39 +720,39 @@ openpaiConfig
openpaiConfigFile
-----------------
"""""""""""""""""
到 OpenPAI 配置文件的 `路径`_
到 OpenPAI 配置文件的路径(path_)
类型:``Optional[str]``
类型:``Optional[list[int] | str]``
示例在 `这里 <https://github.com/microsoft/pai/blob/master/docs/manual/cluster-user/examples/hello-world-job.yaml>`__。
AmlConfig
^^^^^^^^^
---------
情查看 `这里 <../TrainingService/AMLMode.rst>`__。
细用法参考 `这里 <../TrainingService/AMLMode.rst>`__。
platform
--------
""""""""
字符串常量 ``"aml"``。
dockerImage
-----------
"""""""""""
运行 Trial 的 Docker 镜像的名称和标签。
类型:``str``
类型:``Optional[list[int] | str]``
默认:``"msranni/nni:latest"``
subscriptionId
--------------
""""""""""""""
Azure 订阅 ID。
......@@ -677,7 +760,7 @@ Azure 订阅 ID。
resourceGroup
-------------
"""""""""""""
Azure 资源组名称。
......@@ -685,7 +768,7 @@ Azure 资源组名称。
workspaceName
-------------
"""""""""""""
Azure 工作区名称。
......@@ -693,8 +776,157 @@ Azure 工作区名称。
computeTarget
-------------
"""""""""""""
AML 计算集群名称。
类型:``str``
HybridConfig
------------
目前仅支持 `LocalConfig`_, `RemoteConfig`_, :ref:`OpenpaiConfig <openpai-class>` 和 `AmlConfig`_ 配置。 详细用法参考 `这里 <../TrainingService/HybridMode.rst>`__。
类型:`TrainingServiceConfig`_ 列表
SharedStorageConfig
^^^^^^^^^^^^^^^^^^^
详细用法参考 `这里 <../Tutorial/HowToUseSharedStorage.rst>`__。
nfsConfig
---------
storageType
"""""""""""
字符串常量 ``"NFS"``
localMountPoint
"""""""""""""""
已经或将要在本地挂载存储的路径。
类型:``str``
如果路径不存在,则会自动创建。 推荐使用绝对路径,即 ``/tmp/nni-shared-storage``
remoteMountPoint
""""""""""""""""
远程挂载存储的路径。
类型:``str``
如果路径不存在,则会自动创建。 推荐使用相对路径。 即, ``./nni-shared-storage``
localMounted
""""""""""""
指定挂载共享存储的对象和状态。
类型:``str``
候选项:``"usermount"``, ``"nnimount"``, ``"nomount"``
``usermount`` 表示已经在 localMountPoint 上挂载了此存储。 ``nnimount`` 表示 NNI 将尝试在 localMountPoint 上挂载此存储。 ``nomount`` 表示存储不会挂载在本地机器上,将在未来支持部分存储。
nfsServer
"""""""""
NFS 服务器主机
类型:``str``
exportedDirectory
"""""""""""""""""
NFS 服务器导出目录,详情参考 `这里 <https://www.ibm.com/docs/en/aix/7.2?topic=system-nfs-exporting-mounting>`_ 。
类型:``str``
azureBlobConfig
---------------
storageType
"""""""""""
字符串常量 ``"AzureBlob"``
localMountPoint
"""""""""""""""
已经或将要在本地挂载存储的路径。
类型:``str``
如果路径不存在,则会自动创建。 推荐使用绝对路径,即 ``/tmp/nni-shared-storage``
remoteMountPoint
""""""""""""""""
远程挂载存储的路径。
类型:``str``
如果路径不存在,它将被自动创建。 建议使用相对路径。 即, ``./nni-shared-storage``
注意:使用 AzureBlob 时,此目录必须是空的。
localMounted
""""""""""""
指定挂载共享存储的对象和状态。
类型:``str``
候选值:``"usermount"``, ``"nnimount"``, ``"nomount"``
``usermount`` 表示已经在 localMountPoint 上挂载了此存储。 ``nnimount`` 表示 NNI 将尝试在 localMountPoint 上挂载此存储。 ``nomount`` 表示存储不会挂载在本地机器上,将在未来支持部分存储。
storageAccountName
""""""""""""""""""
Azure 存储账户名称。
类型:``str``
storageAccountKey
"""""""""""""""""
Azure 存储账户密钥。
类型:``Optional[str]``
如果未设置 storageAccountKey,则首先需要在 Azure CLI 中使用 ``az login`` 并设置 `resourceGroupName`_ 。
resourceGroupName
"""""""""""""""""
AzureBlob 容器所属的资源组。
类型:``Optional[str]``
如果 ``storageAccountKey`` 没有设置则必必需。
containerName
"""""""""""""
AzureBlob 容器名。
类型:``str``
......@@ -7,5 +7,5 @@ Python API 参考
:maxdepth: 1
自动调优 <autotune_ref>
NAS <NAS/NasReference>
NAS <NAS/ApiReference>
模型压缩 <Compression/CompressionReference>
\ 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