From de152323b7237a3a0a61f22659d71a9752394205 Mon Sep 17 00:00:00 2001 From: chicm-ms <38930155+chicm-ms@users.noreply.github.com> Date: Mon, 8 Oct 2018 15:11:06 +0800 Subject: [PATCH 1/2] Pull latest code (#2) * webui logpath and document (#135) * Add webui document and logpath as a href * fix tslint * fix comments by Chengmin * Pai training service bug fix and enhancement (#136) * Add NNI installation scripts * Update pai script, update NNI_out_dir * Update NNI dir in nni sdk local.py * Create .nni folder in nni sdk local.py * Add check before creating .nni folder * Fix typo for PAI_INSTALL_NNI_SHELL_FORMAT * Improve annotation (#138) * Improve annotation * Minor bugfix * Selectively install through pip (#139) Selectively install through pip * update setup.py * fix paiTrainingService bugs (#137) * fix nnictl bug * add hdfs host validation * fix bugs * fix dockerfile * fix install.sh * update install.sh * fix dockerfile * Set timeout for HDFSUtility exists function * remove unused TODO * fix sdk * add optional for outputDir and dataDir * refactor dockerfile.base * Remove unused import in hdfsclientUtility * Add documentation for NNI PAI mode experiment (#141) * Add documentation for NNI PAI mode * Fix typo based on PR comments * Exit with subprocess return code of trial keeper * Remove additional exit code * Fix typo based on PR comments * update doc for smac tuner (#140) * Revert "Selectively install through pip (#139)" due to potential pip install issue (#142) * Revert "Selectively install through pip (#139)" This reverts commit 1d174836d3146a0363e9c9c88094bf9cff865faa. * Add exit code of subprocess for trial_keeper * Update README, add link to PAImode doc * fix bug (#147) * Refactor nnictl and add config_pai.yml (#144) * fix nnictl bug * add hdfs host validation * fix bugs * fix dockerfile * fix install.sh * update install.sh * fix dockerfile * Set timeout for HDFSUtility exists function * remove unused TODO * fix sdk * add optional for outputDir and dataDir * refactor dockerfile.base * Remove unused import in hdfsclientUtility * add config_pai.yml * refactor nnictl create logic and add colorful print * fix nnictl stop logic * add annotation for config_pai.yml * add document for start experiment * fix config.yml * fix document * Fix trial keeper wrongly exit issue (#152) * Fix trial keeper bug, use actual exitcode to exit rather than 1 * Fix bug of table sort (#145) * Update doc for PAIMode and v0.2 release notes (#153) * Update v0.2 documentation regards to release note and PAI training service * Update document to describe NNI docker image * Bug fix for SQuAD example tuner. (#134) * Update Makefile (#151) * test * update setup.py * update Makefile and install.sh * rever setup.py * change color * update doc * update doc * fix auto-completion's extra space * update Makefile * update webui * Update doc image (#163) * update doc * trivial * trivial * trivial * trivial * trivial * trivial * update image * update image size * Update ga squad (#104) * update readme in ga_squad * update readme * fix typo * Update README.md * Update README.md * Update README.md * update readme * sklearn examples (#169) * fix nnictl bug * fix install.sh * add sklearn-regression example * add sklearn classification * update sklearn * update example * remove additional code * Update batch tuner (#158) * update readme in ga_squad * update readme * fix typo * Update README.md * Update README.md * Update README.md * update readme * update batch tuner * Quickly fix cascading search space bug in tuner (#156) * update readme in ga_squad * update readme * fix typo * Update README.md * Update README.md * Update README.md * update readme * quickly fix cascading searchspace bug in tuner * Add iterative search space example (#119) * update readme in ga_squad * update readme * fix typo * Update README.md * Update README.md * Update README.md * update readme * add iterative search space example * update * update readme * change name --- Makefile | 19 +- README.Makefile.md | 2 +- README.md | 19 +- docs/PAIMode.md | 1 + docs/RELEASE.md | 4 +- docs/StartExperiment.md | 33 ++ docs/WriteYourTrial.md | 3 + docs/img/experiment_process.jpg | Bin 0 -> 302899 bytes docs/nni_overview.png | Bin 0 -> 57734 bytes examples/trials/auto-gbdt/config.yml | 2 +- examples/trials/auto-gbdt/config_pai.yml | 36 ++ examples/trials/ga_squad/README.md | 506 +++++++++--------- examples/trials/ga_squad/config.yml | 2 +- examples/trials/ga_squad/config_pai.yml | 34 ++ examples/trials/mnist-annotation/config.yml | 2 +- .../trials/mnist-annotation/config_pai.yml | 35 ++ .../trials/mnist-batch-tune-keras/config.yml | 2 +- .../mnist-batch-tune-keras/config_pai.yml | 36 ++ .../mnist-cascading-search-space/config.yml | 20 + .../mnist-cascading-search-space/mnist.py | 164 ++++++ .../requirments.txt | 3 + .../mnist-cascading-search-space/sample.json | 1 + .../search_space.json | 62 +++ examples/trials/mnist-keras/config.yml | 2 +- examples/trials/mnist-keras/config_pai.yml | 36 ++ examples/trials/mnist-smartparam/config.yml | 2 +- .../trials/mnist-smartparam/config_pai.yml | 35 ++ examples/trials/mnist/config.yml | 2 +- examples/trials/mnist/config_pai.yml | 36 ++ examples/trials/pytorch_cifar10/config.yml | 2 +- .../trials/pytorch_cifar10/config_pai.yml | 36 ++ .../trials/sklearn/classification/config.yml | 20 + .../trials/sklearn/classification/main.py | 83 +++ .../sklearn/classification/search_space.json | 7 + examples/trials/sklearn/regression/config.yml | 20 + examples/trials/sklearn/regression/main.py | 102 ++++ .../sklearn/regression/search_space.json | 5 + .../ga_customer_tuner/customer_tuner.py | 6 +- install.sh | 6 +- .../rest_server/restValidationSchemas.ts | 2 +- src/sdk/pynni/nni/constants.py | 2 + .../nni/hyperopt_tuner/hyperopt_tuner.py | 2 +- src/webui/package.json | 2 +- src/webui/src/components/Sessionpro.tsx | 8 +- src/webui/src/components/SlideBar.tsx | 4 +- src/webui/src/components/TrialStatus.tsx | 6 +- tools/README.md | 32 +- tools/bash-completion | 2 +- tools/completion | 61 --- tools/nnicmd/common_utils.py | 8 +- tools/nnicmd/config_schema.py | 2 +- tools/nnicmd/constants.py | 33 +- tools/nnicmd/launcher.py | 49 +- tools/nnicmd/nnictl_utils.py | 5 +- tools/trial_tool/trial_keeper.py | 18 +- 55 files changed, 1190 insertions(+), 432 deletions(-) create mode 100644 docs/StartExperiment.md create mode 100644 docs/img/experiment_process.jpg create mode 100644 docs/nni_overview.png create mode 100644 examples/trials/auto-gbdt/config_pai.yml create mode 100644 examples/trials/ga_squad/config_pai.yml create mode 100644 examples/trials/mnist-annotation/config_pai.yml create mode 100644 examples/trials/mnist-batch-tune-keras/config_pai.yml create mode 100644 examples/trials/mnist-cascading-search-space/config.yml create mode 100644 examples/trials/mnist-cascading-search-space/mnist.py create mode 100644 examples/trials/mnist-cascading-search-space/requirments.txt create mode 100644 examples/trials/mnist-cascading-search-space/sample.json create mode 100644 examples/trials/mnist-cascading-search-space/search_space.json create mode 100644 examples/trials/mnist-keras/config_pai.yml create mode 100644 examples/trials/mnist-smartparam/config_pai.yml create mode 100644 examples/trials/mnist/config_pai.yml create mode 100644 examples/trials/pytorch_cifar10/config_pai.yml create mode 100644 examples/trials/sklearn/classification/config.yml create mode 100644 examples/trials/sklearn/classification/main.py create mode 100644 examples/trials/sklearn/classification/search_space.json create mode 100644 examples/trials/sklearn/regression/config.yml create mode 100644 examples/trials/sklearn/regression/main.py create mode 100644 examples/trials/sklearn/regression/search_space.json delete mode 100644 tools/completion diff --git a/Makefile b/Makefile index 38bdd2c6d4..8532cc17e7 100644 --- a/Makefile +++ b/Makefile @@ -122,7 +122,7 @@ easy-install: install easy-install: update-bash-config easy-install: - #$(_INFO) Complete! #(_END) + #$(_INFO) Complete! $(_END) # Target for setup.py @@ -203,21 +203,22 @@ install-dependencies: $(NODE_TARBALL) $(YARN_TARBALL) $(SERVE_TARBALL) .PHONY: install-python-modules install-python-modules: #$(_INFO) Installing Python SDK $(_END) - cd src/sdk/pynni && python3 setup.py install $(PIP_MODE) + cd src/sdk/pynni && $(PIP_INSTALL) $(PIP_MODE) . #$(_INFO) Installing nnictl $(_END) - cd tools && python3 setup.py install $(PIP_MODE) + cd tools && $(PIP_INSTALL) $(PIP_MODE) . .PHONY: install-node-modules install-node-modules: mkdir -p $(INSTALL_PREFIX)/nni + rm -rf ${PWD}/src/nni_manager/dist/node_modules #$(_INFO) Installing NNI Manager $(_END) - cp -rT src/nni_manager/dist $(INSTALL_PREFIX)/nni/nni_manager - cp -rT src/nni_manager/node_modules $(INSTALL_PREFIX)/nni/nni_manager/node_modules + cp -rT ${PWD}/src/nni_manager/dist $(INSTALL_PREFIX)/nni/nni_manager + cp -rT ${PWD}/src/nni_manager/node_modules $(INSTALL_PREFIX)/nni/nni_manager/node_modules #$(_INFO) Installing Web UI $(_END) - cp -rT src/webui/build $(INSTALL_PREFIX)/nni/webui + cp -rT ${PWD}/src/webui/build $(INSTALL_PREFIX)/nni/webui .PHONY: install-dev-modules @@ -231,11 +232,11 @@ install-dev-modules: mkdir -p $(INSTALL_PREFIX)/nni #$(_INFO) Installing NNI Manager $(_END) - ln -sf $(PWD)/src/nni_manager/dist $(INSTALL_PREFIX)/nni/nni_manager - ln -sf $(PWD)/src/nni_manager/node_modules $(INSTALL_PREFIX)/nni/nni_manager/node_modules + ln -sf ${PWD}/src/nni_manager/dist $(INSTALL_PREFIX)/nni/nni_manager + ln -sf ${PWD}/src/nni_manager/node_modules $(INSTALL_PREFIX)/nni/nni_manager/node_modules #$(_INFO) Installing Web UI $(_END) - ln -sf $(PWD)/src/webui/build $(INSTALL_PREFIX)/nni/webui + ln -sf ${PWD}/src/webui/build $(INSTALL_PREFIX)/nni/webui .PHONY: install-scripts diff --git a/README.Makefile.md b/README.Makefile.md index 3a815af9d9..ca7bc3d75a 100644 --- a/README.Makefile.md +++ b/README.Makefile.md @@ -13,7 +13,7 @@ The targets will be detailed later. ## Dependencies -NNI requires at least Node.js, Yarn, and setuptools to build, while PIP and TypeScript are also recommended. +NNI requires at least Node.js, Yarn, and PIP to build, while TypeScript is also recommended. NNI requires Node.js, serve, and all dependency libraries to run. Required Node.js libraries (including TypeScript) can be installed by Yarn, and required Python libraries can be installed by setuptools or PIP. diff --git a/README.md b/README.md index d99f2c8217..b77ff37418 100644 --- a/README.md +++ b/README.md @@ -5,21 +5,10 @@ NNI (Neural Network Intelligence) is a toolkit to help users run automated machine learning experiments. The tool dispatches and runs trial jobs that generated by tuning algorithms to search the best neural architecture and/or hyper-parameters in different environments (e.g. local machine, remote servers and cloud). -``` - AutoML experiment Training Services -┌────────┐ ┌────────────────────────┐ ┌────────────────┐ -│ nnictl │ ─────> │ nni_manager │ │ Local Machine │ -└────────┘ │ sdk/tuner │ └────────────────┘ - │ hyperopt_tuner │ - │ evolution_tuner │ trial jobs ┌────────────────┐ - │ ... │ ────────> │ Remote Servers │ - ├────────────────────────┤ └────────────────┘ - │ trial job source code │ - │ sdk/annotation │ ┌────────────────┐ - ├────────────────────────┤ │ Yarn,K8s, │ - │ nni_board │ │ ... │ - └────────────────────────┘ └────────────────┘ -``` +

+drawing +

+ ## **Who should consider using NNI** * You want to try different AutoML algorithms for your training code (model) at local * You want to run AutoML trial jobs in different environments to speed up search (e.g. remote servers and cloud) diff --git a/docs/PAIMode.md b/docs/PAIMode.md index d8470884d4..05da292afa 100644 --- a/docs/PAIMode.md +++ b/docs/PAIMode.md @@ -48,6 +48,7 @@ Compared with LocalMode and [RemoteMachineMode](RemoteMachineMode.md), trial con * Required key. Should be positive number based on your trial program's memory requirement * image * Required key. In pai mode, your trial program will be scheduled by OpenPAI to run in [Docker container](https://www.docker.com/). This key is used to specify the Docker image used to create the container in which your traill will run. + * We already build a docker image [nnimsra/nni](https://hub.docker.com/r/msranni/nni/) on [Docker Hub](https://hub.docker.com/). It contains NNI python packages, Node modules and javascript artifact files required to start experiment, and all of NNI dependencies. The docker file used to build this image can be found at [here](../deployment/Dockerfile.build.base). You can either use this image directly in your config file, or build your own image based on it. * dataDir * Optional key. It specifies the HDFS data direcotry for trial to download data. The format should be something like hdfs://{your HDFS host}:9000/{your data directory} * outputDir diff --git a/docs/RELEASE.md b/docs/RELEASE.md index e7ef20c729..61b4c78c72 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -1,9 +1,9 @@ # Release 0.2.0 - 9/29/2018 ## Major Features - * Support for [OpenPAI](https://github.com/Microsoft/pai) (aka pai) Training Service + * Support [OpenPAI](https://github.com/Microsoft/pai) (aka pai) Training Service (See [here](./PAIMode.md) for instructions about how to submit NNI job in pai mode) * Support training services on pai mode. NNI trials will be scheduled to run on OpenPAI cluster * NNI trial's output (including logs and model file) will be copied to OpenPAI HDFS for further debugging and checking - * Support [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) tuner + * Support [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) tuner (See [here](../src/sdk/pynni/nni/README.md) for instructions about how to use SMAC tuner) * [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) is based on Sequential Model-Based Optimization (SMBO). It adapts the most prominent previously used model class (Gaussian stochastic process models) and introduces the model class of random forests to SMBO to handle categorical parameters. The SMAC supported by NNI is a wrapper on [SMAC3](https://github.com/automl/SMAC3) * Support NNI installation on [conda](https://conda.io/docs/index.html) and python virtual environment * Others diff --git a/docs/StartExperiment.md b/docs/StartExperiment.md new file mode 100644 index 0000000000..30f736ff15 --- /dev/null +++ b/docs/StartExperiment.md @@ -0,0 +1,33 @@ +How to start an experiment +=== +## 1.Introduce +There are few steps to start an new experiment of nni, here are the process. + +## 2.Details +### 2.1 Check environment +The first step to start an experiment is to check whether the environment is ready, nnictl will check if there is an old experiment running or the port of restfurl server is occupied. +NNICTL will also validate the content of config yaml file, to ensure the experiment config is in correct format. + +### 2.2 Start restful server +After check environment, nnictl will start an restful server process to manage nni experiment, the devault port is 51188. + +### 2.3 Check restful server +Before next steps, nnictl will check whether restful server is successfully started, or the starting process will stop and show error message. + +### 2.4 Set experiment config +NNICTL need to set experiment config before start an experiment, experiment config includes the config values in config yaml file. + +### 2.5 Check experiment cofig +NNICTL will ensure the request to set config is successfully executed. + +### 2.6 Start Web UI +NNICTL will start a Web UI process to show Web UI information,the default port of Web UI is 8080. + +### 2.7 Check Web UI +If Web UI is not successfully started, nnictl will give a warning information, and will continue to start experiment. + +### 2.8 Start Experiment +This is the most import step of starting an nni experiment, nnictl will call restful server process to setup an experiment. + +### 2.9 Check experiment +After start experiment, nnictl will check whether the experiment is correctly created, and show more information of this experiment to users. \ No newline at end of file diff --git a/docs/WriteYourTrial.md b/docs/WriteYourTrial.md index 18388aa9fd..328f273f11 100644 --- a/docs/WriteYourTrial.md +++ b/docs/WriteYourTrial.md @@ -121,3 +121,6 @@ In the yaml configure file, you need to set *useAnnotation* to true to enable NN ``` useAnnotation: true ``` + +## More Trial Example +* [Automatic Model Architecture Search for Reading Comprehension.](../examples/trials/ga_squad/README.md) \ No newline at end of file diff --git a/docs/img/experiment_process.jpg b/docs/img/experiment_process.jpg new file mode 100644 index 0000000000000000000000000000000000000000..141e41cad940c2299b4841af539a7fe8168b1576 GIT binary patch literal 302899 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

UqdWXvw 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 H(b)e1A^y)! literal 0 HcmV?d00001 diff --git a/docs/nni_overview.png b/docs/nni_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..fa30c2a0c146a7fb5e0cda5f3c039c04ebd21b34 GIT binary patch literal 57734 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

