From f8d42a33c87a881c5284ea63ce2461cb523e16cb Mon Sep 17 00:00:00 2001 From: liuzhe-lz <40699903+liuzhe-lz@users.noreply.github.com> Date: Thu, 16 Apr 2020 14:43:40 +0800 Subject: [PATCH 1/9] Add release note and update version numbers for v1.5 (#2300) v1.5 release note --- README.md | 4 +-- docs/en_US/Release.md | 42 ++++++++++++++++++++++++ docs/en_US/Tutorial/InstallationLinux.md | 4 +-- docs/en_US/Tutorial/InstallationWin.md | 6 ++-- docs/en_US/conf.py | 2 +- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ca24e671f9..75e178a2b3 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ The tool manages automated machine learning (AutoML) experiments, **dispatches a * Researchers and data scientists who want to easily **implement and experiment new AutoML algorithms**, may it be: hyperparameter tuning algorithm, neural architect search algorithm or model compression algorithm. * ML Platform owners who want to **support AutoML in their platform**. -### **NNI v1.4 has been released!  ** +### **NNI v1.5 has been released!  ** ## **NNI capabilities in a glance** @@ -238,7 +238,7 @@ The following example is built on TensorFlow 1.x. Make sure **TensorFlow 1.x is * Download the examples via clone the source code. ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git ``` * Run the MNIST example. diff --git a/docs/en_US/Release.md b/docs/en_US/Release.md index 6644d03da8..8d44d8616b 100644 --- a/docs/en_US/Release.md +++ b/docs/en_US/Release.md @@ -1,5 +1,47 @@ # ChangeLog +## Release 1.5 - 4/13/2020 + +### New Features and Documentation + +#### Hyper-Parameter Optimizing + +* New tuner: [Population Based Training (PBT)](https://github.com/microsoft/nni/blob/master/docs/en_US/Tuner/PBTTuner.md) +* Trials can now report infinity and NaN as result + +#### Neural Architecture Search + +* New NAS algorithm: [TextNAS](https://github.com/microsoft/nni/blob/master/docs/en_US/NAS/TextNAS.md) +* ENAS and DARTS now support [visualization](https://github.com/microsoft/nni/blob/master/docs/en_US/NAS/Visualization.md) through web UI. + +#### Model Compression + +* New Pruner: [GradientRankFilterPruner](https://github.com/microsoft/nni/blob/master/docs/en_US/Compressor/Pruner.md#gradientrankfilterpruner) +* Compressors will validate configuration by default +* Refactor: Adding optimizer as an input argument of pruner, for easy support of DataParallel and more efficient iterative pruning. This is a broken change for the usage of iterative pruning algorithms. +* Model compression examples are refactored and improved +* Added documentation for [implementing compressing algorithm](https://github.com/microsoft/nni/blob/master/docs/en_US/Compressor/Framework.md) + +#### Training Service + +* Kubeflow now supports pytorchjob crd v1 (thanks external contributor @jiapinai) +* Experimental [DLTS](https://github.com/microsoft/nni/blob/master/docs/en_US/TrainingService/DLTSMode.md) support + +#### Overall Documentation Improvement + +* Documentation is significantly improved on grammar, spelling, and wording (thanks external contributor @AHartNtkn) + +### Fixed Bugs + +* ENAS cannot have more than one LSTM layers (thanks external contributor @marsggbo) +* NNI manager's timers will never unsubscribe (thanks external contributor @guilhermehn) +* NNI manager may exhaust head memory (thanks external contributor @Sundrops) +* Batch tuner does not support customized trials (#2075) +* Experiment cannot be killed if it failed on start (#2080) +* Non-number type metrics break web UI (#2278) +* A bug in lottery ticket pruner +* Other minor glitches + ## Release 1.4 - 2/19/2020 ### Major Features diff --git a/docs/en_US/Tutorial/InstallationLinux.md b/docs/en_US/Tutorial/InstallationLinux.md index adc475fce8..e41cf5bf22 100644 --- a/docs/en_US/Tutorial/InstallationLinux.md +++ b/docs/en_US/Tutorial/InstallationLinux.md @@ -19,7 +19,7 @@ Installation on Linux and macOS follow the same instructions, given below. Prerequisites: `python 64-bit >=3.5`, `git`, `wget` ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git cd nni ./install.sh ``` @@ -35,7 +35,7 @@ The following example is built on TensorFlow 1.x. Make sure **TensorFlow 1.x is * Download the examples via cloning the source code. ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git ``` * Run the MNIST example. diff --git a/docs/en_US/Tutorial/InstallationWin.md b/docs/en_US/Tutorial/InstallationWin.md index 9180492164..a9f3deb3e4 100644 --- a/docs/en_US/Tutorial/InstallationWin.md +++ b/docs/en_US/Tutorial/InstallationWin.md @@ -19,7 +19,7 @@ Anaconda or Miniconda is highly recommended to manage multiple Python environmen Prerequisites: `python 64-bit >=3.5`, `git`, `PowerShell`. ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git cd nni powershell -ExecutionPolicy Bypass -file install.ps1 ``` @@ -31,7 +31,7 @@ The following example is built on TensorFlow 1.x. Make sure **TensorFlow 1.x is * Download the examples via clone the source code. ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git ``` * Run the MNIST example. @@ -136,4 +136,4 @@ Note: * [How to run an experiment on multiple machines?](../TrainingService/RemoteMachineMode.md) * [How to run an experiment on OpenPAI?](../TrainingService/PaiMode.md) * [How to run an experiment on Kubernetes through Kubeflow?](../TrainingService/KubeflowMode.md) -* [How to run an experiment on Kubernetes through FrameworkController?](../TrainingService/FrameworkControllerMode.md) \ No newline at end of file +* [How to run an experiment on Kubernetes through FrameworkController?](../TrainingService/FrameworkControllerMode.md) diff --git a/docs/en_US/conf.py b/docs/en_US/conf.py index e657f2c274..89d0aabcdc 100644 --- a/docs/en_US/conf.py +++ b/docs/en_US/conf.py @@ -28,7 +28,7 @@ # The short X.Y version version = '' # The full version, including alpha/beta/rc tags -release = 'v1.4' +release = 'v1.5' # -- General configuration --------------------------------------------------- From 649eabc0406b0d0bd9abe0987afdb191e1ae57ef Mon Sep 17 00:00:00 2001 From: chicm-ms <38930155+chicm-ms@users.noreply.github.com> Date: Fri, 17 Apr 2020 11:42:16 +0800 Subject: [PATCH 2/9] Fix build docker image problem (#2326) --- deployment/docker/Dockerfile | 2 +- test/pipelines/pipelines-it-frameworkcontroller.yml | 7 ++++++- test/pipelines/pipelines-it-kubeflow.yml | 7 ++++++- test/pipelines/pipelines-it-pai-windows.yml | 7 ++++++- test/pipelines/pipelines-it-pai.yml | 6 +++++- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/deployment/docker/Dockerfile b/deployment/docker/Dockerfile index e89cf1def4..74835358bf 100644 --- a/deployment/docker/Dockerfile +++ b/deployment/docker/Dockerfile @@ -51,7 +51,7 @@ RUN python3 -m pip --no-cache-dir install Keras==2.1.6 # # PyTorch # -RUN python3 -m pip --no-cache-dir install torch==1.2.0 +RUN python3 -m pip --no-cache-dir install torch==1.4.0 RUN python3 -m pip install torchvision==0.5.0 # diff --git a/test/pipelines/pipelines-it-frameworkcontroller.yml b/test/pipelines/pipelines-it-frameworkcontroller.yml index 0bf005c21c..dc7849ee1f 100644 --- a/test/pipelines/pipelines-it-frameworkcontroller.yml +++ b/test/pipelines/pipelines-it-frameworkcontroller.yml @@ -11,6 +11,10 @@ jobs: - script: | cd deployment/pypi + if [ -d ./dist ] + then + rm -rf ./dist/* + fi echo 'building prerelease package...' make build ls $(Build.SourcesDirectory)/deployment/pypi/dist/ @@ -28,6 +32,7 @@ jobs: displayName: 'Install dependencies for integration tests in frameworkcontroller mode' - script: | + set -e if [ $(build_docker_img) = 'true' ] then cd deployment/pypi @@ -35,7 +40,7 @@ jobs: echo 'updating docker file for installing nni from local...' # update Dockerfile to install NNI in docker image from whl file built in last step - sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile + sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\/\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile cat ../docker/Dockerfile export IMG_TAG=`date -u +%y%m%d%H%M` docker build -f ../docker/Dockerfile -t $(test_docker_img_name):$IMG_TAG . diff --git a/test/pipelines/pipelines-it-kubeflow.yml b/test/pipelines/pipelines-it-kubeflow.yml index 6a2f2b119f..ec7c4dbca5 100644 --- a/test/pipelines/pipelines-it-kubeflow.yml +++ b/test/pipelines/pipelines-it-kubeflow.yml @@ -11,6 +11,10 @@ jobs: - script: | cd deployment/pypi + if [ -d ./dist ] + then + rm -rf ./dist/* + fi echo 'building prerelease package...' make build ls $(Build.SourcesDirectory)/deployment/pypi/dist/ @@ -28,6 +32,7 @@ jobs: displayName: 'Install dependencies for integration tests in Kubeflow mode' - script: | + set -e if [ $(build_docker_img) = 'true' ] then cd deployment/pypi @@ -35,7 +40,7 @@ jobs: echo 'updating docker file for installing nni from local...' # update Dockerfile to install NNI in docker image from whl file built in last step - sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile + sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\/\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile cat ../docker/Dockerfile export IMG_TAG=`date -u +%y%m%d%H%M` docker build -f ../docker/Dockerfile -t $(test_docker_img_name):$IMG_TAG . diff --git a/test/pipelines/pipelines-it-pai-windows.yml b/test/pipelines/pipelines-it-pai-windows.yml index b1ab2e1b69..be66a0c751 100644 --- a/test/pipelines/pipelines-it-pai-windows.yml +++ b/test/pipelines/pipelines-it-pai-windows.yml @@ -9,6 +9,10 @@ jobs: - script: | cd deployment/pypi + if [ -d ./dist ] + then + rm -rf ./dist/* + fi echo 'building prerelease package...' make build ls $(Build.SourcesDirectory)/deployment/pypi/dist/ @@ -16,13 +20,14 @@ jobs: displayName: 'build nni bdsit_wheel' - script: | + set -e if [ $(build_docker_img) = 'true' ] then cd deployment/pypi docker login -u $(docker_hub_user) -p $(docker_hub_pwd) echo 'updating docker file for installing nni from local...' # update Dockerfile to install NNI in docker image from whl file built in last step - sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile + sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\/\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile cat ../docker/Dockerfile export IMG_TAG=`date -u +%y%m%d%H%M` diff --git a/test/pipelines/pipelines-it-pai.yml b/test/pipelines/pipelines-it-pai.yml index 43c160a81c..9e69bb65b4 100644 --- a/test/pipelines/pipelines-it-pai.yml +++ b/test/pipelines/pipelines-it-pai.yml @@ -11,6 +11,10 @@ jobs: - script: | cd deployment/pypi + if [ -d ./dist ] + then + rm -rf ./dist/* + fi echo 'building prerelease package...' make build ls $(Build.SourcesDirectory)/deployment/pypi/dist/ @@ -35,7 +39,7 @@ jobs: docker login -u $(docker_hub_user) -p $(docker_hub_pwd) echo 'updating docker file for installing nni from local...' # update Dockerfile to install NNI in docker image from whl file built in last step - sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile + sed -ie 's/RUN python3 -m pip --no-cache-dir install nni/COPY .\/dist\/* .\/\nRUN python3 -m pip install nni-*.whl/' ../docker/Dockerfile cat ../docker/Dockerfile export IMG_TAG=`date -u +%y%m%d%H%M` From ae72aec87dbce3a3f328c9a70a82132f825634d6 Mon Sep 17 00:00:00 2001 From: chicm-ms <38930155+chicm-ms@users.noreply.github.com> Date: Fri, 17 Apr 2020 11:42:51 +0800 Subject: [PATCH 3/9] Show more log info for failed test cases (#2321) --- test/nni_test/nnitest/run_tests.py | 50 ++++++++++++++++++------------ test/nni_test/nnitest/utils.py | 20 ++++++++---- 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/test/nni_test/nnitest/run_tests.py b/test/nni_test/nnitest/run_tests.py index 054991c1c5..2b8c4c2e29 100644 --- a/test/nni_test/nnitest/run_tests.py +++ b/test/nni_test/nnitest/run_tests.py @@ -70,7 +70,7 @@ def run_test_case(test_case_config, it_config, args): try: launch_test(new_config_file, args.ts, test_case_config) - invoke_validator(test_case_config, args.nni_source_dir) + invoke_validator(test_case_config, args.nni_source_dir, args.ts) finally: stop_command = get_command(test_case_config, 'stopCommand') print('Stop command:', stop_command, flush=True) @@ -80,7 +80,7 @@ def run_test_case(test_case_config, it_config, args): if os.path.exists(new_config_file): os.remove(new_config_file) -def invoke_validator(test_case_config, nni_source_dir): +def invoke_validator(test_case_config, nni_source_dir, training_service): validator_config = test_case_config.get('validator') if validator_config is None or validator_config.get('class') is None: return @@ -88,7 +88,13 @@ def invoke_validator(test_case_config, nni_source_dir): validator = validators.__dict__[validator_config.get('class')]() kwargs = validator_config.get('kwargs', {}) print('kwargs:', kwargs) - validator(REST_ENDPOINT, get_experiment_dir(EXPERIMENT_URL), nni_source_dir, **kwargs) + experiment_id = get_experiment_id(EXPERIMENT_URL) + try: + validator(REST_ENDPOINT, get_experiment_dir(EXPERIMENT_URL), nni_source_dir, **kwargs) + except: + print_experiment_log(experiment_id=experiment_id) + print_trial_job_log(training_service, TRIAL_JOBS_URL) + raise def get_max_values(config_file): experiment_config = get_yml_content(config_file) @@ -117,7 +123,7 @@ def launch_test(config_file, training_service, test_case_config): proc = subprocess.run(shlex.split(launch_command)) - assert proc.returncode == 0, '`nnictl create` failed with code %d' % proc.returncode + assert proc.returncode == 0, 'launch command failed with code %d' % proc.returncode # set experiment ID into variable exp_var_name = test_case_config.get('setExperimentIdtoVar') @@ -134,24 +140,30 @@ def launch_test(config_file, training_service, test_case_config): bg_time = time.time() print(str(datetime.datetime.now()), ' waiting ...', flush=True) - while True: + try: + # wait restful server to be ready time.sleep(3) - waited_time = time.time() - bg_time - if waited_time > max_duration + 10: - print('waited: {}, max_duration: {}'.format(waited_time, max_duration)) - break - status = get_experiment_status(STATUS_URL) - if status in ['DONE', 'ERROR']: - print('experiment status:', status) - break - num_failed = len(get_failed_trial_jobs(TRIAL_JOBS_URL)) - if num_failed > 0: - print('failed jobs: ', num_failed) - break - + experiment_id = get_experiment_id(EXPERIMENT_URL) + while True: + waited_time = time.time() - bg_time + if waited_time > max_duration + 10: + print('waited: {}, max_duration: {}'.format(waited_time, max_duration)) + break + status = get_experiment_status(STATUS_URL) + if status in ['DONE', 'ERROR']: + print('experiment status:', status) + break + num_failed = len(get_failed_trial_jobs(TRIAL_JOBS_URL)) + if num_failed > 0: + print('failed jobs: ', num_failed) + break + time.sleep(3) + except: + print_experiment_log(experiment_id=experiment_id) + raise print(str(datetime.datetime.now()), ' waiting done', flush=True) if get_experiment_status(STATUS_URL) == 'ERROR': - print_experiment_log(EXPERIMENT_URL) + print_experiment_log(experiment_id=experiment_id) trial_stats = get_trial_stats(TRIAL_JOBS_URL) print(json.dumps(trial_stats, indent=4), flush=True) diff --git a/test/nni_test/nnitest/utils.py b/test/nni_test/nnitest/utils.py index c5a6c05ca2..e362b0de07 100644 --- a/test/nni_test/nnitest/utils.py +++ b/test/nni_test/nnitest/utils.py @@ -10,6 +10,7 @@ import requests import time import ruamel.yaml as yaml +import shlex EXPERIMENT_DONE_SIGNAL = 'Experiment done' @@ -65,14 +66,16 @@ def get_experiment_id(experiment_url): experiment_id = requests.get(experiment_url).json()['id'] return experiment_id -def get_experiment_dir(experiment_url): +def get_experiment_dir(experiment_url=None, experiment_id=None): '''get experiment root directory''' - experiment_id = get_experiment_id(experiment_url) + assert any([experiment_url, experiment_id]) + if experiment_id is None: + experiment_id = get_experiment_id(experiment_url) return os.path.join(os.path.expanduser('~'), 'nni', 'experiments', experiment_id) -def get_nni_log_dir(experiment_url): +def get_nni_log_dir(experiment_url=None, experiment_id=None): '''get nni's log directory from nni's experiment url''' - return os.path.join(get_experiment_dir(experiment_url), 'log') + return os.path.join(get_experiment_dir(experiment_url, experiment_id), 'log') def get_nni_log_path(experiment_url): '''get nni's log path from nni's experiment url''' @@ -125,12 +128,17 @@ def print_trial_job_log(training_service, trial_jobs_url): for log_file in log_files: print_file_content(os.path.join(trial_log_dir, log_file)) -def print_experiment_log(experiment_url): - log_dir = get_nni_log_dir(experiment_url) +def print_experiment_log(experiment_id): + log_dir = get_nni_log_dir(experiment_id=experiment_id) for log_file in ['dispatcher.log', 'nnimanager.log']: filepath = os.path.join(log_dir, log_file) print_file_content(filepath) + print('nnictl log stderr:') + subprocess.run(shlex.split('nnictl log stderr {}'.format(experiment_id))) + print('nnictl log stdout:') + subprocess.run(shlex.split('nnictl log stdout {}'.format(experiment_id))) + def parse_max_duration_time(max_exec_duration): unit = max_exec_duration[-1] time = max_exec_duration[:-1] From f36b62a91f612342492c4c7c1cfff52b24966537 Mon Sep 17 00:00:00 2001 From: SparkSnail Date: Fri, 17 Apr 2020 15:01:57 +0800 Subject: [PATCH 4/9] Update sklearn regression example (#2330) --- examples/trials/sklearn/regression/main.py | 22 +++++++------------ .../sklearn/regression/search_space.json | 5 ++--- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/examples/trials/sklearn/regression/main.py b/examples/trials/sklearn/regression/main.py index af54bf225f..9b9a2fb2f8 100644 --- a/examples/trials/sklearn/regression/main.py +++ b/examples/trials/sklearn/regression/main.py @@ -24,9 +24,9 @@ from sklearn.metrics import r2_score from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression -from sklearn.svm import SVR -from sklearn.neighbors import KNeighborsRegressor -from sklearn.tree import DecisionTreeRegressor +from sklearn.linear_model import Ridge +from sklearn.linear_model import Lars +from sklearn.linear_model import ARDRegression LOG = logging.getLogger('sklearn_regression') @@ -55,24 +55,18 @@ def get_model(PARAMS): '''Get model according to parameters''' model_dict = { 'LinearRegression': LinearRegression(), - 'SVR': SVR(), - 'KNeighborsRegressor': KNeighborsRegressor(), - 'DecisionTreeRegressor': DecisionTreeRegressor() + 'Ridge': Ridge(), + 'Lars': Lars(), + 'ARDRegression': ARDRegression() + } if not model_dict.get(PARAMS['model_name']): LOG.exception('Not supported model!') exit(1) model = model_dict[PARAMS['model_name']] + model.normalize = bool(PARAMS['normalize']) - try: - if PARAMS['model_name'] == 'SVR': - model.kernel = PARAMS['svr_kernel'] - elif PARAMS['model_name'] == 'KNeighborsRegressor': - model.weights = PARAMS['knr_weights'] - except Exception as exception: - LOG.exception(exception) - raise return model def run(X_train, X_test, y_train, y_test, model): diff --git a/examples/trials/sklearn/regression/search_space.json b/examples/trials/sklearn/regression/search_space.json index a2dcb53915..d069b9d2b4 100644 --- a/examples/trials/sklearn/regression/search_space.json +++ b/examples/trials/sklearn/regression/search_space.json @@ -1,5 +1,4 @@ { - "model_name":{"_type":"choice","_value":["LinearRegression", "SVR", "KNeighborsRegressor", "DecisionTreeRegressor"]}, - "svr_kernel": {"_type":"choice","_value":["linear", "poly", "rbf"]}, - "knr_weights": {"_type":"choice","_value":["uniform", "distance"]} + "model_name":{"_type":"choice","_value":["LinearRegression", "Lars", "Ridge", "ARDRegression"]}, + "normalize": {"_type":"choice","_value":["true", "false"]} } \ No newline at end of file From 0a64d94253d3df0065f497ab8fef9e4be8194d57 Mon Sep 17 00:00:00 2001 From: xuehui Date: Sun, 19 Apr 2020 17:54:31 +0800 Subject: [PATCH 5/9] update typo in FeatureEngineering (#2292) --- docs/en_US/FeatureEngineering/Overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en_US/FeatureEngineering/Overview.md b/docs/en_US/FeatureEngineering/Overview.md index 8388730bc6..0849db6e32 100644 --- a/docs/en_US/FeatureEngineering/Overview.md +++ b/docs/en_US/FeatureEngineering/Overview.md @@ -148,7 +148,7 @@ from sklearn.feature_selection.base import SelectorMixin from nni.feature_engineering.feature_selector import FeatureSelector -class CustomizedSelector(FeatureSelector, BaseEstimator): +class CustomizedSelector(FeatureSelector, BaseEstimator, SelectorMixin): def __init__(self, ...): ... @@ -161,7 +161,7 @@ class CustomizedSelector(FeatureSelector, BaseEstimator): if not key.endswith('_')} return params - def set_params(self, **params): + def set_params(self, **params): """ Set the parameters of this estimator. """ From 6f6faffdf4ada01ab930878c3e97616f5e9ec6ed Mon Sep 17 00:00:00 2001 From: xuehui Date: Sun, 19 Apr 2020 22:03:57 +0800 Subject: [PATCH 6/9] Update GbdtExample.md (#2306) --- docs/en_US/TrialExample/GbdtExample.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/en_US/TrialExample/GbdtExample.md b/docs/en_US/TrialExample/GbdtExample.md index 95ab71d06f..8a154e097c 100644 --- a/docs/en_US/TrialExample/GbdtExample.md +++ b/docs/en_US/TrialExample/GbdtExample.md @@ -147,8 +147,6 @@ if __name__ == '__main__': + RECEIVED_PARAMS = nni.get_next_parameter() PARAMS = get_default_parameters() + PARAMS.update(RECEIVED_PARAMS) - PARAMS = get_default_parameters() - PARAMS.update(RECEIVED_PARAMS) # train run(lgb_train, lgb_eval, PARAMS, X_test, y_test) @@ -193,4 +191,4 @@ Run this experiment with command as follow: ```bash nnictl create --config ./config.yml -``` \ No newline at end of file +``` From d2a0fc5ac592c5f33b96ec98b16e50976f09a6ce Mon Sep 17 00:00:00 2001 From: SparkSnail Date: Sun, 19 Apr 2020 22:11:59 +0800 Subject: [PATCH 7/9] Fix doc title of DLTS (#2341) --- docs/en_US/training_services.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en_US/training_services.rst b/docs/en_US/training_services.rst index 884d90441b..fd63f9bcaf 100644 --- a/docs/en_US/training_services.rst +++ b/docs/en_US/training_services.rst @@ -9,4 +9,4 @@ Introduction to NNI Training Services OpenPAI Yarn Mode<./TrainingService/PaiYarnMode> Kubeflow<./TrainingService/KubeflowMode> FrameworkController<./TrainingService/FrameworkControllerMode> - OpenPAI<./TrainingService/DLTSMode> + DLTS<./TrainingService/DLTSMode> From aca75e87f0ed5612c17467dd12f6d21ccb07d3fc Mon Sep 17 00:00:00 2001 From: SparkSnail Date: Mon, 20 Apr 2020 09:13:43 +0800 Subject: [PATCH 8/9] Update outdated pai image (#2302) --- docs/img/nni_webui_joblist.jpg | Bin 133522 -> 133522 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/nni_webui_joblist.jpg b/docs/img/nni_webui_joblist.jpg index 7789d7f8d415084265ce396ca47560a7a75b986f..68fc4eec4c66f5bc7060ac1c0569696b2e556c06 100644 GIT binary patch literal 133522 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

V;PpSBRvBhP^=Tq4$ zrS$lJ5or7r6Ha)gPch-Am=I}>@ZX#;8c<{hW9_yzsFsKnNi}=s-TD59pWKa`|8W1_ z?|8n4X^-Jz#V`?S6(u`}Wk&5Yd46uLX*jgEs8~sV1Y<`^$PI`X36a+{ z8=ZidCKBW#8-1M8MlqeKBlwARL^*6wF4&xvTHZ)`#^}w^*Y|gieqkBL*#oUa25wpw zVhUU0kXUjBh{~QD6b+O~SA!_&#lTh8Dod?D?5~@w43{*qV_HSfn3O^9@0-GOOj*li zji5CdPNF8mDcev@L>G z05{T3p_dROr)~A3{?Z&)ozF6gpgQNTL2pL{=FkL5lR2xZcBB{zH>6|0Xq_#Pd+iqy z+Rxhz(x1s2rMqCZcjrOVC$-6X-UZ4XaQsvNqKO`T7u)Hv5DA(54kZGD-|5!NC-B3L z$Skg&Ez9=92TdR3ZECMMtTK3?$Je_!^~u&kznUy$ckKNZI*~8g1T*9u*sy~Gva^b$ zvm^a2S_XMK~_wyQVI~ODIwp{6;uoAI^>6 zTWH~fb`J1@fWJE6*DZGU(Bk*?)$l1YS?Fk z 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%0A2H-z^?<1dme3f%xwg8&&!ESM4@ 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 literal 133522 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 From bcb53a725dd0c481bf36e236793135033b735c95 Mon Sep 17 00:00:00 2001 From: Chi Song <27178119+squirrelsc@users.noreply.github.com> Date: Mon, 20 Apr 2020 10:38:46 +0800 Subject: [PATCH 9/9] Chinese translation (#2250) --- README_zh_CN.md | 8 ++- docs/zh_CN/FeatureEngineering/Overview.md | 6 +- docs/zh_CN/NAS/NasGuide.md | 8 ++- docs/zh_CN/NAS/Overview.md | 10 ++- docs/zh_CN/NAS/TextNAS.md | 80 +++++++++++++++++++++ docs/zh_CN/NAS/Visualization.md | 69 ++++++++++++++++++ docs/zh_CN/Release.md | 86 +++++++++++++++++------ docs/zh_CN/TrialExample/GbdtExample.md | 2 - docs/zh_CN/Tuner/BuiltinTuner.md | 31 ++++++++ docs/zh_CN/Tuner/PBTTuner.md | 52 ++++++++++++++ docs/zh_CN/Tutorial/ExperimentConfig.md | 2 +- docs/zh_CN/Tutorial/FAQ.md | 2 +- docs/zh_CN/Tutorial/InstallationLinux.md | 4 +- docs/zh_CN/Tutorial/InstallationWin.md | 6 +- docs/zh_CN/builtin_tuner.rst | 1 + docs/zh_CN/conf.py | 2 +- docs/zh_CN/nas.rst | 2 + docs/zh_CN/training_services.rst | 2 +- examples/nas/textnas/README_zh_CN.md | 6 +- test/config/naive_test/README_zh_CN.md | 2 - 20 files changed, 334 insertions(+), 47 deletions(-) create mode 100644 docs/zh_CN/NAS/TextNAS.md create mode 100644 docs/zh_CN/NAS/Visualization.md create mode 100644 docs/zh_CN/Tuner/PBTTuner.md diff --git a/README_zh_CN.md b/README_zh_CN.md index b3d9ecff56..d45d2f0f9d 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -19,7 +19,7 @@ NNI 管理自动机器学习 (AutoML) 的 Experiment,**调度运行**由调优 * 想要更容易**实现或试验新的自动机器学习算法**的研究员或数据科学家,包括:超参调优算法,神经网络搜索算法以及模型压缩算法。 * 在机器学习平台中**支持自动机器学习**。 -### **NNI v1.4 已发布!  [](#nni-released-reminder)** +### **NNI v1.5 已发布!  [](#nni-released-reminder)** ## **NNI 功能一览** @@ -102,6 +102,7 @@ NNI 提供命令行工具以及友好的 WebUI 来管理训练的 Experiment。

  • Naïve Evolution(朴素进化)
  • Anneal(退火算法)
  • Hyperband
  • +
  • PBT
  • 贝叶斯优化 模型压缩 @@ -230,7 +232,7 @@ Linux 和 macOS 下 NNI 系统需求[参考这里](https://nni.readthedocs.io/zh * 通过克隆源代码下载示例。 ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git ``` * 运行 MNIST 示例。 diff --git a/docs/zh_CN/FeatureEngineering/Overview.md b/docs/zh_CN/FeatureEngineering/Overview.md index 7f51ea82d1..3cb9dd20bb 100644 --- a/docs/zh_CN/FeatureEngineering/Overview.md +++ b/docs/zh_CN/FeatureEngineering/Overview.md @@ -144,7 +144,7 @@ from sklearn.feature_selection.base import SelectorMixin from nni.feature_engineering.feature_selector import FeatureSelector -class CustomizedSelector(FeatureSelector, BaseEstimator): +class CustomizedSelector(FeatureSelector, BaseEstimator, SelectorMixin): def __init__(self, ...): ... @@ -157,9 +157,9 @@ class CustomizedSelector(FeatureSelector, BaseEstimator): if not key.endswith('_')} return params - def set_params(self, **params): + def set_params(self, **params): """ - 设置参数 + 为此 estimator 设置参数 """ for param in params: if hasattr(self, param): diff --git a/docs/zh_CN/NAS/NasGuide.md b/docs/zh_CN/NAS/NasGuide.md index 350f884b01..c4d6db69ad 100644 --- a/docs/zh_CN/NAS/NasGuide.md +++ b/docs/zh_CN/NAS/NasGuide.md @@ -118,7 +118,9 @@ trainer.export(file="model_dir/final_architecture.json") # 将最终架构导 用户可直接通过 `python3 train.py` 开始训练,不需要使用 `nnictl`。 训练完成后,可通过 `trainer.export()` 导出找到的最好的模型。 -通常,Trainer 会提供一些可以自定义的参数。 如,损失函数,指标函数,优化器以及数据集。 这些功能可满足大部分需求,NNI 会尽力让内置 Trainer 能够处理更多的模型、任务和数据集。 但无法保证全面的支持。 例如,一些 Trainer 假设必须是分类任务;一些 Trainer 对 "Epoch" 的定义有所不同(例如,ENAS 的 epoch 表示一部分子步骤加上一些 Controller 的步骤);大多数 Trainer 不支持分布式训练,不会将模型通过 `DataParallel` 或 `DistributedDataParallel` 进行包装。 如果通过试用,想要在定制的应用中使用 Trainer,可能需要[自定义 Trainer](#extend-the-ability-of-one-shot-trainers)。 +通常,Trainer 会提供一些可以自定义的参数。 如,损失函数,指标函数,优化器以及数据集。 这些功能可满足大部分需求,NNI 会尽力让内置 Trainer 能够处理更多的模型、任务和数据集。 但无法保证全面的支持。 例如,一些 Trainer 假设必须是分类任务;一些 Trainer 对 "Epoch" 的定义有所不同(例如,ENAS 的 epoch 表示一部分子步骤加上一些 Controller 的步骤);大多数 Trainer 不支持分布式训练,不会将模型通过 `DataParallel` 或 `DistributedDataParallel` 进行包装。 如果通过试用,想要在定制的应用中使用 Trainer,可能需要[自定义 Trainer](./Advanced.md#extend-the-ability-of-one-shot-trainers)。 + +此外,可以使用 NAS 可视化来显示 One-Shot NAS。 [了解详情](./Visualization.md)。 ### 分布式 NAS @@ -146,14 +148,14 @@ nni.report_final_result(acc) # 报告所选架构的性能 ### 使用导出的架构重新训练 -搜索阶段后,就该训练找到的架构了。 与很多开源 NAS 算法不同,它们为重新训练专门写了新的模型。 我们发现搜索模型和重新训练模型的过程非常相似,因而可直接将一样的模型代码用到最终模型上。 例如: +搜索阶段后,就该训练找到的架构了。 与很多开源 NAS 算法不同,它们为重新训练专门写了新的模型。 我们发现搜索模型和重新训练模型的过程非常相似,因而可直接将一样的模型代码用到最终模型上。 例如 ```python model = Net() apply_fixed_architecture(model, "model_dir/final_architecture.json") ``` -JSON 文件是从 Mutable key 到 Choice 的表示。 例如: +JSON 文件是从 Mutable key 到 Choice 的表示。 例如 ```json { diff --git a/docs/zh_CN/NAS/Overview.md b/docs/zh_CN/NAS/Overview.md index 8b7ded917a..b96160f303 100644 --- a/docs/zh_CN/NAS/Overview.md +++ b/docs/zh_CN/NAS/Overview.md @@ -19,17 +19,19 @@ NNI 目前支持下面列出的 NAS 算法,并且正在添加更多算法。 | [P-DARTS](PDARTS.md) | [Progressive Differentiable Architecture Search: Bridging the Depth Gap between Search and Evaluation](https://arxiv.org/abs/1904.12760) 基于DARTS。 它引入了一种有效的算法,可在搜索过程中逐渐增加搜索的深度。 | | [SPOS](SPOS.md) | 论文 [Single Path One-Shot Neural Architecture Search with Uniform Sampling](https://arxiv.org/abs/1904.00420) 构造了一个采用统一的路径采样方法来训练简化的超网络,并使用进化算法来提高搜索神经网络结构的效率。 | | [CDARTS](CDARTS.md) | [Cyclic Differentiable Architecture Search](https://arxiv.org/abs/****) 在搜索和评估的网络见构建了循环反馈的机制。 通过引入的循环的可微分架构搜索框架将两个网络集成为一个架构。 | -| [ProxylessNAS](Proxylessnas.md) | [ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware](https://arxiv.org/abs/1812.00332). | +| [ProxylessNAS](Proxylessnas.md) | [ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware](https://arxiv.org/abs/1812.00332). 它删除了代理,直接从大规模目标任务和目标硬件平台进行学习。 | +| [TextNAS](TextNAS.md) | [TextNAS: A Neural Architecture Search Space tailored for Text Representation](https://arxiv.org/pdf/1912.10729.pdf)。 这是专门用于文本表示的神经网络架构搜索算法。 | One-shot 算法**不需要 nnictl,可单独运行**。 只实现了 PyTorch 版本。 将来的版本会支持 Tensorflow 2.x。 这是运行示例的一些常见依赖项。 PyTorch 需要高于 1.2 才能使用 `BoolTensor`. -* NNI 1.2+ * tensorboard * PyTorch 1.2+ * git +一次性 NAS 可以通过可视化工具来查看。 点击[这里](./Visualization.md),了解详情。 + ## 支持的分布式 NAS 算法 | 名称 | 算法简介 | @@ -49,6 +51,10 @@ One-shot 算法**不需要 nnictl,可单独运行**。 只实现了 PyTorch [这里](./NasGuide.md)是在 NNI 上开始使用 NAS 的用户指南。 +## NAS 可视化 + +为了帮助用户跟踪指定搜索空间下搜索模型的过程和状态,开发了此可视化工具。 它将搜索空间可视化为超网络,并显示子网络、层和操作的重要性,同时还能显示重要性是如何在搜索过程中变化的。 参考 [NAS 可视化](./Visualization.md)文档了解详情。 + ## 参考和反馈 * 在 GitHub 中[提交此功能的 Bug](https://github.com/microsoft/nni/issues/new?template=bug-report.md); diff --git a/docs/zh_CN/NAS/TextNAS.md b/docs/zh_CN/NAS/TextNAS.md new file mode 100644 index 0000000000..9297490bcc --- /dev/null +++ b/docs/zh_CN/NAS/TextNAS.md @@ -0,0 +1,80 @@ +# TextNAS + +## 介绍 + +这是论文 [TextNAS: A Neural Architecture Search Space tailored for Text Representation](https://arxiv.org/pdf/1912.10729.pdf) 中 TextNAS 算法的实现。 TextNAS 是用于文本表示的神经网络架构搜索算法,具体来说,TextNAS 基于由适配各种自然语言任务的操作符所组成的新的搜索空间,TextNAS 还支持单个网络中的多路径集成,来平衡网络的宽度和深度。 + +TextNAS 的搜索空间包含: + + * 过滤器尺寸为 1, 3, 5, 7 的一维卷积操作 + * 循环操作符(双向 GRU) + * 自注意操作符 + * 池化操作符(最大值、平均值) + +遵循 ENAS 算法,TextNAS 也用了参数共享来加速搜索速度,并采用了强化学习的 Controller 来进行架构采样和生成。 参考 TextNAS 论文了解更多细节。 + +## 准备 + +准备词向量和 SST 数据集,并按如下结构放到 data 目录中: + +``` +textnas +├── data +│ ├── sst +│ │ └── trees +│ │ ├── dev.txt +│ │ ├── test.txt +│ │ └── train.txt +│ └── glove.840B.300d.txt +├── dataloader.py +├── model.py +├── ops.py +├── README.md +├── search.py +└── utils.py +``` + +以下链接有助于查找和下载相应的数据集: + +* [GloVe: Global Vectors for Word Representation](https://nlp.stanford.edu/projects/glove/) + * [glove.840B.300d.txt](http://nlp.stanford.edu/data/glove.840B.300d.zip) +* [Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank](https://nlp.stanford.edu/sentiment/) + * [trainDevTestTrees_PTB.zip](https://nlp.stanford.edu/sentiment/trainDevTestTrees_PTB.zip) + +## 示例 + +### 搜索空间 + +[示例代码](https://github.com/microsoft/nni/tree/master/examples/nas/textnas) + +```bash +#如果未克隆 NNI 代码。 如果代码已被克隆,请忽略此行并直接进入代码目录。 +git clone https://github.com/Microsoft/nni.git + +# 搜索最佳网络结构 +cd examples/nas/textnas + +# 查看搜索的更多选项 +python3 search.py -h +``` + +在每个搜索 Epoch 后,会直接测试 10 个采样的结构。 10 个 Epoch 后的性能预计为 40% - 42%。 + +默认情况下,20 个采样结构会被导出到 `checkpoints` 目录中,以便进行下一步处理。 + +### 重新训练 + +```bash +#如果未克隆 NNI 代码。 如果代码已被克隆,请忽略此行并直接进入代码目录。 +git clone https://github.com/Microsoft/nni.git + +# 搜索最佳网络结构 +cd examples/nas/textnas + +# 默认在 sst-2 上训练 +sh run_retrain.sh +``` + +## 参考 + +TextNAS 直接使用了 EnasTrainer,参考 [ENAS](./ENAS.md) 了解 Trainer 的 API。 diff --git a/docs/zh_CN/NAS/Visualization.md b/docs/zh_CN/NAS/Visualization.md new file mode 100644 index 0000000000..42aa862272 --- /dev/null +++ b/docs/zh_CN/NAS/Visualization.md @@ -0,0 +1,69 @@ +# NAS 可视化(测试版) + +## 内置 Trainer 支持 + +当前,仅 ENAS 和 DARTS 支持可视化。 [ENAS](./ENAS.md) 和 [DARTS](./DARTS.md) 的示例演示了如何在代码中启用可视化,其需要在 `trainer.train()` 前添加代码。 + +```python +trainer.enable_visualization() +``` + +此代码会在当前目录中创建新目录 `logs/`,并创建两个新文件 `graph.json` 和 `log`。 + +不必等到程序运行完后,再启动 NAS 界面,但需要确保这两个文件产生后,再启动。 启动 NAS 界面: + +```bash +nnictl webui nas --logdir logs/ --port +``` + +## 可视化定制的 Trainer + +如果要定制 Trainer,参考[文档](./Advanced.md#extend-the-ability-of-one-shot-trainers)。 + +需要对已有 Trainer 代码做两处改动来支持可视化: + +1. 在训练前导出图: + +```python +vis_graph = self.mutator.graph(inputs) +# `inputs` 是模型的虚拟输入。 例如,torch.randn((1, 3, 32, 32)).cuda() +# 如果模型有多个输入,则要使用 tuple。 +with open("/path/to/your/logdir/graph.json", "w") as f: + json.dump(vis_graph, f) +``` + +2. 记录选择的 Choice。 可以每个 Epoch,批处理或任何频率下做次记录。 + +```python +def __init__(self): + # ... + self.status_writer = open("/path/to/your/logdir/log", "w") # create a writer + +def train(self): + # ... + print(json.dumps(self.mutator.status()), file=self.status_writer, flush=True) # 保存状态 +``` + +如果继承 `Trainer`,实现定制的 Trainer。 NNI 提供了 `enable_visualization()` 和 `_write_graph_status()` 来简化可视化。 只需要在开始前调用 `trainer.enable_visualization()`,并在每次要记录日志前调用 `trainer._write_graph_status()`。 注意,这两个 API 还处于试用阶段,未来可能会有所更改。 + +最后,启动 NAS 界面: + +```bash +nnictl webui nas --logdir /path/to/your/logdir +``` + +## NAS 界面预览 + +![](../../img/nasui-1.png) + +![](../../img/nasui-2.png) + +## 局限性 + +* NAS 可视化仅适用于 PyTorch >=1.4。PyTorch 1.3.1 无法正常工作。 +* 其依赖于 PyTorch 对 tensorboard 导出图的支持,即依赖于 `torch.jit`。 如果模型不支持 `jit`,也无法使用。 +* 在加载中等大小,但有许多 Choice 的模型时(如 DARTS 的搜索空间),会遇到性能问题。 + +## 反馈 + +NAS UI 目前是测试版。 欢迎提交反馈。 [这里](https://github.com/microsoft/nni/pull/2085)列出了 NAS UI 接下来的工作。 欢迎直接评论,如果有其它建议,也可以[提交新问题](https://github.com/microsoft/nni/issues/new?template=enhancement.md)。 diff --git a/docs/zh_CN/Release.md b/docs/zh_CN/Release.md index ece38950bb..0bcfdb6ad2 100644 --- a/docs/zh_CN/Release.md +++ b/docs/zh_CN/Release.md @@ -1,19 +1,61 @@ # 更改日志 +## 发布 1.5 - 4/13/2020 + +### 新功能和文档 + +#### 超参优化 + +* 新 Tuner:[Population Based Training (PBT)](https://github.com/microsoft/nni/blob/master/docs/zh_CN/Tuner/PBTTuner.md) +* Trial 现在可以返回无穷大和 NaN 结果 + +#### 神经网络架构搜索 + +* 新 NAS 算法:[TextNAS](https://github.com/microsoft/nni/blob/master/docs/zh_CN/NAS/TextNAS.md) +* ENAS 和 DARTS 现在可通过网页[可视化](https://github.com/microsoft/nni/blob/master/docs/zh_CN/NAS/Visualization.md)。 + +#### 模型压缩 + +* 新 Pruner:[GradientRankFilterPruner](https://github.com/microsoft/nni/blob/master/docs/zh_CN/Compressor/Pruner.md#gradientrankfilterpruner) +* 默认情况下,Compressor 会验证配置 +* 重构:可将优化器作为 Pruner 的输入参数,从而更容易支持 DataParallel 和其它迭代剪枝方法。 这是迭代剪枝算法用法上的重大改动。 +* 重构了模型压缩示例 +* 添加了[实现模型压缩算法](https://github.com/microsoft/nni/blob/master/docs/zh_CN/Compressor/Framework.md)的文档 + +#### 训练平台 + +* Kubeflow 现已支持 pytorchjob crd v1 (感谢贡献者 @jiapinai) +* 实验性的支持 [DLTS](https://github.com/microsoft/nni/blob/master/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/en_US/NAS/CDARTS.md) 算法,并增加对应[示例](https://github.com/microsoft/nni/tree/v1.4/examples/nas/cdarts)。 -* 初步支持 [ProxylessNAS](https://github.com/microsoft/nni/blob/v1.4/docs/en_US/NAS/Proxylessnas.md) 以及对应[示例](https://github.com/microsoft/nni/tree/v1.4/examples/nas/proxylessnas) +* 支持 [C-DARTS](https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/NAS/CDARTS.md) 算法,并增加对应[示例](https://github.com/microsoft/nni/tree/v1.4/examples/nas/cdarts)。 +* 初步支持 [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/en_US/Compressor/ModelSpeedup.md)(试用版) +* 支持压缩模型的[加速](https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/Compressor/ModelSpeedup.md)(试用版) #### 训练平台 @@ -27,17 +69,17 @@ #### 其它 -* 支持[在前台运行 NNI Experiment](https://github.com/microsoft/nni/blob/v1.4/docs/en_US/Tutorial/Nnictl.md#manage-an-experiment),即,`nnictl create/resume/view` 的 `--foreground` 参数 +* 支持[在前台运行 NNI Experiment](https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/Tutorial/Nnictl.md#manage-an-experiment),即,`nnictl create/resume/view` 的 `--foreground` 参数 * 支持取消 UNKNOWN 状态的 Trial。 * 支持最大 50MB 的搜索空间文件 (感谢外部贡献者 @Sundrops) ### 文档 -* 改进 NNI readthedocs 的[目录索引结构](https://nni.readthedocs.io/en/latest/) -* 改进 [NAS 文档](https://github.com/microsoft/nni/blob/v1.4/docs/en_US/NAS/NasGuide.md) -* 改进[新的 OpenPAI 模式的文档](https://github.com/microsoft/nni/blob/v1.4/docs/en_US/TrainingService/PaiMode.md) -* 为 [NAS](https://github.com/microsoft/nni/blob/v1.4/docs/en_US/NAS/QuickStart.md) 和[模型压缩](https://github.com/microsoft/nni/blob/v1.4/docs/en_US/Compressor/QuickStart.md)增加入门指南 -* 改进支持 [EfficientNet](https://github.com/microsoft/nni/blob/v1.4/docs/en_US/TrialExample/EfficientNet.md) 的文档 +* 改进 NNI readthedocs 的[目录索引结构](https://nni.readthedocs.io/zh/latest/) +* 改进 [NAS 文档](https://github.com/microsoft/nni/blob/v1.4/docs/zh_CN/NAS/NasGuide.md) +* 改进[新的 OpenPAI 模式的文档](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 @@ -58,10 +100,10 @@ * [知识蒸馏](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/en_US/Compressor/Pruner.md#3-l2filter-pruner) - * [ActivationAPoZRankFilterPruner](https://github.com/microsoft/nni/blob/v1.3/docs/en_US/Compressor/Pruner.md#1-activationapozrankfilterpruner) - * [ActivationMeanRankFilterPruner](https://github.com/microsoft/nni/blob/v1.3/docs/en_US/Compressor/Pruner.md#2-activationmeanrankfilterpruner) -* [BNN Quantizer](https://github.com/microsoft/nni/blob/v1.3/docs/en_US/Compressor/Quantizer.md#bnn-quantizer) + * [L2Filter Pruner](https://github.com/microsoft/nni/blob/master/docs/zh_CN/Compressor/Pruner.md#l2filter-pruner) + * [ActivationAPoZRankFilterPruner](https://github.com/microsoft/nni/blob/master/docs/zh_CN/Compressor/Pruner.md#activationapozrankfilterpruner) + * [ActivationMeanRankFilterPruner](https://github.com/microsoft/nni/blob/master/docs/zh_CN/Compressor/Pruner.md#activationmeanrankfilterpruner) +* [BNN Quantizer](https://github.com/microsoft/nni/blob/v1.3/docs/zh_CN/Compressor/Quantizer.md#bnn-quantizer) #### 训练平台 @@ -89,12 +131,12 @@ ### 主要功能 -* [特征工程](https://github.com/microsoft/nni/blob/v1.2/docs/en_US/FeatureEngineering/Overview.md) +* [特征工程](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/en_US/NAS/NasInterface.md) + - [新的 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 独立运行) - 模型压缩 @@ -127,14 +169,14 @@ ### 主要功能 * 新 Tuner: [PPO Tuner](https://github.com/microsoft/nni/blob/v1.1/docs/zh_CN/Tuner/PPOTuner.md) -* [查看已停止的 Experiment](https://github.com/microsoft/nni/blob/v1.1/docs/en_US/Tutorial/Nnictl.md#view) +* [查看已停止的 Experiment](https://github.com/microsoft/nni/blob/v1.1/docs/zh_CN/Tutorial/Nnictl.md#view) * Tuner 可使用专门的 GPU 资源(参考[教程](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) + - [Cifar10 NAS 示例](https://github.com/microsoft/nni/blob/v1.1/examples/trials/nas_cifar10/README_zh_CN.md) - [模型压缩工具包 - Alpha 发布](https://github.com/microsoft/nni/blob/v1.1/docs/zh_CN/Compressor/Overview.md):我们很高兴的宣布 NNI 的模型压缩工具包发布了。它还处于试验阶段,会根据使用反馈来改进。 诚挚邀请您使用、反馈,或更多贡献 ### 修复的 Bug @@ -248,7 +290,7 @@ * 在已经运行非 NNI 任务的 GPU 上也能运行 Trial * 支持 Kubeflow v1beta2 操作符 * 支持 Kubeflow TFJob/PyTorchJob v1beta2 -* [通用 NAS 编程接口](https://github.com/microsoft/nni/blob/v0.8/docs/en_US/GeneralNasInterfaces.md) +* [通用 NAS 编程接口](https://github.com/microsoft/nni/blob/v0.8/docs/zh_CN/GeneralNasInterfaces.md) * 实现了 NAS 的编程接口,可通过 NNI Annotation 很容易的表达神经网络架构搜索空间 * 提供新命令 `nnictl trial codegen` 来调试 NAS 代码生成部分 * 提供 NAS 编程接口教程,NAS 在 MNIST 上的示例,用于 NAS 的可定制的随机 Tuner @@ -305,7 +347,7 @@ * [版本检查](TrainingService/PaiMode.md) * 检查 nniManager 和 trialKeeper 的版本是否一致 * [提前终止的任务也可返回最终指标](https://github.com/microsoft/nni/issues/776) - * 如果 includeIntermediateResults 为 true,最后一个 Assessor 的中间结果会被发送给 Tuner 作为最终结果。 includeIntermediateResults 的默认值为 false。 + * 如果 includeIntermediateResults 为 true,最后一个 Assessor 的中间结果会被发送给 Tuner 作为最终结果。 includeIntermediateResults 的默认值为 false。 * [分离 Tuner/Assessor](https://github.com/microsoft/nni/issues/841) * 增加两个管道来分离 Tuner 和 Assessor 的消息 * 使日志集合功能可配置 @@ -336,7 +378,7 @@ * 修复了在某些极端条件下,不能正确存储任务的取消状态。 * 修复在使用 SMAC Tuner 时,解析搜索空间的错误。 -* 修复 CIFAR-10 样例中的 broken pipe 问题。 +* 修复 CIFAR-10 示例中的 broken pipe 问题。 * 为本地训练和 NNI 管理器添加单元测试。 * 为远程服务器、OpenPAI 和 Kubeflow 训练平台在 Azure 中增加集成测试。 * 在 OpenPAI 客户端中支持 Pylon 路径。 @@ -364,7 +406,7 @@ #### 支持新的 Tuner 和 Assessor -* 支持新的 [Metis Tuner](Tuner/MetisTuner.md)。 对于**在线**超参调优的场景,Metis 算法已经被证明非常有效。 +* 支持新的 [Metis Tuner](Tuner/MetisTuner.md)。 **在线**超参调优的场景下,Metis 算法已经被证明非常有效。 * 支持 [ENAS customized tuner](https://github.com/countif/enas_nni)。由 GitHub 社区用户所贡献。它是神经网络的搜索算法,能够通过强化学习来学习神经网络架构,比 NAS 的性能更好。 * 支持 [Curve fitting (曲线拟合)Assessor](Assessor/CurvefittingAssessor.md),通过曲线拟合的策略来实现提前终止 Trial。 * [权重共享的](https://github.com/microsoft/nni/blob/v0.5/docs/AdvancedNAS.md)高级支持:为 NAS Tuner 提供权重共享,当前支持 NFS。 @@ -484,7 +526,7 @@ ### 新示例 -* 公共的 NNI Docker 映像: +* 公开的 NNI Docker 映像: ```bash docker pull msranni/nni:latest diff --git a/docs/zh_CN/TrialExample/GbdtExample.md b/docs/zh_CN/TrialExample/GbdtExample.md index 692528b6d5..0046cb6101 100644 --- a/docs/zh_CN/TrialExample/GbdtExample.md +++ b/docs/zh_CN/TrialExample/GbdtExample.md @@ -152,8 +152,6 @@ if __name__ == '__main__': + RECEIVED_PARAMS = nni.get_next_parameter() PARAMS = get_default_parameters() + PARAMS.update(RECEIVED_PARAMS) - PARAMS = get_default_parameters() - PARAMS.update(RECEIVED_PARAMS) # 训练 run(lgb_train, lgb_eval, PARAMS, X_test, y_test) diff --git a/docs/zh_CN/Tuner/BuiltinTuner.md b/docs/zh_CN/Tuner/BuiltinTuner.md index d29a81f492..f88bddcc3c 100644 --- a/docs/zh_CN/Tuner/BuiltinTuner.md +++ b/docs/zh_CN/Tuner/BuiltinTuner.md @@ -21,6 +21,7 @@ NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tu | [**BOHB**](#BOHB) | BOHB 是 Hyperband 算法的后续工作。 Hyperband 在生成新的配置时,没有利用已有的 Trial 结果,而本算法利用了 Trial 结果。 BOHB 中,HB 表示 Hyperband,BO 表示贝叶斯优化(Byesian Optimization)。 BOHB 会建立多个 TPE 模型,从而利用已完成的 Trial 生成新的配置。 [参考论文](https://arxiv.org/abs/1807.01774) | | [**GP Tuner**](#GPTuner) | Gaussian Process(高斯过程) Tuner 是序列化的基于模型优化(SMBO)的方法,并使用了高斯过程来替代。 [参考论文](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf),[Github 库](https://github.com/fmfn/BayesianOptimization) | | [**PPO Tuner**](#PPOTuner) | PPO Tuner 是基于 PPO 算法的强化学习 Tuner。 [参考论文](https://arxiv.org/abs/1707.06347) | +| [**PBT Tuner**](#PBTTuner) | PBT Tuner 是一种简单的异步优化算法,在固定的计算资源下,它能有效的联合优化一组模型及其超参来最大化性能。 [参考论文](https://arxiv.org/abs/1711.09846v1) | ## 用法 @@ -452,6 +453,36 @@ tuner: optimize_mode: maximize ``` + + +![](https://placehold.it/15/1589F0/000000?text=+) `PBT Tuner` + +> 内置 Tuner 名称:**PBTTuner** + +**建议场景** + +Population Based Training (PBT,基于种群的训练),将并扩展并行搜索方法和顺序优化方法连接在了一起。 它通过周期性的从较好的模型中继承权重来继续探索,这样所需的计算资源相对较少。 使用 PBTTuner,用户最终可以得到训练好的模型,而不是需要从头训练的配置。 这是因为模型权重会在搜索过程中周期性的继承。 PBT 也可作为训练的方法。 如果不需要配置,只需要好的模型,PBTTuner 是不错的选择。 [查看详情](./PBTTuner.md) + +**classArgs 要求:** + +* **optimize_mode** (*'maximize' 或 'minimize'*) - 如果为 'maximize',表示 Tuner 的目标是将指标最大化。 如果为 'minimize',表示 Tuner 的目标是将指标最小化。 +* **all_checkpoint_dir** (*str, 可选, 默认为 None*) - Trial 保存读取检查点的目录,如果不指定,其为 "~/nni/checkpoint/"。 注意,如果 Experiment 不是本机模式,用户需要提供能被所有 Trial 所访问的共享存储。 +* **population_size** (*int, 可选, 默认为 10*) - 种群的 Trial 数量。 每个步骤有此数量的 Trial。 在 NNI 的实现中,一步表示每个 Trial 运行一定次数 Epoch,此 Epoch 的数量由用户来指定。 +* **factors** (*tuple, 可选, 默认为 (1.2, 0.8)*) - 超参变动量的因子。 +* **fraction** (*float, 可选, 默认为 0.2*) - 选择的最低和最高 Trial 的比例。 + +**示例** + +```yaml +# config.yml +tuner: + builtinTunerName: PBTTuner + classArgs: + optimize_mode: maximize +``` + +注意,要使用此 Tuner,Trial 代码也需要相应的修改,参考 [PBTTuner 文档](./PBTTuner.md)了解详情。 + ## **参考和反馈** * 在 GitHub 中[提交此功能的 Bug](https://github.com/microsoft/nni/issues/new?template=bug-report.md); diff --git a/docs/zh_CN/Tuner/PBTTuner.md b/docs/zh_CN/Tuner/PBTTuner.md new file mode 100644 index 0000000000..b3c8d06902 --- /dev/null +++ b/docs/zh_CN/Tuner/PBTTuner.md @@ -0,0 +1,52 @@ +NNI 中的 PBTTuner +=== + +## PBTTuner + +Population Based Training (PBT,基于种群的训练) 来自于 [Population Based Training of Neural Networks](https://arxiv.org/abs/1711.09846v1)。 它是一种简单的异步优化算法,在固定的计算资源下,它能有效的联合优化一组模型及其超参来最大化性能。 重要的是,PBT 探索的是超参设置的规划,而不是通过整个训练过程中,来试图找到某个固定的参数配置。 + +![](../../img/pbt.jpg) + +PBTTuner 使用多个 Trial 来初始化种群 (即,`population_size`)。 上图中有四步,每个 Trial 只运行一步。 每步运行的时长由 Trial 代码控制,如一个 Epoch。 当 Trial 开始时,会加载 PBTTuner 指定的检查点,并继续运行一步,然后将检查点保存到PBTTuner 指定的目录中,并退出。 种群中的 Trial 会同步的运行这些步骤,也就是说,所有 Trial 都完成了第 `i` 步后,`(i+1)` 步才能开始。 PBT 的挖掘(Exploitation)和探索(Exploration)是两个连续的步骤。 + +### 提供检查点目录 + +为了让 Trial 读取其它 Trial 的检查点,需要提供能够被所有 Trial 访问到的目录 (即, `all_checkpoint_dir`)。 本机模式下非常容易,直接使用默认目录,或指定本机的任意目录均可。 对于其他训练平台,需要根据[训练平台文档](../TrainingService/SupportTrainingService.md)来提供能共享的目录,如 NFS, Azure 存储。 + +### 修改 Trial 代码 + +在运行步骤之前,Trial 需要读取检查点,检查点目录由 PBTTuner 的超参配置来决定,即 `params['load_checkpoint_dir']`。 同样,保存检查点的目录也包含在配置中,即,`params['save_checkpoint_dir']`。 在这里,`all_checkpoint_dir` 是 `load_checkpoint_dir` 和 `save_checkpoint_dir` 的根目录,格式为 `all_checkpoint_dir//`。 + +```python +params = nni.get_next_parameter() +# 读取检查点的路径 +load_path = os.path.join(params['load_checkpoint_dir'], 'model.pth') +# 从 `load_path` 中读取检查点 +... +# 运行一步 +... +# 保存检查点的路径 +save_path = os.path.join(params['save_checkpoint_dir'], 'model.pth') +# 将检查点保存到 `save_path` +... +``` + +完整的示例代码参考[这里](https://github.com/microsoft/nni/tree/master/examples/trials/mnist-pbt-tuner-pytorch)。 + +### Experiment 配置 + +以下是 PBTTuner 在 Experiment 配置文件中的示例。 **注意,如果使用了 PBTTuner,就不能使用 Assessor。** + +```yaml +# config.yml +tuner: + builtinTunerName: PBTTuner + classArgs: + optimize_mode: maximize + all_checkpoint_dir: /the/path/to/store/checkpoints + population_size: 10 +``` + +### 局限性 + +尚未支持导入数据。 \ No newline at end of file diff --git a/docs/zh_CN/Tutorial/ExperimentConfig.md b/docs/zh_CN/Tutorial/ExperimentConfig.md index 79c7362984..90c703c39d 100644 --- a/docs/zh_CN/Tutorial/ExperimentConfig.md +++ b/docs/zh_CN/Tutorial/ExperimentConfig.md @@ -527,7 +527,7 @@ NNI 会校验 remote, pai 和 Kubernetes 模式下 NNIManager 与 trialKeeper #### maxTrialNumPerGpu -可选。 整数。 默认值:99999。 +可选。 整数。 默认值: 1。 用于指定 GPU 设备上的最大并发 Trial 的数量。 diff --git a/docs/zh_CN/Tutorial/FAQ.md b/docs/zh_CN/Tutorial/FAQ.md index 8cc286d4e7..0fb40cecbc 100644 --- a/docs/zh_CN/Tutorial/FAQ.md +++ b/docs/zh_CN/Tutorial/FAQ.md @@ -54,7 +54,7 @@ nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下 ### NNI 在 Windows 上的问题 -参考 [Windows 上的 NNI](InstallationWin.md#FAQ) +参考 [Windows 上的 NNI](InstallationWin.md) ### 更多常见问题解答 diff --git a/docs/zh_CN/Tutorial/InstallationLinux.md b/docs/zh_CN/Tutorial/InstallationLinux.md index 54b06dc407..e6990b96ad 100644 --- a/docs/zh_CN/Tutorial/InstallationLinux.md +++ b/docs/zh_CN/Tutorial/InstallationLinux.md @@ -18,7 +18,7 @@ 先决条件:`python 64-bit >=3.5`, `git`, `wget` bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git cd nni ./install.sh @@ -33,7 +33,7 @@ * 通过克隆源代码下载示例。 ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git ``` * 运行 MNIST 示例。 diff --git a/docs/zh_CN/Tutorial/InstallationWin.md b/docs/zh_CN/Tutorial/InstallationWin.md index f045e94655..257d00a378 100644 --- a/docs/zh_CN/Tutorial/InstallationWin.md +++ b/docs/zh_CN/Tutorial/InstallationWin.md @@ -19,7 +19,7 @@ 先决条件:`python 64-bit >=3.5`, `git`, `PowerShell` ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git cd nni powershell -ExecutionPolicy Bypass -file install.ps1 ``` @@ -31,7 +31,7 @@ * 通过克隆源代码下载示例。 ```bash - git clone -b v1.4 https://github.com/Microsoft/nni.git + git clone -b v1.5 https://github.com/Microsoft/nni.git ``` * 运行 MNIST 示例。 @@ -136,4 +136,4 @@ You can use these commands to get more information about the experiment * [如何在多机上运行 Experiment?](../TrainingService/RemoteMachineMode.md) * [如何在 OpenPAI 上运行 Experiment?](../TrainingService/PaiMode.md) * [如何通过 Kubeflow 在 Kubernetes 上运行 Experiment?](../TrainingService/KubeflowMode.md) -* [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](../TrainingService/FrameworkControllerMode.md) \ No newline at end of file +* [如何通过 FrameworkController 在 Kubernetes 上运行 Experiment?](../TrainingService/FrameworkControllerMode.md) diff --git a/docs/zh_CN/builtin_tuner.rst b/docs/zh_CN/builtin_tuner.rst index d0a3ff24e0..80a525d1ac 100644 --- a/docs/zh_CN/builtin_tuner.rst +++ b/docs/zh_CN/builtin_tuner.rst @@ -23,3 +23,4 @@ Tuner 从 Trial 接收指标结果,来评估一组超参或网络结构的性 Hyperband BOHB PPO Tuner + PBT Tuner diff --git a/docs/zh_CN/conf.py b/docs/zh_CN/conf.py index f0f9b1b567..e72471d0b3 100644 --- a/docs/zh_CN/conf.py +++ b/docs/zh_CN/conf.py @@ -28,7 +28,7 @@ # The short X.Y version version = '' # The full version, including alpha/beta/rc tags -release = 'v1.4' +release = 'v1.5' # -- General configuration --------------------------------------------------- diff --git a/docs/zh_CN/nas.rst b/docs/zh_CN/nas.rst index d2626a3a55..bb073b13be 100644 --- a/docs/zh_CN/nas.rst +++ b/docs/zh_CN/nas.rst @@ -26,5 +26,7 @@ SPOS CDARTS ProxylessNAS + TextNAS 自定义 NAS 算法 + NAS 可视化 API 参考 diff --git a/docs/zh_CN/training_services.rst b/docs/zh_CN/training_services.rst index f7bdab9338..68fde67331 100644 --- a/docs/zh_CN/training_services.rst +++ b/docs/zh_CN/training_services.rst @@ -9,4 +9,4 @@ NNI 支持的训练平台介绍 OpenPAI Yarn 模式<./TrainingService/PaiYarnMode> Kubeflow<./TrainingService/KubeflowMode> FrameworkController<./TrainingService/FrameworkControllerMode> - OpenPAI<./TrainingService/DLTSMode> + DLTS<./TrainingService/DLTSMode> diff --git a/examples/nas/textnas/README_zh_CN.md b/examples/nas/textnas/README_zh_CN.md index 22bbbb4c9b..6a43913ffb 100644 --- a/examples/nas/textnas/README_zh_CN.md +++ b/examples/nas/textnas/README_zh_CN.md @@ -42,4 +42,8 @@ python search.py ## 重新训练 -待完成 +``` +sh run_retrain.sh +``` + +默认情况下,脚本会重新训练 SST-2 数据集上作者所提供的网络结构。 diff --git a/test/config/naive_test/README_zh_CN.md b/test/config/naive_test/README_zh_CN.md index 58c103ff00..036cecf868 100644 --- a/test/config/naive_test/README_zh_CN.md +++ b/test/config/naive_test/README_zh_CN.md @@ -5,7 +5,6 @@ * 如果没有问题,最终会打印绿色的 `PASS`。 ## 详细说明 - * 这是测试 Trial 和 Tuner、Assessor 之间通信的测试用例。 * Trial 会收到整数 `x` 作为参数,并返回 `x`, `x²`, `x³`, ... , `x¹⁰` 作为指标。 * Tuner 会简单的生成自然数序列,并将收到的指标输出到 `tuner_result.txt`。 @@ -14,7 +13,6 @@ * 当 Experiment 结束时,也表示用例成功执行,可以在 nni_manager.log 文件中找到 `Experiment done`。 ## 问题 - * 使用了私有 API 来检测是否 Tuner 和 Assessor 成功结束。 * RESTful 服务的输出未测试。 * 远程计算机训练平台没有被测试。 \ No newline at end of file