-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 self.population[1].result: - self.population[0] = self.population[1] - indiv = copy.deepcopy(self.population[0]) - self.population.pop(1) - indiv.mutation() - graph = indiv.config - temp = json.loads(graph_dumps(graph)) - - # ...... -``` - -As we can see, the overloaded method `generate_parameters` implements a pretty naive mutation algorithm. The code lines: - -``` - if self.population[0].result > self.population[1].result: - self.population[0] = self.population[1] - indiv = copy.deepcopy(self.population[0]) -``` - -controls the mutation process. It will always take two random individuals in the population, only keeping and mutating the one with better result. - -## Model configuration format - -Here is an example of the model configuration, which is passed from the tuner to the trial in the architecture search procedure. - -``` -{ - "max_layer_num": 50, - "layers": [ - { - "input_size": 0, - "type": 3, - "output_size": 1, - "input": [], - "size": "x", - "output": [4, 5], - "is_delete": false - }, - { - "input_size": 0, - "type": 3, - "output_size": 1, - "input": [], - "size": "y", - "output": [4, 5], - "is_delete": false - }, - { - "input_size": 1, - "type": 4, - "output_size": 0, - "input": [6], - "size": "x", - "output": [], - "is_delete": false - }, - { - "input_size": 1, - "type": 4, - "output_size": 0, - "input": [5], - "size": "y", - "output": [], - "is_delete": false - }, - {"Comment": "More layers will be here for actual graphs."} - ] -} -``` - -Every model configuration will has a "layers" section, which is a JSON list of layer definitions. The definition of each layer is also a JSON object, where: - - * `type` is the type of the layer. 0, 1, 2, 3, 4 corresponde to attention, self-attention, RNN, input and output layer respectively. - * `size` is the length of the output. "x", "y" corresponde to document length / question length, respectively. - * `input_size` is the number of inputs the layer has. - * `input` is the indices of layers taken as input of this layer. - * `output` is the indices of layers use this layer's output as their input. - * `is_delete` means whether the layer is still available. \ No newline at end of file +# Automatic Model Architecture Search for Reading Comprehension +This example shows us how to use Genetic Algorithm to find good model architectures for Reading Comprehension task. + +## Search Space +Since attention and recurrent neural network (RNN) module have been proven effective in Reading Comprehension. +We conclude the search space as follow: + +1. IDENTITY (Effectively means keep training). +2. INSERT-RNN-LAYER (Inserts a LSTM. Comparing the performance of GRU and LSTM in our experiment, we decided to use LSTM here.) +3. REMOVE-RNN-LAYER +4. INSERT-ATTENTION-LAYER(Inserts a attention layer.) +5. REMOVE-ATTENTION-LAYER +6. ADD-SKIP (Identity between random layers). +7. REMOVE-SKIP (Removes random skip). + +![ga-squad-logo](./ga_squad.png) + +## New version +Also we have another version which time cost is less and performance is better. We will release soon. + +# How to run this example? + +## Use downloading script to download data + +Execute the following command to download needed files +using the downloading script: + +``` +chmod +x ./download.sh +./download.sh +``` + +## Download manually + +1. download "dev-v1.1.json" and "train-v1.1.json" in https://rajpurkar.github.io/SQuAD-explorer/ + +``` +wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json +wget https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json +``` + +2. download "glove.840B.300d.txt" in https://nlp.stanford.edu/projects/glove/ + +``` +wget http://nlp.stanford.edu/data/glove.840B.300d.zip +unzip glove.840B.300d.zip +``` + +## Update configuration +Modify `nni/examples/trials/ga_squad/config.yaml`, here is the default configuration: + +``` +authorName: default +experimentName: example_ga_squad +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 1 +#choice: local, remote +trainingServicePlatform: local +#choice: true, false +useAnnotation: false +tuner: + codeDir: ~/nni/examples/tuners/ga_customer_tuner + classFileName: customer_tuner.py + className: CustomerTuner + classArgs: + optimize_mode: maximize +trial: + command: python3 trial.py + codeDir: ~/nni/examples/trials/ga_squad + gpuNum: 0 +``` + +In the "trial" part, if you want to use GPU to perform the architecture search, change `gpuNum` from `0` to `1`. You need to increase the `maxTrialNum` and `maxExecDuration`, according to how long you want to wait for the search result. + +`trialConcurrency` is the number of trials running concurrently, which is the number of GPUs you want to use, if you are setting `gpuNum` to 1. + +## submit this job + +``` +nnictl create --config ~/nni/examples/trials/ga_squad/config.yaml +``` + +# Techinal details about the trial + +## How does it works +The evolution-algorithm based architecture for question answering has two different parts just like any other examples: the trial and the tuner. + +### The trial + +The trial has a lot of different files, functions and classes. Here we will only give most of those files a brief introduction: + +* `attention.py` contains an implementaion for attention mechanism in Tensorflow. +* `data.py` contains functions for data preprocessing. +* `evaluate.py` contains the evaluation script. +* `graph.py` contains the definition of the computation graph. +* `rnn.py` contains an implementaion for GRU in Tensorflow. +* `train_model.py` is a wrapper for the whole question answering model. + +Among those files, `trial.py` and `graph_to_tf.py` is special. + +`graph_to_tf.py` has a function named as `graph_to_network`, here is its skelton code: + +``` +def graph_to_network(input1, + input2, + input1_lengths, + input2_lengths, + graph, + dropout_rate, + is_training, + num_heads=1, + rnn_units=256): + topology = graph.is_topology() + layers = dict() + layers_sequence_lengths = dict() + num_units = input1.get_shape().as_list()[-1] + layers[0] = input1*tf.sqrt(tf.cast(num_units, tf.float32)) + \ + positional_encoding(input1, scale=False, zero_pad=False) + layers[1] = input2*tf.sqrt(tf.cast(num_units, tf.float32)) + layers[0] = dropout(layers[0], dropout_rate, is_training) + layers[1] = dropout(layers[1], dropout_rate, is_training) + layers_sequence_lengths[0] = input1_lengths + layers_sequence_lengths[1] = input2_lengths + for _, topo_i in enumerate(topology): + if topo_i == '|': + continue + if graph.layers[topo_i].graph_type == LayerType.input.value: + # ...... + elif graph.layers[topo_i].graph_type == LayerType.attention.value: + # ...... + # More layers to handle +``` + +As we can see, this function is actually a compiler, that converts the internal model DAG configuration (which will be introduced in the `Model configuration format` section) `graph`, to a Tensorflow computation graph. + +``` +topology = graph.is_topology() +``` + +performs topological sorting on the internal graph representation, and the code inside the loop: + +``` +for _, topo_i in enumerate(topology): +``` + +performs actually conversion that maps each layer to a part in Tensorflow computation graph. + +### The tuner + +The tuner is much more simple than the trial. They actually share the same `graph.py`. Besides, the tuner has a `customer_tuner.py`, the most important class in which is `CustomerTuner`: + +``` +class CustomerTuner(Tuner): + # ...... + + def generate_parameters(self, parameter_id): + """Returns a set of trial graph config, as a serializable object. + parameter_id : int + """ + if len(self.population) <= 0: + logger.debug("the len of poplution lower than zero.") + raise Exception('The population is empty') + pos = -1 + for i in range(len(self.population)): + if self.population[i].result == None: + pos = i + break + if pos != -1: + indiv = copy.deepcopy(self.population[pos]) + self.population.pop(pos) + temp = json.loads(graph_dumps(indiv.config)) + else: + random.shuffle(self.population) + if self.population[0].result > self.population[1].result: + self.population[0] = self.population[1] + indiv = copy.deepcopy(self.population[0]) + self.population.pop(1) + indiv.mutation() + graph = indiv.config + temp = json.loads(graph_dumps(graph)) + + # ...... +``` + +As we can see, the overloaded method `generate_parameters` implements a pretty naive mutation algorithm. The code lines: + +``` + if self.population[0].result > self.population[1].result: + self.population[0] = self.population[1] + indiv = copy.deepcopy(self.population[0]) +``` + +controls the mutation process. It will always take two random individuals in the population, only keeping and mutating the one with better result. + +## Model configuration format + +Here is an example of the model configuration, which is passed from the tuner to the trial in the architecture search procedure. + +``` +{ + "max_layer_num": 50, + "layers": [ + { + "input_size": 0, + "type": 3, + "output_size": 1, + "input": [], + "size": "x", + "output": [4, 5], + "is_delete": false + }, + { + "input_size": 0, + "type": 3, + "output_size": 1, + "input": [], + "size": "y", + "output": [4, 5], + "is_delete": false + }, + { + "input_size": 1, + "type": 4, + "output_size": 0, + "input": [6], + "size": "x", + "output": [], + "is_delete": false + }, + { + "input_size": 1, + "type": 4, + "output_size": 0, + "input": [5], + "size": "y", + "output": [], + "is_delete": false + }, + {"Comment": "More layers will be here for actual graphs."} + ] +} +``` + +Every model configuration will has a "layers" section, which is a JSON list of layer definitions. The definition of each layer is also a JSON object, where: + + * `type` is the type of the layer. 0, 1, 2, 3, 4 corresponde to attention, self-attention, RNN, input and output layer respectively. + * `size` is the length of the output. "x", "y" corresponde to document length / question length, respectively. + * `input_size` is the number of inputs the layer has. + * `input` is the indices of layers taken as input of this layer. + * `output` is the indices of layers use this layer's output as their input. + * `is_delete` means whether the layer is still available. diff --git a/examples/trials/ga_squad/config.yml b/examples/trials/ga_squad/config.yml index a0b1480992..c6fec5bcbc 100644 --- a/examples/trials/ga_squad/config.yml +++ b/examples/trials/ga_squad/config.yml @@ -3,7 +3,7 @@ experimentName: example_ga_squad trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 -#choice: local, remote +#choice: local, remote, pai trainingServicePlatform: local #choice: true, false useAnnotation: false diff --git a/examples/trials/ga_squad/config_pai.yml b/examples/trials/ga_squad/config_pai.yml new file mode 100644 index 0000000000..56c2d33069 --- /dev/null +++ b/examples/trials/ga_squad/config_pai.yml @@ -0,0 +1,34 @@ +authorName: default +experimentName: example_ga_squad +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: pai +#choice: true, false +useAnnotation: false +tuner: + codeDir: ../tuners/ga_customer_tuner + classFileName: customer_tuner.py + className: CustomerTuner + classArgs: + optimize_mode: maximize +trial: + command: python3 trial.py + codeDir: . + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + #The docker image to run nni job on pai + image: openpai/pai.example.tensorflow + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + hdfsDataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni +paiConfig: + #The username to login pai + userName: username + #The password to login pai + passWord: password + #The host of restful server of pai + host: 10.10.10.10 \ No newline at end of file diff --git a/examples/trials/mnist-annotation/config.yml b/examples/trials/mnist-annotation/config.yml index 84c31166a8..b0555ad3a2 100644 --- a/examples/trials/mnist-annotation/config.yml +++ b/examples/trials/mnist-annotation/config.yml @@ -3,7 +3,7 @@ experimentName: example_mnist trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 -#choice: local, remote +#choice: local, remote, pai trainingServicePlatform: local #choice: true, false useAnnotation: true diff --git a/examples/trials/mnist-annotation/config_pai.yml b/examples/trials/mnist-annotation/config_pai.yml new file mode 100644 index 0000000000..edb9e62384 --- /dev/null +++ b/examples/trials/mnist-annotation/config_pai.yml @@ -0,0 +1,35 @@ +authorName: default +experimentName: example_mnist +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: pai +#choice: true, false +useAnnotation: true +tuner: + #choice: TPE, Random, Anneal, Evolution, + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + #The docker image to run nni job on pai + image: openpai/pai.example.tensorflow + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + hdfsDataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni +paiConfig: + #The username to login pai + userName: username + #The password to login pai + passWord: password + #The host of restful server of pai + host: 10.10.10.10 \ No newline at end of file diff --git a/examples/trials/mnist-batch-tune-keras/config.yml b/examples/trials/mnist-batch-tune-keras/config.yml index 1bb85085c5..e0722f9117 100644 --- a/examples/trials/mnist-batch-tune-keras/config.yml +++ b/examples/trials/mnist-batch-tune-keras/config.yml @@ -3,7 +3,7 @@ experimentName: example_mnist-keras trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 -#choice: local, remote +#choice: local, remote, pai trainingServicePlatform: local searchSpacePath: search_space.json #choice: true, false diff --git a/examples/trials/mnist-batch-tune-keras/config_pai.yml b/examples/trials/mnist-batch-tune-keras/config_pai.yml new file mode 100644 index 0000000000..183c220e2d --- /dev/null +++ b/examples/trials/mnist-batch-tune-keras/config_pai.yml @@ -0,0 +1,36 @@ +authorName: default +experimentName: example_mnist-keras +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: pai +searchSpacePath: search_space.json +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: BatchTuner + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 mnist-keras.py + codeDir: . + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + #The docker image to run nni job on pai + image: openpai/pai.example.tensorflow + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + hdfsDataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni +paiConfig: + #The username to login pai + userName: username + #The password to login pai + passWord: password + #The host of restful server of pai + host: 10.10.10.10 \ No newline at end of file diff --git a/examples/trials/mnist-cascading-search-space/config.yml b/examples/trials/mnist-cascading-search-space/config.yml new file mode 100644 index 0000000000..1c2a4643a4 --- /dev/null +++ b/examples/trials/mnist-cascading-search-space/config.yml @@ -0,0 +1,20 @@ +authorName: default +experimentName: mnist-cascading-search-space +trialConcurrency: 2 +maxExecDuration: 1h +maxTrialNum: 100 +#choice: local, remote +trainingServicePlatform: local +searchSpacePath: search_space.json +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 diff --git a/examples/trials/mnist-cascading-search-space/mnist.py b/examples/trials/mnist-cascading-search-space/mnist.py new file mode 100644 index 0000000000..bd6dd35a5c --- /dev/null +++ b/examples/trials/mnist-cascading-search-space/mnist.py @@ -0,0 +1,164 @@ +''' +mnist.py is an example to show: how to use iterative search space to tune architecture network for mnist. +''' +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import argparse +import codecs +import json +import logging +import math +import sys +import tempfile +import tensorflow as tf + +from tensorflow.examples.tutorials.mnist import input_data + +import nni + + +logger = logging.getLogger('mnist_cascading_search_space') +FLAGS = None + +class MnistNetwork(object): + def __init__(self, params, feature_size = 784): + config = [] + + for i in range(10): + config.append(params['layer'+str(i)]) + self.config = config + self.feature_size = feature_size + self.label_size = 10 + + + def is_expand_dim(self, input): + # input is a tensor + shape = len(input.get_shape().as_list()) + if shape < 4: + return True + return False + + + def is_flatten(self, input): + # input is a tensor + shape = len(input.get_shape().as_list()) + if shape > 2: + return True + return False + + + def get_layer(self, layer_config, input, in_height, in_width, id): + if layer_config[0] == 'Empty': + return input + + if self.is_expand_dim(input): + input = tf.reshape(input, [-1, in_height, in_width, 1]) + h, w = layer_config[1], layer_config[2] + + if layer_config[0] == 'Conv': + conv_filter = tf.Variable(tf.random_uniform([h, w, 1, 1]), name='id_%d_conv_%d_%d' % (id, h, w)) + return tf.nn.conv2d(input, filter=conv_filter, strides=[1, 1, 1, 1], padding='SAME') + if layer_config[0] == 'Max_pool': + return tf.nn.max_pool(input, ksize=[1, h, w, 1], strides=[1, 1, 1, 1], padding='SAME') + if layer_config[0] == 'Avg_pool': + return tf.nn.avg_pool(input, ksize=[1, h, w, 1], strides=[1, 1, 1, 1], padding='SAME') + + print('error:', layer_config) + raise Exception('%s layer is illegal'%layer_config[0]) + + + def build_network(self): + layer_configs = self.config + feature_size = 784 + + # define placeholder + self.x = tf.placeholder(tf.float32, [None, feature_size], name="input_x") + self.y = tf.placeholder(tf.int32, [None, self.label_size], name="input_y") + label_number = 10 + + # define network + input_layer = self.x + in_height = in_width = int(math.sqrt(feature_size)) + for i, layer_config in enumerate(layer_configs): + input_layer = tf.nn.relu(self.get_layer(layer_config, input_layer, in_height, in_width, i)) + + output_layer = input_layer + if self.is_flatten(output_layer): + output_layer = tf.contrib.layers.flatten(output_layer) # flatten + output_layer = tf.layers.dense(output_layer, label_number) + child_logit = tf.nn.softmax_cross_entropy_with_logits(logits=output_layer, labels=self.y) + child_loss = tf.reduce_mean(child_logit) + + self.train_step = tf.train.AdamOptimizer(learning_rate=0.0001).minimize(child_loss) + child_accuracy = tf.equal(tf.argmax(output_layer, 1), tf.argmax(self.y, 1)) + self.accuracy = tf.reduce_mean(tf.cast(child_accuracy, "float")) # add a reduce_mean + +def main(params): + # Import data + mnist = input_data.read_data_sets(params['data_dir'], one_hot=True) + + # Create the model + # Build the graph for the deep net + mnist_network = MnistNetwork(params) + mnist_network.build_network() + print('build network done.') + + # Write log + graph_location = tempfile.mkdtemp() + #print('Saving graph to: %s' % graph_location) + train_writer = tf.summary.FileWriter(graph_location) + train_writer.add_graph(tf.get_default_graph()) + + test_acc = 0.0 + with tf.Session() as sess: + sess.run(tf.global_variables_initializer()) + for i in range(params['batch_num']): + batch = mnist.train.next_batch(params['batch_size']) + mnist_network.train_step.run(feed_dict={mnist_network.x: batch[0], mnist_network.y: batch[1]}) + + if i % 100 == 0: + train_accuracy = mnist_network.accuracy.eval(feed_dict={ + mnist_network.x: batch[0], mnist_network.y: batch[1]}) + print('step %d, training accuracy %g' % (i, train_accuracy)) + + test_acc = mnist_network.accuracy.eval(feed_dict={ + mnist_network.x: mnist.test.images, mnist_network.y: mnist.test.labels}) + + nni.report_final_result(test_acc) + +def generate_defualt_params(): + params = {'data_dir': '/tmp/tensorflow/mnist/input_data', + 'batch_num': 1000, + 'batch_size': 200} + return params + + +def parse_init_json(data): + params = {} + for key in data: + value = data[key] + if value == 'Empty': + params[key] = ['Empty'] + else: + params[key] = [value[0], value[1]['_value'], value[1]['_value']] + return params + + +if __name__ == '__main__': + try: + # get parameters form tuner + data = nni.get_parameters() + logger.debug(data) + + RCV_PARAMS = parse_init_json(data) + logger.debug(RCV_PARAMS) + params = generate_defualt_params() + params.update(RCV_PARAMS) + print(RCV_PARAMS) + + main(params) + except Exception as exception: + logger.exception(exception) + raise diff --git a/examples/trials/mnist-cascading-search-space/requirments.txt b/examples/trials/mnist-cascading-search-space/requirments.txt new file mode 100644 index 0000000000..a77b0fa943 --- /dev/null +++ b/examples/trials/mnist-cascading-search-space/requirments.txt @@ -0,0 +1,3 @@ +tensorflow >= 1.3 +six == 1.11.0 +numpy == 1.13.3 diff --git a/examples/trials/mnist-cascading-search-space/sample.json b/examples/trials/mnist-cascading-search-space/sample.json new file mode 100644 index 0000000000..8781c2eeed --- /dev/null +++ b/examples/trials/mnist-cascading-search-space/sample.json @@ -0,0 +1 @@ +{"layer2": "Empty", "layer8": ["Conv", {"_index": 0, "_value": 2}], "layer3": ["Avg_pool", {"_index": 2, "_value": 5}], "layer0": ["Max_pool", {"_index": 2, "_value": 5}], "layer1": ["Conv", {"_index": 0, "_value": 2}], "layer6": ["Max_pool", {"_index": 1, "_value": 3}], "layer7": ["Max_pool", {"_index": 2, "_value": 5}], "layer9": ["Conv", {"_index": 0, "_value": 2}], "layer4": ["Avg_pool", {"_index": 1, "_value": 3}], "layer5": ["Avg_pool", {"_index": 2, "_value": 5}]} diff --git a/examples/trials/mnist-cascading-search-space/search_space.json b/examples/trials/mnist-cascading-search-space/search_space.json new file mode 100644 index 0000000000..caf9c36117 --- /dev/null +++ b/examples/trials/mnist-cascading-search-space/search_space.json @@ -0,0 +1,62 @@ +{ + "layer0":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer1":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer2":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer3":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer4":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer5":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer6":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer7":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer8":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]}, + "layer9":{"_type":"choice","_value":[ + "Empty", + ["Conv", {"_type":"choice","_value":[2,3,5]}], + ["Max_pool", {"_type":"choice","_value":[2,3,5]}], + ["Avg_pool", {"_type":"choice","_value":[2,3,5]}] + ]} +} \ No newline at end of file diff --git a/examples/trials/mnist-keras/config.yml b/examples/trials/mnist-keras/config.yml index c1792e2a65..6ea1c2a367 100644 --- a/examples/trials/mnist-keras/config.yml +++ b/examples/trials/mnist-keras/config.yml @@ -3,7 +3,7 @@ experimentName: example_mnist-keras trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 -#choice: local, remote +#choice: local, remote, pai trainingServicePlatform: local searchSpacePath: search_space.json #choice: true, false diff --git a/examples/trials/mnist-keras/config_pai.yml b/examples/trials/mnist-keras/config_pai.yml new file mode 100644 index 0000000000..bbf8136144 --- /dev/null +++ b/examples/trials/mnist-keras/config_pai.yml @@ -0,0 +1,36 @@ +authorName: default +experimentName: example_mnist-keras +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: pai +searchSpacePath: search_space.json +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution, + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 mnist-keras.py + codeDir: . + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + #The docker image to run nni job on pai + image: openpai/pai.example.tensorflow + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + hdfsDataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni +paiConfig: + #The username to login pai + userName: username + #The password to login pai + passWord: password + #The host of restful server of pai + host: 10.10.10.10 \ No newline at end of file diff --git a/examples/trials/mnist-smartparam/config.yml b/examples/trials/mnist-smartparam/config.yml index a69e801ed8..912eabb24e 100644 --- a/examples/trials/mnist-smartparam/config.yml +++ b/examples/trials/mnist-smartparam/config.yml @@ -3,7 +3,7 @@ experimentName: example_mnist-smartparam trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 -#choice: local, remote +#choice: local, remote, pai trainingServicePlatform: local #choice: true, false useAnnotation: true diff --git a/examples/trials/mnist-smartparam/config_pai.yml b/examples/trials/mnist-smartparam/config_pai.yml new file mode 100644 index 0000000000..4b5a088d11 --- /dev/null +++ b/examples/trials/mnist-smartparam/config_pai.yml @@ -0,0 +1,35 @@ +authorName: default +experimentName: example_mnist-smartparam +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: pai +#choice: true, false +useAnnotation: true +tuner: + #choice: TPE, Random, Anneal, Evolution, + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + #The docker image to run nni job on pai + image: openpai/pai.example.tensorflow + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + hdfsDataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni +paiConfig: + #The username to login pai + userName: username + #The password to login pai + passWord: password + #The host of restful server of pai + host: 10.10.10.10 \ No newline at end of file diff --git a/examples/trials/mnist/config.yml b/examples/trials/mnist/config.yml index 5eab536228..2f6141fa45 100644 --- a/examples/trials/mnist/config.yml +++ b/examples/trials/mnist/config.yml @@ -3,7 +3,7 @@ experimentName: example_mnist trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 -#choice: local, remote +#choice: local, remote, pai trainingServicePlatform: local searchSpacePath: search_space.json #choice: true, false diff --git a/examples/trials/mnist/config_pai.yml b/examples/trials/mnist/config_pai.yml new file mode 100644 index 0000000000..a20fdce40b --- /dev/null +++ b/examples/trials/mnist/config_pai.yml @@ -0,0 +1,36 @@ +authorName: default +experimentName: example_mnist +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: pai +searchSpacePath: search_space.json +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution, + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + #The docker image to run nni job on pai + image: openpai/pai.example.tensorflow + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + hdfsDataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni +paiConfig: + #The username to login pai + userName: username + #The password to login pai + passWord: password + #The host of restful server of pai + host: 10.10.10.10 \ No newline at end of file diff --git a/examples/trials/pytorch_cifar10/config.yml b/examples/trials/pytorch_cifar10/config.yml index 655dccd95f..1d6f847805 100644 --- a/examples/trials/pytorch_cifar10/config.yml +++ b/examples/trials/pytorch_cifar10/config.yml @@ -3,7 +3,7 @@ experimentName: example_pytorch_cifar10 trialConcurrency: 1 maxExecDuration: 100h maxTrialNum: 10 -#choice: local, remote +#choice: local, remote, pai trainingServicePlatform: local searchSpacePath: search_space.json #choice: true, false diff --git a/examples/trials/pytorch_cifar10/config_pai.yml b/examples/trials/pytorch_cifar10/config_pai.yml new file mode 100644 index 0000000000..783285f815 --- /dev/null +++ b/examples/trials/pytorch_cifar10/config_pai.yml @@ -0,0 +1,36 @@ +authorName: default +experimentName: example_pytorch_cifar10 +trialConcurrency: 1 +maxExecDuration: 100h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: pai +searchSpacePath: search_space.json +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution, + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 main.py + codeDir: . + gpuNum: 1 + cpuNum: 1 + memoryMB: 8196 + #The docker image to run nni job on pai + image: openpai/pai.example.tensorflow + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + hdfsDataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni +paiConfig: + #The username to login pai + userName: username + #The password to login pai + passWord: password + #The host of restful server of pai + host: 10.10.10.10 diff --git a/examples/trials/sklearn/classification/config.yml b/examples/trials/sklearn/classification/config.yml new file mode 100644 index 0000000000..618de01c93 --- /dev/null +++ b/examples/trials/sklearn/classification/config.yml @@ -0,0 +1,20 @@ +authorName: default +experimentName: example_sklearn-classification +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 100 +#choice: local, remote +trainingServicePlatform: local +searchSpacePath: search_space.json +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 main.py + codeDir: . + gpuNum: 0 \ No newline at end of file diff --git a/examples/trials/sklearn/classification/main.py b/examples/trials/sklearn/classification/main.py new file mode 100644 index 0000000000..537849d5bf --- /dev/null +++ b/examples/trials/sklearn/classification/main.py @@ -0,0 +1,83 @@ +# Copyright (c) Microsoft Corporation +# All rights reserved. +# +# MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +# documentation files (the "Software"), to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +# to permit persons to whom the Software is furnished to do so, subject to the following conditions: +# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import nni +from sklearn.model_selection import train_test_split +from sklearn.datasets import load_digits +from sklearn.preprocessing import StandardScaler +from sklearn.svm import SVC +import logging +import numpy as np + + +LOG = logging.getLogger('sklearn_classification') + +def load_data(): + '''Load dataset, use 20newsgroups dataset''' + digits = load_digits() + X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, random_state=99, test_size=0.25) + + ss = StandardScaler() + X_train = ss.fit_transform(X_train) + X_test = ss.transform(X_test) + + return X_train, X_test, y_train, y_test + +def get_default_parameters(): + '''get default parameters''' + params = { + 'C': 1.0, + 'keral': 'linear', + 'degree': 3, + 'gamma': 0.01, + 'coef0': 0.01 + } + return params + +def get_model(PARAMS): + '''Get model according to parameters''' + model = SVC() + model.C = PARAMS.get('C') + model.keral = PARAMS.get('keral') + model.degree = PARAMS.get('degree') + model.gamma = PARAMS.get('gamma') + model.coef0 = PARAMS.get('coef0') + + return model + +def run(X_train, X_test, y_train, y_test, PARAMS): + '''Train model and predict result''' + model.fit(X_train, y_train) + score = model.score(X_test, y_test) + LOG.debug('score: %s' % score) + nni.report_final_result(score) + +if __name__ == '__main__': + X_train, X_test, y_train, y_test = load_data() + + try: + # get parameters from tuner + RECEIVED_PARAMS = nni.get_parameters() + LOG.debug(RECEIVED_PARAMS) + PARAMS = get_default_parameters() + PARAMS.update(RECEIVED_PARAMS) + LOG.debug(PARAMS) + model = get_model(PARAMS) + run(X_train, X_test, y_train, y_test, model) + except Exception as exception: + LOG.exception(exception) + raise diff --git a/examples/trials/sklearn/classification/search_space.json b/examples/trials/sklearn/classification/search_space.json new file mode 100644 index 0000000000..1687a93ccc --- /dev/null +++ b/examples/trials/sklearn/classification/search_space.json @@ -0,0 +1,7 @@ +{ + "C": {"_type":"uniform","_value":[0.1, 1]}, + "keral": {"_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]} +} \ No newline at end of file diff --git a/examples/trials/sklearn/regression/config.yml b/examples/trials/sklearn/regression/config.yml new file mode 100644 index 0000000000..d5708ee9eb --- /dev/null +++ b/examples/trials/sklearn/regression/config.yml @@ -0,0 +1,20 @@ +authorName: default +experimentName: example_sklearn-regression +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 30 +#choice: local, remote +trainingServicePlatform: local +searchSpacePath: search_space.json +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 main.py + codeDir: . + gpuNum: 0 \ No newline at end of file diff --git a/examples/trials/sklearn/regression/main.py b/examples/trials/sklearn/regression/main.py new file mode 100644 index 0000000000..0a8876887f --- /dev/null +++ b/examples/trials/sklearn/regression/main.py @@ -0,0 +1,102 @@ +# Copyright (c) Microsoft Corporation +# All rights reserved. +# +# MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +# documentation files (the "Software"), to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +# to permit persons to whom the Software is furnished to do so, subject to the following conditions: +# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import nni +from sklearn.datasets import load_boston +from sklearn.model_selection import train_test_split +from sklearn import linear_model +import logging +import numpy as np +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 + +LOG = logging.getLogger('sklearn_regression') + +def load_data(): + '''Load dataset, use boston dataset''' + boston = load_boston() + X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=99, test_size=0.25) + #normalize data + ss_X = StandardScaler() + ss_y = StandardScaler() + + X_train = ss_X.fit_transform(X_train) + X_test = ss_X.transform(X_test) + y_train = ss_y.fit_transform(y_train[:, None])[:,0] + y_test = ss_y.transform(y_test[:, None])[:,0] + + return X_train, X_test, y_train, y_test + +def get_default_parameters(): + '''get default parameters''' + params = { + 'model_name': 'LinearRegression' + } + return params + +def get_model(PARAMS): + '''Get model according to parameters''' + model_dict = { + 'LinearRegression': LinearRegression(), + 'SVR': SVR(), + 'KNeighborsRegressor': KNeighborsRegressor(), + 'DecisionTreeRegressor': DecisionTreeRegressor() + } + if not model_dict.get(PARAMS['model_name']): + LOG.exception('Not supported model!') + exit(1) + + model = model_dict[PARAMS['model_name']] + + 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, PARAMS): + '''Train model and predict result''' + model.fit(X_train, y_train) + predict_y = model.predict(X_test) + score = r2_score(y_test, predict_y) + LOG.debug('r2 score: %s' % score) + nni.report_final_result(score) + +if __name__ == '__main__': + X_train, X_test, y_train, y_test = load_data() + + try: + # get parameters from tuner + RECEIVED_PARAMS = nni.get_parameters() + LOG.debug(RECEIVED_PARAMS) + PARAMS = get_default_parameters() + PARAMS.update(RECEIVED_PARAMS) + LOG.debug(PARAMS) + model = get_model(PARAMS) + run(X_train, X_test, y_train, y_test, model) + except Exception as exception: + LOG.exception(exception) + raise diff --git a/examples/trials/sklearn/regression/search_space.json b/examples/trials/sklearn/regression/search_space.json new file mode 100644 index 0000000000..a2dcb53915 --- /dev/null +++ b/examples/trials/sklearn/regression/search_space.json @@ -0,0 +1,5 @@ +{ + "model_name":{"_type":"choice","_value":["LinearRegression", "SVR", "KNeighborsRegressor", "DecisionTreeRegressor"]}, + "svr_kernel": {"_type":"choice","_value":["linear", "poly", "rbf"]}, + "knr_weights": {"_type":"choice","_value":["uniform", "distance"]} +} \ No newline at end of file diff --git a/examples/tuners/ga_customer_tuner/customer_tuner.py b/examples/tuners/ga_customer_tuner/customer_tuner.py index c375f666cc..16203a2e08 100644 --- a/examples/tuners/ga_customer_tuner/customer_tuner.py +++ b/examples/tuners/ga_customer_tuner/customer_tuner.py @@ -61,7 +61,8 @@ def __str__(self): def mutation(self, config=None, info=None, save_dir=None): self.result = None - self.config = config + if config is not None: + self.config = config self.config.mutation() self.restore_dir = self.save_dir self.save_dir = save_dir @@ -121,8 +122,7 @@ def receive_trial_result(self, parameter_id, parameters, reward): logger.debug(str(parameters)) logger.debug(str(reward)) - indiv = graph_loads(parameters) - indiv.result = reward + indiv = Individual(graph_loads(parameters), result=reward) self.population.append(indiv) return diff --git a/install.sh b/install.sh index 0c3d39bcf1..3d5199e187 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,3 @@ #!/bin/bash -make install-dependencies -make build -make dev-install -make install-examples -make update-bash-config +make easy-install source ~/.bashrc diff --git a/src/nni_manager/rest_server/restValidationSchemas.ts b/src/nni_manager/rest_server/restValidationSchemas.ts index 24b07836a7..a94f9f11b8 100644 --- a/src/nni_manager/rest_server/restValidationSchemas.ts +++ b/src/nni_manager/rest_server/restValidationSchemas.ts @@ -58,7 +58,7 @@ export namespace ValidationSchemas { searchSpace: joi.string().required(), maxExecDuration: joi.number().min(0).required(), tuner: joi.object({ - builtinTunerName: joi.string().valid('TPE', 'Random', 'Anneal', 'Evolution', 'SMAC'), + builtinTunerName: joi.string().valid('TPE', 'Random', 'Anneal', 'Evolution', 'SMAC', 'BatchTuner'), codeDir: joi.string(), classFileName: joi.string(), className: joi.string(), diff --git a/src/sdk/pynni/nni/constants.py b/src/sdk/pynni/nni/constants.py index cf611bebfd..0e4fff8663 100644 --- a/src/sdk/pynni/nni/constants.py +++ b/src/sdk/pynni/nni/constants.py @@ -24,6 +24,7 @@ 'Anneal': 'nni.hyperopt_tuner.hyperopt_tuner', 'Evolution': 'nni.evolution_tuner.evolution_tuner', 'SMAC': 'nni.smac_tuner.smac_tuner', + 'BatchTuner': 'nni.batch_tuner.batch_tuner', 'Medianstop': 'nni.medianstop_assessor.medianstop_assessor' } @@ -34,6 +35,7 @@ 'Anneal': 'HyperoptTuner', 'Evolution': 'EvolutionTuner', 'SMAC': 'SMACTuner', + 'BatchTuner': 'BatchTuner', 'Medianstop': 'MedianstopAssessor' } diff --git a/src/sdk/pynni/nni/hyperopt_tuner/hyperopt_tuner.py b/src/sdk/pynni/nni/hyperopt_tuner/hyperopt_tuner.py index 99b3006b0d..0f3ef7eb19 100644 --- a/src/sdk/pynni/nni/hyperopt_tuner/hyperopt_tuner.py +++ b/src/sdk/pynni/nni/hyperopt_tuner/hyperopt_tuner.py @@ -127,7 +127,7 @@ def json2vals(in_x, vals, out_y, name=ROOT): json2vals(in_x[key], vals[key], out_y, name + '[%s]' % str(key)) elif isinstance(in_x, list): for i, temp in enumerate(in_x): - json2vals(i, vals[temp], out_y, name + '[%d]' % temp) + json2vals(temp, vals[i], out_y, name + '[%d]' % i) def _split_index(params): diff --git a/src/webui/package.json b/src/webui/package.json index 0178ccfa98..f4c258ee46 100644 --- a/src/webui/package.json +++ b/src/webui/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { - "antd": "^3.9.3", + "antd": "^3.8.1", "axios": "^0.18.0", "babel-polyfill": "^6.26.0", "echarts": "^4.1.0", diff --git a/src/webui/src/components/Sessionpro.tsx b/src/webui/src/components/Sessionpro.tsx index 44993ec31f..83b44b3f78 100644 --- a/src/webui/src/components/Sessionpro.tsx +++ b/src/webui/src/components/Sessionpro.tsx @@ -98,10 +98,10 @@ class Sessionpro extends React.Component<{}, SessionState> { let sessionData = res.data; let tunerAsstemp = []; let trialPro = []; - const startExper = new Date(sessionData.startTime).toLocaleString(); + const startExper = new Date(sessionData.startTime).toLocaleString('en-US'); let experEndStr: string; if (sessionData.endTime !== undefined) { - experEndStr = new Date(sessionData.endTime).toLocaleString(); + experEndStr = new Date(sessionData.endTime).toLocaleString('en-US'); } else { experEndStr = 'not over'; } @@ -156,8 +156,8 @@ class Sessionpro extends React.Component<{}, SessionState> { const desJobDetail: Parameters = { parameters: {} }; - const startTime = new Date(tableData[item].startTime).toLocaleString(); - const endTime = new Date(tableData[item].endTime).toLocaleString(); + const startTime = new Date(tableData[item].startTime).toLocaleString('en-US'); + const endTime = new Date(tableData[item].endTime).toLocaleString('en-US'); const duration = (tableData[item].endTime - tableData[item].startTime) / 1000; let acc; if (tableData[item].finalMetricData) { diff --git a/src/webui/src/components/SlideBar.tsx b/src/webui/src/components/SlideBar.tsx index adce8a51b4..2219491971 100644 --- a/src/webui/src/components/SlideBar.tsx +++ b/src/webui/src/components/SlideBar.tsx @@ -11,7 +11,7 @@ class SlideBar extends React.Component<{}, {}> {

diff --git a/src/webui/src/components/TrialStatus.tsx b/src/webui/src/components/TrialStatus.tsx index 2c3d27be97..d0e0980ee2 100644 --- a/src/webui/src/components/TrialStatus.tsx +++ b/src/webui/src/components/TrialStatus.tsx @@ -230,10 +230,10 @@ class TrialStatus extends React.Component<{}, TabState> { ? trialJobs[item].status : ''; const startTime = trialJobs[item].startTime !== undefined - ? new Date(trialJobs[item].startTime).toLocaleString() + ? new Date(trialJobs[item].startTime).toLocaleString('en-US') : ''; const endTime = trialJobs[item].endTime !== undefined - ? new Date(trialJobs[item].endTime).toLocaleString() + ? new Date(trialJobs[item].endTime).toLocaleString('en-US') : ''; if (trialJobs[item].hyperParameters !== undefined) { desc.parameters = JSON.parse(trialJobs[item].hyperParameters).parameters; @@ -394,7 +394,7 @@ class TrialStatus extends React.Component<{}, TabState> { dataIndex: 'start', key: 'start', width: '15%', - sorter: (a: TableObj, b: TableObj): number => a.start.localeCompare(b.start) + sorter: (a: TableObj, b: TableObj): number => (Date.parse(a.start) - Date.parse(b.start)) }, { title: 'End', dataIndex: 'end', diff --git a/tools/README.md b/tools/README.md index 94319fe51a..a2e3bf4ff3 100644 --- a/tools/README.md +++ b/tools/README.md @@ -1,36 +1,37 @@ -##NNI CTL +## NNI CTL The NNI CTL module is used to control Neural Network Intelligence, including start a new experiment, stop an experiment and update an experiment etc. -##Environment +## Environment + ``` Ubuntu 16.04 or other Linux OS python >= 3.5 ``` -##Installation - 1.Enter tools directory - - 2.Use pip3 to install packages +## Installation - 2.1 Install for current user: + 1. Enter tools directory + + 2. Use pip3 to install packages + * Install for current user: - pip3 install --user -e . + pip3 install --user -e . - 2.2 Install for all users: + * Install for all users: - pip3 install -e . + pip3 install -e . - 3.Change the mode of nnictl file +1. Change the mode of nnictl file chmod +x ./nnictl -4.Add nnictl to your PATH system environment variable. +2. Add nnictl to your PATH system environment variable. - * You could use `export` command to set PATH variable temporary. + * You could use `export` command to set PATH variable temporary. export PATH={your nnictl path}:$PATH - * Or you could edit your `/etc/profile` file. + * Or you could edit your `/etc/profile` file. 1.sudo vim /etc/profile @@ -43,7 +44,8 @@ python >= 3.5 3.source /etc/profile -##To start using NNI CTL +## To start using NNI CTL + please reference to the [NNI CTL document]. diff --git a/tools/bash-completion b/tools/bash-completion index d72d3d346c..59dd85299d 100644 --- a/tools/bash-completion +++ b/tools/bash-completion @@ -81,4 +81,4 @@ _nnictl() fi } -complete -F _nnictl nnictl +complete -o nospace -F _nnictl nnictl diff --git a/tools/completion b/tools/completion deleted file mode 100644 index 5855d4a6d6..0000000000 --- a/tools/completion +++ /dev/null @@ -1,61 +0,0 @@ -__nnictl_cmds="create resume update stop trial webui experiment config rest log" -__nnictl_create_cmds="--config --webuiport" -__nnictl_resume_cmds="--experiment --manager --webuiport" -__nnictl_update_cmds="searchspace concurrency duration" -__nnictl_update_searchspace_cmds="--filename" -__nnictl_update_concurrency_cmds="--value" -__nnictl_update_duration_cmds="--value" -__nnictl_trial_cmds="ls kill" -__nnictl_trial_kill_cmds="--trialid" -__nnictl_webui_cmds="start stop url" -__nnictl_webui_start_cmds="--port" -__nnictl_experiment_cmds="show" -__nnictl_config_cmds="show" -__nnictl_rest_cmds="check" -__nnictl_log_cmds="stdout stderr" -__nnictl_log_stdout_cmds="--tail --head --path" -__nnictl_log_stderr_cmds="--tail --head --path" - -__nnictl_remain_args() -{ - ret=${!1} # ret = $__nnictl_xxx_cmds - # for arg in COMP_WORDS[:-1]: - for arg in "${COMP_WORDS[@]::${#COMP_WORDS[@]}-1}"; do - # remove previously set argument from ret - if [[ $arg == --* ]]; then - ret=${ret/$arg/} - fi - done - echo $ret -} - -_nnictl() -{ - _words_cnt=${#COMP_WORDS[@]} - - if [ $_words_cnt == 1 ]; then - # no argument input, list all commands - complete -W "$_nnictl_cmds" - elif [ $_words_cnt == 2 ]; then - # completing frst argument from __nnictl_cmds - COMPREPLY=($(compgen -W "$__nnictl_cmds" -- "${COMP_WORDS[1]}")) - elif [ $_words_cnt == 3 ]; then - # completing second argument from __nnictl_${FirstArg}_cmds - args=__nnictl_${COMP_WORDS[1]}_cmds - COMPREPLY=($(compgen -W "${!args}" -- "${COMP_WORDS[2]}")) - elif [[ ${COMP_WORDS[-2]} != -* ]]; then - # last argument does not starts with "-", so this one is likely to be "--xxx" - if [[ ${COMP_WORDS[2]} == -* ]]; then - # second argument starts with "-", use __nnictl_${FirstArg}_cmds - args=__nnictl_${COMP_WORDS[1]}_cmds - else - # second argument is a word, use __nnictl_${FirstArg}_{SecondArg}_cmds - args=__nnictl_${COMP_WORDS[1]}_${COMP_WORDS[2]}_cmds - fi - # remove already set arguments from candidates - remain_args=$(__nnictl_remain_args ${args}) - COMPREPLY=($(compgen -W "$remain_args" -- "${COMP_WORDS[-1]}")) - fi -} - -complete -F _nnictl nnictl diff --git a/tools/nnicmd/common_utils.py b/tools/nnicmd/common_utils.py index bb2a4f236c..05afed1e28 100644 --- a/tools/nnicmd/common_utils.py +++ b/tools/nnicmd/common_utils.py @@ -21,7 +21,7 @@ import json import yaml import psutil -from .constants import ERROR_INFO, NORMAL_INFO +from .constants import ERROR_INFO, NORMAL_INFO, WARNING_INFO, COLOR_RED_FORMAT, COLOR_YELLOW_FORMAT def get_yml_content(file_path): '''Load yaml file content''' @@ -43,12 +43,16 @@ def get_json_content(file_path): def print_error(content): '''Print error information to screen''' - print(ERROR_INFO % content) + print(COLOR_RED_FORMAT % (ERROR_INFO % content)) def print_normal(content): '''Print error information to screen''' print(NORMAL_INFO % content) +def print_warning(content): + '''Print warning information to screen''' + print(COLOR_YELLOW_FORMAT % (WARNING_INFO % content)) + def detect_process(pid): '''Detect if a process is alive''' try: diff --git a/tools/nnicmd/config_schema.py b/tools/nnicmd/config_schema.py index d6299256bd..9eff5bfa66 100644 --- a/tools/nnicmd/config_schema.py +++ b/tools/nnicmd/config_schema.py @@ -31,7 +31,7 @@ Optional('searchSpacePath'): os.path.exists, 'useAnnotation': bool, 'tuner': Or({ - 'builtinTunerName': Or('TPE', 'Random', 'Anneal', 'Evolution', 'SMAC'), + 'builtinTunerName': Or('TPE', 'Random', 'Anneal', 'Evolution', 'SMAC', 'BatchTuner'), 'classArgs': { 'optimize_mode': Or('maximize', 'minimize'), Optional('speed'): int diff --git a/tools/nnicmd/constants.py b/tools/nnicmd/constants.py index b03b1bdcbe..14467f02ed 100644 --- a/tools/nnicmd/constants.py +++ b/tools/nnicmd/constants.py @@ -34,22 +34,37 @@ STDERR_FULL_PATH = os.path.join(LOG_DIR, 'stderr') -ERROR_INFO = 'Error: %s' +ERROR_INFO = 'ERROR: %s' -NORMAL_INFO = 'Info: %s' +NORMAL_INFO = 'INFO: %s' -WARNING_INFO = 'Waining: %s' +WARNING_INFO = 'WARNING: %s' -EXPERIMENT_SUCCESS_INFO = 'Start experiment success! The experiment id is %s, and the restful server post is %s.\n' \ - 'You can use these commands to get more information about this experiment:\n' \ +EXPERIMENT_SUCCESS_INFO = '\033[1;32;32mSuccessfully started experiment!\n\033[0m' \ + '-----------------------------------------------------------------------\n' \ + 'The experiment id is %s\n'\ + 'The restful server post is %s\n' \ + 'The Web UI urls are: %s\n' \ + '-----------------------------------------------------------------------\n\n' \ + 'You can use these commands to get more information about the experiment\n' \ + '-----------------------------------------------------------------------\n' \ ' commands description\n' \ '1. nnictl experiment show show the information of experiments\n' \ '2. nnictl trial ls list all of trial jobs\n' \ - '3. nnictl stop stop a experiment\n' \ - '4. nnictl trial kill kill a trial job by id\n' \ - '5. nnictl --help get help information about nnictl\n' \ - '6. nnictl webui url get the url of web ui' + '3. nnictl log stderr show stderr log content\n' \ + '4. nnictl log stdout show stdout log content\n' \ + '5. nnictl stop stop a experiment\n' \ + '6. nnictl trial kill kill a trial job by id\n' \ + '7. nnictl webui url get the url of web ui\n' \ + '8. nnictl --help get help information about nnictl\n' \ + '-----------------------------------------------------------------------\n' \ PACKAGE_REQUIREMENTS = { 'SMAC': 'smac_tuner' } + +COLOR_RED_FORMAT = '\033[1;31;31m%s\033[0m' + +COLOR_GREEN_FORMAT = '\033[1;32;32m%s\033[0m' + +COLOR_YELLOW_FORMAT = '\033[1;33;33m%s\033[0m' \ No newline at end of file diff --git a/tools/nnicmd/launcher.py b/tools/nnicmd/launcher.py index 6570a75eee..b223551bea 100644 --- a/tools/nnicmd/launcher.py +++ b/tools/nnicmd/launcher.py @@ -30,13 +30,13 @@ from .rest_utils import rest_put, rest_post, check_rest_server, check_rest_server_quick, check_response from .url_utils import cluster_metadata_url, experiment_url from .config_utils import Config -from .common_utils import get_yml_content, get_json_content, print_error, print_normal, detect_process -from .constants import EXPERIMENT_SUCCESS_INFO, STDOUT_FULL_PATH, STDERR_FULL_PATH, LOG_DIR, REST_PORT, ERROR_INFO, NORMAL_INFO +from .common_utils import get_yml_content, get_json_content, print_error, print_normal, print_warning, detect_process +from .constants import * from .webui_utils import start_web_ui, check_web_ui def start_rest_server(port, platform, mode, experiment_id=None): '''Run nni manager process''' - print_normal('Checking experiment...') + print_normal('Checking environment...') nni_config = Config() rest_port = nni_config.get_config('restServerPort') running, _ = check_rest_server_quick(rest_port) @@ -191,6 +191,8 @@ def launch_experiment(args, experiment_config, mode, webuiport, experiment_id=No # Deal with annotation if experiment_config.get('useAnnotation'): path = os.path.join(tempfile.gettempdir(), 'nni', 'annotation') + if not os.path.isdir(path): + os.makedirs(path) path = tempfile.mkdtemp(dir=path) code_dir = expand_annotations(experiment_config['trial']['codeDir'], path) experiment_config['trial']['codeDir'] = code_dir @@ -204,10 +206,9 @@ def launch_experiment(args, experiment_config, mode, webuiport, experiment_id=No experiment_config['searchSpace'] = json.dumps('') # check rest server - print_normal('Checking restful server...') running, _ = check_rest_server(REST_PORT) if running: - print_normal('Restful server start success!') + print_normal('Successfully started Restful server!') else: print_error('Restful server start failed!') try: @@ -236,7 +237,7 @@ def launch_experiment(args, experiment_config, mode, webuiport, experiment_id=No if experiment_config['trainingServicePlatform'] == 'local': print_normal('Setting local config...') if set_local_config(experiment_config, REST_PORT): - print_normal('Success!') + print_normal('Successfully set local config!') else: print_error('Failed!') try: @@ -251,7 +252,7 @@ def launch_experiment(args, experiment_config, mode, webuiport, experiment_id=No print_normal('Setting pai config...') config_result, err_msg = set_pai_config(experiment_config, REST_PORT) if config_result: - print_normal('Success!') + print_normal('Successfully set pai config!') else: if err_msg: print_error('Failed! Error is: {}'.format(err_msg)) @@ -259,8 +260,19 @@ def launch_experiment(args, experiment_config, mode, webuiport, experiment_id=No cmds = ['pkill', '-P', str(rest_process.pid)] call(cmds) except Exception: - raise Exception(ERROR_INFO % 'Rest server stopped!') + raise Exception(ERROR_INFO % 'Restful server stopped!') exit(0) + + #start webui + if check_web_ui(): + print_warning('{0} {1}'.format(' '.join(nni_config.get_config('webuiUrl')),'is being used, please stop it first!')) + print_normal('You can use \'nnictl webui stop\' to stop old Web UI process...') + else: + print_normal('Starting Web UI...') + webui_process = start_web_ui(webuiport) + if webui_process: + nni_config.set_config('webuiPid', webui_process.pid) + print_normal('Successfully started Web UI!') # start a new experiment print_normal('Starting experiment...') @@ -274,25 +286,12 @@ def launch_experiment(args, experiment_config, mode, webuiport, experiment_id=No try: cmds = ['pkill', '-P', str(rest_process.pid)] call(cmds) + cmds = ['pkill', '-P', str(webui_process.pid)] + call(cmds) except Exception: - raise Exception(ERROR_INFO % 'Rest server stopped!') + raise Exception(ERROR_INFO % 'Restful server stopped!') exit(0) - - #start webui - print_normal('Checking web ui...') - if check_web_ui(): - print_error('{0} {1}'.format(' '.join(nni_config.get_config('webuiUrl')),'is being used, please stop it first!')) - print_normal('You can use \'nnictl webui stop\' to stop old web ui process...') - else: - print_normal('Starting web ui...') - webui_process = start_web_ui(webuiport) - if webui_process: - nni_config.set_config('webuiPid', webui_process.pid) - print_normal('Starting web ui success!') - print_normal('{0} {1}'.format('Web UI url:', ' '.join(nni_config.get_config('webuiUrl')))) - - print_normal(EXPERIMENT_SUCCESS_INFO % (experiment_id, REST_PORT)) - + print_normal(EXPERIMENT_SUCCESS_INFO % (experiment_id, REST_PORT, ' '.join(nni_config.get_config('webuiUrl')))) def resume_experiment(args): '''resume an experiment''' diff --git a/tools/nnicmd/nnictl_utils.py b/tools/nnicmd/nnictl_utils.py index 2b7628ec67..d071741f5b 100644 --- a/tools/nnicmd/nnictl_utils.py +++ b/tools/nnicmd/nnictl_utils.py @@ -64,17 +64,20 @@ def stop_experiment(args): stop_web_ui() return running, _ = check_rest_server_quick(rest_port) + stop_rest_result = True if running: response = rest_delete(experiment_url(rest_port), 20) if not response or not check_response(response): print_error('Stop experiment failed!') + stop_rest_result = False #sleep to wait rest handler done time.sleep(3) rest_pid = nni_config.get_config('restServerPid') cmds = ['pkill', '-P', str(rest_pid)] call(cmds) stop_web_ui() - print_normal('Stop experiment success!') + if stop_rest_result: + print_normal('Stop experiment success!') def trial_ls(args): '''List trial''' diff --git a/tools/trial_tool/trial_keeper.py b/tools/trial_tool/trial_keeper.py index f53e5d6774..675a0566ac 100644 --- a/tools/trial_tool/trial_keeper.py +++ b/tools/trial_tool/trial_keeper.py @@ -45,7 +45,6 @@ def main_loop(args): # Notice: We don't appoint env, which means subprocess wil inherit current environment and that is expected behavior process = Popen(args.trial_command, shell = True, stdout = stdout_file, stderr = stderr_file) print('Subprocess pid is {}'.format(process.pid)) - print('Current cwd is {}'.format(os.getcwd())) while True: retCode = process.poll() ## Read experiment metrics, to avoid missing metrics @@ -55,15 +54,15 @@ def main_loop(args): print('subprocess terminated. Exit code is {}. Quit'.format(retCode)) #copy local directory to hdfs nni_local_output_dir = os.environ['NNI_OUTPUT_DIR'] - hdfs_client = HdfsClient(hosts='{0}:{1}'.format(args.pai_hdfs_host, '50070'), user_name=args.pai_user_name) - print(nni_local_output_dir, args.pai_hdfs_output_dir) + hdfs_client = HdfsClient(hosts='{0}:{1}'.format(args.pai_hdfs_host, '50070'), user_name=args.pai_user_name, timeout=5) try: if copyDirectoryToHdfs(nni_local_output_dir, args.pai_hdfs_output_dir, hdfs_client): - print('copy directory success!') + print('copy directory from {0} to {1} success!'.format(nni_local_output_dir, args.pai_hdfs_output_dir)) else: - print('copy directory failed!') + print('copy directory from {0} to {1} failed!'.format(nni_local_output_dir, args.pai_hdfs_output_dir)) except Exception as exception: - print(exception) + print('HDFS copy directory got exception') + raise exception ## Exit as the retCode of subprocess(trial) exit(retCode) @@ -91,7 +90,10 @@ def trial_keeper_help_info(*args): try: main_loop(args) - except: - print('Exiting by user request') + except SystemExit as se: + print('NNI trial keeper exit with code {}'.format(se.code)) + sys.exit(se.code) + except Exception as e: + print('Exit trial keeper with code 1 because Exception: {} is catched'.format(str(e))) sys.exit(1) From cb988de0fca8d2283d1f95ff6b4890df4036e168 Mon Sep 17 00:00:00 2001 From: Chengmin Chi Date: Wed, 10 Oct 2018 15:03:58 +0800 Subject: [PATCH 2/2] getMetricData supports multiple trial jobs --- src/nni_manager/common/datastore.ts | 2 +- src/nni_manager/common/manager.ts | 2 +- src/nni_manager/core/nniDataStore.ts | 2 +- src/nni_manager/core/nnimanager.ts | 2 +- src/nni_manager/rest_server/restHandler.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/nni_manager/common/datastore.ts b/src/nni_manager/common/datastore.ts index d3cca0479b..43b0532020 100644 --- a/src/nni_manager/common/datastore.ts +++ b/src/nni_manager/common/datastore.ts @@ -78,7 +78,7 @@ abstract class DataStore { public abstract listTrialJobs(status?: TrialJobStatus): Promise; public abstract getTrialJob(trialJobId: string): Promise; public abstract storeMetricData(trialJobId: string, data: string): Promise; - public abstract getMetricData(trialJobId: string, metricType: MetricType): Promise; + public abstract getMetricData(trialJobId?: string, metricType?: MetricType): Promise; } abstract class Database { diff --git a/src/nni_manager/common/manager.ts b/src/nni_manager/common/manager.ts index 1d02a1775d..12b5ebb754 100644 --- a/src/nni_manager/common/manager.ts +++ b/src/nni_manager/common/manager.ts @@ -90,7 +90,7 @@ abstract class Manager { public abstract setClusterMetadata(key: string, value: string): Promise; public abstract getClusterMetadata(key: string): Promise; - public abstract getMetricData(trialJobId: string, metricType: MetricType): Promise; + public abstract getMetricData(trialJobId?: string, metricType?: MetricType): Promise; public abstract getTrialJobStatistics(): Promise; public abstract getStatus(): NNIManagerStatus; } diff --git a/src/nni_manager/core/nniDataStore.ts b/src/nni_manager/core/nniDataStore.ts index 81afeb3af3..c112340f64 100644 --- a/src/nni_manager/core/nniDataStore.ts +++ b/src/nni_manager/core/nniDataStore.ts @@ -138,7 +138,7 @@ class NNIDataStore implements DataStore { })); } - public getMetricData(trialJobId: string, metricType: MetricType): Promise { + public getMetricData(trialJobId?: string, metricType?: MetricType): Promise { return this.db.queryMetricData(trialJobId, metricType); } diff --git a/src/nni_manager/core/nnimanager.ts b/src/nni_manager/core/nnimanager.ts index c84688c038..32cd541fd4 100644 --- a/src/nni_manager/core/nnimanager.ts +++ b/src/nni_manager/core/nnimanager.ts @@ -204,7 +204,7 @@ class NNIManager implements Manager { } } - public async getMetricData(trialJobId: string, metricType: MetricType): Promise { + public async getMetricData(trialJobId?: string, metricType?: MetricType): Promise { return this.dataStore.getMetricData(trialJobId, metricType); } diff --git a/src/nni_manager/rest_server/restHandler.ts b/src/nni_manager/rest_server/restHandler.ts index 89ede1d51f..cd90e149ff 100644 --- a/src/nni_manager/rest_server/restHandler.ts +++ b/src/nni_manager/rest_server/restHandler.ts @@ -245,7 +245,7 @@ class NNIRestHandler { } private getMetricData(router: Router): void { - router.get('/metric-data/:job_id', async (req: Request, res: Response) => { + router.get('/metric-data/:job_id*?', async (req: Request, res: Response) => { this.nniManager.getMetricData(req.params.job_id, req.query.type).then((metricsData: MetricDataRecord[]) => { res.send(metricsData); }).catch((err: Error) => {