From 82830e984aefb048341389e67f3d54ad39c8350d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:03:55 +0800 Subject: [PATCH 0001/1573] Update Crowdin configuration file --- crowdin.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 0000000000..90d82530f1 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,3 @@ +files: + - source: /**/*.md + translation: /%locale_with_underscore%/%original_path%/%original_file_name% From 81c6ea88c043d2813ddcbb2c9a980daaba95bf7d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:20 +0800 Subject: [PATCH 0002/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 zh_CN/docs/AnnotationSpec.md diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md new file mode 100644 index 0000000000..3c087665cc --- /dev/null +++ b/zh_CN/docs/AnnotationSpec.md @@ -0,0 +1,57 @@ +# NNI Annotation + +For good user experience and reduce user effort, we need to design a good annotation grammar. + +If users use NNI system, they only need to: + +1. Use nni.get_next_parameter() to retrieve hyper parameters from Tuner, before using other annotation, use following annotation at the begining of trial code: '''@nni.get_next_parameter()''' + +2. Annotation variable in code as: + + '''@nni.variable(nni.choice(2,3,5,7),name=self.conv_size)''' + +3. Annotation intermediate in code as: + + '''@nni.report_intermediate_result(test_acc)''' + +4. Annotation output in code as: + + '''@nni.report_final_result(test_acc)''' + +5. Annotation `function_choice` in code as: + + '''@nni.function_choice(max_pool(h_conv1, self.pool_size),avg_pool(h_conv1, self.pool_size),name=max_pool)''' + +In this way, they can easily implement automatic tuning on NNI. + +For `@nni.variable`, `nni.choice` is the type of search space and there are 10 types to express your search space as follows: + +1. `@nni.variable(nni.choice(option1,option2,...,optionN),name=variable)` + Which means the variable value is one of the options, which should be a list The elements of options can themselves be stochastic expressions + +2. `@nni.variable(nni.randint(upper),name=variable)` + Which means the variable value is a random integer in the range [0, upper). + +3. `@nni.variable(nni.uniform(low, high),name=variable)` + Which means the variable value is a value uniformly between low and high. + +4. `@nni.variable(nni.quniform(low, high, q),name=variable)` + Which means the variable value is a value like round(uniform(low, high) / q) * q + +5. `@nni.variable(nni.loguniform(low, high),name=variable)` + Which means the variable value is a value drawn according to exp(uniform(low, high)) so that the logarithm of the return value is uniformly distributed. + +6. `@nni.variable(nni.qloguniform(low, high, q),name=variable)` + Which means the variable value is a value like round(exp(uniform(low, high)) / q) * q + +7. `@nni.variable(nni.normal(label, mu, sigma),name=variable)` + Which means the variable value is a real value that's normally-distributed with mean mu and standard deviation sigma. + +8. `@nni.variable(nni.qnormal(label, mu, sigma, q),name=variable)` + Which means the variable value is a value like round(normal(mu, sigma) / q) * q + +9. `@nni.variable(nni.lognormal(label, mu, sigma),name=variable)` + Which means the variable value is a value drawn according to exp(normal(mu, sigma)) + + 10. `@nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)` + Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file From 2ef0a25bb9ba730daee0decd788cee084fda9453 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:21 +0800 Subject: [PATCH 0003/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/README.md | 281 ++++++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 zh_CN/examples/trials/README.md diff --git a/zh_CN/examples/trials/README.md b/zh_CN/examples/trials/README.md new file mode 100644 index 0000000000..70065a8c13 --- /dev/null +++ b/zh_CN/examples/trials/README.md @@ -0,0 +1,281 @@ +# How to write a Trial running on NNI? + +*Trial receive the hyper-parameter/architecture configure from Tuner, and send intermediate result to Assessor and final result to Tuner.* + +So when user want to write a Trial running on NNI, she/he should: + +**1)Have an original Trial could run**, + +Trial's code could be any machine learning code that could run in local. Here we use ```mnist-keras.py``` as example: + +```python +import argparse +import logging +import keras +import numpy as np +from keras import backend as K +from keras.datasets import mnist +from keras.layers import Conv2D, Dense, Flatten, MaxPooling2D +from keras.models import Sequential + +K.set_image_data_format('channels_last') + +H, W = 28, 28 +NUM_CLASSES = 10 + +def create_mnist_model(hyper_params, input_shape=(H, W, 1), num_classes=NUM_CLASSES): + layers = [ + Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape), + Conv2D(64, (3, 3), activation='relu'), + MaxPooling2D(pool_size=(2, 2)), + Flatten(), + Dense(100, activation='relu'), + Dense(num_classes, activation='softmax') + ] + + model = Sequential(layers) + + if hyper_params['optimizer'] == 'Adam': + optimizer = keras.optimizers.Adam(lr=hyper_params['learning_rate']) + else: + optimizer = keras.optimizers.SGD(lr=hyper_params['learning_rate'], momentum=0.9) + model.compile(loss=keras.losses.categorical_crossentropy, optimizer=optimizer, metrics=['accuracy']) + + return model + +def load_mnist_data(args): + (x_train, y_train), (x_test, y_test) = mnist.load_data() + + x_train = (np.expand_dims(x_train, -1).astype(np.float) / 255.)[:args.num_train] + x_test = (np.expand_dims(x_test, -1).astype(np.float) / 255.)[:args.num_test] + y_train = keras.utils.to_categorical(y_train, NUM_CLASSES)[:args.num_train] + y_test = keras.utils.to_categorical(y_test, NUM_CLASSES)[:args.num_test] + + return x_train, y_train, x_test, y_test + +class SendMetrics(keras.callbacks.Callback): + def on_epoch_end(self, epoch, logs={}): + pass + +def train(args, params): + x_train, y_train, x_test, y_test = load_mnist_data(args) + model = create_mnist_model(params) + + model.fit(x_train, y_train, batch_size=args.batch_size, epochs=args.epochs, verbose=1, + validation_data=(x_test, y_test), callbacks=[SendMetrics()]) + + _, acc = model.evaluate(x_test, y_test, verbose=0) + +def generate_default_params(): + return { + 'optimizer': 'Adam', + 'learning_rate': 0.001 + } + +if __name__ == '__main__': + PARSER = argparse.ArgumentParser() + PARSER.add_argument("--batch_size", type=int, default=200, help="batch size", required=False) + PARSER.add_argument("--epochs", type=int, default=10, help="Train epochs", required=False) + PARSER.add_argument("--num_train", type=int, default=1000, help="Number of train samples to be used, maximum 60000", required=False) + PARSER.add_argument("--num_test", type=int, default=1000, help="Number of test samples to be used, maximum 10000", required=False) + + ARGS, UNKNOWN = PARSER.parse_known_args() + PARAMS = generate_default_params() + train(ARGS, PARAMS) +``` + +**2)Get configure from Tuner** + +User import ```nni``` and use ```nni.get_next_parameter()``` to receive configure. Please noted **10**, **24** and **25** line in the following code. + +```python +import argparse +import logging +import keras +import numpy as np +from keras import backend as K +from keras.datasets import mnist +from keras.layers import Conv2D, Dense, Flatten, MaxPooling2D +from keras.models import Sequential + +import nni + +... + +if __name__ == '__main__': + PARSER = argparse.ArgumentParser() + PARSER.add_argument("--batch_size", type=int, default=200, help="batch size", required=False) + PARSER.add_argument("--epochs", type=int, default=10, help="Train epochs", required=False) + PARSER.add_argument("--num_train", type=int, default=1000, help="Number of train samples to be used, maximum 60000", required=False) + PARSER.add_argument("--num_test", type=int, default=1000, help="Number of test samples to be used, maximum 10000", required=False) + + ARGS, UNKNOWN = PARSER.parse_known_args() + + PARAMS = generate_default_params() + RECEIVED_PARAMS = nni.get_next_parameter() + PARAMS.update(RECEIVED_PARAMS) + train(ARGS, PARAMS) +``` + +**3) Send intermediate result** + +Use ```nni.report_intermediate_result``` to send intermediate result to Assessor. Please noted **5** line in the following code. + +```python +... + +class SendMetrics(keras.callbacks.Callback): + def on_epoch_end(self, epoch, logs={}): + nni.report_intermediate_result(logs) + +def train(args, params): + x_train, y_train, x_test, y_test = load_mnist_data(args) + model = create_mnist_model(params) + + model.fit(x_train, y_train, batch_size=args.batch_size, epochs=args.epochs, verbose=1, + validation_data=(x_test, y_test), callbacks=[SendMetrics()]) + + _, acc = model.evaluate(x_test, y_test, verbose=0) + +... +``` + +**4) Send final result** + +Use ```nni.report_final_result``` to send final result to Trial. Please noted **15** line in the following code. + +```python +... + +class SendMetrics(keras.callbacks.Callback): + def on_epoch_end(self, epoch, logs={}): + nni.report_intermediate_result(logs) + +def train(args, params): + x_train, y_train, x_test, y_test = load_mnist_data(args) + model = create_mnist_model(params) + + model.fit(x_train, y_train, batch_size=args.batch_size, epochs=args.epochs, verbose=1, + validation_data=(x_test, y_test), callbacks=[SendMetrics()]) + + _, acc = model.evaluate(x_test, y_test, verbose=0) + nni.report_final_result(acc) +... +``` + +Here is the complete example: + +```python +import argparse +import logging + +import keras +import numpy as np +from keras import backend as K +from keras.datasets import mnist +from keras.layers import Conv2D, Dense, Flatten, MaxPooling2D +from keras.models import Sequential + +import nni + +LOG = logging.getLogger('mnist_keras') +K.set_image_data_format('channels_last') + +H, W = 28, 28 +NUM_CLASSES = 10 + +def create_mnist_model(hyper_params, input_shape=(H, W, 1), num_classes=NUM_CLASSES): + ''' + Create simple convolutional model + ''' + layers = [ + Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape), + Conv2D(64, (3, 3), activation='relu'), + MaxPooling2D(pool_size=(2, 2)), + Flatten(), + Dense(100, activation='relu'), + Dense(num_classes, activation='softmax') + ] + + model = Sequential(layers) + + if hyper_params['optimizer'] == 'Adam': + optimizer = keras.optimizers.Adam(lr=hyper_params['learning_rate']) + else: + optimizer = keras.optimizers.SGD(lr=hyper_params['learning_rate'], momentum=0.9) + model.compile(loss=keras.losses.categorical_crossentropy, optimizer=optimizer, metrics=['accuracy']) + + return model + +def load_mnist_data(args): + ''' + Load MNIST dataset + ''' + (x_train, y_train), (x_test, y_test) = mnist.load_data() + + x_train = (np.expand_dims(x_train, -1).astype(np.float) / 255.)[:args.num_train] + x_test = (np.expand_dims(x_test, -1).astype(np.float) / 255.)[:args.num_test] + y_train = keras.utils.to_categorical(y_train, NUM_CLASSES)[:args.num_train] + y_test = keras.utils.to_categorical(y_test, NUM_CLASSES)[:args.num_test] + + LOG.debug('x_train shape: %s', (x_train.shape,)) + LOG.debug('x_test shape: %s', (x_test.shape,)) + + return x_train, y_train, x_test, y_test + +class SendMetrics(keras.callbacks.Callback): + ''' + Keras callback to send metrics to NNI framework + ''' + def on_epoch_end(self, epoch, logs={}): + ''' + Run on end of each epoch + ''' + LOG.debug(logs) + nni.report_intermediate_result(logs) + +def train(args, params): + ''' + Train model + ''' + x_train, y_train, x_test, y_test = load_mnist_data(args) + model = create_mnist_model(params) + + model.fit(x_train, y_train, batch_size=args.batch_size, epochs=args.epochs, verbose=1, + validation_data=(x_test, y_test), callbacks=[SendMetrics()]) + + _, acc = model.evaluate(x_test, y_test, verbose=0) + LOG.debug('Final result is: %d', acc) + nni.report_final_result(acc) + +def generate_default_params(): + ''' + Generate default hyper parameters + ''' + return { + 'optimizer': 'Adam', + 'learning_rate': 0.001 + } + +if __name__ == '__main__': + PARSER = argparse.ArgumentParser() + PARSER.add_argument("--batch_size", type=int, default=200, help="batch size", required=False) + PARSER.add_argument("--epochs", type=int, default=10, help="Train epochs", required=False) + PARSER.add_argument("--num_train", type=int, default=1000, help="Number of train samples to be used, maximum 60000", required=False) + PARSER.add_argument("--num_test", type=int, default=1000, help="Number of test samples to be used, maximum 10000", required=False) + + ARGS, UNKNOWN = PARSER.parse_known_args() + + try: + # get parameters from tuner + RECEIVED_PARAMS = nni.get_next_parameter() + LOG.debug(RECEIVED_PARAMS) + PARAMS = generate_default_params() + PARAMS.update(RECEIVED_PARAMS) + # train + train(ARGS, PARAMS) + except Exception as e: + LOG.exception(e) + raise + +``` \ No newline at end of file From 456259fca08f7884f97ed525cb9bd54bc3e29811 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:22 +0800 Subject: [PATCH 0004/1573] New translations README.md (Chinese Simplified) --- zh_CN/deployment/docker/README.md | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 zh_CN/deployment/docker/README.md diff --git a/zh_CN/deployment/docker/README.md b/zh_CN/deployment/docker/README.md new file mode 100644 index 0000000000..bc05e3c0c1 --- /dev/null +++ b/zh_CN/deployment/docker/README.md @@ -0,0 +1,46 @@ +# Dockerfile + +## 1.Description + +This is the Dockerfile of nni project. It includes serveral popular deep learning frameworks and NNI. It is tested on `Ubuntu 16.04 LTS`: + + CUDA 9.0, CuDNN 7.0 + numpy 1.14.3,scipy 1.1.0 + TensorFlow 1.5.0 + Keras 2.1.6 + PyTorch 0.4.1 + scikit-learn 0.20.0 + NNI v0.3 + + +You can take this Dockerfile as a reference for your own customized Dockerfile. + +## 2.How to build and run + +**Use the following command from `nni/deployment/docker` to build docker image** + + docker build -t nni/nni . + + +**Run the docker image** + +* If does not use GPU in docker container, simply run the following command + + docker run -it nni/nni + + +* If use GPU in docker container, make sure you have installed [NVIDIA Container Runtime](https://github.com/NVIDIA/nvidia-docker), then run the following command + + nvidia-docker run -it nni/nni + + +or + + docker run --runtime=nvidia -it nni/nni + + +## 3.Directly retrieve the docker image + +Use the following command to retrieve the NNI docker image from Docker Hub + + docker pull msranni/nni:latest \ No newline at end of file From fa6ca17ae6097cf033072bdd936b952130a281e9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:23 +0800 Subject: [PATCH 0005/1573] New translations README.md (Chinese Simplified) --- zh_CN/deployment/pypi/README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 zh_CN/deployment/pypi/README.md diff --git a/zh_CN/deployment/pypi/README.md b/zh_CN/deployment/pypi/README.md new file mode 100644 index 0000000000..4b309c65ac --- /dev/null +++ b/zh_CN/deployment/pypi/README.md @@ -0,0 +1,32 @@ +# Python Package Index (PyPI) for NNI + +## 1.Description + +This is the PyPI build and upload tool for NNI project. + +## 2.Prepare environment + +Before build and upload NNI package, make sure the below OS and tools are available. + + Ubuntu 16.04 LTS + make + wget + Python >= 3.5 + Pip + Node.js + Yarn + + +## 2.How to build + +```bash +make +``` + +## 3.How to upload + +```bash +make upload +``` + +You may need to input the account and password of https://pypi.org during this process. \ No newline at end of file From 366f21fd9ff1973ef4af9496277a3327da26b5f3 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:24 +0800 Subject: [PATCH 0006/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/assessors/README.md | 61 ++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 zh_CN/examples/assessors/README.md diff --git a/zh_CN/examples/assessors/README.md b/zh_CN/examples/assessors/README.md new file mode 100644 index 0000000000..1a2903fab5 --- /dev/null +++ b/zh_CN/examples/assessors/README.md @@ -0,0 +1,61 @@ +# Define your own Assessor + +*Assessor receive intermediate result from Trial and decide whether the Trial should be killed. Once the Trial experiment meets the early stop conditions, the assessor will kill the Trial.* + +So, if users want to implement a customized Assessor, they only need to: + +**1) Inherit an assessor of a base Assessor class** + +```python +from nni.assessor import Assessor + +class CustomizedAssessor(Assessor): + def __init__(self, ...): + ... +``` + +**2) Implement assess trial function** + +```python +from nni.assessor import Assessor, AssessResult + +class CustomizedAssessor(Assessor): + def __init__(self, ...): + ... + + def assess_trial(self, trial_history): + """ + Determines whether a trial should be killed. Must override. + trial_history: a list of intermediate result objects. + Returns AssessResult.Good or AssessResult.Bad. + """ + # you code implement here. + ... +``` + +**3) Write a script to run Assessor** + +```python +import argparse + +import CustomizedAssesor + +def main(): + parser = argparse.ArgumentParser(description='parse command line parameters.') + # parse your assessor arg here. + ... + FLAGS, unparsed = parser.parse_known_args() + + tuner = CustomizedAssessor(...) + tuner.run() + +main() +``` + +Please noted in 2). The object ```trial_history``` are exact the object that Trial send to Assesor by using SDK ```report_intermediate_result``` function. + +Also, user could override the ```run``` function in Assessor to control the process logic. + +More detail example you could see: + +> - [Base-Assessor](https://msrasrg.visualstudio.com/NeuralNetworkIntelligenceOpenSource/_git/Default?_a=contents&path=%2Fsrc%2Fsdk%2Fpynni%2Fnni%2Fassessor.py&version=GBadd_readme) \ No newline at end of file From 7315107c57f0606a14f7f4a136add8bee2e0976f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:25 +0800 Subject: [PATCH 0007/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/cifar10_pytorch/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 zh_CN/examples/trials/cifar10_pytorch/README.md diff --git a/zh_CN/examples/trials/cifar10_pytorch/README.md b/zh_CN/examples/trials/cifar10_pytorch/README.md new file mode 100644 index 0000000000..e5b6c87ec2 --- /dev/null +++ b/zh_CN/examples/trials/cifar10_pytorch/README.md @@ -0,0 +1,3 @@ +This example requires pytorch. pytorch install package should be chosen based on python version and cuda version. + +Here is an example of the environment python==3.5 and cuda == 8.0, then using the following commands to install pytorch: python3 -m pip install http://download.pytorch.org/whl/cu80/torch-0.4.1-cp35-cp35m-linux_x86_64.whl python3 -m pip install torchvision \ No newline at end of file From 25f7dd8e7d6989ec765567635e74a9eeb753f026 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:26 +0800 Subject: [PATCH 0008/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 244 +++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 zh_CN/examples/trials/ga_squad/README.md diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md new file mode 100644 index 0000000000..d6fd21162c --- /dev/null +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -0,0 +1,244 @@ +# 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 implementation 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 implementation 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 correspond to attention, self-attention, RNN, input and output layer respectively. +* `size` is the length of the output. "x", "y" correspond 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 From c7ed398b05ccd52c6c55d6f42644bdd102d9bb28 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:27 +0800 Subject: [PATCH 0009/1573] New translations README.md (Chinese Simplified) --- .../examples/trials/kaggle-tgs-salt/README.md | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 zh_CN/examples/trials/kaggle-tgs-salt/README.md diff --git a/zh_CN/examples/trials/kaggle-tgs-salt/README.md b/zh_CN/examples/trials/kaggle-tgs-salt/README.md new file mode 100644 index 0000000000..835bc9329b --- /dev/null +++ b/zh_CN/examples/trials/kaggle-tgs-salt/README.md @@ -0,0 +1,50 @@ +## 33rd place solution code for Kaggle [TGS Salt Identification Chanllenge](https://www.kaggle.com/c/tgs-salt-identification-challenge) + +This example shows how to enable AutoML for competition code by running it on NNI without any code change. To run this code on NNI, firstly you need to run it standalone, then configure the config.yml and: + + nnictl create --config config.yml + + +This code can still run standalone, the code is for reference, it requires at least one week effort to reproduce the competition result. + +[Solution summary](https://www.kaggle.com/c/tgs-salt-identification-challenge/discussion/69593) + +Preparation: + +Download competition data, run preprocess.py to prepare training data. + +Stage 1: + +Train fold 0-3 for 100 epochs, for each fold, train 3 models: + + python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV4 + python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV5 --layers 50 + python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV6 + + +Stage 2: + +Fine tune stage 1 models for 300 epochs with cosine annealing lr scheduler: + + python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4 + + +Stage 3: + +Fine tune Stage 2 models with depths channel: + + python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4 --depths + + +Stage 4: + +Make prediction for each model, then ensemble the result to generate peasdo labels. + +Stage 5: + +Fine tune stage 3 models with pseudo labels + + python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4 --depths --pseudo + + +Stage 6: Ensemble all stage 3 and stage 5 models. \ No newline at end of file From 0927ca38c2202584629171479cf061c4428b71ff Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:28 +0800 Subject: [PATCH 0010/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/tuners/ga_customer_tuner/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 zh_CN/examples/tuners/ga_customer_tuner/README.md diff --git a/zh_CN/examples/tuners/ga_customer_tuner/README.md b/zh_CN/examples/tuners/ga_customer_tuner/README.md new file mode 100644 index 0000000000..95b9238278 --- /dev/null +++ b/zh_CN/examples/tuners/ga_customer_tuner/README.md @@ -0,0 +1,14 @@ +# How to use ga_customer_tuner? + +This tuner is a customized tuner which only suitable for trial whose code path is "~/nni/examples/trials/ga_squad", type `cd ~/nni/examples/trials/ga_squad` and check readme.md to get more information for ga_squad trial. + +# config + +If you want to use ga_customer_tuner in your experiment, you could set config file as following format: + + tuner: + codeDir: ~/nni/examples/tuners/ga_customer_tuner + classFileName: customer_tuner.py + className: CustomerTuner + classArgs: + optimize_mode: maximize \ No newline at end of file From 049b37579fe61a00c12b7983924c78684e889ab0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:29 +0800 Subject: [PATCH 0011/1573] New translations tutorial_2_RemoteMachineMode.md (Chinese Simplified) --- zh_CN/docs/tutorial_2_RemoteMachineMode.md | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 zh_CN/docs/tutorial_2_RemoteMachineMode.md diff --git a/zh_CN/docs/tutorial_2_RemoteMachineMode.md b/zh_CN/docs/tutorial_2_RemoteMachineMode.md new file mode 100644 index 0000000000..db8be9295d --- /dev/null +++ b/zh_CN/docs/tutorial_2_RemoteMachineMode.md @@ -0,0 +1,70 @@ +# **Tutorial: Run an experiment on multiple machines** + +NNI supports running an experiment on multiple machines through SSH channel, called `remote` mode. NNI assumes that you have access to those machines, and already setup the environment for running deep learning training code. + +e.g. Three machines and you login in with account `bob` (Note: the account is not necessarily the same on different machine): + +| IP | Username | Password | +| -------- | -------- | -------- | +| 10.1.1.1 | bob | bob123 | +| 10.1.1.2 | bob | bob123 | +| 10.1.1.3 | bob | bob123 | + +## Setup NNI environment + +Install NNI on each of your machines following the install guide [here](GetStarted.md). + +For remote machines that are used only to run trials but not the nnictl, you can just install python SDK: + +* **Install python SDK through pip** + + python3 -m pip install --user --upgrade nni-sdk + +## Run an experiment + +Install NNI on another machine which has network accessibility to those three machines above, or you can just use any machine above to run nnictl command line tool. + +We use `examples/trials/mnist-annotation` as an example here. `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` to see the detailed configuration file: + + authorName: default + experimentName: example_mnist + trialConcurrency: 1 + maxExecDuration: 1h + maxTrialNum: 10 + #choice: local, remote, pai + trainingServicePlatform: remote + #choice: true, false + useAnnotation: true + tuner: + #choice: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 + #machineList can be empty if the platform is local + machineList: + + - ip: 10.1.1.1 + username: bob + passwd: bob123 + #port can be skip if using default ssh port 22 + #port: 22 + - ip: 10.1.1.2 + username: bob + passwd: bob123 + - ip: 10.1.1.3 + username: bob + passwd: bob123 + + +Simply filling the `machineList` section and then run: + + nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml + + +to start the experiment. \ No newline at end of file From eb2d5a3813806304f25c1de29006e0e8f9d581cb Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:30 +0800 Subject: [PATCH 0012/1573] New translations README.md (Chinese Simplified) --- zh_CN/src/sdk/pynni/nni/smac_tuner/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 zh_CN/src/sdk/pynni/nni/smac_tuner/README.md diff --git a/zh_CN/src/sdk/pynni/nni/smac_tuner/README.md b/zh_CN/src/sdk/pynni/nni/smac_tuner/README.md new file mode 100644 index 0000000000..a1a8b37190 --- /dev/null +++ b/zh_CN/src/sdk/pynni/nni/smac_tuner/README.md @@ -0,0 +1 @@ +# Integration doc: SMAC on nni \ No newline at end of file From cc108eefa2be9896370931c486796786ee4ba39c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:31 +0800 Subject: [PATCH 0013/1573] New translations README.md (Chinese Simplified) --- zh_CN/src/sdk/pynni/nni/README.md | 78 +++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 zh_CN/src/sdk/pynni/nni/README.md diff --git a/zh_CN/src/sdk/pynni/nni/README.md b/zh_CN/src/sdk/pynni/nni/README.md new file mode 100644 index 0000000000..929ebb08e7 --- /dev/null +++ b/zh_CN/src/sdk/pynni/nni/README.md @@ -0,0 +1,78 @@ +# How to use Tuner that NNI supports? + +For now, NNI has supported the following tuner algorithms. Note that NNI installation only installs a subset of those algorithms, other algorithms should be installed through `nnictl package install` before you use them. For example, for SMAC the installation command is `nnictl package install --name=SMAC`. + +* TPE +* Random Search +* Anneal +* Naive Evolution +* Grid Search +* SMAC (to install through `nnictl`) +* ENAS (ongoing) +* Batch (ongoing) + + ## 1. Tuner algorithm introduction + +We will introduce some basic knowledge about tuner algorithm here. If you are an expert, you could skip this part and jump to how to use. + +**TPE** + +The Tree-structured Parzen Estimator (TPE) is a sequential model-based optimization (SMBO) approach. SMBO methods sequentially construct models to approximate the performance of hyperparameters based on historical measurements, and then subsequently choose new hyperparameters to test based on this model. + +The TPE approach models P(x|y) and P(y) where x represents hyperparameters and y the associated evaluate matric. P(x|y) is modeled by transforming the generative process of hyperparameters, replacing the distributions of the configuration prior with non-parametric densities. This optimization approach is described in detail in [Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf). + +Comparing with other algorithm, TPE could be achieve better result when the number of trial experiment is small. Also TPE support continuous or discrete hyper-parameters. From a large amount of experiments, we could found that TPE is far better than Random Search. + +**Random Search** + +In [Random Search for Hyper-Parameter Optimization](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) show that Random Search might be surprisingly simple and effective. We suggests that we could use Random Search as baseline when we have no knowledge about the prior distribution of hyper-parameters. + +**Anneal** + +**Naive Evolution** + +Naive Evolution comes from [Large-Scale Evolution of Image Classifiers](https://arxiv.org/pdf/1703.01041.pdf). Naive Evolution require more experiments to works, but it's very simple and easily to expand new features. There are some tips for user: + +1) large initial population could avoid to fall into local optimum 2) use some strategies to keep the diversity of population could be better. + +**SMAC** + +[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, in order to handle categorical parameters. The SMAC supported by nni is a wrapper on [the SMAC3 github repo](https://github.com/automl/SMAC3). + +Note that SMAC only supports a subset of the types in [search space spec](../../../../docs/SearchSpaceSpec.md), including `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`. + +**Batch** + +Batch allows users to simply provide several configurations (i.e., choices of hyper-parameters) for their trial code. After finishing all the configurations, the experiment is done. + +**Gridsearch** + +Gridsearch performs an exhaustive searching through a manually specified subset of the hyperparameter space defined in the searchspace file + +Note that the only acceptable types of search space are 'quniform', 'qloguniform' and 'choice': + +* Type 'choice' will select one of the options. Note that it can also be nested. +* Type 'quniform' will receive three values [low, high, q], where [low, high] specifies a range and 'q' specifies the number of values that will be sampled evenly. It will be sampled in a way that the first sampled value is 'low', and each of the following values is (high-low)/q larger that the value in front of it. +* Type 'qloguniform' behaves like 'quniform' except that it will first change the range to [log10(low), log10(high)] and sample and then change the sampled value back. + + ## 2. How to use the tuner algorithm in NNI? + +User only need to do one thing: choose a Tuner```config.yaml```. Here is an example: + + ``` + # config.yaml + tuner: + # choice: TPE, Random, Anneal, Evolution, ... + builtinTunerName: TPE + classArgs: + # choice: maximize, minimize + optimize_mode: maximize + ``` + + +There are two filed you need to set: + + builtinTunerName and ```optimize_mode```. + + builtinTunerName: TPE / Random / Anneal / Evolution + optimize_mode: maximize / minimize \ No newline at end of file From dfb486624c40b8e0f81d740ff28a537e65911c20 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:32 +0800 Subject: [PATCH 0014/1573] New translations README.md (Chinese Simplified) --- zh_CN/src/sdk/pynni/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 zh_CN/src/sdk/pynni/README.md diff --git a/zh_CN/src/sdk/pynni/README.md b/zh_CN/src/sdk/pynni/README.md new file mode 100644 index 0000000000..2c855fecab --- /dev/null +++ b/zh_CN/src/sdk/pynni/README.md @@ -0,0 +1,15 @@ +## Install + +Install for current user: + + pip install --user -e . + + +Install for all users: + + pip install -e . + + +## Test + + python setup.py test \ No newline at end of file From 82ec44db32adeb99c3d339ac5788c789b04dd47d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:33 +0800 Subject: [PATCH 0015/1573] New translations README.md (Chinese Simplified) --- zh_CN/src/webui/README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 zh_CN/src/webui/README.md diff --git a/zh_CN/src/webui/README.md b/zh_CN/src/webui/README.md new file mode 100644 index 0000000000..8e9a279f2e --- /dev/null +++ b/zh_CN/src/webui/README.md @@ -0,0 +1,37 @@ +# WebUI + +## View summary page + +Click the tab "Overview". + +* See the experiment parameters. +* See good performance trial. +* See search_space json. + +## View job accuracy + +Click the tab "Optimization Progress" to see the point graph of all trials. Hover every point to see its specific accuracy. + +## View hyper parameter + +Click the tab "Hyper Parameter" to see the parallel graph. + +* You can select the percentage to see top trials. +* Choose two axis to swap its positions + +## View trial status + +Click the tab "Trial Status" to see the status of the all trials. Specifically: + +* Trial duration: trial's duration in the bar graph. +* Trial detail: trial's id, trial's duration, start time, end time, status, accuracy and search space file. +* Kill: you can kill a job that status is running. +* Tensor: you can see a job in the tensorflow graph, it will link to the Tensorboard page. + +## Control + +Click the tab "Control" to add a new trial or update the search_space file and some experiment parameters. + +## Feedback + +[Known Issues](https://github.com/Microsoft/nni/issues). \ No newline at end of file From d437ced3eb4879df53b07e87a1abc79c827eff66 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:34 +0800 Subject: [PATCH 0016/1573] New translations README.md (Chinese Simplified) --- zh_CN/test/naive_test/README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 zh_CN/test/naive_test/README.md diff --git a/zh_CN/test/naive_test/README.md b/zh_CN/test/naive_test/README.md new file mode 100644 index 0000000000..1d80aa7eb4 --- /dev/null +++ b/zh_CN/test/naive_test/README.md @@ -0,0 +1,20 @@ +## Usage + +* To test before installing: `python3 run.py --preinstall` +* To test the integrity of installation: `python3 run.py` +* It will print `PASS` in green eventually if everything works well. + +## Details + +* This test case tests the communication between trials and tuner/assessor. +* The naive trials receive an integer `x` as parameter, and reports `x`, `x²`, `x³`, ... , `x¹⁰` as metrics. +* The naive tuner simply generates the sequence of natural numbers, and print received metrics to `tuner_result.txt`. +* The naive assessor kills trials when `sum(metrics) % 11 == 1`, and print killed trials to `assessor_result.txt`. +* When tuner and assessor exit with exception, they will append `ERROR` to corresponding result file. +* When the experiment is done, meaning it is successfully done in this case, `Experiment done` can be detected in the nni_manager.log file. + +## Issues + +* Private APIs are used to detect whether tuner and assessor have terminated successfully. +* The output of REST server is not tested. +* Remote machine training service is not tested. \ No newline at end of file From c326400cf3a1404f13b8bb7a24dc550721657cb4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:35 +0800 Subject: [PATCH 0017/1573] New translations README.md (Chinese Simplified) --- zh_CN/tools/nni_annotation/README.md | 55 ++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 zh_CN/tools/nni_annotation/README.md diff --git a/zh_CN/tools/nni_annotation/README.md b/zh_CN/tools/nni_annotation/README.md new file mode 100644 index 0000000000..220f44c462 --- /dev/null +++ b/zh_CN/tools/nni_annotation/README.md @@ -0,0 +1,55 @@ +# Introduction + +For good user experience and reduce user effort, we need to design a good annotation grammar. + +If users use NNI system, they only need to: + +1. Annotation variable in code as: + + '''@nni.variable(nni.choice(2,3,5,7),name=self.conv_size)''' + +2. Annotation intermediate in code as: + + '''@nni.report_intermediate_result(test_acc)''' + +3. Annotation output in code as: + + '''@nni.report_final_result(test_acc)''' + +4. Annotation `function_choice` in code as: + + '''@nni.function_choice(max_pool(h_conv1, self.pool_size),avg_pool(h_conv1, self.pool_size),name=max_pool)''' + +In this way, they can easily realize automatic tuning on NNI. + +For `@nni.variable`, `nni.choice` is the type of search space and there are 10 types to express your search space as follows: + +1. `@nni.variable(nni.choice(option1,option2,...,optionN),name=variable)` + Which means the variable value is one of the options, which should be a list The elements of options can themselves be stochastic expressions + +2. `@nni.variable(nni.randint(upper),name=variable)` + Which means the variable value is a random integer in the range [0, upper). + +3. `@nni.variable(nni.uniform(low, high),name=variable)` + Which means the variable value is a value uniformly between low and high. + +4. `@nni.variable(nni.quniform(low, high, q),name=variable)` + Which means the variable value is a value like round(uniform(low, high) / q) * q + +5. `@nni.variable(nni.loguniform(low, high),name=variable)` + Which means the variable value is a value drawn according to exp(uniform(low, high)) so that the logarithm of the return value is uniformly distributed. + +6. `@nni.variable(nni.qloguniform(low, high, q),name=variable)` + Which means the variable value is a value like round(exp(uniform(low, high)) / q) * q + +7. `@nni.variable(nni.normal(label, mu, sigma),name=variable)` + Which means the variable value is a real value that's normally-distributed with mean mu and standard deviation sigma. + +8. `@nni.variable(nni.qnormal(label, mu, sigma, q),name=variable)` + Which means the variable value is a value like round(normal(mu, sigma) / q) * q + +9. `@nni.variable(nni.lognormal(label, mu, sigma),name=variable)` + Which means the variable value is a value drawn according to exp(normal(mu, sigma)) + + 10. `@nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)` + Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file From c4ce8aad8b4ea3482ca87d3944e46a39954b810e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:36 +0800 Subject: [PATCH 0018/1573] New translations README.md (Chinese Simplified) --- zh_CN/tools/README.md | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 zh_CN/tools/README.md diff --git a/zh_CN/tools/README.md b/zh_CN/tools/README.md new file mode 100644 index 0000000000..42b54d54c2 --- /dev/null +++ b/zh_CN/tools/README.md @@ -0,0 +1,49 @@ +## 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 + + Ubuntu 16.04 or other Linux OS + python >= 3.5 + + +## Installation + +1. Enter tools directory + +2. Use pip to install packages + + - Install for current user: + + python3 -m pip install --user -e . + + - Install for all users: + + python3 -m pip install -e . + + 1. Change the mode of nnictl file + + chmod +x ./nnictl + + 2. Add nnictl to your PATH system environment variable. + - You could use `export` command to set PATH variable temporary. + + export PATH={your nnictl path}:$PATH + + - Or you could edit your `/etc/profile` file. + + 1.sudo vim /etc/profile + + 2.At the end of the file, add + + export PATH={your nnictl path}:$PATH + + save and exit. + + + 3.source /etc/profile + +## To start using NNI CTL + +please reference to the [NNI CTL document](../docs/NNICTLDOC.md). \ No newline at end of file From c79cb2552acce4e18f4eb3f5477cfadcd372c56d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:37 +0800 Subject: [PATCH 0019/1573] New translations tutorial_3_tryTunersAndAccessors.md (Chinese Simplified) --- .../docs/tutorial_3_tryTunersAndAccessors.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 zh_CN/docs/tutorial_3_tryTunersAndAccessors.md diff --git a/zh_CN/docs/tutorial_3_tryTunersAndAccessors.md b/zh_CN/docs/tutorial_3_tryTunersAndAccessors.md new file mode 100644 index 0000000000..7473623f9a --- /dev/null +++ b/zh_CN/docs/tutorial_3_tryTunersAndAccessors.md @@ -0,0 +1,45 @@ +# Tutorial - Try different Tuners and Accessors + +NNI provides an easy to adopt approach to set up parameter tuning algorithms as well as early stop policies, we call them **Tuners** and **Accessors**. + +**Tuner** specifies the algorithm you use to generate hyperparameter sets for each trial. In NNI, we support two approaches to set the tuner. + +1. Directly use tuner provided by nni sdk + + required fields: builtinTunerName and classArgs. + + +2. Customize your own tuner file + + required fields: codeDirectory, classFileName, className and classArgs. + + +### **Learn More about tuners** + +* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) +* [Tuners in the latest NNI release](../src/sdk/pynni/nni/README.md) +* [How to implement your own tuner](howto_2_CustomizedTuner.md) + +**Assessor** specifies the algorithm you use to apply early stop policy. In NNI, there are two approaches to set theassessor. + +1. Directly use accessor provided by nni sdk + + required fields: builtinAssessorName and classArgs. + + +2. Customize your own tuner file + + required fields: codeDirectory, classFileName, className and classArgs. + + +### **Learn More about assessor** + +* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) +* Find more about the detailed instruction about [enable accessor](EnableAssessor.md) +* [How to implement your own assessor](../examples/assessors/README.md) + +## **Learn More** + +* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) +* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) +* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From 4ddfac64b4df98d52ab7d89bbc45fad873728ec0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:04:38 +0800 Subject: [PATCH 0020/1573] New translations tutorial_1_CR_exp_local_api.md (Chinese Simplified) --- zh_CN/docs/tutorial_1_CR_exp_local_api.md | 166 ++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 zh_CN/docs/tutorial_1_CR_exp_local_api.md diff --git a/zh_CN/docs/tutorial_1_CR_exp_local_api.md b/zh_CN/docs/tutorial_1_CR_exp_local_api.md new file mode 100644 index 0000000000..fa2f4a1986 --- /dev/null +++ b/zh_CN/docs/tutorial_1_CR_exp_local_api.md @@ -0,0 +1,166 @@ +# **Tutorial: Create and Run an Experiment on local with NNI API** + +In this tutorial, we will use the example in [~/examples/trials/mnist] to explain how to create and run an experiment on local with NNI API. + +> Before starts + +You have an implementation for MNIST classifer using convolutional layers, the Python code is in `mnist_before.py`. + +> Step 1 - Update model codes + +To enable NNI API, make the following changes: + + 1.1 Declare NNI API + Include `import nni` in your trial code to use NNI APIs. + + 1.2 Get predefined parameters + Use the following code snippet: + + RECEIVED_PARAMS = nni.get_next_parameter() + + to get hyper-parameters' values assigned by tuner. `RECEIVED_PARAMS` is an object, for example: + + {"conv_size": 2, "hidden_size": 124, "learning_rate": 0.0307, "dropout_rate": 0.2029} + + 1.3 Report NNI results + Use the API: + + `nni.report_intermediate_result(accuracy)` + + to send `accuracy` to assessor. + + Use the API: + + `nni.report_final_result(accuracy)` + + to send `accuracy` to tuner. + + +We had made the changes and saved it to `mnist.py`. + +**NOTE**: + + accuracy - The `accuracy` could be any python object, but if you use NNI built-in tuner/assessor, `accuracy` should be a numerical variable (e.g. float, int). + assessor - The assessor will decide which trial should early stop based on the history performance of trial (intermediate result of one trial). + tuner - The tuner will generate next parameters/architecture based on the explore history (final result of all trials). + + +> Step 2 - Define SearchSpace + +The hyper-parameters used in `Step 1.2 - Get predefined parameters` is defined in a `search_space.json` file like below: + + { + "dropout_rate":{"_type":"uniform","_value":[0.1,0.5]}, + "conv_size":{"_type":"choice","_value":[2,3,5,7]}, + "hidden_size":{"_type":"choice","_value":[124, 512, 1024]}, + "learning_rate":{"_type":"uniform","_value":[0.0001, 0.1]} + } + + +Refer to to learn more about search space. + +> Step 3 - Define Experiment +> +> > 3.1 enable NNI API mode + +To enable NNI API mode, you need to set useAnnotation to *false* and provide the path of SearchSpace file (you just defined in step 1): + + useAnnotation: false + searchSpacePath: /path/to/your/search_space.json + + +To run an experiment in NNI, you only needed: + +* Provide a runnable trial +* Provide or choose a tuner +* Provide a yaml experiment configure file +* (optional) Provide or choose an assessor + +**Prepare trial**: + +> A set of examples can be found in ~/nni/examples after your installation, run `ls ~/nni/examples/trials` to see all the trial examples. + +Let's use a simple trial example, e.g. mnist, provided by NNI. After you installed NNI, NNI examples have been put in ~/nni/examples, run `ls ~/nni/examples/trials` to see all the trial examples. You can simply execute the following command to run the NNI mnist example: + + python ~/nni/examples/trials/mnist-annotation/mnist.py + + +This command will be filled in the yaml configure file below. Please refer to [here](howto_1_WriteTrial) for how to write your own trial. + +**Prepare tuner**: NNI supports several popular automl algorithms, including Random Search, Tree of Parzen Estimators (TPE), Evolution algorithm etc. Users can write their own tuner (refer to [here](CustomizedTuner.md)), but for simplicity, here we choose a tuner provided by NNI as below: + + tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + + +*builtinTunerName* is used to specify a tuner in NNI, *classArgs* are the arguments pass to the tuner (the spec of builtin tuners can be found [here]()), *optimization_mode* is to indicate whether you want to maximize or minimize your trial's result. + +**Prepare configure file**: Since you have already known which trial code you are going to run and which tuner you are going to use, it is time to prepare the yaml configure file. NNI provides a demo configure file for each trial example, `cat ~/nni/examples/trials/mnist-annotation/config.yml` to see it. Its content is basically shown below: + + authorName: your_name + experimentName: auto_mnist + + # how many trials could be concurrently running + trialConcurrency: 1 + + # maximum experiment running duration + maxExecDuration: 3h + + # empty means never stop + maxTrialNum: 100 + + # choice: local, remote + trainingServicePlatform: local + + # choice: true, false + useAnnotation: true + tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + trial: + command: python mnist.py + codeDir: ~/nni/examples/trials/mnist-annotation + gpuNum: 0 + + +Here *useAnnotation* is true because this trial example uses our python annotation (refer to [here](../tools/annotation/README.md) for details). For trial, we should provide *trialCommand* which is the command to run the trial, provide *trialCodeDir* where the trial code is. The command will be executed in this directory. We should also provide how many GPUs a trial requires. + +With all these steps done, we can run the experiment with the following command: + + nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml + + +You can refer to [here](NNICTLDOC.md) for more usage guide of *nnictl* command line tool. + +## View experiment results + +The experiment has been running now. Oher than *nnictl*, NNI also provides WebUI for you to view experiment progress, to control your experiment, and some other appealing features. + +## Using multiple local GPUs to speed up search + +The following steps assume that you have 4 NVIDIA GPUs installed at local and [tensorflow with GPU support](https://www.tensorflow.org/install/gpu). The demo enables 4 concurrent trail jobs and each trail job uses 1 GPU. + +**Prepare configure file**: NNI provides a demo configuration file for the setting above, `cat ~/nni/examples/trials/mnist-annotation/config_gpu.yml` to see it. The trailConcurrency and gpuNum are different from the basic configure file: + + ... + + # how many trials could be concurrently running + trialConcurrency: 4 + + ... + + trial: + command: python mnist.py + codeDir: ~/nni/examples/trials/mnist-annotation + gpuNum: 1 + + +We can run the experiment with the following command: + + nnictl create --config ~/nni/examples/trials/mnist-annotation/config_gpu.yml + + +You can use *nnictl* command line tool or WebUI to trace the training progress. *nvidia_smi* command line tool can also help you to monitor the GPU usage during training. \ No newline at end of file From 135df0afb74bc3d674f93b8a54b57e348278c1ae Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:36 +0800 Subject: [PATCH 0021/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 80 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 zh_CN/docs/PAIMode.md diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md new file mode 100644 index 0000000000..eaa8110770 --- /dev/null +++ b/zh_CN/docs/PAIMode.md @@ -0,0 +1,80 @@ +# **Run an Experiment on OpenPAI** + +NNI supports running an experiment on [OpenPAI](https://github.com/Microsoft/pai) (aka pai), called pai mode. Before starting to use NNI pai mode, you should have an account to access an [OpenPAI](https://github.com/Microsoft/pai) cluster. See [here](https://github.com/Microsoft/pai#how-to-deploy) if you don't have any OpenPAI account and want to deploy an OpenPAI cluster. In pai mode, your trial program will run in pai's container created by Docker. + +## Setup environment + +Install NNI, follow the install guide [here](GetStarted.md). + +## Run an experiment + +Use `examples/trials/mnist-annotation` as an example. The nni config yaml file's content is like: + + authorName: your_name + experimentName: auto_mnist + # how many trials could be concurrently running + trialConcurrency: 2 + # maximum experiment running duration + maxExecDuration: 3h + # empty means never stop + maxTrialNum: 100 + # choice: local, remote, pai + trainingServicePlatform: pai + # choice: true, false + useAnnotation: true + tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + trial: + command: python3 mnist.py + codeDir: ~/nni/examples/trials/mnist-annotation + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + image: openpai/pai.example.tensorflow + dataDir: hdfs://10.1.1.1:9000/nni + outputDir: hdfs://10.1.1.1:9000/nni + # Configuration to access OpenPAI Cluster + paiConfig: + userName: your_pai_nni_user + passWord: your_pai_password + host: 10.1.1.1 + + +Note: You should set `trainingServicePlatform: pai` in nni config yaml file if you want to start experiment in pai mode. + +Compared with LocalMode and [RemoteMachineMode](RemoteMachineMode.md), trial configuration in pai mode have five additional keys: + +* cpuNum + * Required key. Should be positive number based on your trial program's CPU requirement +* memoryMB + * 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 + * Optional key. It specifies the HDFS output direcotry for trial. Once the trial is completed (either succeed or fail), trial's stdout, stderr will be copied to this directory by NNI sdk automatically. The format should be something like hdfs://{your HDFS host}:9000/{your output directory} + +Once complete to fill nni experiment config file and save (for example, save as exp_pai.yaml), then run the following command + + nnictl create --config exp_pai.yaml + + +to start the experiment in pai mode. NNI will create OpanPAI job for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the pai jobs created by NNI in your OpenPAI cluster's web portal, like: ![](./nni_pai_joblist.jpg) + +Notice: In pai mode, NNIManager will start a rest server and listen on `51189` port, to receive metrics from trial job running in PAI container. So you should `enable 51189` TCP port in your firewall rule to allow incoming traffic. + +Once a trial job is completed, you can goto NNI WebUI's overview page (like http://localhost:51188/oview) to check trial's information. + +Expand a trial information in trial list view, click the logPath link like: ![](./nni_webui_joblist.jpg) + +And you will be redirected to HDFS web portal to browse the output files of that trial in HDFS: ![](./nni_trial_hdfs_output.jpg) + +You can see there're three fils in output folder: stderr, stdout, and trial.log + +If you also want to save trial's other output into HDFS, like model files, you can use environment variable `NNI_OUTPUT_DIR` in your trial code to save your own output files, and NNI SDK will copy all the files in `NNI_OUTPUT_DIR` from trial's container to HDFS. + +Any problems when using NNI in pai mode, plesae create issues on [NNI github repo](https://github.com/Microsoft/nni), or send mail to nni@microsoft.com \ No newline at end of file From e2904e4b7d8670ee2a216b7e421c1cd10a70b0ee Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:41 +0800 Subject: [PATCH 0022/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 84 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 zh_CN/docs/RELEASE.md diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md new file mode 100644 index 0000000000..0b12458323 --- /dev/null +++ b/zh_CN/docs/RELEASE.md @@ -0,0 +1,84 @@ +# Release 0.3.0 - 11/2/2018 + +## NNICTL new features and updates + +* Support running multiple experiments simultaneously. + + Before v0.3, NNI only supports running single experiment once a time. After this realse, users are able to run multiple experiments simultaneously. Each experiment will require a unique port, the 1st experiment will be set to the default port as previous versions. You can specify a unique port for the rest experiments as below: + + nnictl create --port 8081 --config + +* Support updating max trial number. use ```nnictl update --help``` to learn more. Or refer to [NNICTL Spec](https://github.com/Microsoft/nni/blob/master/docs/NNICTLDOC.md) for the fully usage of NNICTL. + +## API new features and updates + +* breaking change: nn.get_parameters() is refactored to nni.get_next_parameter. All examples of prior releases can not run on v0.3, please clone nni repo to get new examples. If you had applied NNI to your own codes, please update the API accordingly. + +* New API **nni.get_sequence_id()**. Each trial job is allocated a unique sequence number, which can be retrieved by nni.get_sequence_id() API. + + git clone -b v0.3 https://github.com/Microsoft/nni.git + +* **nni.report_final_result(result)** API supports more data types for result parameter. It can be of following types: + * int + * float + * A python dict containing 'default' key, the value of 'default' key should be of type int or float. The dict can contain any other key value pairs. + +## New tuner support + +* **Batch Tuner** which iterates all parameter combination, can be used to submit batch trial jobs. + +## New examples + +* A NNI Docker image for public usage: ```docker pull msranni/nni:latest``` +* New trial example: [NNI Sklearn Example](https://github.com/Microsoft/nni/tree/master/examples/trials/sklearn) +* New competition example: [Kaggle Competition TGS Salt Example](https://github.com/Microsoft/nni/tree/master/examples/trials/kaggle-tgs-salt) + +## Others + +* UI refactoring, refer to [WebUI doc](WebUI.md) for how to work with the new UI. +* Continuous Integration: NNI had switched to Azure pipelines +* [Known Issues in release 0.3.0](https://github.com/Microsoft/nni/labels/nni030knownissues). + +# Release 0.2.0 - 9/29/2018 + +## Major Features + +* 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 (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 + * Update ga squad example and related documentation + * WebUI UX small enhancement and bug fix + +## Known Issues + +[Known Issues in release 0.2.0](https://github.com/Microsoft/nni/labels/nni020knownissues). + +# Release 0.1.0 - 9/10/2018 (initial release) + +Initial release of Neural Network Intelligence (NNI). + +## Major Features + +* Installation and Deployment + * Support pip install and source codes install + * Support training services on local mode(including Multi-GPU mode) as well as multi-machines mode +* Tuners, Accessors and Trial + * Support AutoML algorithms including: hyperopt_tpe, hyperopt_annealing, hyperopt_random, and evolution_tuner + * Support assessor(early stop) algorithms including: medianstop algorithm + * Provide Python API for user defined tuners and accessors + * Provide Python API for user to wrap trial code as NNI deployable codes +* Experiments + * Provide a command line toolkit 'nnictl' for experiments management + * Provide a WebUI for viewing experiments details and managing experiments +* Continuous Integration + * Support CI by providing out-of-box integration with [travis-ci](https://github.com/travis-ci) on ubuntu +* Others + * Support simple GPU job scheduling + +## Known Issues + +[Known Issues in release 0.1.0](https://github.com/Microsoft/nni/labels/nni010knownissues). \ No newline at end of file From 03f085e86c7de363d2fa31202252408d7c6fc014 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:44 +0800 Subject: [PATCH 0023/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 100 ++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 zh_CN/docs/howto_2_CustomizedTuner.md diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md new file mode 100644 index 0000000000..a89c16c824 --- /dev/null +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -0,0 +1,100 @@ +# **How To** - Customize Your Own Tuner + +*Tuner receive result from Trial as a matric to evaluate the performance of a specific parameters/architecture configure. And tuner send next hyper-parameter or architecture configure to Trial.* + +So, if user want to implement a customized Tuner, she/he only need to: + +1) Inherit a tuner of a base Tuner class 2) Implement receive_trial_result and generate_parameter function 3) Write a script to run Tuner + +Here ia an example: + +**1) Inherit a tuner of a base Tuner class** + +```python +from nni.tuner import Tuner + +class CustomizedTuner(Tuner): + def __init__(self, ...): + ... +``` + +**2) Implement receive_trial_result and generate_parameter function** + +```python +from nni.tuner import Tuner + +class CustomizedTuner(Tuner): + def __init__(self, ...): + ... + + def receive_trial_result(self, parameter_id, parameters, value): + ''' + Record an observation of the objective function and Train + parameter_id: int + parameters: object created by 'generate_parameters()' + value: final metrics of the trial, including reward + ''' + # your code implements here. + ... + + def generate_parameters(self, parameter_id): + ''' + Returns a set of trial (hyper-)parameters, as a serializable object + parameter_id: int + ''' + # your code implements here. + return your_parameters + ... +``` + + receive_trial_result will receive ```the parameter_id, parameters, value``` as parameters input. Also, Tuner will receive the ```value``` object are exactly same value that Trial send. + +The ```your_parameters``` return from ```generate_parameters``` function, will be package as json object by NNI SDK. NNI SDK will unpack json object so the Trial will receive the exact same ```your_parameters``` from Tuner. + +For example: If the you implement the ```generate_parameters``` like this: + +```python + def generate_parameters(self, parameter_id): + ''' + Returns a set of trial (hyper-)parameters, as a serializable object + parameter_id: int + ''' + # your code implements here. + return {"dropout": 0.3, "learning_rate": 0.4} +``` + +It means your Tuner will always generate parameters ```{"dropout": 0.3, "learning_rate": 0.4}```. Then Trial will receive ```{"dropout": 0.3, "learning_rate": 0.4}``` by calling API ```nni.get_next_parameter()```. Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API ```nni.report_final_result()```, for example ```nni.report_final_result(0.93)```. Then your Tuner's ```receive_trial_result``` function will receied the result like: + + parameter_id = 82347 + parameters = {"dropout": 0.3, "learning_rate": 0.4} + value = 0.93 + + +**Note that** if you want to access a file (e.g., ```data.txt```) in the directory of your own tuner, you cannot use ```open('data.txt', 'r')```. Instead, you should use the following: + + _pwd = os.path.dirname(__file__) + _fd = open(os.path.join(_pwd, 'data.txt'), 'r') + + +This is because your tuner is not executed in the directory of your tuner (i.e., ```pwd``` is not the directory of your own tuner). + +**3) Configure your customized tuner in experiment yaml config file** + +NNI needs to locate your customized tuner class and instantiate the class, so you need to specify the location of the customized tuner class and pass literal values as parameters to the \_\_init__ constructor. + +```yaml +tuner: + codeDir: /home/abc/mytuner + classFileName: my_customized_tuner.py + className: CustomizedTuner + # Any parameter need to pass to your tuner class __init__ constructor + # can be specified in this optional classArgs field, for example + classArgs: + arg1: value1 +``` + +More detail example you could see: + +> - [evolution-tuner](../src/sdk/pynni/nni/evolution_tuner) +> - [hyperopt-tuner](../src/sdk/pynni/nni/hyperopt_tuner) +> - [evolution-based-customized-tuner](../examples/tuners/ga_customer_tuner) \ No newline at end of file From f0d236522e86f50c9cc56ef0ddd63906fcbe89c2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:45 +0800 Subject: [PATCH 0024/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 129 +++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 zh_CN/docs/howto_1_WriteTrial.md diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md new file mode 100644 index 0000000000..0e783e0f3c --- /dev/null +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -0,0 +1,129 @@ +# **Write a Trial Run on NNI** + +A **Trial** in NNI is an individual attempt at applying a set of parameters on a model. + +To define a NNI trial, you need to firstly define the set of parameters and then update the model. NNI provide two approaches for you to define a trial: `NNI API` and `NNI Python annotation`. + +## NNI API + +> Step 1 - Prepare a SearchSpace parameters file. + +An example is shown below: + + { + "dropout_rate":{"_type":"uniform","_value":[0.1,0.5]}, + "conv_size":{"_type":"choice","_value":[2,3,5,7]}, + "hidden_size":{"_type":"choice","_value":[124, 512, 1024]}, + "learning_rate":{"_type":"uniform","_value":[0.0001, 0.1]} + } + + +Refer to to learn more about search space. + +> Step 2 - Update model codes + + 2.1 Declare NNI API + Include `import nni` in your trial code to use NNI APIs. + + 2.2 Get predefined parameters + Use the following code snippet: + + RECEIVED_PARAMS = nni.get_next_parameter() + + to get hyper-parameters' values assigned by tuner. `RECEIVED_PARAMS` is an object, for example: + + {"conv_size": 2, "hidden_size": 124, "learning_rate": 0.0307, "dropout_rate": 0.2029} + + 2.3 Report NNI results + Use the API: + + `nni.report_intermediate_result(accuracy)` + + to send `accuracy` to assessor. + + Use the API: + + `nni.report_final_result(accuracy)` + + to send `accuracy` to tuner. + + +**NOTE**: + + accuracy - The `accuracy` could be any python object, but if you use NNI built-in tuner/assessor, `accuracy` should be a numerical variable (e.g. float, int). + assessor - The assessor will decide which trial should early stop based on the history performance of trial (intermediate result of one trial). + tuner - The tuner will generate next parameters/architecture based on the explore history (final result of all trials). + + +> Step 3 - Enable NNI API + +To enable NNI API mode, you need to set useAnnotation to *false* and provide the path of SearchSpace file (you just defined in step 1): + + useAnnotation: false + searchSpacePath: /path/to/your/search_space.json + + +You can refer to [here](ExperimentConfig.md) for more information about how to set up experiment configurations. + +(../examples/trials/README.md) for more information about how to write trial code using NNI APIs. + +## NNI Python Annotation + +An alternative to write a trial is to use NNI's syntax for python. Simple as any annotation, NNI annotation is working like comments in your codes. You don't have to make structure or any other big changes to your existing codes. With a few lines of NNI annotation, you will be able to: + +* annotate the variables you want to tune +* specify in which range you want to tune the variables +* annotate which variable you want to report as intermediate result to `assessor` +* annotate which variable you want to report as the final result (e.g. model accuracy) to `tuner`. + +Again, take MNIST as an example, it only requires 2 steps to write a trial with NNI Annotation. + +> Step 1 - Update codes with annotations + +Please refer the following tensorflow code snippet for NNI Annotation, the highlighted 4 lines are annotations that help you to: (1) tune batch\_size and (2) dropout\_rate, (3) report test\_acc every 100 steps, and (4) at last report test\_acc as final result. + +> What noteworthy is: as these new added codes are annotations, it does not actually change your previous codes logic, you can still run your code as usual in environments without NNI installed. + +```diff +with tf.Session() as sess: + sess.run(tf.global_variables_initializer()) ++ """@nni.variable(nni.choice(50, 250, 500), name=batch_size)""" + batch_size = 128 + for i in range(10000): + batch = mnist.train.next_batch(batch_size) ++ """@nni.variable(nni.choice(1, 5), name=dropout_rate)""" + dropout_rate = 0.5 + mnist_network.train_step.run(feed_dict={mnist_network.images: batch[0], + mnist_network.labels: batch[1], + mnist_network.keep_prob: dropout_rate}) + if i % 100 == 0: + test_acc = mnist_network.accuracy.eval( + feed_dict={mnist_network.images: mnist.test.images, + mnist_network.labels: mnist.test.labels, + mnist_network.keep_prob: 1.0}) ++ """@nni.report_intermediate_result(test_acc)""" + + test_acc = mnist_network.accuracy.eval( + feed_dict={mnist_network.images: mnist.test.images, + mnist_network.labels: mnist.test.labels, + mnist_network.keep_prob: 1.0}) + ++ """@nni.report_final_result(test_acc)""" +``` + +> NOTE +> +> > `@nni.variable` will take effect on its following line +> > +> > `@nni.report_intermediate_result`/`@nni.report_final_result` will send the data to assessor/tuner at that line. +> > +> > Please refer to [Annotation README](../tools/annotation/README.md) for more information about annotation syntax and its usage. +> +> Step 2 - Enable NNI Annotation In the yaml configure file, you need to set *useAnnotation* to true to enable NNI annotation: + + useAnnotation: true + + +## More Trial Example + +* [Automatic Model Architecture Search for Reading Comprehension.](../examples/trials/ga_squad/README.md) \ No newline at end of file From 27526e8efc72c9982f7b87e0e52dcda156b57458 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:45 +0800 Subject: [PATCH 0025/1573] New translations WebUI.md (Chinese Simplified) --- zh_CN/docs/WebUI.md | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 zh_CN/docs/WebUI.md diff --git a/zh_CN/docs/WebUI.md b/zh_CN/docs/WebUI.md new file mode 100644 index 0000000000..db53fea472 --- /dev/null +++ b/zh_CN/docs/WebUI.md @@ -0,0 +1,49 @@ +# WebUI + +## View summary page + +Click the tab "Overview". + +* See the experiment trial profile and search space message. +* Support to download the experiment message. + +![](./img/over1.png) + +* See good performance trials. + +![](./img/over2.png) + +## View job accuracy + +Click the tab "Trial Accuracy" to see the point graph of all trials. Hover every point to see its specific accuracy. + +![](./img/accuracy.png) + +## View hyper parameter + +Click the tab "Hyper Parameter" to see the parallel graph. + +* You can select the percentage to see top trials. +* Choose two axis to swap its positions + +![](./img/hyperPara.png) + +## View Trial Duration + +Click the tab "Trial Duration" to see the bar graph. + +![](./img/trial_duration.png) + +## View trials status + +Click the tab "Trials Detail" to see the status of the all trials. Specifically: + +* Trial detail: trial's id, trial's duration, start time, end time, status, accuracy and search space file. + +![](./img/table_openrow.png) + +* Kill: you can kill a job that status is running. +* Intermediate Result Graph. +* Support to search for a specific trial. + +![](./img/intermediate.png) \ No newline at end of file From fa4c1f89c6aa9214683bbc0cb1ca4b3874e5b124 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:46 +0800 Subject: [PATCH 0026/1573] New translations StartExperiment.md (Chinese Simplified) --- zh_CN/docs/StartExperiment.md | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 zh_CN/docs/StartExperiment.md diff --git a/zh_CN/docs/StartExperiment.md b/zh_CN/docs/StartExperiment.md new file mode 100644 index 0000000000..521d25cb8a --- /dev/null +++ b/zh_CN/docs/StartExperiment.md @@ -0,0 +1,41 @@ +# 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 + +1. Check if there is an old experiment running +2. Check if the port of restfurl server is free. +3. Validate the content of config yaml file. +4. Prepare a config file to to record the information of this experiment. + +### 2.2 Start restful server + +Start an restful server process to manage nni experiment, the default port is 8080. + +### 2.3 Check restful server + +Check whether restful server process is successfully started and could get a response when send message to restful server. + +### 2.4 Set experiment config + +Call restful server to set experiment config before starting an experiment, experiment config includes the config values in config yaml file. + +### 2.5 Check experiment cofig + +Check the response content of restful srver, if the status code of response is 200, the config is successfully set. + +### 2.6 Start Experiment + +Call restful server process to setup an experiment. + +### 2.7 Check experiment + +1. Check the response of restful server. +2. Handle error information. +3. Print success or error information to screen. +4. Save configuration information to config file of nnictl. \ No newline at end of file From 126dcd4a24347f94c060a98f5872633ea7cfc61f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:47 +0800 Subject: [PATCH 0027/1573] New translations SetupNNIDeveloperEnvironment.md (Chinese Simplified) --- zh_CN/docs/SetupNNIDeveloperEnvironment.md | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 zh_CN/docs/SetupNNIDeveloperEnvironment.md diff --git a/zh_CN/docs/SetupNNIDeveloperEnvironment.md b/zh_CN/docs/SetupNNIDeveloperEnvironment.md new file mode 100644 index 0000000000..3b877bb32a --- /dev/null +++ b/zh_CN/docs/SetupNNIDeveloperEnvironment.md @@ -0,0 +1,58 @@ +# **Set up NNI developer environment** + +## Best practice for debug NNI source code + +For debugging NNI source code, your development environment should be under Ubuntu 16.04 (or above) system with python 3 and pip 3 installed, then follow the below steps. + +**1. Clone the source code** + +Run the command + + git clone https://github.com/Microsoft/nni.git + + +to clone the source code + +**2. Prepare the debug environment and install dependencies** + +Change directory to the source code folder, then run the command + + make install-dependencies + + +to install the dependent tools for the environment + +**3. Build source code** + +Run the command + + make build + + +to build the source code + +**4. Install NNI to development environment** + +Run the command + + make dev-install + + +to install the distribution content to development environment, and create cli scripts + +**5. Check if the environment is ready** + +Now, you can try to start an experiment to check if your environment is ready. For example, run the command + + nnictl create --config ~/nni/examples/trials/mnist/config.yml + + +And open WebUI to check if everything is OK + +**6. Redeploy** + +After the code changes, use **step 3** to rebuild your codes, then the changes will take effect immediately. + +* * * + +At last, wish you have a wonderful day. For more contribution guidelines on making PR's or issues to NNI source code, you can refer to our [CONTRIBUTING](./CONTRIBUTING.md) document. \ No newline at end of file From f09c6b7fdf185012caaff9cdd89198f64b650f69 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:48 +0800 Subject: [PATCH 0028/1573] New translations SearchSpaceSpec.md (Chinese Simplified) --- zh_CN/docs/SearchSpaceSpec.md | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 zh_CN/docs/SearchSpaceSpec.md diff --git a/zh_CN/docs/SearchSpaceSpec.md b/zh_CN/docs/SearchSpaceSpec.md new file mode 100644 index 0000000000..67450b0a6c --- /dev/null +++ b/zh_CN/docs/SearchSpaceSpec.md @@ -0,0 +1,78 @@ +## How to define search space? + +### Hyper-parameter Search Space + +* A search space configure example as follow: + +```python +{ + "dropout_rate":{"_type":"uniform","_value":[0.1,0.5]}, + "conv_size":{"_type":"choice","_value":[2,3,5,7]}, + "hidden_size":{"_type":"choice","_value":[124, 512, 1024]}, + "batch_size":{"_type":"choice","_value":[50, 250, 500]}, + "learning_rate":{"_type":"uniform","_value":[0.0001, 0.1]} +} + +``` + +The example define ```dropout_rate``` as variable which priori distribution is uniform distribution, and its value from ```0.1``` and ```0.5```. The tuner will sample parameters/architecture by understanding the search space first. + +User should define the name of variable, type and candidate value of variable. The candidate type and value for variable is here: + +* {"_type":"choice","_value":options} + + * Which means the variable value is one of the options, which should be a list The elements of options can themselves be [nested] stochastic expressions. In this case, the stochastic choices that only appear in some of the options become conditional parameters. + + +* {"_type":"randint","_value":[upper]} + + * Which means the variable value is a random integer in the range [0, upper). The semantics of this distribution is that there is no more correlation in the loss function between nearby integer values, as compared with more distant integer values. This is an appropriate distribution for describing random seeds for example. If the loss function is probably more correlated for nearby integer values, then you should probably use one of the "quantized" continuous distributions, such as either quniform, qloguniform, qnormal or qlognormal. Note that if you want to change lower bound, you can use `quniform` for now. + + +* {"_type":"uniform","_value":[low, high]} + + * Which means the variable value is a value uniformly between low and high. + * When optimizing, this variable is constrained to a two-sided interval. + + +* {"_type":"quniform","_value":[low, high, q]} + + * Which means the variable value is a value like round(uniform(low, high) / q) * q + * Suitable for a discrete value with respect to which the objective is still somewhat "smooth", but which should be bounded both above and below. If you want to uniformly choose integer from a range [low, high], you can write `_value` like this: `[low, high, 1]`. + + +* {"_type":"loguniform","_value":[low, high]} + + * Which means the variable value is a value drawn according to exp(uniform(low, high)) so that the logarithm of the return value is uniformly distributed. + * When optimizing, this variable is constrained to the interval [exp(low), exp(high)]. + + +* {"_type":"qloguniform","_value":[low, high, q]} + + * Which means the variable value is a value like round(exp(uniform(low, high)) / q) * q + * Suitable for a discrete variable with respect to which the objective is "smooth" and gets smoother with the size of the value, but which should be bounded both above and below. + + +* {"_type":"normal","_value":[label, mu, sigma]} + + * Which means the variable value is a real value that's normally-distributed with mean mu and standard deviation sigma. When optimizing, this is an unconstrained variable. + + +* {"_type":"qnormal","_value":[label, mu, sigma, q]} + + * Which means the variable value is a value like round(normal(mu, sigma) / q) * q + * Suitable for a discrete variable that probably takes a value around mu, but is fundamentally unbounded. + + +* {"_type":"lognormal","_value":[label, mu, sigma]} + + * Which means the variable value is a value drawn according to exp(normal(mu, sigma)) so that the logarithm of the return value is normally distributed. When optimizing, this variable is constrained to be positive. + + +* {"_type":"qlognormal","_value":[label, mu, sigma, q]} + + * Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q + * Suitable for a discrete variable with respect to which the objective is smooth and gets smoother with the size of the variable, which is bounded from one side. + + +Note that SMAC only supports a subset of the types above, including `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`. In the current version, SMAC does not support cascaded search space (i.e., conditional variable in SMAC). \ No newline at end of file From 15ce0c2fc1065fa0cda418c7cb6c55897c5ebe84 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:49 +0800 Subject: [PATCH 0029/1573] New translations RemoteMachineMode.md (Chinese Simplified) --- zh_CN/docs/RemoteMachineMode.md | 70 +++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 zh_CN/docs/RemoteMachineMode.md diff --git a/zh_CN/docs/RemoteMachineMode.md b/zh_CN/docs/RemoteMachineMode.md new file mode 100644 index 0000000000..657b15f48a --- /dev/null +++ b/zh_CN/docs/RemoteMachineMode.md @@ -0,0 +1,70 @@ +# **Run an Experiment on Multiple Machines** + +NNI supports running an experiment on multiple machines through SSH channel, called `remote` mode. NNI assumes that you have access to those machines, and already setup the environment for running deep learning training code. + +e.g. Three machines and you login in with account `bob` (Note: the account is not necessarily the same on different machine): + +| IP | Username | Password | +| -------- | -------- | -------- | +| 10.1.1.1 | bob | bob123 | +| 10.1.1.2 | bob | bob123 | +| 10.1.1.3 | bob | bob123 | + +## Setup NNI environment + +Install NNI on each of your machines following the install guide [here](GetStarted.md). + +For remote machines that are used only to run trials but not the nnictl, you can just install python SDK: + +* **Install python SDK through pip** + + python3 -m pip install --user --upgrade nni-sdk + +## Run an experiment + +Install NNI on another machine which has network accessibility to those three machines above, or you can just use any machine above to run nnictl command line tool. + +We use `examples/trials/mnist-annotation` as an example here. `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` to see the detailed configuration file: + + authorName: default + experimentName: example_mnist + trialConcurrency: 1 + maxExecDuration: 1h + maxTrialNum: 10 + #choice: local, remote, pai + trainingServicePlatform: remote + #choice: true, false + useAnnotation: true + tuner: + #choice: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 + #machineList can be empty if the platform is local + machineList: + + - ip: 10.1.1.1 + username: bob + passwd: bob123 + #port can be skip if using default ssh port 22 + #port: 22 + - ip: 10.1.1.2 + username: bob + passwd: bob123 + - ip: 10.1.1.3 + username: bob + passwd: bob123 + + +Simply filling the `machineList` section and then run: + + nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml + + +to start the experiment. \ No newline at end of file From 4baa77a8437c1654d89a189b9c9d11492943fcf6 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:11:50 +0800 Subject: [PATCH 0030/1573] New translations README.Makefile.md (Chinese Simplified) --- zh_CN/README.Makefile.md | 82 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 zh_CN/README.Makefile.md diff --git a/zh_CN/README.Makefile.md b/zh_CN/README.Makefile.md new file mode 100644 index 0000000000..c3269718b4 --- /dev/null +++ b/zh_CN/README.Makefile.md @@ -0,0 +1,82 @@ +# Makefile and Installation Setup + +NNI uses GNU make for building and installing. + +The `Makefile` offers standard targets `build`, `install`, and `uninstall`, as well as alternative installation targets for different setup: + +* `easy-install`: target for non-expert users, which handles everything automatically; +* `dev-easy-install`: target for developer users, which handles everything automatically; +* `install`: target for NNI normal users, which installs NNI by copying files; +* `dev-install`: target for NNI contributors, which installs NNI as symlinks instead of copying files; +* `pip-install`: target in favor of `setup.py`; + +The targets will be detailed later. + +## Dependencies + +NNI requires at least Node.js, Yarn, and pip to build, while TypeScript is also recommended. + +NNI requires Node.js, 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. + +For NNI *users*, `make install-dependencies` can be used to install Node.js and Yarn. This will install Node.js to NNI's installation directory, and install Yarn to `/tmp/nni-yarn`. This target requires wget to work. + +For NNI *developers*, it is recommended to install Node.js and Yarn manually. See their official sites for installation guide. + +## Building NNI + +Simply run `make` when dependencies are ready. + +## Installation + +### Directory Hierarchy + +The main parts of NNI project consist of two Node.js modules (`nni_manager`, `webui`) and two Python packages (`nni`, `nnictl`). + +By default the Node.js modules are installed to `/usr/share/nni` for all users or installed to `~/.local/nni` for current user. + +The Python packages are installed with setuptools and therefore the location depends on Python configuration. When install as non-priviledged user and virtualenv is not detected, `--user` flag will be used. + +In addition, `nnictl` offers a bash completion scripts, which will be installed to `/usr/share/bash-completion/completions` or `~/.bash_completion.d`. + +In some configuration, NNI will also install Node.js to `/usr/share/nni`. + +All directories mentioned above are configurable. See next section for details. + +### Configuration + +The `Makefile` uses environment variables to override default settings. + +Available variables are listed below: + +| Name | Description | Default for normal user | Default for root | +| ------------------ | ------------------------------------------------------- | --------------------------------- | ----------------------------------------------- | +| `BIN_PATH` | Path for executables | `~/.local/bin` | `/usr/bin` | +| `INSTALL_PREFIX` | Path for Node.js modules (a suffix `nni` will be added) | `~/.local` | `/usr/share` | +| `BASH_COMP_SCRIPT` | Path of bash completion script | `~/.bash_completion.d/nnictl` | `/usr/share/bash-completion/completions/nnictl` | +| `PIP_MODE` | Arguments for `python3 setup.py install` | `--user` if `VIRTUAL_ENV` not set | (empty) | +| `NODE_PATH` | Path to install Node.js runtime | `$INSTALL_PREFIX/nni/node` | `$INSTALL_PREFIX/nni/node` | +| `YARN_PATH` | Path to install Yarn | `/tmp/nni-yarn` | `/tmp/nni-yarn` | +| `NODE` | Node.js command | see source file | see source file | +| `YARN` | Yarn command | see source file | see source file | + +Note that these variables will influence installation destination as well as generated `nnictl` and `nnimanager` scripts. If the path to copy files is different from where they will run (e.g. when creating a distro package), please generate `nnictl` and `nnimanager` manually. + +### Targets + +The workflow of each installation targets is listed below: + +| Target | Workflow | +| ------------------ | -------------------------------------------------------------------------- | +| `easy-install` | Install dependencies, build, install NNI, and edit `~/.bashrc` | +| `dev-easy-install` | Install dependencies, build, install NNI as symlinks, and edit `~/.bashrc` | +| `install` | Install Python packages, Node.js modules, NNI scripts, and examples | +| `dev-install` | Install Python and Node.js modules as symlinks, then install scripts | +| `pip-install` | Install dependencies, build, install NNI excluding Python packages | + +## TODO + +* `clean` target +* `test` target +* `lint` target +* Test cases for each target +* Review variables \ No newline at end of file From 48ff3681d6654f7f40b16328d412235a7bb4146a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:03:55 +0800 Subject: [PATCH 0031/1573] Update Crowdin configuration file --- crowdin.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 0000000000..90d82530f1 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,3 @@ +files: + - source: /**/*.md + translation: /%locale_with_underscore%/%original_path%/%original_file_name% From a5841aa1fbf04794e6ea9dc4f3249d03ecc6d2b6 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:24:08 +0800 Subject: [PATCH 0032/1573] New translations README.Makefile.md (Chinese Simplified) --- zh_CN/README.Makefile.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/README.Makefile.md b/zh_CN/README.Makefile.md index c3269718b4..437d11fc03 100644 --- a/zh_CN/README.Makefile.md +++ b/zh_CN/README.Makefile.md @@ -1,11 +1,11 @@ -# Makefile and Installation Setup +# Makefile 文件和安装配置 NNI uses GNU make for building and installing. -The `Makefile` offers standard targets `build`, `install`, and `uninstall`, as well as alternative installation targets for different setup: +`Makefile` 提供标准的目标 `生成`、`安装` 和 `卸载`, 以及不同设置的安装对象: -* `easy-install`: target for non-expert users, which handles everything automatically; -* `dev-easy-install`: target for developer users, which handles everything automatically; +* `dev-easy-install`: 针对非专家用户,自动处理所有内容; +* `dev-easy-install`: 针对专家用户,自动处理所有内容; * `install`: target for NNI normal users, which installs NNI by copying files; * `dev-install`: target for NNI contributors, which installs NNI as symlinks instead of copying files; * `pip-install`: target in favor of `setup.py`; From ad3c6e7a75b883044ebbbd295561ca7159308eb3 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:06 +0800 Subject: [PATCH 0033/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md index eaa8110770..5818d18181 100644 --- a/zh_CN/docs/PAIMode.md +++ b/zh_CN/docs/PAIMode.md @@ -63,15 +63,15 @@ Once complete to fill nni experiment config file and save (for example, save as nnictl create --config exp_pai.yaml -to start the experiment in pai mode. NNI will create OpanPAI job for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the pai jobs created by NNI in your OpenPAI cluster's web portal, like: ![](./nni_pai_joblist.jpg) +to start the experiment in pai mode. NNI will create OpanPAI job for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the pai jobs created by NNI in your OpenPAI cluster's web portal, like: ![](./img/nni_pai_joblist.jpg) -Notice: In pai mode, NNIManager will start a rest server and listen on `51189` port, to receive metrics from trial job running in PAI container. So you should `enable 51189` TCP port in your firewall rule to allow incoming traffic. +Notice: In pai mode, NNIManager will start a rest server and listen on a port which is your NNI WebUI's port plus 1. For example, if your WebUI port is `8080`, the rest server will listen on `8081`, to receive metrics from trial job running in Kubernetes. So you should `enable 8081` TCP port in your firewall rule to allow incoming traffic. -Once a trial job is completed, you can goto NNI WebUI's overview page (like http://localhost:51188/oview) to check trial's information. +Once a trial job is completed, you can goto NNI WebUI's overview page (like http://localhost:8080/oview) to check trial's information. -Expand a trial information in trial list view, click the logPath link like: ![](./nni_webui_joblist.jpg) +Expand a trial information in trial list view, click the logPath link like: ![](./img/nni_webui_joblist.jpg) -And you will be redirected to HDFS web portal to browse the output files of that trial in HDFS: ![](./nni_trial_hdfs_output.jpg) +And you will be redirected to HDFS web portal to browse the output files of that trial in HDFS: ![](./img/nni_trial_hdfs_output.jpg) You can see there're three fils in output folder: stderr, stdout, and trial.log From b69248a3e4ea6ca6d4fb8812fd71c9f75bd4b402 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:07 +0800 Subject: [PATCH 0034/1573] New translations README.md (Chinese Simplified) --- zh_CN/tools/nni_annotation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/tools/nni_annotation/README.md b/zh_CN/tools/nni_annotation/README.md index 220f44c462..d2013a92c7 100644 --- a/zh_CN/tools/nni_annotation/README.md +++ b/zh_CN/tools/nni_annotation/README.md @@ -1,4 +1,4 @@ -# Introduction +# NNI Annotation Introduction For good user experience and reduce user effort, we need to design a good annotation grammar. From ff532d21f6f0c9dbef9e47cb995f1f26ac785207 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:10 +0800 Subject: [PATCH 0035/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 73 +++++++++++++++++++++--- 1 file changed, 66 insertions(+), 7 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index d6fd21162c..9ba6f34a43 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -22,7 +22,9 @@ Also we have another version which time cost is less and performance is better. # How to run this example? -## Use downloading script to download data +## Run this example on local or remote + +### Use downloading script to download data Execute the following command to download needed files using the downloading script: @@ -30,7 +32,7 @@ Execute the following command to download needed files using the downloading scr ./download.sh -## Download manually +### Download manually 1. download "dev-v1.1.json" and "train-v1.1.json" in https://rajpurkar.github.io/SQuAD-explorer/ @@ -44,9 +46,9 @@ Execute the following command to download needed files using the downloading scr unzip glove.840B.300d.zip -## Update configuration +### Update configuration -Modify `nni/examples/trials/ga_squad/config.yaml`, here is the default configuration: +Modify `nni/examples/trials/ga_squad/config.yml`, here is the default configuration: authorName: default experimentName: example_ga_squad @@ -73,9 +75,66 @@ In the "trial" part, if you want to use GPU to perform the architecture search, `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 +### submit this job + + nnictl create --config ~/nni/examples/trials/ga_squad/config.yml + + +## Run this example on OpenPAI + +Due to the memory limitation of upload, we only upload the source code and complete the data download and training on OpenPAI. This experiment requires sufficient memory that `memoryMB >= 32G`, and the training may last for several hours. + +### Update configuration + +Modify `nni/examples/trials/ga_squad/config_pai.yaml`, here is the default configuration: + + authorName: default + experimentName: example_ga_squad + trialConcurrency: 1 + maxExecDuration: 1h + maxTrialNum: 10 + #choice: local, remote, pai + trainingServicePlatform: pai + #choice: true, false + useAnnotation: false + #Your nni_manager ip + nniManagerIp: 10.10.10.10 + tuner: + codeDir: ../../tuners/ga_customer_tuner + classFileName: customer_tuner.py + className: CustomerTuner + classArgs: + optimize_mode: maximize + trial: + command: chmod +x ./download.sh && ./download.sh && python3 trial.py + codeDir: . + gpuNum: 0 + cpuNum: 1 + memoryMB: 32869 + #The docker image to run nni job on pai + image: msranni/nni:latest + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + dataDir: hdfs://10.10.10.10:9000/username/nni + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + outputDir: 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 + + +Please change the default value to your personal account and machine information. Including `nniManagerIp`, `dataDir`, `outputDir`, `userName`, `passWord` and `host`. + +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 + nnictl create --config ~/nni/examples/trials/ga_squad/config_pai.yml # Techinal details about the trial @@ -97,7 +156,7 @@ The trial has a lot of different files, functions and classes. Here we will only 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: +`graph_to_tf.py` has a function named as `graph_to_network`, here is its skeleton code: def graph_to_network(input1, input2, From 460d84b4741b296d485330ba8bb4f1aa4fac60b9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:12 +0800 Subject: [PATCH 0036/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index 0b12458323..b19a9b9800 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -1,3 +1,33 @@ +# Release 0.4 - 12/6/2018 + +## Major Features + +* [Kubeflow Training service](./KubeflowMode.md) + * Support tf-operator + * [Distributed trial example](../examples/trials/mnist-distributed/dist_mnist.py) on Kubeflow +* [Grid search tuner](../src/sdk/pynni/nni/README.md#Grid) +* [Hyperband tuner](../src/sdk/pynni/nni/README.md#Hyperband) +* Support launch NNI experiment on MAC +* WebUI + * UI support for hyperband tuner + * Remove tensorboard button + * Show experiment error message + * Show line numbers in search space and trial profile + * Support search a specific trial by trial number + * Show trial's hdfsLogPath + * Download experiment parameters + +## Others + +* Asynchronous dispatcher +* Docker file update, add pytorch library +* Refactor 'nnictl stop' process, send SIGTERM to nni manager process, rather than calling stop Rest API. +* OpenPAI training service bug fix + * Support NNI Manager IP configuration(nniManagerIp) in PAI cluster config file, to fix the issue that user’s machine has no eth0 device + * File number in codeDir is capped to 1000 now, to avoid user mistakenly fill root dir for codeDir + * Don’t print useless ‘metrics is empty’ log int PAI job’s stdout. Only print useful message once new metrics are recorded, to reduce confusion when user checks PAI trial’s output for debugging purpose + * Add timestamp at the beginning of each log entry in trial keeper. + # Release 0.3.0 - 11/2/2018 ## NNICTL new features and updates @@ -46,7 +76,7 @@ * 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 (See [here](../src/sdk/pynni/nni/README.md) for instructions about how to use SMAC tuner) +* Support [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) tuner (See [here](HowToChooseTuner.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 @@ -66,10 +96,10 @@ Initial release of Neural Network Intelligence (NNI). * Installation and Deployment * Support pip install and source codes install * Support training services on local mode(including Multi-GPU mode) as well as multi-machines mode -* Tuners, Accessors and Trial +* Tuners, Assessors and Trial * Support AutoML algorithms including: hyperopt_tpe, hyperopt_annealing, hyperopt_random, and evolution_tuner * Support assessor(early stop) algorithms including: medianstop algorithm - * Provide Python API for user defined tuners and accessors + * Provide Python API for user defined tuners and assessors * Provide Python API for user to wrap trial code as NNI deployable codes * Experiments * Provide a command line toolkit 'nnictl' for experiments management From b5e7f446be4dd52525997f8855f3ef89d079a881 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:13 +0800 Subject: [PATCH 0037/1573] New translations README.md (Chinese Simplified) --- zh_CN/deployment/pypi/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/zh_CN/deployment/pypi/README.md b/zh_CN/deployment/pypi/README.md index 4b309c65ac..43f23fe78c 100644 --- a/zh_CN/deployment/pypi/README.md +++ b/zh_CN/deployment/pypi/README.md @@ -25,6 +25,16 @@ make ## 3.How to upload +### upload for testing + +```bash +TWINE_REPOSITORY_URL=https://test.pypi.org/legacy/ make upload +``` + +You may need to input the account and password of https://test.pypi.org during this process. + +### upload for release + ```bash make upload ``` From c3e6b00d78cd0fe4f865bb0f38131e2e0ab94dd2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:15 +0800 Subject: [PATCH 0038/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index a89c16c824..5f619ea1f4 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -4,7 +4,7 @@ So, if user want to implement a customized Tuner, she/he only need to: -1) Inherit a tuner of a base Tuner class 2) Implement receive_trial_result and generate_parameter function 3) Write a script to run Tuner +1) Inherit a tuner of a base Tuner class 2) Implement receive_trial_result and generate_parameter function 3) Configure your customized tuner in experiment yaml config file Here ia an example: @@ -97,4 +97,8 @@ More detail example you could see: > - [evolution-tuner](../src/sdk/pynni/nni/evolution_tuner) > - [hyperopt-tuner](../src/sdk/pynni/nni/hyperopt_tuner) -> - [evolution-based-customized-tuner](../examples/tuners/ga_customer_tuner) \ No newline at end of file +> - [evolution-based-customized-tuner](../examples/tuners/ga_customer_tuner) + +## Write a more advanced automl algorithm + +The methods above are usually enough to write a general tuner. However, users may also want more methods, for example, intermediate results, trials' state (e.g., the methods in assessor), in order to have a more powerful automl algorithm. Therefore, we have another concept called `advisor` which directly inherits from `MsgDispatcherBase` in [`src/sdk/pynni/nni/msg_dispatcher_base.py`](../src/sdk/pynni/nni/msg_dispatcher_base.py). Please refer to [here](./howto_3_CustomizedAdvisor.md) for how to write a customized advisor. \ No newline at end of file From 5486ba2c58fcc0b442b91018a275a82def80615d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:16 +0800 Subject: [PATCH 0039/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index 0e783e0f3c..4d3eb4ea24 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -117,7 +117,7 @@ with tf.Session() as sess: > > > > `@nni.report_intermediate_result`/`@nni.report_final_result` will send the data to assessor/tuner at that line. > > -> > Please refer to [Annotation README](../tools/annotation/README.md) for more information about annotation syntax and its usage. +> > Please refer to [Annotation README](../tools/nni_annotation/README.md) for more information about annotation syntax and its usage. > > Step 2 - Enable NNI Annotation In the yaml configure file, you need to set *useAnnotation* to true to enable NNI annotation: From 0ca43d2bd6efbfda8ead7a775346a5526112e596 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:17 +0800 Subject: [PATCH 0040/1573] New translations WebUI.md (Chinese Simplified) --- zh_CN/docs/WebUI.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/WebUI.md b/zh_CN/docs/WebUI.md index db53fea472..7583b9bc21 100644 --- a/zh_CN/docs/WebUI.md +++ b/zh_CN/docs/WebUI.md @@ -5,7 +5,7 @@ Click the tab "Overview". * See the experiment trial profile and search space message. -* Support to download the experiment message. +* Support to download the experiment result. ![](./img/over1.png) @@ -13,9 +13,9 @@ Click the tab "Overview". ![](./img/over2.png) -## View job accuracy +## View job default metric -Click the tab "Trial Accuracy" to see the point graph of all trials. Hover every point to see its specific accuracy. +Click the tab "Default Metric" to see the point graph of all trials. Hover to see its specific default metric and search space message. ![](./img/accuracy.png) @@ -39,11 +39,12 @@ Click the tab "Trial Duration" to see the bar graph. Click the tab "Trials Detail" to see the status of the all trials. Specifically: * Trial detail: trial's id, trial's duration, start time, end time, status, accuracy and search space file. +* If you run a pai experiment, you can also see the hdfsLogPath. ![](./img/table_openrow.png) * Kill: you can kill a job that status is running. -* Intermediate Result Graph. * Support to search for a specific trial. +* Intermediate Result Graph. ![](./img/intermediate.png) \ No newline at end of file From 0517d8cf67706ee7ff5cdfce1d7a476652d82207 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:33:19 +0800 Subject: [PATCH 0041/1573] New translations SearchSpaceSpec.md (Chinese Simplified) --- zh_CN/docs/SearchSpaceSpec.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/SearchSpaceSpec.md b/zh_CN/docs/SearchSpaceSpec.md index 67450b0a6c..0a153145a3 100644 --- a/zh_CN/docs/SearchSpaceSpec.md +++ b/zh_CN/docs/SearchSpaceSpec.md @@ -43,13 +43,13 @@ User should define the name of variable, type and candidate value of variable. T * {"_type":"loguniform","_value":[low, high]} - * Which means the variable value is a value drawn according to exp(uniform(low, high)) so that the logarithm of the return value is uniformly distributed. - * When optimizing, this variable is constrained to the interval [exp(low), exp(high)]. + * Which means the variable value is a value drawn from a range [low, high] according to a loguniform distribution like exp(uniform(log(low), log(high))), so that the logarithm of the return value is uniformly distributed. + * When optimizing, this variable is constrained to be positive. * {"_type":"qloguniform","_value":[low, high, q]} - * Which means the variable value is a value like round(exp(uniform(low, high)) / q) * q + * Which means the variable value is a value like round(loguniform(low, high)) / q) * q * Suitable for a discrete variable with respect to which the objective is "smooth" and gets smoother with the size of the value, but which should be bounded both above and below. @@ -75,4 +75,9 @@ User should define the name of variable, type and candidate value of variable. T * Suitable for a discrete variable with respect to which the objective is smooth and gets smoother with the size of the variable, which is bounded from one side. -Note that SMAC only supports a subset of the types above, including `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`. In the current version, SMAC does not support cascaded search space (i.e., conditional variable in SMAC). \ No newline at end of file +Note that SMAC only supports a subset of the types above, including `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`. In the current version, SMAC does not support cascaded search space (i.e., conditional variable in SMAC). + +Note that GridSearch Tuner only supports a subset of the types above, including `choic`, `quniform` and `qloguniform`, where q here specifies the number of values that will be sampled. Details about the last two type as follows + +* Type 'quniform' will receive three values [low, high, q], where [low, high] specifies a range and 'q' specifies the number of values that will be sampled evenly. Note that q should be at least 2. It will be sampled in a way that the first sampled value is 'low', and each of the following values is (high-low)/q larger that the value in front of it. +* Type 'qloguniform' behaves like 'quniform' except that it will first change the range to [log(low), log(high)] and sample and then change the sampled value back. \ No newline at end of file From 9316b2b7f03cde38f3d8838a15ac024b525c1f48 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:39 +0800 Subject: [PATCH 0042/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 100 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 zh_CN/docs/GetStarted.md diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md new file mode 100644 index 0000000000..e03a7c1a74 --- /dev/null +++ b/zh_CN/docs/GetStarted.md @@ -0,0 +1,100 @@ +# **Get Started with NNI** + +## **Installation** + +* **Dependencies** + + python >= 3.5 git wget + + python pip should also be correctly installed. You could use "python3 -m pip -v" to check in Linux. + + * Note: we don't support virtual environment in current releases. + +* **Install NNI through pip** + + python3 -m pip install --user --upgrade nni + +* **Install NNI through source code** + + git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh + +## **Quick start: run a customized experiment** + +An experiment is to run multiple trial jobs, each trial job tries a configuration which includes a specific neural architecture (or model) and hyper-parameter values. To run an experiment through NNI, you should: + +* Provide a runnable trial +* Provide or choose a tuner +* Provide a yaml experiment configure file +* (optional) Provide or choose an assessor + +**Prepare trial**: Let's use a simple trial example, e.g. mnist, provided by NNI. After you installed NNI, NNI examples have been put in ~/nni/examples, run `ls ~/nni/examples/trials` to see all the trial examples. You can simply execute the following command to run the NNI mnist example: + + python3 ~/nni/examples/trials/mnist-annotation/mnist.py + + +This command will be filled in the yaml configure file below. Please refer to [here](howto_1_WriteTrial.md) for how to write your own trial. + +**Prepare tuner**: NNI supports several popular automl algorithms, including Random Search, Tree of Parzen Estimators (TPE), Evolution algorithm etc. Users can write their own tuner (refer to [here](howto_2_CustomizedTuner.md), but for simplicity, here we choose a tuner provided by NNI as below: + + tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + + +*builtinTunerName* is used to specify a tuner in NNI, *classArgs* are the arguments pass to the tuner, *optimization_mode* is to indicate whether you want to maximize or minimize your trial's result. + +**Prepare configure file**: Since you have already known which trial code you are going to run and which tuner you are going to use, it is time to prepare the yaml configure file. NNI provides a demo configure file for each trial example, `cat ~/nni/examples/trials/mnist-annotation/config.yml` to see it. Its content is basically shown below: + + authorName: your_name + experimentName: auto_mnist + + # how many trials could be concurrently running + trialConcurrency: 2 + + # maximum experiment running duration + maxExecDuration: 3h + + # empty means never stop + maxTrialNum: 100 + + # choice: local, remote, pai + trainingServicePlatform: local + + # choice: true, false + useAnnotation: true + tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + trial: + command: python mnist.py + codeDir: ~/nni/examples/trials/mnist-annotation + gpuNum: 0 + + +Here *useAnnotation* is true because this trial example uses our python annotation (refer to [here](../tools/annotation/README.md) for details). For trial, we should provide *trialCommand* which is the command to run the trial, provide *trialCodeDir* where the trial code is. The command will be executed in this directory. We should also provide how many GPUs a trial requires. + +With all these steps done, we can run the experiment with the following command: + + nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml + + +You can refer to [here](NNICTLDOC.md) for more usage guide of *nnictl* command line tool. + +## View experiment results + +The experiment has been running now, NNI provides WebUI for you to view experiment progress, to control your experiment, and some other appealing features. The WebUI is opened by default by `nnictl create`. + +## Read more + +* [Tuners supported in the latest NNI release](./HowToChooseTuner.md) +* [Overview](Overview.md) +* [Installation](Installation.md) +* [Use command line tool nnictl](NNICTLDOC.md) +* [Use NNIBoard](WebUI.md) +* [Define search space](SearchSpaceSpec.md) +* [Config an experiment](ExperimentConfig.md) +* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) +* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) +* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From e3bbbd682286677658ac111bd426ed6fd8bcc388 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:41 +0800 Subject: [PATCH 0043/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 122 +++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 zh_CN/docs/KubeflowMode.md diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md new file mode 100644 index 0000000000..0662dc1621 --- /dev/null +++ b/zh_CN/docs/KubeflowMode.md @@ -0,0 +1,122 @@ +# **Run an Experiment on Kubeflow** + +Now NNI supports running experiment on [Kubeflow](https://github.com/kubeflow/kubeflow), called kubeflow mode. Before starting to use NNI kubeflow mode, you should have a kubernetes cluster, either on-prem or [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/), a Ubuntu machine on which [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) is setup to connect to your kubernetes cluster. If you are not familiar with kubernetes, [here](https://kubernetes.io/docs/tutorials/kubernetes-basics/) is a goot start. In kubeflow mode, your trial program will run as kubeflow job in kubernetes cluster. + +## Prerequisite for on-premises Kubernetes Service + +1. A **Kubernetes** cluster using Kubernetes 1.8 or later. Follow this [guideline](https://kubernetes.io/docs/setup/) to set up Kubernetes +2. Download, set up, and deploy **Kubelow** to your Kubernetes cluster. Follow this [guideline](https://www.kubeflow.org/docs/started/getting-started/) to set up Kubeflow +3. Prepare a **kubeconfig** file, which will be used by NNI to interact with your kubernetes API server. By default, NNI manager will use $(HOME)/.kube/config as kubeconfig file's path. You can also specify other kubeconfig files by setting the **KUBECONFIG** environment variable. Refer this [guideline](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig) to learn more about kubeconfig. +4. If your NNI trial job needs GPU resource, you should follow this [guideline](https://github.com/NVIDIA/k8s-device-plugin) to configure **Nvidia device plugin for Kubernetes**. +5. Prepare a **NFS server** and export a general purpose mount (we recommend to map your NFS server path in `root_squash option`, otherwise permission issue may raise when nni copy files to NFS. Refer this [page](https://linux.die.net/man/5/exports) to learn what root_squash option is), or **Azure File Storage**. +6. Install **NFS client** on the machine where you install NNI and run nnictl to create experiment. Run this command to install NFSv4 client: + + apt-get install nfs-common + + +7. Install **NNI**, follow the install guide [here](GetStarted.md). + +## Prerequisite for Azure Kubernetes Service + +1. NNI support kubeflow based on Azure Kubernetes Service, follow the [guideline](https://azure.microsoft.com/en-us/services/kubernetes-service/) to set up Azure Kubernetes Service. +2. Install [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) and **kubectl**. Use `az login` to set azure account, and connect kubectl client to AKS, refer this [guideline](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster). +3. Deploy kubeflow on Azure Kubernetes Service, follow the [guideline](https://www.kubeflow.org/docs/started/getting-started/). +4. Follow the [guideline](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal) to create azure file storage account. If you use Azure Kubernetes Service, nni need Azure Storage Service to store code files and the output files. +5. To access Azure storage service, nni need the access key of the storage account, and nni use [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) Service to protect your private key. Set up Azure Key Vault Service, add a secret to Key Vault to store the access key of Azure storage account. Follow this [guideline](https://docs.microsoft.com/en-us/azure/key-vault/quick-create-cli) to store the access key. + +## Design + +![](./img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. + +For each trial, we will upload all the files in your local codeDir path (configured in nni_config.yaml) together with NNI generated files like parameter.cfg into a storage volumn. Right now we support two kinds of storage volumns: [nfs](https://en.wikipedia.org/wiki/Network_File_System) and [azure file storage](https://azure.microsoft.com/en-us/services/storage/files/), you should configure the storage volumn in nni config yaml file. After files are prepared, Kubeflow training service will call K8S rest API to create kubeflow jobs ([tf-operator](https://github.com/kubeflow/tf-operator) job or [pytorch-operator](https://github.com/kubeflow/pytorch-operator) job) in K8S, and mount your storage volumn into the job's pod. Output files of kubeflow job, like stdout, stderr, trial.log or model files, will also be copied back to the storage volumn. NNI will show the storage volumn's URL for each trial in WebUI, to allow user browse the log files and job's output files. + +## Run an experiment + +Use `examples/trials/mnist` as an example. The nni config yaml file's content is like: + + authorName: your_name + experimentName: example_mnist + # how many trials could be concurrently running + trialConcurrency: 4 + # maximum experiment running duration + maxExecDuration: 3h + # empty means never stop + maxTrialNum: 100 + # choice: local, remote, pai, kubeflow + trainingServicePlatform: kubeflow + # choice: true, false + useAnnotation: false + tuner: + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + trial: + codeDir: ~/nni/examples/trials/mnist + ps: + replicas: 1 + command: python mnist-keras.py + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + image: {your_docker_image_for_tensorflow_ps} + worker: + replicas: 1 + command: python mnist-keras.py + gpuNum: 2 + cpuNum: 1 + memoryMB: 8196 + image: {your_docker_image_for_tensorflow_worker} + kubeflowConfig: + operator: tf-operator + storage: nfs + nfs: + server: {your_nfs_server} + path: {your_nfs_server_exported_path} + + +If you use Azure Kubernetes Service, you should set `kubeflowConfig` in your config yaml file as follows: + + kubeflowConfig: + operator: tf-operator + storage: azureStorage + keyVault: + vaultName: {your_vault_name} + name: {your_secert_name} + azureStorage: + accountName: {your_storage_account_name} + azureShare: {your_azure_share_name} + + +Note: You should explicitly set `trainingServicePlatform: kubeflow` in nni config yaml file if you want to start experiment in kubeflow mode. + +Trial configuration in kubeflow mode have the following configuration keys: + +* codeDir + * code directory, where you put training code and config files +* worker (required). This config section is used to configure tensorflow worker role + * replicas + * Required key. Should be positive number depends on how many replication your want to run for tensorflow worker role. + * command + * Required key. Command to launch your trial job, like ```python mnist.py``` + * memoryMB + * Required key. Should be positive number based on your trial program's memory requirement + * cpuNum + * gpuNum + * image + * Required key. In kubeflow mode, your trial program will be scheduled by Kubernetes to run in [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/). This key is used to specify the Docker image used to create the pod where your trail program 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. +* ps (optional). This config section is used to configure tensorflow parameter server role. + +Once complete to fill nni experiment config file and save (for example, save as exp_kubeflow.yaml), then run the following command + + nnictl create --config exp_kubeflow.yaml + + +to start the experiment in kubeflow mode. NNI will create Kubeflow tfjob for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the kubeflow tfjob created by NNI in your Kubernetes dashboard. + +Notice: In kubeflow mode, NNIManager will start a rest server and listen on a port which is your NNI WebUI's port plus 1. For example, if your WebUI port is `8080`, the rest server will listen on `8081`, to receive metrics from trial job running in Kubernetes. So you should `enable 8081` TCP port in your firewall rule to allow incoming traffic. + +Once a trial job is completed, you can goto NNI WebUI's overview page (like http://localhost:8080/oview) to check trial's information. + +Any problems when using NNI in kubeflow mode, plesae create issues on [NNI github repo](https://github.com/Microsoft/nni), or send mail to nni@microsoft.com \ No newline at end of file From b54080e2b7cf430c0290b2a84e1abbd3cd103426 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:43 +0800 Subject: [PATCH 0044/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 727 +++++++++++++++++++++++++++++++++ 1 file changed, 727 insertions(+) create mode 100644 zh_CN/docs/ExperimentConfig.md diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md new file mode 100644 index 0000000000..6e8b90e143 --- /dev/null +++ b/zh_CN/docs/ExperimentConfig.md @@ -0,0 +1,727 @@ +# Experiment config reference + +A config file is needed when create an experiment, the path of the config file is provide to nnictl. The config file is written in yaml format, and need to be written correctly. This document describes the rule to write config file, and will provide some examples and templates. + +## Template + +* **light weight(without Annotation and Assessor)** + + authorName: + experimentName: + trialConcurrency: + maxExecDuration: + maxTrialNum: + #choice: local, remote, pai, kubeflow + trainingServicePlatform: + searchSpacePath: + #choice: true, false + useAnnotation: + tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: + classArgs: + #choice: maximize, minimize + optimize_mode: + gpuNum: + trial: + command: + codeDir: + gpuNum: + #machineList can be empty if the platform is local + machineList: + - ip: + port: + username: + passwd: + + +* **Use Assessor** + + authorName: + experimentName: + trialConcurrency: + maxExecDuration: + maxTrialNum: + #choice: local, remote, pai, kubeflow + trainingServicePlatform: + searchSpacePath: + #choice: true, false + useAnnotation: + tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: + classArgs: + #choice: maximize, minimize + optimize_mode: + gpuNum: + assessor: + #choice: Medianstop + builtinAssessorName: + classArgs: + #choice: maximize, minimize + optimize_mode: + gpuNum: + trial: + command: + codeDir: + gpuNum: + #machineList can be empty if the platform is local + machineList: + - ip: + port: + username: + passwd: + + +* **Use Annotation** + + authorName: + experimentName: + trialConcurrency: + maxExecDuration: + maxTrialNum: + #choice: local, remote, pai, kubeflow + trainingServicePlatform: + #choice: true, false + useAnnotation: + tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: + classArgs: + #choice: maximize, minimize + optimize_mode: + gpuNum: + assessor: + #choice: Medianstop + builtinAssessorName: + classArgs: + #choice: maximize, minimize + optimize_mode: + gpuNum: + trial: + command: + codeDir: + gpuNum: + #machineList can be empty if the platform is local + machineList: + - ip: + port: + username: + passwd: + + +## Configuration + +* **authorName** + + * Description + + **authorName** is the name of the author who create the experiment. TBD: add default value + +* **experimentName** + + * Description + + **experimentName** is the name of the experiment created. + TBD: add default value + +* **trialConcurrency** + + * Description + + **trialConcurrency** specifies the max num of trial jobs run simultaneously. + + Note: if trialGpuNum is bigger than the free gpu numbers, and the trial jobs running simultaneously can not reach trialConcurrency number, some trial jobs will be put into a queue to wait for gpu allocation. + + +* **maxExecDuration** + + * Description + + **maxExecDuration** specifies the max duration time of an experiment.The unit of the time is {**s**, **m**, **h**, **d**}, which means {*seconds*, *minutes*, *hours*, *days*}. + +* **maxTrialNum** + + * Description + + **maxTrialNum** specifies the max number of trial jobs created by nni, including succeeded and failed jobs. + +* **trainingServicePlatform** + + * Description + + **trainingServicePlatform** specifies the platform to run the experiment, including {**local**, **remote**, **pai**, **kubeflow**}. + + * **local** run an experiment on local ubuntu machine. + + * **remote** submit trial jobs to remote ubuntu machines, and **machineList** field should be filed in order to set up SSH connection to remote machine. + + * **pai** submit trial jobs to [OpenPai](https://github.com/Microsoft/pai) of Microsoft. For more details of pai configuration, please reference [PAIMOdeDoc](./PAIMode.md) + + * **kubeflow** submit trial jobs to [kubeflow](https://www.kubeflow.org/docs/about/kubeflow/), nni support kubeflow based on normal kubernetes and [azure kubernetes](https://azure.microsoft.com/en-us/services/kubernetes-service/). + +* **searchSpacePath** + + * Description + + **searchSpacePath** specifies the path of search space file, which should be a valid path in the local linux machine. + + Note: if set useAnnotation=True, the searchSpacePath field should be removed. + + +* **useAnnotation** + + * Description + + **useAnnotation** use annotation to analysis trial code and generate search space. + + Note: if set useAnnotation=True, the searchSpacePath field should be removed. + + +* **nniManagerIp** + + * Description + + **nniManagerIp** set the IP address of the machine on which nni manager process runs. This field is optional, and if it's not set, eth0 device IP will be used instead. + + Note: run ifconfig on NNI manager's machine to check if eth0 device exists. If not, we recommend to set nnimanagerIp explicitly. + + +* **tuner** + + * Description + + **tuner** specifies the tuner algorithm in the experiment, there are two kinds of ways to set tuner. One way is to use tuner provided by nni sdk, need to set **builtinTunerName** and **classArgs**. Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. + + * **builtinTunerName** and **classArgs** + + * **builtinTunerName** + + **builtinTunerName** specifies the name of system tuner, nni sdk provides four kinds of tuner, including {**TPE**, **Random**, **Anneal**, **Evolution**, **BatchTuner**, **GridSearch**} + + * **classArgs** + + **classArgs** specifies the arguments of tuner algorithm. If the **builtinTunerName** is in {**TPE**, **Random**, **Anneal**, **Evolution**}, user should set **optimize_mode**. + + * **codeDir**, **classFileName**, **className** and **classArgs** * **codeDir** + + **codeDir** specifies the directory of tuner code. + + * __classFileName__ + + + **classFileName** specifies the name of tuner file. + + * **className** + + **className** specifies the name of tuner class. + + * **classArgs** + + **classArgs** specifies the arguments of tuner algorithm. + + * **gpuNum** + + **gpuNum** specifies the gpu number to run the tuner process. The value of this field should be a positive number. + + Note: users could only specify one way to set tuner, for example, set {tunerName, optimizationMode} or {tunerCommand, tunerCwd}, and could not set them both. + + +* **assessor** + + * Description + + **assessor** specifies the assessor algorithm to run an experiment, there are two kinds of ways to set assessor. One way is to use assessor provided by nni sdk, users need to set **builtinAssessorName** and **classArgs**. Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. + + * **builtinAssessorName** and **classArgs** + + * **builtinAssessorName** + + **builtinAssessorName** specifies the name of system assessor, nni sdk provides four kinds of tuner, including {**TPE**, **Random**, **Anneal**, **Evolution**} + + * **classArgs** + + **classArgs** specifies the arguments of tuner algorithm + + * **codeDir**, **classFileName**, **className** and **classArgs** * **codeDir** + + **codeDir** specifies the directory of tuner code. + + * __classFileName__ + + + **classFileName** specifies the name of tuner file. + + * **className** + + **className** specifies the name of tuner class. + + * **classArgs** + + **classArgs** specifies the arguments of tuner algorithm. + + * **gpuNum** + + **gpuNum** specifies the gpu number to run the assessor process. The value of this field should be a positive number. + + Note: users' could only specify one way to set assessor, for example,set {assessorName, optimizationMode} or {assessorCommand, assessorCwd}, and users could not set them both.If users do not want to use assessor, assessor fileld should leave to empty. + + +* **trial(local, remote)** + + * **command** + + __command__ specifies the command to run trial process. + + + * **codeDir** + + **codeDir** specifies the directory of your own trial file. + + * **gpuNum** + + **gpuNum** specifies the num of gpu to run the trial process. Default value is 0. + +* **trial(pai)** + + * **command** + + __command__ specifies the command to run trial process. + + + * **codeDir** + + **codeDir** specifies the directory of the own trial file. + + * **gpuNum** + + **gpuNum** specifies the num of gpu to run the trial process. Default value is 0. + + * **cpuNum** + + **cpuNum** is the cpu number of cpu to be used in pai container. + + * **memoryMB** + + **memoryMB** set the momory size to be used in pai's container. + + * **image** + + **image** set the image to be used in pai. + + * **dataDir** + + **dataDir** is the data directory in hdfs to be used. + + * **outputDir** + + **outputDir** is the output directory in hdfs to be used in pai, the stdout and stderr files are stored in the directory after job finished. + +* **trial(kubeflow)** + + * **codeDir** + + **codeDir** is the local directory where the code files in. + + * **ps(optional)** + + **ps** is the configuration for kubeflow's tensorflow-operator. + + * **replicas** + + **replicas** is the replica number of **ps** role. + + * **command** + + **command** is the run script in **ps**'s container. + + * **gpuNum** + + **gpuNum** set the gpu number to be used in **ps** container. + + * **cpuNum** + + **cpuNum** set the cpu number to be used in **ps** container. + + * **memoryMB** + + **memoryMB** set the memory size of the container. + + * **image** + + **iamge** set the image to be used in **ps**. + + * **worker** + + **worker** is the configuration for kubeflow's tensorflow-operator. + + * **replicas** + + **replicas** is the replica number of **worker** role. + + * **command** + + **command** is the run script in **worker**'s container. + + * **gpuNum** + + **gpuNum** set the gpu number to be used in **worker** container. + + * **cpuNum** + + **cpuNum** set the cpu number to be used in **worker** container. + + * **memoryMB** + + **memoryMB** set the memory size of the container. + + * **image** + + **iamge** set the image to be used in **worker**. + +* **machineList** + + __machineList__ should be set if users set __trainingServicePlatform__=remote, or it could be empty. + + + * **ip** + + **ip** is the ip address of remote machine. + + * **port** + + **port** is the ssh port to be used to connect machine. + + Note: if users set port empty, the default value will be 22. + + + * **username** + + **username** is the account of remote machine. + + * **passwd** + + **passwd** specifies the password of the account. + + * **sshKeyPath** + + If users use ssh key to login remote machine, could set **sshKeyPath** in config file. **sshKeyPath** is the path of ssh key file, which should be valid. + + Note: if users set passwd and sshKeyPath simultaneously, nni will try passwd. + + + * **passphrase** + + **passphrase** is used to protect ssh key, which could be empty if users don't have passphrase. + +* **kubeflowConfig**: + + * **operator** + + **operator** specify the kubeflow's operator to be used, nni support **tf-operator** in current version. + + * **storage** + + **storage** specify the storage type of kubeflow, including {**nfs**, **azureStorage**}. This field is optional, and the default value is **nfs**. If the config use azureStorage, this field must be completed. + + * **nfs** + + **server** is the host of nfs server + + **path** is the mounted path of nfs + + * **keyVault** + + If users want to use azure kubernetes service, they should set keyVault to storage the private key of your azure storage account. Refer: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-manage-with-cli2 + + * **vaultName** + + **vaultName** is the value of ```--vault-name``` used in az command. + + * **name** + + **name** is the value of ```--name``` used in az command. + + * **azureStorage** + + If users use azure kubernetes service, they should set azure storage account to store code files. + + * **accountName** + + **accountName** is the name of azure storage account. + + * **azureShare** + + **azureShare** is the share of the azure file storage. + +* **paiConfig** + + * **userName** + + **userName** is the user name of your pai account. + + * **password** + + **password** is the password of the pai account. + + * **host** + + **host** is the host of pai. + +## Examples + +* **local mode** + + If users want to run trial jobs in local machine, and use annotation to generate search space, could use the following config: + + authorName: test + experimentName: test_experiment + trialConcurrency: 3 + maxExecDuration: 1h + maxTrialNum: 10 + #choice: local, remote, pai, kubeflow + trainingServicePlatform: local + #choice: true, false + useAnnotation: true + tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + gpuNum: 0 + trial: + command: python3 mnist.py + codeDir: /nni/mnist + gpuNum: 0 + + + Could add assessor configuration in config file if set assessor. + + + authorName: test + experimentName: test_experiment + trialConcurrency: 3 + maxExecDuration: 1h + maxTrialNum: 10 + #choice: local, remote, pai, kubeflow + trainingServicePlatform: local + searchSpacePath: /nni/search_space.json + #choice: true, false + useAnnotation: false + tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + gpuNum: 0 + assessor: + #choice: Medianstop + builtinAssessorName: Medianstop + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + gpuNum: 0 + trial: + command: python3 mnist.py + codeDir: /nni/mnist + gpuNum: 0 + + + Or you could specify your own tuner and assessor file as following: + + + authorName: test + experimentName: test_experiment + trialConcurrency: 3 + maxExecDuration: 1h + maxTrialNum: 10 + #choice: local, remote, pai, kubeflow + trainingServicePlatform: local + searchSpacePath: /nni/search_space.json + #choice: true, false + useAnnotation: false + tuner: + codeDir: /nni/tuner + classFileName: mytuner.py + className: MyTuner + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + gpuNum: 0 + assessor: + codeDir: /nni/assessor + classFileName: myassessor.py + className: MyAssessor + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + gpuNum: 0 + trial: + command: python3 mnist.py + codeDir: /nni/mnist + gpuNum: 0 + + +* **remote mode** + +If run trial jobs in remote machine, users could specify the remote mahcine information as fllowing format: + + authorName: test + experimentName: test_experiment + trialConcurrency: 3 + maxExecDuration: 1h + maxTrialNum: 10 + #choice: local, remote, pai, kubeflow + trainingServicePlatform: remote + searchSpacePath: /nni/search_space.json + #choice: true, false + useAnnotation: false + tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + gpuNum: 0 + trial: + command: python3 mnist.py + codeDir: /nni/mnist + gpuNum: 0 + #machineList can be empty if the platform is local + machineList: + + - ip: 10.10.10.10 + port: 22 + username: test + passwd: test + - ip: 10.10.10.11 + port: 22 + username: test + passwd: test + - ip: 10.10.10.12 + port: 22 + username: test + sshKeyPath: /nni/sshkey + passphrase: qwert + + +* **pai mode** + + authorName: test + experimentName: nni_test1 + trialConcurrency: 1 + maxExecDuration:500h + maxTrialNum: 1 + #choice: local, remote, pai, kubeflow + 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: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + trial: + command: python3 main.py + codeDir: . + gpuNum: 4 + cpuNum: 2 + memoryMB: 10000 + #The docker image to run nni job on pai + image: msranni/nni:latest + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + dataDir: hdfs://10.11.12.13:9000/test + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + outputDir: hdfs://10.11.12.13:9000/test + paiConfig: + #The username to login pai + userName: test + #The password to login pai + passWord: test + #The host of restful server of pai + host: 10.10.10.10 + + + +* **kubeflow mode** + +kubeflow use nfs as storage. + + authorName: default + experimentName: example_mni + trialConcurrency: 1 + maxExecDuration: 1h + maxTrialNum: 1 + #choice: local, remote, pai, kubeflow + trainingServicePlatform: kubeflow + 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: + codeDir: . + worker: + replicas: 1 + command: python3 mnist.py + gpuNum: 0 + cpuNum: 1 + memoryMB: 8192 + image: msranni/nni:latest + kubeflowConfig: + operator: tf-operator + nfs: + server: 10.10.10.10 + path: /var/nfs/general + + +kubeflow use azure storage + + authorName: default + experimentName: example_mni + trialConcurrency: 1 + maxExecDuration: 1h + maxTrialNum: 1 + #choice: local, remote, pai, kubeflow + trainingServicePlatform: kubeflow + searchSpacePath: search_space.json + #choice: true, false + useAnnotation: false + #nniManagerIp: 10.10.10.10 + tuner: + #choice: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + assessor: + builtinAssessorName: Medianstop + classArgs: + optimize_mode: maximize + gpuNum: 0 + trial: + codeDir: . + worker: + replicas: 1 + command: python3 mnist.py + gpuNum: 0 + cpuNum: 1 + memoryMB: 4096 + image: msranni/nni:latest + kubeflowConfig: + operator: tf-operator + keyVault: + vaultName: Contoso-Vault + name: AzureStorageAccountKey + azureStorage: + accountName: storage + azureShare: share01 \ No newline at end of file From cf10b4dc443558c880dcd5640384845df4fa68f8 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:44 +0800 Subject: [PATCH 0045/1573] New translations howto_3_CustomizedAdvisor.md (Chinese Simplified) --- zh_CN/docs/howto_3_CustomizedAdvisor.md | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 zh_CN/docs/howto_3_CustomizedAdvisor.md diff --git a/zh_CN/docs/howto_3_CustomizedAdvisor.md b/zh_CN/docs/howto_3_CustomizedAdvisor.md new file mode 100644 index 0000000000..02bfcab587 --- /dev/null +++ b/zh_CN/docs/howto_3_CustomizedAdvisor.md @@ -0,0 +1,38 @@ +# **How To** - Customize Your Own Advisor + +*Advisor targets the scenario that the automl algorithm wants the methods of both tuner and assessor. Advisor is similar to tuner on that it receives trial configuration request, final results, and generate trial configurations. Also, it is similar to assessor on that it receives intermediate results, trial's end state, and could send trial kill command. Note that, if you use Advisor, tuner and assessor are not allowed to be used at the same time.* + +So, if user want to implement a customized Advisor, she/he only need to: + +1) Define an Advisor inheriting from the MsgDispatcherBase class 2) Implement the methods with prefix `handle_` except `handle_request` 3) Configure your customized Advisor in experiment yaml config file + +Here ia an example: + +**1) Define an Advisor inheriting from the MsgDispatcherBase class** + +```python +from nni.msg_dispatcher_base import MsgDispatcherBase + +class CustomizedAdvisor(MsgDispatcherBase): + def __init__(self, ...): + ... +``` + +**2) Implement the methods with prefix `handle_` except `handle_request`** + +Please refer to the implementation of Hyperband ([src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py](../src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py)) for how to implement the methods. + +**3) Configure your customized Advisor in experiment yaml config file** + +Similar to tuner and assessor. NNI needs to locate your customized Advisor class and instantiate the class, so you need to specify the location of the customized Advisor class and pass literal values as parameters to the \_\_init__ constructor. + +```yaml +advisor: + codeDir: /home/abc/myadvisor + classFileName: my_customized_advisor.py + className: CustomizedAdvisor + # Any parameter need to pass to your advisor class __init__ constructor + # can be specified in this optional classArgs field, for example + classArgs: + arg1: value1 +``` \ No newline at end of file From fa7f06c6bd07a51ced194aa7693ec0059dade0b1 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:45 +0800 Subject: [PATCH 0046/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 zh_CN/docs/Overview.md diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md new file mode 100644 index 0000000000..6fb6e3979d --- /dev/null +++ b/zh_CN/docs/Overview.md @@ -0,0 +1,55 @@ +# NNI Overview + +NNI (Neural Network Intelligence) is a toolkit to help users run automated machine learning experiments. For each experiment, user only need to define a search space and update a few lines of code, and then leverage NNI build-in algorithms and training services to search the best hyper parameters and/or neural architecture. + +> Step 1: [Define search space](SearchSpaceSpec.md) +> +> Step 2: [Update model codes](howto_1_WriteTrial.md) +> +> Step 3: [Define Experiment](ExperimentConfig.md) + +

+drawing +

+ +After user submits the experiment through a command line tool [nnictl](../tools/README.md), a demon process (NNI manager) take care of search process. NNI manager continuously get search settings that generated by tuning algorithms, then NNI manager asks the training service component to dispatch and run trial jobs in a targeted training environment (e.g. local machine, remote servers and cloud). The results of trials jobs such as model accurate will send back to tuning algorithms for generating more meaningful search settings. NNI manager stops the search process after it find the best models. + +## Architecture Overview + +

+drawing +

+ +User can use the nnictl and/or a visualized Web UI nniboard to monitor and debug a given experiment. + +NNI provides a set of examples in the package to get you familiar with the above process. In the following example [/examples/trials/mnist], we had already set up the configuration and updated the training codes for you. You can directly run the following command to start an experiment. + +## Key Concepts + +**Experiment** in NNI is a method for testing different assumptions (hypotheses) by Trials under conditions constructed and controlled by NNI. During the experiment, one or more conditions are allowed to change in an organized manner and effects of these changes on associated conditions. + +### **Trial** + +**Trial** in NNI is an individual attempt at applying a set of parameters on a model. + +### **Tuner** + +**Tuner** in NNI is an implementation of Tuner API for a special tuning algorithm. [Read more about the Tuners supported in the latest NNI release](HowToChooseTuner.md) + +### **Assessor** + +**Assessor** in NNI is an implementation of Assessor API for optimizing the execution of experiment. + +## Learn More + +* [Get started](GetStarted.md) +* [Install NNI](Installation.md) +* [Use command line tool nnictl](NNICTLDOC.md) +* [Use NNIBoard](WebUI.md) +* [Use annotation](howto_1_WriteTrial.md#nni-python-annotation) + +### **Tutorials** + +* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) +* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) +* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From a0238e9df76c19903afc2aeff93230f8aa4dda89 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:47 +0800 Subject: [PATCH 0047/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 273 +++++++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 zh_CN/docs/HowToChooseTuner.md diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md new file mode 100644 index 0000000000..ddfae2d979 --- /dev/null +++ b/zh_CN/docs/HowToChooseTuner.md @@ -0,0 +1,273 @@ +# How to use Tuner that NNI supports? + +For now, NNI has supported the following tuner algorithms. Note that NNI installation only installs a subset of those algorithms, other algorithms should be installed through `nnictl package install` before you use them. For example, for SMAC the installation command is `nnictl package install --name=SMAC`. + +* [TPE](#TPE) +* [Random Search](#Random) +* [Anneal](#Anneal) +* [Naive Evolution](#Evolution) +* [SMAC](#SMAC) (to install through `nnictl`) +* [Batch Tuner](#Batch) +* [Grid Search](#Grid) +* [Hyperband](#Hyperband) +* [Network Morphism](#NetworkMorphism) (require pyTorch) + + ## Supported tuner algorithms + +We will introduce some basic knowledge about the tuner algorithms, suggested scenarios for each tuner, and their example usage (for complete usage spec, please refer to [here]()). + + +**TPE** + +The Tree-structured Parzen Estimator (TPE) is a sequential model-based optimization (SMBO) approach. SMBO methods sequentially construct models to approximate the performance of hyperparameters based on historical measurements, and then subsequently choose new hyperparameters to test based on this model. The TPE approach models P(x|y) and P(y) where x represents hyperparameters and y the associated evaluate matric. P(x|y) is modeled by transforming the generative process of hyperparameters, replacing the distributions of the configuration prior with non-parametric densities. This optimization approach is described in detail in [Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf). ​ +*Suggested scenario*: TPE, as a black-box optimization, can be used in various scenarios, and shows good performance in general. Especially when you have limited computation resource and can only try a small number of trials. From a large amount of experiments, we could found that TPE is far better than Random Search. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: TPE + classArgs: + # choice: maximize, minimize + optimize_mode: maximize +``` + + +**Random Search** + +In [Random Search for Hyper-Parameter Optimization](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) show that Random Search might be surprisingly simple and effective. We suggests that we could use Random Search as baseline when we have no knowledge about the prior distribution of hyper-parameters. + +*Suggested scenario*: Random search is suggested when each trial does not take too long (e.g., each trial can be completed very soon, or early stopped by assessor quickly), and you have enough computation resource. Or you want to uniformly explore the search space. Random Search could be considered as baseline of search algorithm. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: Random +``` + + +**Anneal** + +This simple annealing algorithm begins by sampling from the prior, but tends over time to sample from points closer and closer to the best ones observed. This algorithm is a simple variation on random search that leverages smoothness in the response surface. The annealing rate is not adaptive. + +*Suggested scenario*: Anneal is suggested when each trial does not take too long, and you have enough computation resource(almost same with Random Search). Or the variables in search space could be sample from some prior distribution. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: Anneal + classArgs: + # choice: maximize, minimize + optimize_mode: maximize +``` + + +**Naive Evolution** + +Naive Evolution comes from [Large-Scale Evolution of Image Classifiers](https://arxiv.org/pdf/1703.01041.pdf). It randomly initializes a population based on search space. For each generation, it chooses better ones and do some mutation (e.g., change a hyperparameter, add/remove one layer) on them to get the next generation. Naive Evolution requires many trials to works, but it's very simple and easily to expand new features. + +*Suggested scenario*: Its requirement of computation resource is relatively high. Specifically, it requires large inital population to avoid falling into local optimum. If your trial is short or leverages assessor, this tuner is a good choice. And, it is more suggested when your trial code supports weight transfer, that is, the trial could inherit the converged weights from its parent(s). This can greatly speed up the training progress. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: Evolution + classArgs: + # choice: maximize, minimize + optimize_mode: maximize +``` + + +**SMAC** + +[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, in order to handle categorical parameters. The SMAC supported by nni is a wrapper on [the SMAC3 github repo](https://github.com/automl/SMAC3). + +Note that SMAC on nni only supports a subset of the types in [search space spec](./SearchSpaceSpec.md), including `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`. + +*Installation*: + +* Install swig first. (`sudo apt-get install swig` for Ubuntu users) +* Run `nnictl package install --name=SMAC` + +*Suggested scenario*: Similar to TPE, SMAC is also a black-box tuner which can be tried in various scenarios, and is suggested when computation resource is limited. It is optimized for discrete hyperparameters, thus, suggested when most of your hyperparameters are discrete. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: SMAC + classArgs: + # choice: maximize, minimize + optimize_mode: maximize +``` + + +**Batch tuner** + +Batch tuner allows users to simply provide several configurations (i.e., choices of hyper-parameters) for their trial code. After finishing all the configurations, the experiment is done. Batch tuner only supports the type `choice` in [search space spec](./SearchSpaceSpec.md). + +*Suggested sceanrio*: If the configurations you want to try have been decided, you can list them in searchspace file (using `choice`) and run them using batch tuner. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: BatchTuner +``` + +Note that the search space that BatchTuner supported like: + +```json +{ + "combine_params": + { + "_type" : "choice", + "_value" : [{"optimizer": "Adam", "learning_rate": 0.00001}, + {"optimizer": "Adam", "learning_rate": 0.0001}, + {"optimizer": "Adam", "learning_rate": 0.001}, + {"optimizer": "SGD", "learning_rate": 0.01}, + {"optimizer": "SGD", "learning_rate": 0.005}, + {"optimizer": "SGD", "learning_rate": 0.0002}] + } +} +``` + +The search space file including the high-level key `combine_params`. The type of params in search space must be `choice` and the `values` including all the combined-params value. + + +**Grid Search** + +Grid Search performs an exhaustive searching through a manually specified subset of the hyperparameter space defined in the searchspace file. Note that the only acceptable types of search space are `choice`, `quniform`, `qloguniform`. **The number `q` in `quniform` and `qloguniform` has special meaning (different from the spec in [search space spec](./SearchSpaceSpec.md)). It means the number of values that will be sampled evenly from the range `low` and `high`.** + +*Suggested scenario*: It is suggested when search space is small, it is feasible to exhaustively sweeping the whole search space. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: GridSearch +``` + + +**Hyperband** + +[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) tries to use limited resource to explore as many configurations as possible, and finds out the promising ones to get the final result. The basic idea is generating many configurations and to run them for small number of STEPs to find out promising one, then further training those promising ones to select several more promising one. More detail can be referred to [here](../src/sdk/pynni/nni/hyperband_advisor/README.md). + +*Suggested scenario*: It is suggested when you have limited computation resource but have relatively large search space. It performs good in the scenario that intermediate result (e.g., accuracy) can reflect good or bad of final result (e.g., accuracy) to some extent. + +*Usage*: + +```yaml + # config.yaml + advisor: + builtinAdvisorName: Hyperband + classArgs: + # choice: maximize, minimize + optimize_mode: maximize + # R: the maximum STEPS (could be the number of mini-batches or epochs) can be + # allocated to a trial. Each trial should use STEPS to control how long it runs. + R: 60 + # eta: proportion of discarded trials + eta: 3 +``` + + +**Network Morphism** + +[Network Morphism](7) provides functions to automatically search for architecture of deep learning models. Every child network inherits the knowledge from its parent network and morphs into diverse types of networks, including changes of depth, width and skip-connection. Next, it estimates the value of child network using the history architecture and metric pairs. Then it selects the most promising one to train. More detail can be referred to [here](../src/sdk/pynni/nni/networkmorphism_tuner/README.md). + +*Installation*: NetworkMorphism requires [pyTorch](https://pytorch.org/get-started/locally), so users should install it first. + +*Suggested scenario*: It is suggested that you want to apply deep learning methods to your task (your own dataset) but you have no idea of how to choose or design a network. You modify the [example](../examples/trials/network_morphism/cifar10/cifar10_keras.py) to fit your own dataset and your own data augmentation method. Also you can change the batch size, learning rate or optimizer. It is feasible for different tasks to find a good network architecture. Now this tuner only supports the cv domain. + +*Usage*: + +```yaml + # config.yaml + tuner: + builtinTunerName: NetworkMorphism + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + #for now, this tuner only supports cv domain + task: cv + #input image width + input_width: 32 + #input image channel + input_channel: 3 + #number of classes + n_output_node: 10 +``` + +# How to use Assessor that NNI supports? + +For now, NNI has supported the following assessor algorithms. + +* [Medianstop](#Medianstop) +* [Curvefitting](#Curvefitting) + +## Supported Assessor Algorithms + + +**Medianstop** + +Medianstop is a simple early stopping rule mentioned in the [paper](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf). It stops a pending trial X at step S if the trial’s best objective value by step S is strictly worse than the median value of the running averages of all completed trials’ objectives reported up to step S. + +*Suggested scenario*: It is applicable in a wide range of performance curves, thus, can be used in various scenarios to speed up the tuning progress. + +*Usage*: + +```yaml + assessor: + builtinAssessorName: Medianstop + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + # (optional) A trial is determined to be stopped or not, + + * only after receiving start_step number of reported intermediate results. + * The default value of start_step is 0. + start_step: 5 +``` + + +**Curvefitting** + +Curve Fitting Assessor is a LPA(learning, predicting, assessing) algorithm. It stops a pending trial X at step S if the prediction of final epoch's performance worse than the best final performance in the trial history. In this algorithm, we use 12 curves to fit the accuracy curve, the large set of parametric curve models are chosen from [reference paper](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf). The learning curves' shape coincides with our prior knowlwdge about the form of learning curves: They are typically increasing, saturating functions. + +*Suggested scenario*: It is applicable in a wide range of performance curves, thus, can be used in various scenarios to speed up the tuning progress. Even better, it's able to handle and assess curves with similar performance. + +*Usage*: + +```yaml + assessor: + builtinAssessorName: Curvefitting + classArgs: + # (required)The total number of epoch. + # We need to know the number of epoch to determine which point we need to predict. + epoch_num: 20 + # (optional) choice: maximize, minimize + # Kindly reminds that if you choose minimize mode, please adjust the value of threshold >= 1.0 (e.g threshold=1.1) + + * The default value of optimize_mode is maximize + optimize_mode: maximize + # (optional) A trial is determined to be stopped or not + # In order to save our computing resource, we start to predict when we have more than start_step(default=6) accuracy points. + # only after receiving start_step number of reported intermediate results. + * The default value of start_step is 6. + start_step: 6 + # (optional) The threshold that we decide to early stop the worse performance curve. + # For example: if threshold = 0.95, optimize_mode = maximize, best performance in the history is 0.9, then we will stop the trial which predict value is lower than 0.95 * 0.9 = 0.855. + * The default value of threshold is 0.95. + threshold: 0.95 +``` \ No newline at end of file From fdcd971b9641debc3c0bdae51819204fb02c0629 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:48 +0800 Subject: [PATCH 0048/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 zh_CN/docs/Installation.md diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md new file mode 100644 index 0000000000..5dcfcf60b2 --- /dev/null +++ b/zh_CN/docs/Installation.md @@ -0,0 +1,60 @@ +# **Installation of NNI** + +Currently we only support installation on Linux & Mac. + +## **Installation** + +* **Dependencies** + + python >= 3.5 git wget + + python pip should also be correctly installed. You could use "python3 -m pip -v" to check pip version. + +* **Install NNI through pip** + + python3 -m pip install --user --upgrade nni + +* **Install NNI through source code** + + git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh + +* **Install NNI in docker image** + + You can also install NNI in a docker image. Please follow the instructions [here](../deployment/docker/README.md) to build NNI docker image. The NNI docker image can also be retrieved from Docker Hub through the command `docker pull msranni/nni:latest`. + +## **System requirements** + +Below are the minimum system requirements for NNI on Linux. Due to potential programming changes, the minimum system requirements for NNI may change over time. + +| | Minimum Requirements | Recommended Specifications | +| -------------------- | -------------------------------------- | ---------------------------------------------- | +| **Operating System** | Ubuntu 16.04 or above | Ubuntu 16.04 or above | +| **CPU** | Intel® Core™ i3 or AMD Phenom™ X3 8650 | Intel® Core™ i5 or AMD Phenom™ II X3 or better | +| **GPU** | NVIDIA® GeForce® GTX 460 | NVIDIA® GeForce® GTX 660 or better | +| **Memory** | 4 GB RAM | 6 GB RAM | +| **Storage** | 30 GB available hare drive space | | +| **Internet** | Boardband internet connection | | +| **Resolution** | 1024 x 768 minimum display resolution | | + +Below are the minimum system requirements for NNI on macOS. Due to potential programming changes, the minimum system requirements for NNI may change over time. + +| | Minimum Requirements | Recommended Specifications | +| -------------------- | --------------------------------------------------------- | ------------------------------ | +| **Operating System** | macOS 10.14.1 (latest version) | macOS 10.14.1 (latest version) | +| **CPU** | Intel® Core™ i5-760 or better | Intel® Core™ i7-4770 or better | +| **GPU** | NVIDIA® GeForce® GT 750M or AMD Radeon™ R9 M290 or better | AMD Radeon™ R9 M395X or better | +| **Memory** | 4 GB RAM | 8 GB RAM | +| **Storage** | 70GB available space 7200 RPM HDD | 70GB available space SSD | +| **Internet** | Boardband internet connection | | +| **Resolution** | 1024 x 768 minimum display resolution | | + +## Further reading + +* [Overview](Overview.md) +* [Use command line tool nnictl](NNICTLDOC.md) +* [Use NNIBoard](WebUI.md) +* [Define search space](SearchSpaceSpec.md) +* [Config an experiment](ExperimentConfig.md) +* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) +* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) +* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From 06f6dd73486e3adac956c6e3509342d6e7f534f5 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:49 +0800 Subject: [PATCH 0049/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 379 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 379 insertions(+) create mode 100644 zh_CN/docs/NNICTLDOC.md diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md new file mode 100644 index 0000000000..1b7c188198 --- /dev/null +++ b/zh_CN/docs/NNICTLDOC.md @@ -0,0 +1,379 @@ +# nnictl + +## Introduction + +**nnictl** is a command line tool, which can be used to control experiments, such as start/stop/resume an experiment, start/stop NNIBoard, etc. + +## Commands + +nnictl support commands: + + nnictl create + nnictl stop + nnictl update + nnictl resume + nnictl trial + nnictl experiment + nnictl config + nnictl log + nnictl webui + nnictl tensorboard + nnictl top + + +### Manage an experiment + +* **nnictl create** + + * Description + + You can use this command to create a new experiment, using the configuration specified in config file. After this command is successfully done, the context will be set as this experiment, which means the following command you issued is associated with this experiment, unless you explicitly changes the context(not supported yet). + + * Usage + + nnictl create [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------- | + | --config, -c | True | | yaml configure file of the experiment | + | --port, -p | False | | the port of restful server | + +* **nnictl resume** + + * Description + + You can use this command to resume a stopped experiment. + + * Usage + + nnictl resume [OPTIONS] + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ---------------------------------------------- | + | id | False | | The id of the experiment you want to resume | + | --port, -p | False | | Rest port of the experiment you want to resume | + +* **nnictl stop** + + * Description + + You can use this command to stop a running experiment or multiple experiments. + + * Usage + + nnictl stop [id] + + * Detail + + 1.If there is an id specified, and the id matches the running experiment, nnictl will stop the corresponding experiment, or will print error message. 2.If there is no id specified, and there is an experiment running, stop the running experiment, or print error message. 3.If the id ends with *, nnictl will stop all experiments whose ids matchs the regular. 4.If the id does not exist but match the prefix of an experiment id, nnictl will stop the matched experiment. 5.If the id does not exist but match multiple prefix of the experiment ids, nnictl will give id information. 6.Users could use 'nnictl stop all' to stop all experiments + +* **nnictl update** + + * **nnictl update searchspace** + + * Description + + You can use this command to update an experiment's search space. + + * Usage + + nnictl update searchspace [OPTIONS] + + Options: + + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | -------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --filename, -f | True | | the file storing your new search space | + + * **nnictl update concurrency** + * Description + + You can use this command to update an experiment's concurrency. + + * Usage + + nnictl update concurrency [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the number of allowed concurrent trials | + + * **nnictl update duration** + + * Description + + You can use this command to update an experiment's concurrency. + + + * Usage + + nnictl update duration [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the experiment duration will be NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. | + + * **nnictl update trialnum** + * Description + + You can use this command to update an experiment's maxtrialnum. + + * Usage + + nnictl update trialnum [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the new number of maxtrialnum you want to set | + +* **nnictl trial** + + * **nnictl trial ls** + + * Description + + You can use this command to show trial's information. + + * Usage + + nnictl trial ls + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + + * **nnictl trial kill** + + * Description + + You can use this command to kill a trial job. + + * Usage + + nnictl trial kill [OPTIONS] + + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --trialid, -t | True | | ID of the trial you want to kill. | + + * **nnictl top** + + * Description + + Monitor all of running experiments. + + * Usage + + nnictl top + + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --time, -t | False | | The interval to update the experiment status, the unit of time is second, and the default value is 3 second. | + +### Manage experiment information + +* **nnictl experiment show** + + * Description + + Show the information of experiment. + + * Usage + + nnictl experiment show + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + +* **nnictl experiment status** + + * Description + + Show the status of experiment. + + * Usage + + nnictl experiment status + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + +* **nnictl experiment list** + + * Description + + Show the information of all the (running) experiments. + + * Usage + + nnictl experiment list + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------------------------- | + | all | False | False | Show all of experiments, including stopped experiments. | + +* **nnictl config show** + + * Description + + Display the current context information. + + + * Usage + + nnictl config show + + +### Manage log + +* **nnictl log stdout** + + * Description + + Show the stdout log content. + + * Usage + + nnictl log stdout [options] + + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --head, -h | False | | show head lines of stdout | + | --tail, -t | False | | show tail lines of stdout | + | --path, -p | False | | show the path of stdout file | + +* **nnictl log stderr** + + * Description + + Show the stderr log content. + + * Usage + + nnictl log stderr [options] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --head, -h | False | | show head lines of stderr | + | --tail, -t | False | | show tail lines of stderr | + | --path, -p | False | | show the path of stderr file | + +* **nnictl log trial** + + * Description + + Show trial log path. + + * Usage + + nnictl log trial [options] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------- | + | id | False | | the id of trial | + +### Manage webui + +* **nnictl webui url** + + * Description + + Show the urls of the experiment. + + * Usage + + nnictl webui url + + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + +### Manage tensorboard + +* **nnictl tensorboard start** + + * Description + + Start the tensorboard process. + + * Usage + + nnictl tensorboard start + + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --trialid | False | | ID of the trial | + | --port | False | 6006 | The port of the tensorboard process | + + * Detail + + 1. NNICTL support tensorboard function in local and remote platform for the moment, other platforms will be supported later. + 2. If you want to use tensorboard, you need to write your tensorboard log data to environment variable [NNI_OUTPUT_DIR] path. + 3. In local mode, nnictl will set --logdir=[NNI_OUTPUT_DIR] directly and start a tensorboard process. + 4. In remote mode, nnictl will create a ssh client to copy log data from remote machine to local temp directory firstly, and then start a tensorboard process in your local machine. You need to notice that nnictl only copy the log data one time when you use the command, if you want to see the later result of tensorboard, you should execute nnictl tensorboard command again. + 5. If there is only one trial job, you don't need to set trialid. If there are multiple trial jobs running, you should set the trialid, or you could use [nnictl tensorboard start --trialid all] to map --logdir to all trial log paths. + +* **nnictl tensorboard stop** + + * Description + + Stop all of the tensorboard process. + + * Usage + + nnictl tensorboard stop + + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | \ No newline at end of file From 119def2a1b57b3733b3916d926438df36f9254ea Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:50 +0800 Subject: [PATCH 0050/1573] New translations FAQ.md (Chinese Simplified) --- zh_CN/docs/FAQ.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 zh_CN/docs/FAQ.md diff --git a/zh_CN/docs/FAQ.md b/zh_CN/docs/FAQ.md new file mode 100644 index 0000000000..42d1b1e563 --- /dev/null +++ b/zh_CN/docs/FAQ.md @@ -0,0 +1,38 @@ +This page is for frequent asked questions and answers. + +### tmp folder fulled + +nnictl will use tmp folder as a temporary folder to copy files under codeDir when executing experimentation creation. When met errors like below, try to clean up **tmp** folder first. + +> OSError: [Errno 28] No space left on device + +### Cannot get trials' metrics in OpenPAI mode + +In OpenPAI training mode, we start a rest server which listens on 51189 port in nniManager to receive metrcis reported from trials running in OpenPAI cluster. If you didn't see any metrics from WebUI in OpenPAI mode, check your machine where nniManager runs on to make sure 51189 port is turned on in the firewall rule. + +### Segmentation Fault (core dumped) when installing from source code + +> make: *** [install-XXX] Segmentation fault (core dumped) There are two options: + +* Update or reinstall you current python's pip like `python3 -m pip install -U pip` +* Install nni with --no-cache-dir flag like `python3 -m pip install nni --no-cache-dir` + +### Job management error: getIPV4Address() failed because os.networkInterfaces().eth0 is undefined. + +Your machine don't have eth0 device, please set nniManagerIp in your config file manually. [refer](https://github.com/Microsoft/nni/blob/master/docs/ExperimentConfig.md) + +### Exceed the MaxDuration but didn't stop + +When the duration of experiment reaches the maximum duration, nniManager will not create new trials, but the existing trials will continue unless user manually stop the experiment. + +### Could not stop an experiment using `nnictl stop` + +If you upgrade your nni or you delete some config files of nni when there is an experiment running, this kind of issue may happen because the loss of config file. You could use `ps -ef | grep node` to find the pid of your experiment, and use `kill -9 {pid}` to kill it manually. + +### Could not get `default metric` in webUI of virtual machines + +Config the network mode to bridge mode or other mode that could make virtual machine's host accessible from external machine, and make sure the port of virtual machine is not forbidden by firewall. + +### Help us improve + +Please inquiry the problem in https://github.com/Microsoft/nni/issues to see whether there are other people already reported the problem, create a new one if there are no existing issues been created. \ No newline at end of file From b6166388f1bc1ed94d77cbe8717360b1658b4dc4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:51 +0800 Subject: [PATCH 0051/1573] New translations README.md (Chinese Simplified) --- .../trials/network_morphism/README.md | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 zh_CN/examples/trials/network_morphism/README.md diff --git a/zh_CN/examples/trials/network_morphism/README.md b/zh_CN/examples/trials/network_morphism/README.md new file mode 100644 index 0000000000..9e56b183b4 --- /dev/null +++ b/zh_CN/examples/trials/network_morphism/README.md @@ -0,0 +1,108 @@ +# Network Morphism for Automatic Model Architecture Search in NNI + +The Network Morphism is a build-in Tuner using network morphism techniques to search and evaluate the new network architecture. This example shows us how to use it to find good model architectures for deep learning. + +## How to run this example? + +### 1. Training framework support + +The network morphism now is framework-based, and we have not implemented the framework-free methods. The training frameworks which we have supported yet are Pytorch and Keras. If you get familiar with the intermediate JSON format, you can build your own model in your own training framework. In the future, we will change to intermediate format from JSON to ONNX in order to get a [standard intermediate representation spec](https://github.com/onnx/onnx/blob/master/docs/IR.md). + +### 2. Install the requirements + +```bash +# install the requirements packages +cd examples/trials/network_morphism/ +pip install -r requirements.txt +``` + +### 3. Update configuration + +Modify `examples/trials/network_morphism/cifar10/config.yaml` to fit your own task, note that searchSpacePath is not required in our configuration. Here is the default configuration: + +```yaml +authorName: default +experimentName: example_cifar10-network-morphism +trialConcurrency: 1 +maxExecDuration: 48h +maxTrialNum: 200 +#choice: local, remote, pai +trainingServicePlatform: local +#choice: true, false +useAnnotation: false +tuner: + #choice: TPE, Random, Anneal, Evolution, BatchTuner, NetworkMorphism + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: NetworkMorphism + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + #for now, this tuner only supports cv domain + task: cv + #modify to fit your input image width + input_width: 32 + #modify to fit your input image channel + input_channel: 3 + #modify to fit your number of classes + n_output_node: 10 +trial: + # your own command here + command: python3 cifar10_keras.py + codeDir: . + 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. + +### 4. Call "json\_to\_graph()" function in your own code + +Modify your code and call "json\_to\_graph()" function to build a pytorch model or keras model from received json string. Here is the simple example. + +```python +import nni +from nni.networkmorphism_tuner.graph import json_to_graph + +def build_graph_from_json(ir_model_json): + """build a pytorch model from json representation + """ + graph = json_to_graph(ir_model_json) + model = graph.produce_torch_model() + return model + +# trial get next parameter from network morphism tuner +RCV_CONFIG = nni.get_next_parameter() +# call the function to build pytorch model or keras model +net = build_graph_from_json(RCV_CONFIG) + +# training procedure +# .... + +# report the final accuracy to nni +nni.report_final_result(best_acc) +``` + +### 5. Submit this job + +```bash +# You can use nni command tool "nnictl" to create the a job which submit to the nni +# finally you successfully commit a Network Morphism Job to nni +nnictl create --config config.yaml +``` + +## Trial Examples + +The trial has some examples which can guide you which located in `examples/trials/network_morphism/`. You can refer to it and modify to your own task. Hope this will help you to build your code. + +### FashionMNIST + +`Fashion-MNIST` is a dataset of [Zalando](https://jobs.zalando.com/tech/)'s article images—consisting of a training set of 60,000 examples and a test set of 10,000 examples. Each example is a 28x28 grayscale image, associated with a label from 10 classes. It is a modern image classification dataset widely used to replacing MNIST as a baseline dataset, because the dataset MNIST is too easy and overused. + +There are two examples, [FashionMNIST-keras.py](./FashionMNIST/FashionMNIST_keras.py) and [FashionMNIST-pytorch.py](./FashionMNIST/FashionMNIST_pytorch.py). Attention, you should change the `input_width` to 28 and `input_channel` to 1 in `config.yaml` for this dataset. + +### Cifar10 + +The `CIFAR-10` dataset [Canadian Institute For Advanced Research](https://www.cifar.ca/) is a collection of images that are commonly used to train machine learning and computer vision algorithms. It is one of the most widely used datasets for machine learning research. The CIFAR-10 dataset contains 60,000 32x32 color images in 10 different classes. + +There are two examples, [cifar10-keras.py](./cifar10/cifar10_keras.py) and [cifar10-pytorch.py](./cifar10/cifar10_pytorch.py). The value `input_width` is 32 and the value `input_channel` is 3 in `config.yaml` for this dataset. \ No newline at end of file From b493d40d5d04397306bb2b6138c45f4518c87622 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:52 +0800 Subject: [PATCH 0052/1573] New translations README.md (Chinese Simplified) --- .../sdk/pynni/nni/hyperband_advisor/README.md | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 zh_CN/src/sdk/pynni/nni/hyperband_advisor/README.md diff --git a/zh_CN/src/sdk/pynni/nni/hyperband_advisor/README.md b/zh_CN/src/sdk/pynni/nni/hyperband_advisor/README.md new file mode 100644 index 0000000000..0506053cb6 --- /dev/null +++ b/zh_CN/src/sdk/pynni/nni/hyperband_advisor/README.md @@ -0,0 +1,54 @@ +# Hyperband on nni + +## 1. Introduction + +[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) is a popular automl algorithm. The basic idea of Hyperband is that it creates several brackets, each bracket has `n` randomly generated hyperparameter configurations, each configuration uses `r` resource (e.g., epoch number, batch number). After the `n` configurations is finished, it chooses top `n/eta` configurations and runs them using increased `r*eta` resource. At last, it chooses the best configuration it has found so far. + +## 2. Implementation with fully parallelism + +Frist, this is an example of how to write an automl algorithm based on MsgDispatcherBase, rather than Tuner and Assessor. Hyperband is implemented in this way because it integrates the functions of both Tuner and Assessor, thus, we call it advisor. + +Second, this implementation fully leverages Hyperband's internal parallelism. More specifically, the next bracket is not started strictly after the current bracket, instead, it starts when there is available resource. + +## 3. Usage + +To use Hyperband, you should add the following spec in your experiment's yaml config file: + + advisor: + #choice: Hyperband + builtinAdvisorName: Hyperband + classArgs: + #R: the maximum STEPS + R: 100 + #eta: proportion of discarded trials + eta: 3 + #choice: maximize, minimize + optimize_mode: maximize + + +Note that once you use advisor, it is not allowed to add tuner and assessor spec in the config file any more. If you use Hyperband, among the hyperparameters (i.e., key-value pairs) received by a trial, there is one more key called `STEPS` besides the hyperparameters defined by user. By using this `STEPS`, the trial can control how long it runs. + +`R` and `eta` are the parameters of Hyperband that you can change. `R` means the maximum STEPS that can be allocated to a configuration. Here, STEPS could mean the number of epochs or mini-batches. This `STEPS` should be used by the trial to control how long it runs. Refer to the example under `examples/trials/mnist-hyperband/` for details. + +`eta` means `n/eta` configurations from `n` configurations will survive and rerun using more STEPS. + +Here is a concrete example of `R=81` and `eta=3`: + +| | s=4 | s=3 | s=2 | s=1 | s=0 | +| - | ---- | ---- | ---- | ---- | ---- | +| i | n r | n r | n r | n r | n r | +| 0 | 81 1 | 27 3 | 9 9 | 6 27 | 5 81 | +| 1 | 27 3 | 9 9 | 3 27 | 2 81 | | +| 2 | 9 9 | 3 27 | 1 81 | | | +| 3 | 3 27 | 1 81 | | | | +| 4 | 1 81 | | | | | + +`s` means bracket, `n` means the number of configurations that are generated, the corresponding `r` means how many STEPS these configurations run. `i` means round, for example, bracket 4 has 5 rounds, bracket 3 has 4 rounds. + +About how to write trial code, please refer to the instructions under `examples/trials/mnist-hyperband/`. + +## 4. To be improved + +The current implementation of Hyperband can be further improved by supporting simple early stop algorithm, because it is possible that not all the configurations in the top `n/eta` perform good. The unpromising configurations can be stopped early. + +In the current implementation, configurations are generated randomly, which follows the design in the [paper](https://arxiv.org/pdf/1603.06560.pdf). To further improve, configurations could be generated more wisely by leveraging advanced algorithms. \ No newline at end of file From a3eb6c52d59addce35e5141590c405b97ed4d80b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:54 +0800 Subject: [PATCH 0053/1573] New translations README.md (Chinese Simplified) --- .../pynni/nni/networkmorphism_tuner/README.md | 199 ++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 zh_CN/src/sdk/pynni/nni/networkmorphism_tuner/README.md diff --git a/zh_CN/src/sdk/pynni/nni/networkmorphism_tuner/README.md b/zh_CN/src/sdk/pynni/nni/networkmorphism_tuner/README.md new file mode 100644 index 0000000000..a839a59736 --- /dev/null +++ b/zh_CN/src/sdk/pynni/nni/networkmorphism_tuner/README.md @@ -0,0 +1,199 @@ +# Network Morphism Tuner on NNI + +## 1. Intorduction + +[Autokeras](https://arxiv.org/abs/1806.10282) is a popular automl tools using Network Morphism. The basic idea of Autokeras is to use Bayesian Regression to estimate the metric of the Neural Network Architecture. Each time, it generates several child networks from father networks. Then it uses a naïve Bayesian regression estimate its metric value from history trained results of network and metric value pair. Next, it chooses the the child which has best estimated performance and adds it to the training queue. Inspired by its work and referring to its [code](https://github.com/jhfjhfj1/autokeras), we implement our Network Morphism method in our NNI platform. + +If you want to know about network morphism trial usage, please check [Readme.md](../../../../../examples/trials/network-morphism/README.md) of the trial to get more detail. + +## 2. Usage + +To use Network Morphism, you should modify the following spec in your `config.yml` file: + +```yaml +tuner: + #choice: NetworkMorphism + builtinTunerName: NetworkMorphism + classArgs: + #choice: maximize, minimize + optimize_mode: maximize + #for now, this tuner only supports cv domain + task: cv + #modify to fit your input image width + input_width: 32 + #modify to fit your input image channel + input_channel: 3 + #modify to fit your number of classes + n_output_node: 10 +``` + +In the training procedure, it generate a JSON file which represent a Network Graph. Users can call "json\_to\_graph()" function to build a pytorch model or keras model from this JSON file. + +```python +import nni +from nni.networkmorphism_tuner.graph import json_to_graph + +def build_graph_from_json(ir_model_json): + """build a pytorch model from json representation + """ + graph = json_to_graph(ir_model_json) + model = graph.produce_torch_model() + return model + +# trial get next parameter from network morphism tuner +RCV_CONFIG = nni.get_next_parameter() +# call the function to build pytorch model or keras model +net = build_graph_from_json(RCV_CONFIG) + +# training procedure +# .... + +# report the final accuracy to nni +nni.report_final_result(best_acc) +``` + +## 3. File Structure + +The tuner has a lot of different files, functions and classes. Here we will only give most of those files a brief introduction: + +- `networkmorphism_tuner.py` is a tuner which using network morphism techniques. + +- `bayesian.py` is Bayesian method to estimate the metric of unseen model based on the models we have already searched. + +- `graph.py` is the meta graph data structure. Class Graph is representing the neural architecture graph of a model. + - Graph extracts the neural architecture graph from a model. + - Each node in the graph is a intermediate tensor between layers. + - Each layer is an edge in the graph. + - Notably, multiple edges may refer to the same layer. + +- `graph_transformer.py` includes some graph transformer to wider, deeper or add a skip-connection into the graph. + +- `layers.py` includes all the layers we use in our model. + +- `layer_transformer.py` includes some layer transformer to wider, deeper or add a skip-connection into the layer. +- `nn.py` includes the class to generate network class initially. +- `metric.py` some metric classes including Accuracy and MSE. +- `utils.py` is the example search network architectures in dataset `cifar10` by using Keras. + +## 4. The Network Representation Json Example + +Here is an example of the intermediate representation JSON file we defined, which is passed from the tuner to the trial in the architecture search procedure. The example is as follows. + +```json +{ + "input_shape": [32, 32, 3], + "weighted": false, + "operation_history": [], + "layer_id_to_input_node_ids": {"0": [0],"1": [1],"2": [2],"3": [3],"4": [4],"5": [5],"6": [6],"7": [7],"8": [8],"9": [9],"10": [10],"11": [11],"12": [12],"13": [13],"14": [14],"15": [15],"16": [16] + }, + "layer_id_to_output_node_ids": {"0": [1],"1": [2],"2": [3],"3": [4],"4": [5],"5": [6],"6": [7],"7": [8],"8": [9],"9": [10],"10": [11],"11": [12],"12": [13],"13": [14],"14": [15],"15": [16],"16": [17] + }, + "adj_list": { + "0": [[1, 0]], + "1": [[2, 1]], + "2": [[3, 2]], + "3": [[4, 3]], + "4": [[5, 4]], + "5": [[6, 5]], + "6": [[7, 6]], + "7": [[8, 7]], + "8": [[9, 8]], + "9": [[10, 9]], + "10": [[11, 10]], + "11": [[12, 11]], + "12": [[13, 12]], + "13": [[14, 13]], + "14": [[15, 14]], + "15": [[16, 15]], + "16": [[17, 16]], + "17": [] + }, + "reverse_adj_list": { + "0": [], + "1": [[0, 0]], + "2": [[1, 1]], + "3": [[2, 2]], + "4": [[3, 3]], + "5": [[4, 4]], + "6": [[5, 5]], + "7": [[6, 6]], + "8": [[7, 7]], + "9": [[8, 8]], + "10": [[9, 9]], + "11": [[10, 10]], + "12": [[11, 11]], + "13": [[12, 12]], + "14": [[13, 13]], + "15": [[14, 14]], + "16": [[15, 15]], + "17": [[16, 16]] + }, + "node_list": [ + [0, [32, 32, 3]], + [1, [32, 32, 3]], + [2, [32, 32, 64]], + [3, [32, 32, 64]], + [4, [16, 16, 64]], + [5, [16, 16, 64]], + [6, [16, 16, 64]], + [7, [16, 16, 64]], + [8, [8, 8, 64]], + [9, [8, 8, 64]], + [10, [8, 8, 64]], + [11, [8, 8, 64]], + [12, [4, 4, 64]], + [13, [64]], + [14, [64]], + [15, [64]], + [16, [64]], + [17, [10]] + ], + "layer_list": [ + [0, ["StubReLU", 0, 1]], + [1, ["StubConv2d", 1, 2, 3, 64, 3]], + [2, ["StubBatchNormalization2d", 2, 3, 64]], + [3, ["StubPooling2d", 3, 4, 2, 2, 0]], + [4, ["StubReLU", 4, 5]], + [5, ["StubConv2d", 5, 6, 64, 64, 3]], + [6, ["StubBatchNormalization2d", 6, 7, 64]], + [7, ["StubPooling2d", 7, 8, 2, 2, 0]], + [8, ["StubReLU", 8, 9]], + [9, ["StubConv2d", 9, 10, 64, 64, 3]], + [10, ["StubBatchNormalization2d", 10, 11, 64]], + [11, ["StubPooling2d", 11, 12, 2, 2, 0]], + [12, ["StubGlobalPooling2d", 12, 13]], + [13, ["StubDropout2d", 13, 14, 0.25]], + [14, ["StubDense", 14, 15, 64, 64]], + [15, ["StubReLU", 15, 16]], + [16, ["StubDense", 16, 17, 64, 10]] + ] + } +``` + +The definition of each model is a JSON object(also you can consider the model as a DAG graph), where: + +- `input_shape` is a list of integers, which does not include the batch axis. +- `weighted` means whether the weights and biases in the neural network should be included in the graph. +- `operation_history` is the number of inputs the layer has. +- `layer_id_to_input_node_ids` is a dictionary instance mapping from layer identifiers to their input nodes identifiers. +- `layer_id_to_output_node_ids` is a dictionary instance mapping from layer identifiers to their output nodes identifiers +- `adj_list` is a two dimensional list. The adjacency list of the graph. The first dimension is identified by tensor identifiers. In each edge list, the elements are two-element tuples of (tensor identifier, layer identifier). +- `reverse_adj_list` is a A reverse adjacent list in the same format as adj_list. +- `node_list` is a list of integers. The indices of the list are the identifiers. +- `layer_list` is a list of stub layers. The indices of the list are the identifiers. + + - For `StubConv (StubConv1d, StubConv2d, StubConv3d)`, the number follows is its node input id(or id list), node output id, input_channel, filters, kernel_size, stride and padding. + + - For `StubDense`, the number follows is its node input id(or id list), node output id, input_units and units. + + - For `StubBatchNormalization (StubBatchNormalization1d, StubBatchNormalization2d, StubBatchNormalization3d)`, the number follows is its node input id(or id list), node output id and features numbers. + + - For `StubDropout(StubDropout1d, StubDropout2d, StubDropout3d)`, the number follows is its node input id(or id list), node output id and dropout rate. + + - For `StubPooling (StubPooling1d, StubPooling2d, StubPooling3d)`, the number follows is its node input id(or id list), node output id, kernel_size, stride and padding. + + - For else layers, the number follows is its node input id(or id list) and node output id. + +## 5. TODO + +Next step, we will change the API from fixed network generator to more network operator generator. Besides, we will use ONNX instead of JSON later as the intermediate representation spec in the future. \ No newline at end of file From 44c339cbb8aecc93171e8de6f8494c93e73815d1 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:41:55 +0800 Subject: [PATCH 0054/1573] New translations README.md (Chinese Simplified) --- .../pynni/nni/curvefitting_assessor/README.md | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md diff --git a/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md new file mode 100644 index 0000000000..19ca01e72b --- /dev/null +++ b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md @@ -0,0 +1,76 @@ +# Curve Fitting Assessor on NNI + +## 1. Introduction + +Curve Fitting Assessor is a LPA(learning, predicting, assessing) algorithm. It stops a pending trial X at step S if the prediction of final epoch's performance is worse than the best final performance in the trial history. + +In this algorithm, we use 12 curves to fit the learning curve, the large set of parametric curve models are chosen from [reference paper](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf). The learning curves' shape coincides with our prior knowlwdge about the form of learning curves: They are typically increasing, saturating functions. + +

+drawing +

+ +We combine all learning curve models into a single, more powerful model. This combined model is given by a weighted linear combination: + +

+drawing +

+ +where the new combined parameter vector + +

+drawing +

+ +Assuming additive a Gaussian noise and the noise parameter is initialized to its maximum likelihood estimate. + +We determine the maximum probability value of the new combined parameter vector by learing the historical data. Use such value to predict the future trial performance, and stop the inadequate experiments to save computing resource. + +Concretely,this algorithm goes through three stages of learning, predicting and assessing. + +* Step1: Learning. We will learning about the trial history of the current trial and determine the \xi at Bayesian angle. First of all, We fit each curve using the least squares method(implement by `fit_theta`) to save our time. After we obtained the parameters, we filter the curve and remove the outliers(implement by `filter_curve`). Fially, we use the MCMC sampling method(implement by `mcmc_sampling`) to adjust the weight of each curve. Up to now, we have dertermined all the parameters in \xi. +* Step2: Predicting. Calculates the expected final result accuracy(implement by `f_comb`) at target position(ie the total number of epoch) by the \xi and the formula of the combined model. +* Step3: If the fitting result doesn't converge, the predicted value will be `None`, in this case we return `AssessResult.Good` to ask for future accuracy information and predict again. Furthermore, we will get a positive value by `predict()` function, if this value is strictly greater than the best final performance in history * `THRESHOLD`(default value = 0.95), return `AssessResult.Good`, otherwise, return `AssessResult.Bad` + +The figure below is the result of our algorithm on MNIST trial history data, where the green point represents the data obtained by Assessor, the blue point represents the future but unknown data, and the red line is the Curve predicted by the Curve fitting assessor. + +

+drawing +

+ +## 2. Usage + +To use Curve Fitting Assessor, you should add the following spec in your experiment's yaml config file: + + assessor: + builtinAssessorName: Curvefitting + classArgs: + # (required)The total number of epoch. + # We need to know the number of epoch to determine which point we need to predict. + epoch_num: 20 + # (optional) choice: maximize, minimize + * The default value of optimize_mode is maximize + optimize_mode: maximize + # Kindly reminds that if you choose minimize mode, please adjust the value of threshold >= 1.0 (e.g threshold=1.1) + # (optional) A trial is determined to be stopped or not + # In order to save our computing resource, we start to predict when we have more than start_step(default=6) accuracy points. + # only after receiving start_step number of reported intermediate results. + * The default value of start_step is 6. + start_step: 6 + # (optional) The threshold that we decide to early stop the worse performance curve. + # For example: if threshold = 0.95, optimize_mode = maximize, best performance in the history is 0.9, then we will stop the trial which predict value is lower than 0.95 * 0.9 = 0.855. + * The default value of threshold is 0.95. + threshold: 0.95 + + +## 3. File Structure + +The assessor has a lot of different files, functions and classes. Here we will only give most of those files a brief introduction: + +* `curvefunctions.py` includes all the function expression and default parameters. +* `modelfactory.py` includes learning and predicting, the corresponding calculation part is also implemented here. +* `curvefitting_assessor.py` is a assessor which receives the trial history and assess whether to early stop the trial. + +## 4. TODO + +* Further improve the accuracy of the prediction and test it on more models. \ No newline at end of file From 5de340a742f427f538d62820e7fae990310a3e0f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:42:00 +0800 Subject: [PATCH 0055/1573] New translations tutorial_3_tryTunersAndAssessors.md (Chinese Simplified) --- .../docs/tutorial_3_tryTunersAndAssessors.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 zh_CN/docs/tutorial_3_tryTunersAndAssessors.md diff --git a/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md b/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md new file mode 100644 index 0000000000..c09e319c5d --- /dev/null +++ b/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md @@ -0,0 +1,45 @@ +# Tutorial - Try different Tuners and Assessors + +NNI provides an easy to adopt approach to set up parameter tuning algorithms as well as early stop policies, we call them **Tuners** and **Assessors**. + +**Tuner** specifies the algorithm you use to generate hyperparameter sets for each trial. In NNI, we support two approaches to set the tuner. + +1. Directly use tuner provided by nni sdk + + required fields: builtinTunerName and classArgs. + + +2. Customize your own tuner file + + required fields: codeDirectory, classFileName, className and classArgs. + + +### **Learn More about tuners** + +* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) +* [Tuners in the latest NNI release](HowToChooseTuner.md) +* [How to implement your own tuner](howto_2_CustomizedTuner.md) + +**Assessor** specifies the algorithm you use to apply early stop policy. In NNI, there are two approaches to set theassessor. + +1. Directly use assessor provided by nni sdk + + required fields: builtinAssessorName and classArgs. + + +2. Customize your own assessor file + + required fields: codeDirectory, classFileName, className and classArgs. + + +### **Learn More about assessor** + +* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) +* Find more about the detailed instruction about [enable assessor](EnableAssessor.md) +* [How to implement your own assessor](../examples/assessors/README.md) + +## **Learn More** + +* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) +* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) +* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From e1e9060fcde22750273087608ed2b2546dea368b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 11:42:04 +0800 Subject: [PATCH 0056/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 139 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 zh_CN/README.md diff --git a/zh_CN/README.md b/zh_CN/README.md new file mode 100644 index 0000000000..7274d976d3 --- /dev/null +++ b/zh_CN/README.md @@ -0,0 +1,139 @@ +

+logo +

+ +* * * + +[![MIT 许可证](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/Microsoft/nni/blob/master/LICENSE) [![生成状态](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/Microsoft.nni)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=6) [![问题](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) [![缺陷](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [![拉取请求](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) [![版本](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![进入 https://gitter.im/Microsoft/nni 聊天室提问](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML)实验的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。 + +

+绘图 +

+ +## **Who should consider using NNI** + +* Those who want to try different AutoML algorithms in their training code (model) at their local machine. +* Those who want to run AutoML trial jobs in different environments to speed up search (e.g. remote servers and cloud). +* Researchers and data scientists who want to implement their own AutoML algorithms and compare it with other algorithms. +* ML Platform owners who want to support AutoML in their platform. + +## **Install & Verify** + +**Install through pip** + +* We support Linux and MacOS in current stage, Ubuntu 16.04 or higher, along with MacOS 10.14.1 are tested and supported. Simply run the following `pip install` in an environment that has `python >= 3.5`. + +```bash + python3 -m pip install --user --upgrade nni +``` + +* Note: + * If you are in docker container (as root), please remove `--user` from the installation command. + * If there is any error like `Segmentation fault`, please refer to [FAQ](docs/FAQ.md) + +**Install through source code** + +* We support Linux (Ubuntu 16.04 or higher), MacOS (10.14.1) in our current stage. +* Run the following commands in an environment that has `python >= 3.5`, `git` and `wget`. + +```bash + git clone -b v0.4.1 https://github.com/Microsoft/nni.git + cd nni + source install.sh +``` + +For the system requirements of NNI, please refer to [Install NNI](docs/Installation.md) + +**Verify install** + +The following example is an experiment built on TensorFlow. Make sure you have **TensorFlow installed** before running it. + +* Download the examples via clone the source code. + +```bash + git clone -b v0.4.1 https://github.com/Microsoft/nni.git +``` + +* Run the mnist example. + +```bash + nnictl create --config nni/examples/trials/mnist/config.yml +``` + +* Wait for the message `INFO: Successfully started experiment!` in the command line. This message indicates that your experiment has been successfully started. You can explore the experiment using the `Web UI url`. + + INFO: Starting restful server... + INFO: Successfully started Restful server! + INFO: Setting local config... + INFO: Successfully set local config! + INFO: Starting experiment... + INFO: Successfully started experiment! + ----------------------------------------------------------------------- + The experiment id is egchD4qy + The Web UI urls are: http://223.255.255.1:8080 http://127.0.0.1:8080 + ----------------------------------------------------------------------- + + You can use these commands to get more information about the experiment + ----------------------------------------------------------------------- + commands description + + 1. nnictl experiment show show the information of experiments + 2. nnictl trial ls list all of trial jobs + 3. nnictl log stderr show stderr log content + 4. nnictl log stdout show stdout log content + 5. nnictl stop stop an experiment + 6. nnictl trial kill kill a trial job by id + 7. nnictl --help get help information about nnictl + ----------------------------------------------------------------------- + + +* Open the `Web UI url` in your browser, you can view detail information of the experiment and all the submitted trial jobs as shown below. [Here](docs/WebUI.md) are more Web UI pages. + + + + +
drawingdrawing
+ +## **Documentation** + +* [NNI overview](docs/Overview.md) +* [Quick start](docs/GetStarted.md) + +## **How to** + +* [Install NNI](docs/Installation.md) +* [Use command line tool nnictl](docs/NNICTLDOC.md) +* [Use NNIBoard](docs/WebUI.md) +* [How to define search space](docs/SearchSpaceSpec.md) +* [How to define a trial](docs/howto_1_WriteTrial.md) +* [Config an experiment](docs/ExperimentConfig.md) +* [How to use annotation](docs/howto_1_WriteTrial.md#nni-python-annotation) + +## **Tutorials** + +* [Run an experiment on local (with multiple GPUs)?](docs/tutorial_1_CR_exp_local_api.md) +* [Run an experiment on multiple machines?](docs/tutorial_2_RemoteMachineMode.md) +* [Run an experiment on OpenPAI?](docs/PAIMode.md) +* [Run an experiment on Kubeflow?](docs/KubeflowMode.md) +* [Try different tuners and assessors](docs/tutorial_3_tryTunersAndAssessors.md) +* [Implement a customized tuner](docs/howto_2_CustomizedTuner.md) +* [Implement a customized assessor](examples/assessors/README.md) +* [Use Genetic Algorithm to find good model architectures for Reading Comprehension task](examples/trials/ga_squad/README.md) + +## **Contribute** + +This project welcomes contributions and suggestions, we use [GitHub issues](https://github.com/Microsoft/nni/issues) for tracking requests and bugs. + +Issues with the **good first issue** label are simple and easy-to-start ones that we recommend new contributors to start with. + +To set up environment for NNI development, refer to the instruction: [Set up NNI developer environment](docs/SetupNNIDeveloperEnvironment.md) + +Before start coding, review and get familiar with the NNI Code Contribution Guideline: [Contributing](docs/CONTRIBUTING.md) + +We are in construction of the instruction for [How to Debug](docs/HowToDebug.md), you are also welcome to contribute questions or suggestions on this area. + +## **License** + +The entire codebase is under [MIT license](https://github.com/Microsoft/nni/blob/master/LICENSE) \ No newline at end of file From ff896913c925a09444c01630c09d43e01e27b999 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 12:01:39 +0800 Subject: [PATCH 0057/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index 7274d976d3..fa247648f5 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -12,10 +12,10 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML) 绘图

-## **Who should consider using NNI** +## **使用场景** -* Those who want to try different AutoML algorithms in their training code (model) at their local machine. -* Those who want to run AutoML trial jobs in different environments to speed up search (e.g. remote servers and cloud). +* 在本地尝试不同的自动机器学习算法来训练模型。 +* 在分布式环境中加速自动机器学习(如:远程 GPU 工作站和云服务器)。 * Researchers and data scientists who want to implement their own AutoML algorithms and compare it with other algorithms. * ML Platform owners who want to support AutoML in their platform. From f42030c84693a63b54df6d56d1941807b5ad40e9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 12:22:38 +0800 Subject: [PATCH 0058/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 58 +++++++++++++++++----------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 6e8b90e143..aaaaedbff3 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -1,33 +1,33 @@ -# Experiment config reference +# 实验(Experiment)配置参考 -A config file is needed when create an experiment, the path of the config file is provide to nnictl. The config file is written in yaml format, and need to be written correctly. This document describes the rule to write config file, and will provide some examples and templates. +创建实验时,需要给 nnictl 命令提供配置文件的路径。 配置文件是 yaml 格式,需要保证其格式正确。 本文介绍了配置文件的内容,并提供了一些示例和模板。 -## Template +## 模板 -* **light weight(without Annotation and Assessor)** +* **简化版(不包含标记 (annotation) 和评估器)** authorName: experimentName: trialConcurrency: maxExecDuration: maxTrialNum: - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: searchSpacePath: - #choice: true, false + #可选项: true, false useAnnotation: tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: gpuNum: trial: command: codeDir: gpuNum: - #machineList can be empty if the platform is local + #在本地使用时,machineList 可为空 machineList: - ip: port: @@ -35,37 +35,37 @@ A config file is needed when create an experiment, the path of the config file i passwd: -* **Use Assessor** +* **使用评估器** authorName: experimentName: trialConcurrency: maxExecDuration: maxTrialNum: - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: searchSpacePath: - #choice: true, false + #可选项: true, false useAnnotation: tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: gpuNum: assessor: - #choice: Medianstop + #可选项: Medianstop builtinAssessorName: classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: gpuNum: trial: command: codeDir: gpuNum: - #machineList can be empty if the platform is local + #在本地使用时,machineList 可为空 machineList: - ip: port: @@ -73,36 +73,36 @@ A config file is needed when create an experiment, the path of the config file i passwd: -* **Use Annotation** +* **使用标记** authorName: experimentName: trialConcurrency: maxExecDuration: maxTrialNum: - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: - #choice: true, false + #可选项: true, false useAnnotation: tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: gpuNum: assessor: - #choice: Medianstop + #可选项: Medianstop builtinAssessorName: classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: gpuNum: trial: command: codeDir: gpuNum: - #machineList can be empty if the platform is local + #在本地使用时,machineList 可为空 machineList: - ip: port: @@ -110,17 +110,17 @@ A config file is needed when create an experiment, the path of the config file i passwd: -## Configuration +## 配置 * **authorName** - * Description + * 说明 - **authorName** is the name of the author who create the experiment. TBD: add default value + **authorName**是创建实验的作者。 待定: 增加默认值 * **experimentName** - * Description + * 说明 **experimentName** is the name of the experiment created. TBD: add default value From b0a0dd376d88b5bb5a3e73cc6895a557090cd113 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 12:31:31 +0800 Subject: [PATCH 0059/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index fa247648f5..687c45ed68 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -96,33 +96,33 @@ The following example is an experiment built on TensorFlow. Make sure you have * drawing -## **Documentation** +## **文档** * [NNI overview](docs/Overview.md) -* [Quick start](docs/GetStarted.md) +* [快速入门](docs/GetStarted.md) -## **How to** +## **入门** * [Install NNI](docs/Installation.md) -* [Use command line tool nnictl](docs/NNICTLDOC.md) -* [Use NNIBoard](docs/WebUI.md) -* [How to define search space](docs/SearchSpaceSpec.md) -* [How to define a trial](docs/howto_1_WriteTrial.md) -* [Config an experiment](docs/ExperimentConfig.md) -* [How to use annotation](docs/howto_1_WriteTrial.md#nni-python-annotation) - -## **Tutorials** - -* [Run an experiment on local (with multiple GPUs)?](docs/tutorial_1_CR_exp_local_api.md) -* [Run an experiment on multiple machines?](docs/tutorial_2_RemoteMachineMode.md) -* [Run an experiment on OpenPAI?](docs/PAIMode.md) -* [Run an experiment on Kubeflow?](docs/KubeflowMode.md) -* [Try different tuners and assessors](docs/tutorial_3_tryTunersAndAssessors.md) -* [Implement a customized tuner](docs/howto_2_CustomizedTuner.md) -* [Implement a customized assessor](examples/assessors/README.md) -* [Use Genetic Algorithm to find good model architectures for Reading Comprehension task](examples/trials/ga_squad/README.md) - -## **Contribute** +* [使用命令行工具 nnictl](docs/NNICTLDOC.md) +* [使用 NNIBoard](docs/WebUI.md) +* [如何定义搜索空间](docs/SearchSpaceSpec.md) +* [如何定义一次尝试](docs/howto_1_WriteTrial.md) +* [配置实验](docs/ExperimentConfig.md) +* [如何使用标记](docs/howto_1_WriteTrial.md#nni-python-annotation) + +## **教程** + +* [在本机运行实验 (支持多 GPU 卡)](docs/tutorial_1_CR_exp_local_api.md) +* [在多机上运行实验](docs/tutorial_2_RemoteMachineMode.md) +* [在 OpenPAI 上运行实验](docs/PAIMode.md) +* [在 Kubeflow 上运行实验。](docs/KubeflowMode.md) +* [使用不同的调参器和评估器](docs/tutorial_3_tryTunersAndAssessors.md) +* [实现自定义调参器](docs/howto_2_CustomizedTuner.md) +* [实现自定义评估器](examples/assessors/README.md) +* [使用遗传算法为阅读理解任务找到好模型](examples/trials/ga_squad/README.md) + +## **贡献** This project welcomes contributions and suggestions, we use [GitHub issues](https://github.com/Microsoft/nni/issues) for tracking requests and bugs. From 9bd74a01710bead632e174624ecd213260d4921a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 12:41:39 +0800 Subject: [PATCH 0060/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index 687c45ed68..bbbb420dde 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -16,12 +16,12 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML) * 在本地尝试不同的自动机器学习算法来训练模型。 * 在分布式环境中加速自动机器学习(如:远程 GPU 工作站和云服务器)。 -* Researchers and data scientists who want to implement their own AutoML algorithms and compare it with other algorithms. -* ML Platform owners who want to support AutoML in their platform. +* 定制自动机器学习算法,或比较不同的自动机器学习算法。 +* 在自己的机器学习平台中支持自动机器学习。 -## **Install & Verify** +## **安装和验证** -**Install through pip** +**通过 pip 命令安装** * We support Linux and MacOS in current stage, Ubuntu 16.04 or higher, along with MacOS 10.14.1 are tested and supported. Simply run the following `pip install` in an environment that has `python >= 3.5`. @@ -33,7 +33,7 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML) * If you are in docker container (as root), please remove `--user` from the installation command. * If there is any error like `Segmentation fault`, please refer to [FAQ](docs/FAQ.md) -**Install through source code** +**通过源代码安装** * We support Linux (Ubuntu 16.04 or higher), MacOS (10.14.1) in our current stage. * Run the following commands in an environment that has `python >= 3.5`, `git` and `wget`. @@ -46,7 +46,7 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML) For the system requirements of NNI, please refer to [Install NNI](docs/Installation.md) -**Verify install** +**验证安装** The following example is an experiment built on TensorFlow. Make sure you have **TensorFlow installed** before running it. @@ -92,8 +92,8 @@ The following example is an experiment built on TensorFlow. Make sure you have * * Open the `Web UI url` in your browser, you can view detail information of the experiment and all the submitted trial jobs as shown below. [Here](docs/WebUI.md) are more Web UI pages. - - + +
drawingdrawing绘图绘图
## **文档** @@ -134,6 +134,6 @@ Before start coding, review and get familiar with the NNI Code Contribution Guid We are in construction of the instruction for [How to Debug](docs/HowToDebug.md), you are also welcome to contribute questions or suggestions on this area. -## **License** +## **许可协议** -The entire codebase is under [MIT license](https://github.com/Microsoft/nni/blob/master/LICENSE) \ No newline at end of file +整个代码库遵循 [MIT 许可协议](https://github.com/Microsoft/nni/blob/master/LICENSE) \ No newline at end of file From adb69d72e23f76a64d15e9d77169e4e3e7e2667d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 13:41:33 +0800 Subject: [PATCH 0061/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index bbbb420dde..232ff51741 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -23,20 +23,20 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML) **通过 pip 命令安装** -* We support Linux and MacOS in current stage, Ubuntu 16.04 or higher, along with MacOS 10.14.1 are tested and supported. Simply run the following `pip install` in an environment that has `python >= 3.5`. +* 当前支持 Linux 和 MacOS。测试并支持的版本包括:Ubuntu 16.04 及更高版本,MacOS 10.14.1。 在 `python >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。. ```bash python3 -m pip install --user --upgrade nni ``` -* Note: - * If you are in docker container (as root), please remove `--user` from the installation command. - * If there is any error like `Segmentation fault`, please refer to [FAQ](docs/FAQ.md) +* 注意: + * 如果在 docker 容器中以 root 运行,需要从上述安装命令中删除 `--user`。 + * 如果遇到如`Segmentation fault` 这样的任何错误请参考 [常见问题](docs/FAQ.md)。 **通过源代码安装** -* We support Linux (Ubuntu 16.04 or higher), MacOS (10.14.1) in our current stage. -* Run the following commands in an environment that has `python >= 3.5`, `git` and `wget`. +* 当前支持 Linux(Ubuntu 16.04 及更高版本) 和 MacOS(10.14.1)。 +* 在 `python >= 3.5` 的环境中运行命令: `git` 和 `wget`,确保安装了这两个组件。 ```bash git clone -b v0.4.1 https://github.com/Microsoft/nni.git @@ -44,25 +44,25 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML) source install.sh ``` -For the system requirements of NNI, please refer to [Install NNI](docs/Installation.md) +参考[安装 NNI](docs/Installation.md) 了解系统需求。 **验证安装** -The following example is an experiment built on TensorFlow. Make sure you have **TensorFlow installed** before running it. +以下示例实验依赖于 TensorFlow 。 在运行前确保安装了 **TensorFlow**。 -* Download the examples via clone the source code. +* 通过克隆源代码下载示例。 ```bash git clone -b v0.4.1 https://github.com/Microsoft/nni.git ``` -* Run the mnist example. +* 运行 mnist 示例。 ```bash nnictl create --config nni/examples/trials/mnist/config.yml ``` -* Wait for the message `INFO: Successfully started experiment!` in the command line. This message indicates that your experiment has been successfully started. You can explore the experiment using the `Web UI url`. +* 在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明实验已成功启动。 通过命令行输出的 `Web UI url` 来访问实验的界面。 INFO: Starting restful server... INFO: Successfully started Restful server! @@ -89,7 +89,7 @@ The following example is an experiment built on TensorFlow. Make sure you have * ----------------------------------------------------------------------- -* Open the `Web UI url` in your browser, you can view detail information of the experiment and all the submitted trial jobs as shown below. [Here](docs/WebUI.md) are more Web UI pages. +* 在浏览器中打开 `Web UI url`,可看到下图的实验详细信息,以及所有的尝试任务。 查看[这里的](docs/WebUI.md)更多页面示例。 @@ -98,12 +98,12 @@ The following example is an experiment built on TensorFlow. Make sure you have * ## **文档** -* [NNI overview](docs/Overview.md) +* [NNI 概述](docs/Overview.md) * [快速入门](docs/GetStarted.md) ## **入门** -* [Install NNI](docs/Installation.md) +* [安装 NNI](docs/Installation.md) * [使用命令行工具 nnictl](docs/NNICTLDOC.md) * [使用 NNIBoard](docs/WebUI.md) * [如何定义搜索空间](docs/SearchSpaceSpec.md) @@ -124,15 +124,15 @@ The following example is an experiment built on TensorFlow. Make sure you have * ## **贡献** -This project welcomes contributions and suggestions, we use [GitHub issues](https://github.com/Microsoft/nni/issues) for tracking requests and bugs. +此项目欢迎贡献代码或提交建议,可在 [GitHub issues](https://github.com/Microsoft/nni/issues) 跟踪需求和缺陷。 -Issues with the **good first issue** label are simple and easy-to-start ones that we recommend new contributors to start with. +推荐新贡献者从标有 **good first issue** 的简单需求开始。 -To set up environment for NNI development, refer to the instruction: [Set up NNI developer environment](docs/SetupNNIDeveloperEnvironment.md) +如要安装 NNI 开发环境,参考: [配置 NNI 开发环境](docs/SetupNNIDeveloperEnvironment.md)。 -Before start coding, review and get familiar with the NNI Code Contribution Guideline: [Contributing](docs/CONTRIBUTING.md) +在写代码之前,请查看并熟悉 NNI 代码贡献指南:[贡献](docs/CONTRIBUTING.md)。 -We are in construction of the instruction for [How to Debug](docs/HowToDebug.md), you are also welcome to contribute questions or suggestions on this area. +我们正在编写 [如何调试](docs/HowToDebug.md) 的页面,欢迎提交建议和问题。 ## **许可协议** From a4150dd5eb478393add6756f54ee11cc6f3f890a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 13:43:46 +0800 Subject: [PATCH 0062/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index 232ff51741..c32b00ee39 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -1,5 +1,5 @@

-logo +logo

* * * @@ -92,8 +92,8 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML) * 在浏览器中打开 `Web UI url`,可看到下图的实验详细信息,以及所有的尝试任务。 查看[这里的](docs/WebUI.md)更多页面示例。
绘图
- - + +
绘图绘图绘图绘图
## **文档** From af462744d9842857622795a9a7604960b26e65a5 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 13:49:00 +0800 Subject: [PATCH 0063/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index c32b00ee39..c77d990c60 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -9,7 +9,7 @@ NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML)实验的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。

-绘图 +绘图

## **使用场景** From dbd15d5fd0f05247e1268679ee9d58fee9e97a9e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 13:50:29 +0800 Subject: [PATCH 0064/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index c77d990c60..c7628095fb 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -6,7 +6,7 @@ [![MIT 许可证](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/Microsoft/nni/blob/master/LICENSE) [![生成状态](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/Microsoft.nni)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=6) [![问题](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) [![缺陷](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [![拉取请求](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) [![版本](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![进入 https://gitter.im/Microsoft/nni 聊天室提问](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -NNI (Neural Network Intelligence) 是用来进行自动机器学习(AutoML)实验的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。 +NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。

绘图 From 7cf62aa8d519774af983d05a8b13e4197008f271 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 14:14:36 +0800 Subject: [PATCH 0065/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zh_CN/README.md b/zh_CN/README.md index c7628095fb..456772e057 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -64,6 +64,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 * 在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明实验已成功启动。 通过命令行输出的 `Web UI url` 来访问实验的界面。 + ``` INFO: Starting restful server... INFO: Successfully started Restful server! INFO: Setting local config... @@ -87,6 +88,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 6. nnictl trial kill kill a trial job by id 7. nnictl --help get help information about nnictl ----------------------------------------------------------------------- + ``` * 在浏览器中打开 `Web UI url`,可看到下图的实验详细信息,以及所有的尝试任务。 查看[这里的](docs/WebUI.md)更多页面示例。 From d7d7baa6b024b61ed031460feb3d3b1a1f17ca7a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 15:51:36 +0800 Subject: [PATCH 0066/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index 456772e057..d16a94eae4 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -126,7 +126,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 ## **贡献** -此项目欢迎贡献代码或提交建议,可在 [GitHub issues](https://github.com/Microsoft/nni/issues) 跟踪需求和缺陷。 +欢迎贡献代码或提交建议,可在 [GitHub issues](https://github.com/Microsoft/nni/issues) 跟踪需求和缺陷。 推荐新贡献者从标有 **good first issue** 的简单需求开始。 From caed976ba8bd15789bf0ebfc65e4967d0fc19812 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:16:38 +0800 Subject: [PATCH 0067/1573] Update Crowdin configuration file --- crowdin.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crowdin.yml b/crowdin.yml index 90d82530f1..dbab1c8c16 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,5 @@ files: - source: /**/*.md + ignore: + - README.Makefile.md translation: /%locale_with_underscore%/%original_path%/%original_file_name% From b527b938959acc2218c271e2ff09049f49deed60 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:17:01 +0800 Subject: [PATCH 0068/1573] New translations EnableAssessor.md (Chinese Simplified) --- zh_CN/docs/EnableAssessor.md | 84 ++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 zh_CN/docs/EnableAssessor.md diff --git a/zh_CN/docs/EnableAssessor.md b/zh_CN/docs/EnableAssessor.md new file mode 100644 index 0000000000..0fdaaec12a --- /dev/null +++ b/zh_CN/docs/EnableAssessor.md @@ -0,0 +1,84 @@ +# **Enable Assessor in your expeirment** + +Assessor module is for assessing running trials. One common use case is early stopping, which terminates unpromising trial jobs based on their intermediate results. + +## Using NNI built-in Assessor + +Here we use the same example `examples/trials/mnist-annotation`. We use `Medianstop` assessor for this experiment. The yaml configure file is shown below: + + authorName: your_name + experimentName: auto_mnist + # how many trials could be concurrently running + trialConcurrency: 2 + # maximum experiment running duration + maxExecDuration: 3h + # empty means never stop + maxTrialNum: 100 + # choice: local, remote + trainingServicePlatform: local + # choice: true, false + useAnnotation: true + tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + assessor: + builtinAssessorName: Medianstop + classArgs: + optimize_mode: maximize + trial: + command: python mnist.py + codeDir: /usr/share/nni/examples/trials/mnist-annotation + gpuNum: 0 + + +For our built-in assessors, you need to fill two fields: `builtinAssessorName` which chooses NNI provided assessors (refer to [here]() for built-in assessors), `optimize_mode` which includes maximize and minimize (you want to maximize or minimize your trial result). + +## Using user customized Assessor + +You can also write your own assessor following the guidance [here](). For example, you wrote an assessor for `examples/trials/mnist-annotation`. You should prepare the yaml configure below: + + authorName: your_name + experimentName: auto_mnist + # how many trials could be concurrently running + trialConcurrency: 2 + # maximum experiment running duration + maxExecDuration: 3h + # empty means never stop + maxTrialNum: 100 + # choice: local, remote + trainingServicePlatform: local + # choice: true, false + useAnnotation: true + tuner: + # Possible values: TPE, Random, Anneal, Evolution + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + assessor: + # Your assessor code directory + codeDir: + # Name of the file which contains your assessor class + classFileName: + # Your assessor class name, must be a subclass of nni.Assessor + className: + # Parameter names and literal values you want to pass to + # the __init__ constructor of your assessor class + classArgs: + arg1: value1 + gpuNum: 0 + trial: + command: python mnist.py + codeDir: /usr/share/nni/examples/trials/mnist-annotation + gpuNum: 0 + + +You need to fill: `codeDir`, `classFileName`, `className`, and pass parameters to *\_init__ constructor through `classArgs` field if the *\_init__ constructor of your assessor class has required parameters. + +**Note that** if you want to access a file (e.g., ```data.txt```) in the directory of your own assessor, you cannot use ```open('data.txt', 'r')```. Instead, you should use the following: + + _pwd = os.path.dirname(__file__) + _fd = open(os.path.join(_pwd, 'data.txt'), 'r') + + +This is because your assessor is not executed in the directory of your assessor (i.e., ```pwd``` is not the directory of your own assessor). \ No newline at end of file From 7a49643055d4520b8a33454ec30ccbe046cdbfb8 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:17:04 +0800 Subject: [PATCH 0069/1573] New translations HowToDebug.md (Chinese Simplified) --- zh_CN/docs/HowToDebug.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 zh_CN/docs/HowToDebug.md diff --git a/zh_CN/docs/HowToDebug.md b/zh_CN/docs/HowToDebug.md new file mode 100644 index 0000000000..0c66b86d8a --- /dev/null +++ b/zh_CN/docs/HowToDebug.md @@ -0,0 +1,3 @@ +# **How to Debug in NNI** + +*Coming soon* \ No newline at end of file From 7a4be6f35518538d56dd9485fb4a444a483ecbc6 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:17:05 +0800 Subject: [PATCH 0070/1573] New translations CONTRIBUTING.md (Chinese Simplified) --- zh_CN/docs/CONTRIBUTING.md | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 zh_CN/docs/CONTRIBUTING.md diff --git a/zh_CN/docs/CONTRIBUTING.md b/zh_CN/docs/CONTRIBUTING.md new file mode 100644 index 0000000000..2de74153cc --- /dev/null +++ b/zh_CN/docs/CONTRIBUTING.md @@ -0,0 +1,44 @@ +# Contributing to Neural Network Intelligence (NNI) + +Great!! We are always on the lookout for more contributors to our code base. + +Firstly, if you are unsure or afraid of anything, just ask or submit the issue or pull request anyways. You won't be yelled at for giving your best effort. The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions and don't want a wall of rules to get in the way of that. + +However, for those individuals who want a bit more guidance on the best way to contribute to the project, read on. This document will cover all the points we're looking for in your contributions, raising your chances of quickly merging or addressing your contributions. + +Looking for a quickstart, get acquainted with our [Get Started](./GetStarted.md) guide. + +There are a few simple guidelines that you need to follow before providing your hacks. + +## Raising Issues + +When raising issues, please specify the following: + +- Setup details needs to be filled as specified in the issue template clearly for the reviewer to check. +- A scenario where the issue occurred (with details on how to reproduce it). +- Errors and log messages that are displayed by the software. +- Any other details that might be useful. + +## Submit Proposals for New Features + +- There is always something more that is required, to make it easier to suit your use-cases. Feel free to join the discussion on new features or raise a PR with your proposed change. + +- Fork the repository under your own github handle. After cloning the repository. Add, commit, push and sqaush (if necessary) the changes with detailed commit messages to your fork. From where you can proceed to making a pull request. + +## Contributing to Source Code and Bug Fixes + +Provide PRs with appropriate tags for bug fixes or enhancements to the source code. Do follow the correct naming conventions and code styles when you work on and do try to implement all code reviews along the way. + +If you are looking for How to develop and debug the NNI source code, you can refer to [How to set up NNI developer environment doc](./SetupNNIDeveloperEnvironment.md) file in the `docs` folder. + +Similarly for [writing trials](./WriteYourTrial.md) or [starting experiments](StartExperiment.md). For everything else, refer [here](https://github.com/Microsoft/nni/tree/master/docs). + +## Solve Existing Issues + +Head over to [issues](https://github.com/Microsoft/nni/issues) to find issues where help is needed from contributors. You can find issues tagged with 'good-first-issue' or 'help-wanted' to contribute in. + +A person looking to contribute can take up an issue by claiming it as a comment/assign their Github ID to it. In case there is no PR or update in progress for a week on the said issue, then the issue reopens for anyone to take up again. We need to consider high priority issues/regressions where response time must be a day or so. + +## Code Styles & Naming Conventions + +We follow [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python code and naming conventions, do try to adhere to the same when making a pull request or making a change. One can also take the help of linters such as `flake8` or `pylint` \ No newline at end of file From d6669a3359410b2f5a98c3aded45188d5b385805 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:21:49 +0800 Subject: [PATCH 0071/1573] New translations README.md (Chinese Simplified) --- zh_CN/deployment/docker/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/deployment/docker/README.md b/zh_CN/deployment/docker/README.md index bc05e3c0c1..c26d79d923 100644 --- a/zh_CN/deployment/docker/README.md +++ b/zh_CN/deployment/docker/README.md @@ -1,8 +1,8 @@ # Dockerfile -## 1.Description +## 1. 说明 -This is the Dockerfile of nni project. It includes serveral popular deep learning frameworks and NNI. It is tested on `Ubuntu 16.04 LTS`: +这是 NNI 项目的 Dockerfile 文件。 It includes serveral popular deep learning frameworks and NNI. It is tested on `Ubuntu 16.04 LTS`: CUDA 9.0, CuDNN 7.0 numpy 1.14.3,scipy 1.1.0 From 006c1b77c287d9a90ad910c545a4cabf34252947 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:41:37 +0800 Subject: [PATCH 0072/1573] New translations README.md (Chinese Simplified) --- zh_CN/deployment/docker/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zh_CN/deployment/docker/README.md b/zh_CN/deployment/docker/README.md index c26d79d923..375a8486fd 100644 --- a/zh_CN/deployment/docker/README.md +++ b/zh_CN/deployment/docker/README.md @@ -2,7 +2,7 @@ ## 1. 说明 -这是 NNI 项目的 Dockerfile 文件。 It includes serveral popular deep learning frameworks and NNI. It is tested on `Ubuntu 16.04 LTS`: +这是 NNI 项目的 Dockerfile 文件。 其中包含了 NNI 以及多个流行的深度学习框架。 在 `Ubuntu 16.04 LTS` 上进行过测试: CUDA 9.0, CuDNN 7.0 numpy 1.14.3,scipy 1.1.0 @@ -13,34 +13,34 @@ NNI v0.3 -You can take this Dockerfile as a reference for your own customized Dockerfile. +此 Dockerfile 可作为定制的参考。 -## 2.How to build and run +## 2.如何生成和运行 -**Use the following command from `nni/deployment/docker` to build docker image** +**使用 `nni/deployment/docker` 的下列命令来生成 docker 映像。** docker build -t nni/nni . -**Run the docker image** +**运行 docker 映像** -* If does not use GPU in docker container, simply run the following command +* 如果 docker 容器中没有 GPU,运行下面的命令 docker run -it nni/nni -* If use GPU in docker container, make sure you have installed [NVIDIA Container Runtime](https://github.com/NVIDIA/nvidia-docker), then run the following command +* 如果 docker 容器中有 GPU,确保安装了 [NVIDIA 容器运行包](https://github.com/NVIDIA/nvidia-docker),然后运行下面的命令 nvidia-docker run -it nni/nni -or +或者 docker run --runtime=nvidia -it nni/nni -## 3.Directly retrieve the docker image +## 3.拉取 docker 映像 -Use the following command to retrieve the NNI docker image from Docker Hub +使用下列命令从 docker Hub 中拉取 NNI docker 映像。 docker pull msranni/nni:latest \ No newline at end of file From 5ec8c4e323829ab4d629ae46deb2d73719271e1a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:48:58 +0800 Subject: [PATCH 0073/1573] New translations README.md (Chinese Simplified) --- zh_CN/deployment/pypi/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/zh_CN/deployment/pypi/README.md b/zh_CN/deployment/pypi/README.md index 43f23fe78c..cd336a867d 100644 --- a/zh_CN/deployment/pypi/README.md +++ b/zh_CN/deployment/pypi/README.md @@ -1,12 +1,12 @@ -# Python Package Index (PyPI) for NNI +# 用于 NNI 的 python 包索引 (pypi) -## 1.Description +## 1. 说明 -This is the PyPI build and upload tool for NNI project. +这是用于 NNI 项目的 PyPI 生成和上传的工具。 -## 2.Prepare environment +## 2.准备环境 -Before build and upload NNI package, make sure the below OS and tools are available. +在生成和上传 NNI 包之前,确保使用了下列环境。 Ubuntu 16.04 LTS make @@ -17,26 +17,26 @@ Before build and upload NNI package, make sure the below OS and tools are availa Yarn -## 2.How to build +## 2.如何生成 ```bash make ``` -## 3.How to upload +## 3.如何上传 -### upload for testing +### 上传测试包 ```bash TWINE_REPOSITORY_URL=https://test.pypi.org/legacy/ make upload ``` -You may need to input the account and password of https://test.pypi.org during this process. +上传过程中,可能需要输入 https://test.pypi.org 的用户和密码。 -### upload for release +### 上传发布包 ```bash make upload ``` -You may need to input the account and password of https://pypi.org during this process. \ No newline at end of file +上传过程中,可能需要输入 https://pypi.org 的用户和密码。 \ No newline at end of file From ea0502e7ef9a8252af2b5b09f166ce995b09c2de Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:49:09 +0800 Subject: [PATCH 0074/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 74 +++++++++++++++++----------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index aaaaedbff3..f3d770c556 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -479,15 +479,15 @@ trialConcurrency: 3 maxExecDuration: 1h maxTrialNum: 10 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: local - #choice: true, false + #可选项: true, false useAnnotation: true tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize gpuNum: 0 trial: @@ -504,23 +504,23 @@ trialConcurrency: 3 maxExecDuration: 1h maxTrialNum: 10 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: local searchSpacePath: /nni/search_space.json - #choice: true, false + #可选项: true, false useAnnotation: false tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize gpuNum: 0 assessor: - #choice: Medianstop + #可选项: Medianstop builtinAssessorName: Medianstop classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize gpuNum: 0 trial: @@ -537,17 +537,17 @@ trialConcurrency: 3 maxExecDuration: 1h maxTrialNum: 10 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: local searchSpacePath: /nni/search_space.json - #choice: true, false + #可选项: true, false useAnnotation: false tuner: codeDir: /nni/tuner classFileName: mytuner.py className: MyTuner classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize gpuNum: 0 assessor: @@ -573,23 +573,23 @@ If run trial jobs in remote machine, users could specify the remote mahcine info trialConcurrency: 3 maxExecDuration: 1h maxTrialNum: 10 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: remote searchSpacePath: /nni/search_space.json - #choice: true, false + #可选项: true, false useAnnotation: false tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize gpuNum: 0 trial: command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - #machineList can be empty if the platform is local + # 如果是本地实验,machineList 可为空。 machineList: - ip: 10.10.10.10 @@ -614,17 +614,17 @@ If run trial jobs in remote machine, users could specify the remote mahcine info trialConcurrency: 1 maxExecDuration:500h maxTrialNum: 1 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: pai searchSpacePath: search_space.json - #choice: true, false + #可选项: true, false useAnnotation: false tuner: - #choice: TPE, Random, Anneal, Evolution, BatchTuner - #SMAC (SMAC should be installed through nnictl) + #可选项: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC 需要使用 nnictl package 单独安装) builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize trial: command: python3 main.py @@ -632,18 +632,18 @@ If run trial jobs in remote machine, users could specify the remote mahcine info gpuNum: 4 cpuNum: 2 memoryMB: 10000 - #The docker image to run nni job on pai + # 在 OpenPAI 上用来运行 NNI 作业的 docker 映像 image: msranni/nni:latest - #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + # 在 OpenPAI 的 hdfs 上存储数据的目录,如:'hdfs://host:port/directory' dataDir: hdfs://10.11.12.13:9000/test - #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + # 在 OpenPAI 的 hdfs 上存储输出的目录,如:'hdfs://host:port/directory' outputDir: hdfs://10.11.12.13:9000/test paiConfig: - #The username to login pai + # OpenPAI 用户名 userName: test - #The password to login pai + # OpenPAI 密码 passWord: test - #The host of restful server of pai + # OpenPAI 服务器 IP host: 10.10.10.10 @@ -657,16 +657,16 @@ kubeflow use nfs as storage. trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 1 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: kubeflow searchSpacePath: search_space.json - #choice: true, false + #可选项: true, false useAnnotation: false tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize trial: codeDir: . @@ -691,17 +691,17 @@ kubeflow use azure storage trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 1 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: kubeflow searchSpacePath: search_space.json - #choice: true, false + #可选项: true, false useAnnotation: false #nniManagerIp: 10.10.10.10 tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize assessor: builtinAssessorName: Medianstop From 0a879d7691668669e9b6f007919fe07620a9bd85 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:51:38 +0800 Subject: [PATCH 0075/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index f3d770c556..9a799c1359 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -6,6 +6,7 @@ * **简化版(不包含标记 (annotation) 和评估器)** + ``` authorName: experimentName: trialConcurrency: @@ -32,11 +33,13 @@ - ip: port: username: - passwd: + passwd: + ``` * **使用评估器** + ``` authorName: experimentName: trialConcurrency: @@ -70,11 +73,13 @@ - ip: port: username: - passwd: + passwd: + ``` * **使用标记** + ``` authorName: experimentName: trialConcurrency: @@ -107,7 +112,8 @@ - ip: port: username: - passwd: + passwd: + ``` ## 配置 From 0d991ea234b9800fe8bf635f469061a53c2e262a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 16:53:31 +0800 Subject: [PATCH 0076/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 9a799c1359..94b8f7eb54 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -480,6 +480,7 @@ If users want to run trial jobs in local machine, and use annotation to generate search space, could use the following config: + ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -500,11 +501,13 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 + ``` Could add assessor configuration in config file if set assessor. + ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -533,11 +536,13 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 + ``` Or you could specify your own tuner and assessor file as following: + ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -568,12 +573,14 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 + ``` * **remote mode** If run trial jobs in remote machine, users could specify the remote mahcine information as fllowing format: + ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -611,10 +618,12 @@ If run trial jobs in remote machine, users could specify the remote mahcine info username: test sshKeyPath: /nni/sshkey passphrase: qwert + ``` * **pai mode** + ``` authorName: test experimentName: nni_test1 trialConcurrency: 1 @@ -658,6 +667,7 @@ If run trial jobs in remote machine, users could specify the remote mahcine info kubeflow use nfs as storage. + ``` authorName: default experimentName: example_mni trialConcurrency: 1 @@ -688,10 +698,12 @@ kubeflow use nfs as storage. nfs: server: 10.10.10.10 path: /var/nfs/general + ``` kubeflow use azure storage + ``` authorName: default experimentName: example_mni trialConcurrency: 1 @@ -730,4 +742,5 @@ kubeflow use azure storage name: AzureStorageAccountKey azureStorage: accountName: storage - azureShare: share01 \ No newline at end of file + azureShare: share01 + ``` \ No newline at end of file From 4ddfe1b516284d633d95ab8a60fe8e3119cc2a74 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 18:01:36 +0800 Subject: [PATCH 0077/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md index 5818d18181..c2b96cc51a 100644 --- a/zh_CN/docs/PAIMode.md +++ b/zh_CN/docs/PAIMode.md @@ -1,6 +1,6 @@ -# **Run an Experiment on OpenPAI** +# **在 OpenPAI 上运行实验** -NNI supports running an experiment on [OpenPAI](https://github.com/Microsoft/pai) (aka pai), called pai mode. Before starting to use NNI pai mode, you should have an account to access an [OpenPAI](https://github.com/Microsoft/pai) cluster. See [here](https://github.com/Microsoft/pai#how-to-deploy) if you don't have any OpenPAI account and want to deploy an OpenPAI cluster. In pai mode, your trial program will run in pai's container created by Docker. +NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) ( pai) 上运行实验, 称为 pai 模式。 在开始使用NNI pai 模式之前, 您应该有一个访问 [OpenPAI](https://github.com/Microsoft/pai) 群集的账户。 See [here](https://github.com/Microsoft/pai#how-to-deploy) if you don't have any OpenPAI account and want to deploy an OpenPAI cluster. In pai mode, your trial program will run in pai's container created by Docker. ## Setup environment From 643d5ca8721d875b07b33ba1fdb6f6b26f38ca6c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sat, 29 Dec 2018 18:11:34 +0800 Subject: [PATCH 0078/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md index c2b96cc51a..e350126d26 100644 --- a/zh_CN/docs/PAIMode.md +++ b/zh_CN/docs/PAIMode.md @@ -1,6 +1,6 @@ # **在 OpenPAI 上运行实验** -NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) ( pai) 上运行实验, 称为 pai 模式。 在开始使用NNI pai 模式之前, 您应该有一个访问 [OpenPAI](https://github.com/Microsoft/pai) 群集的账户。 See [here](https://github.com/Microsoft/pai#how-to-deploy) if you don't have any OpenPAI account and want to deploy an OpenPAI cluster. In pai mode, your trial program will run in pai's container created by Docker. +NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运行实验,即 pai 模式。 在使用 NNI 的 pai 模式前, 需要有 [OpenPAI](https://github.com/Microsoft/pai) 群集的账户。 See [here](https://github.com/Microsoft/pai#how-to-deploy) if you don't have any OpenPAI account and want to deploy an OpenPAI cluster. In pai mode, your trial program will run in pai's container created by Docker. ## Setup environment From 502f94a0c312536cc0cdfcc16b6a56155897dbf2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 09:50:00 +0800 Subject: [PATCH 0079/1573] New translations HowToDebug.md (Chinese Simplified) --- zh_CN/docs/HowToDebug.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/HowToDebug.md b/zh_CN/docs/HowToDebug.md index 0c66b86d8a..3a247d60c1 100644 --- a/zh_CN/docs/HowToDebug.md +++ b/zh_CN/docs/HowToDebug.md @@ -1,3 +1,3 @@ -# **How to Debug in NNI** +# **在 NNI 中调试代码** -*Coming soon* \ No newline at end of file +*编写中……* \ No newline at end of file From cccee8e6da9bafc4f3237edaf3842f5cd6eb3ada Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 09:50:11 +0800 Subject: [PATCH 0080/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 5dcfcf60b2..a468301728 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -1,32 +1,32 @@ -# **Installation of NNI** +# **安装 NNI** -Currently we only support installation on Linux & Mac. +当前仅支持 Linux 和 Mac。 -## **Installation** +## **安装** -* **Dependencies** +* **依赖项** python >= 3.5 git wget - python pip should also be correctly installed. You could use "python3 -m pip -v" to check pip version. + 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 -* **Install NNI through pip** +* **通过 pip 命令安装 NNI** python3 -m pip install --user --upgrade nni -* **Install NNI through source code** +* **通过源代码安装 NNI** git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh -* **Install NNI in docker image** +* **在 docker 映像中安装 NNI** - You can also install NNI in a docker image. Please follow the instructions [here](../deployment/docker/README.md) to build NNI docker image. The NNI docker image can also be retrieved from Docker Hub through the command `docker pull msranni/nni:latest`. + 也可将 NNI 安装到 docker 映像中。 参考[这里](../deployment/docker/README.md)来生成 NNI 的 docker 映像。 也可通过此命令从 Docker Hub 中直接拉取 NNI 的映像 `docker pull msranni/nni:latest`。 -## **System requirements** +## **系统需求** -Below are the minimum system requirements for NNI on Linux. Due to potential programming changes, the minimum system requirements for NNI may change over time. +以下是 NNI 在 Linux 下的最小需求。 由于程序变更,NNI 的最小需求会有所更改。 -| | Minimum Requirements | Recommended Specifications | +| | 最小需求 | Recommended Specifications | | -------------------- | -------------------------------------- | ---------------------------------------------- | | **Operating System** | Ubuntu 16.04 or above | Ubuntu 16.04 or above | | **CPU** | Intel® Core™ i3 or AMD Phenom™ X3 8650 | Intel® Core™ i5 or AMD Phenom™ II X3 or better | From f312769b11ac040b7dc011d564a46a23f031e5f3 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 09:55:14 +0800 Subject: [PATCH 0081/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 68 +++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index a468301728..008f585fe1 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -24,37 +24,37 @@ ## **系统需求** -以下是 NNI 在 Linux 下的最小需求。 由于程序变更,NNI 的最小需求会有所更改。 - -| | 最小需求 | Recommended Specifications | -| -------------------- | -------------------------------------- | ---------------------------------------------- | -| **Operating System** | Ubuntu 16.04 or above | Ubuntu 16.04 or above | -| **CPU** | Intel® Core™ i3 or AMD Phenom™ X3 8650 | Intel® Core™ i5 or AMD Phenom™ II X3 or better | -| **GPU** | NVIDIA® GeForce® GTX 460 | NVIDIA® GeForce® GTX 660 or better | -| **Memory** | 4 GB RAM | 6 GB RAM | -| **Storage** | 30 GB available hare drive space | | -| **Internet** | Boardband internet connection | | -| **Resolution** | 1024 x 768 minimum display resolution | | - -Below are the minimum system requirements for NNI on macOS. Due to potential programming changes, the minimum system requirements for NNI may change over time. - -| | Minimum Requirements | Recommended Specifications | -| -------------------- | --------------------------------------------------------- | ------------------------------ | -| **Operating System** | macOS 10.14.1 (latest version) | macOS 10.14.1 (latest version) | -| **CPU** | Intel® Core™ i5-760 or better | Intel® Core™ i7-4770 or better | -| **GPU** | NVIDIA® GeForce® GT 750M or AMD Radeon™ R9 M290 or better | AMD Radeon™ R9 M395X or better | -| **Memory** | 4 GB RAM | 8 GB RAM | -| **Storage** | 70GB available space 7200 RPM HDD | 70GB available space SSD | -| **Internet** | Boardband internet connection | | -| **Resolution** | 1024 x 768 minimum display resolution | | - -## Further reading - -* [Overview](Overview.md) -* [Use command line tool nnictl](NNICTLDOC.md) -* [Use NNIBoard](WebUI.md) -* [Define search space](SearchSpaceSpec.md) -* [Config an experiment](ExperimentConfig.md) -* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) -* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) -* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file +以下是 NNI 在 Linux 下的最低配置。 由于程序变更,NNI 的最小需求会有所更改。 + +| | 最低配置 | 推荐配置 | +| -------- | ------------------------------------- | ----------------------------------------- | +| **操作系统** | Ubuntu 16.04 或以上版本 | Ubuntu 16.04 或以上版本 | +| **CPU** | Intel® Core™ i3 或 AMD Phenom™ X3 8650 | Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置 | +| **GPU** | NVIDIA® GeForce® GTX 460 | NVIDIA® GeForce® GTX 660 或更高配置 | +| **内存** | 4 GB | 6 GB | +| **存储** | 30 GB 可用的磁盘空间 | | +| **网络** | 宽带连接 | | +| **分辨率** | 1024 x 768 以上 | | + +以下是 NNI 在 MacOS 下的最低配置。 由于程序变更,NNI 的最小需求会有所更改。 + +| | 最低配置 | 推荐配置 | +| -------- | -------------------------------------------------- | ------------------------ | +| **操作系统** | macOS 10.14.1 (最新版本) | macOS 10.14.1 (最新版本) | +| **CPU** | Intel® Core™ i5-760 或更高 | Intel® Core™ i7-4770 或更高 | +| **GPU** | NVIDIA® GeForce® GT 750M 或 AMD Radeon™ R9 M290 或更高 | AMD Radeon™ R9 M395X 或更高 | +| **内存** | 4 GB | 8 GB | +| **存储** | 70GB 可用空间及 7200 RPM 硬盘 | 70GB 可用空间 SSD 硬盘 | +| **网络** | 宽带连接 | | +| **分辨率** | 1024 x 768 以上 | | + +## 更多 + +* [概述](Overview.md) +* [使用命令行工具 nnictl](NNICTLDOC.md) +* [使用 NNIBoard](WebUI.md) +* [定制搜索空间](SearchSpaceSpec.md) +* [配置实验](ExperimentConfig.md) +* [如何在本机运行实验 (支持多 GPU 卡)?](tutorial_1_CR_exp_local_api.md) +* [如何在多机上运行实验?](tutorial_2_RemoteMachineMode.md) +* [如何在 OpenPAI 上运行实验?](PAIMode.md) \ No newline at end of file From d7e031cacdd24d06b33c40b53ee8ef65ba0a52b4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 09:57:08 +0800 Subject: [PATCH 0082/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 008f585fe1..36be911df5 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,17 +6,17 @@ * **依赖项** - python >= 3.5 git wget + ``` python >= 3.5 git wget ``` 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** - python3 -m pip install --user --upgrade nni + ``` python3 -m pip install --user --upgrade nni ``` * **通过源代码安装 NNI** - git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh + ``` git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh ``` * **在 docker 映像中安装 NNI** From 922acb08d3a997d87ddfb109a9ee17081690fc08 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 09:59:36 +0800 Subject: [PATCH 0083/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 36be911df5..008f585fe1 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,17 +6,17 @@ * **依赖项** - ``` python >= 3.5 git wget ``` + python >= 3.5 git wget 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** - ``` python3 -m pip install --user --upgrade nni ``` + python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** - ``` git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh ``` + git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh * **在 docker 映像中安装 NNI** From 3fbe8a4fa693cbeefdb4da452d66ee3c01203338 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:02:37 +0800 Subject: [PATCH 0084/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 008f585fe1..36be911df5 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,17 +6,17 @@ * **依赖项** - python >= 3.5 git wget + ``` python >= 3.5 git wget ``` 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** - python3 -m pip install --user --upgrade nni + ``` python3 -m pip install --user --upgrade nni ``` * **通过源代码安装 NNI** - git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh + ``` git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh ``` * **在 docker 映像中安装 NNI** From 5ebcd73cd264b3107e6d371048200085e1cc2759 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:08:37 +0800 Subject: [PATCH 0085/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 36be911df5..020a0dc415 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,7 +6,11 @@ * **依赖项** - ``` python >= 3.5 git wget ``` + ` + python >= 3.5 + git + wget +` 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 From 88d49e4cb2f716aab5af3accfce3478f765f9b5a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:09:54 +0800 Subject: [PATCH 0086/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 020a0dc415..fd72bdbf6b 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -10,7 +10,7 @@ python >= 3.5 git wget -` + ` 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 From cf7d613a2a4f3de9d784ee59aac0f4236b205838 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:10:56 +0800 Subject: [PATCH 0087/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index fd72bdbf6b..785dfdcef1 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -7,10 +7,10 @@ * **依赖项** ` - python >= 3.5 - git - wget - ` + python >= 3.5 + git + wget + ` 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 From 5515035932864880615c0b11a41fd81143ced37a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:15:48 +0800 Subject: [PATCH 0088/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 785dfdcef1..b397ae9317 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -20,7 +20,7 @@ * **通过源代码安装 NNI** - ``` git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh ``` + git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh * **在 docker 映像中安装 NNI** From 70da0592a3a9a9d838cd678a9699b2e2d3657f84 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:21:33 +0800 Subject: [PATCH 0089/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index b397ae9317..008f585fe1 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,17 +6,13 @@ * **依赖项** - ` - python >= 3.5 - git - wget - ` + python >= 3.5 git wget 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** - ``` python3 -m pip install --user --upgrade nni ``` + python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** From cb346193c36081c7214523be950ad013e2c371d1 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:26:14 +0800 Subject: [PATCH 0090/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 008f585fe1..03c869911a 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,17 +6,17 @@ * **依赖项** - python >= 3.5 git wget +       python >= 3.5 git wget 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** - python3 -m pip install --user --upgrade nni +       python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** - git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh +       git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh * **在 docker 映像中安装 NNI** From 5a47cd691fb661c7c3c0e84e676cabdb97c1b0e2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:27:37 +0800 Subject: [PATCH 0091/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 03c869911a..83f837bbaa 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,17 +6,17 @@ * **依赖项** -       python >= 3.5 git wget +        python >= 3.5 git wget 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** -       python3 -m pip install --user --upgrade nni +        python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** -       git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh +        git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh * **在 docker 映像中安装 NNI** From a5add9b2b7a0b8895f60a36c1427e8ab26f4432c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:51:42 +0800 Subject: [PATCH 0092/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 72 +++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 83f837bbaa..513ff33da5 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -12,11 +12,11 @@ * **通过 pip 命令安装 NNI** -        python3 -m pip install --user --upgrade nni + python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** -        git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh + ``` git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh ``` * **在 docker 映像中安装 NNI** @@ -24,37 +24,37 @@ ## **系统需求** -以下是 NNI 在 Linux 下的最低配置。 由于程序变更,NNI 的最小需求会有所更改。 - -| | 最低配置 | 推荐配置 | -| -------- | ------------------------------------- | ----------------------------------------- | -| **操作系统** | Ubuntu 16.04 或以上版本 | Ubuntu 16.04 或以上版本 | -| **CPU** | Intel® Core™ i3 或 AMD Phenom™ X3 8650 | Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置 | -| **GPU** | NVIDIA® GeForce® GTX 460 | NVIDIA® GeForce® GTX 660 或更高配置 | -| **内存** | 4 GB | 6 GB | -| **存储** | 30 GB 可用的磁盘空间 | | -| **网络** | 宽带连接 | | -| **分辨率** | 1024 x 768 以上 | | - -以下是 NNI 在 MacOS 下的最低配置。 由于程序变更,NNI 的最小需求会有所更改。 - -| | 最低配置 | 推荐配置 | -| -------- | -------------------------------------------------- | ------------------------ | -| **操作系统** | macOS 10.14.1 (最新版本) | macOS 10.14.1 (最新版本) | -| **CPU** | Intel® Core™ i5-760 或更高 | Intel® Core™ i7-4770 或更高 | -| **GPU** | NVIDIA® GeForce® GT 750M 或 AMD Radeon™ R9 M290 或更高 | AMD Radeon™ R9 M395X 或更高 | -| **内存** | 4 GB | 8 GB | -| **存储** | 70GB 可用空间及 7200 RPM 硬盘 | 70GB 可用空间 SSD 硬盘 | -| **网络** | 宽带连接 | | -| **分辨率** | 1024 x 768 以上 | | - -## 更多 - -* [概述](Overview.md) -* [使用命令行工具 nnictl](NNICTLDOC.md) -* [使用 NNIBoard](WebUI.md) -* [定制搜索空间](SearchSpaceSpec.md) -* [配置实验](ExperimentConfig.md) -* [如何在本机运行实验 (支持多 GPU 卡)?](tutorial_1_CR_exp_local_api.md) -* [如何在多机上运行实验?](tutorial_2_RemoteMachineMode.md) -* [如何在 OpenPAI 上运行实验?](PAIMode.md) \ No newline at end of file +以下是 NNI 在 Linux 下的最低配置。 由于程序变更,NNI 的最低配置会有所更改。 + +| | 最低配置 | 推荐配置 | +| -------------- | ------------------------------------- | ----------------------------------------- | +| **操作系统** | Ubuntu 16.04 或以上版本 | Ubuntu 16.04 或以上版本 | +| **CPU** | Intel® Core™ i3 或 AMD Phenom™ X3 8650 | Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置 | +| **GPU** | NVIDIA® GeForce® GTX 460 | NVIDIA® GeForce® GTX 660 或更高配置 | +| **内存** | 4 GB | 6 GB | +| **Storage** | 30 GB available hare drive space | | +| **Internet** | Boardband internet connection | | +| **Resolution** | 1024 x 768 minimum display resolution | | + +Below are the minimum system requirements for NNI on macOS. Due to potential programming changes, the minimum system requirements for NNI may change over time. + +| | Minimum Requirements | Recommended Specifications | +| -------------------- | --------------------------------------------------------- | ------------------------------ | +| **Operating System** | macOS 10.14.1 (latest version) | macOS 10.14.1 (latest version) | +| **CPU** | Intel® Core™ i5-760 or better | Intel® Core™ i7-4770 or better | +| **GPU** | NVIDIA® GeForce® GT 750M or AMD Radeon™ R9 M290 or better | AMD Radeon™ R9 M395X or better | +| **Memory** | 4 GB RAM | 8 GB RAM | +| **Storage** | 70GB available space 7200 RPM HDD | 70GB available space SSD | +| **Internet** | Boardband internet connection | | +| **Resolution** | 1024 x 768 minimum display resolution | | + +## Further reading + +* [Overview](Overview.md) +* [Use command line tool nnictl](NNICTLDOC.md) +* [Use NNIBoard](WebUI.md) +* [Define search space](SearchSpaceSpec.md) +* [Config an experiment](ExperimentConfig.md) +* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) +* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) +* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From fa55fd8746989c8899cbf8e89a9cb4d2aa21a040 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:54:21 +0800 Subject: [PATCH 0093/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 64 +++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 513ff33da5..64fbde980e 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -26,35 +26,35 @@ 以下是 NNI 在 Linux 下的最低配置。 由于程序变更,NNI 的最低配置会有所更改。 -| | 最低配置 | 推荐配置 | -| -------------- | ------------------------------------- | ----------------------------------------- | -| **操作系统** | Ubuntu 16.04 或以上版本 | Ubuntu 16.04 或以上版本 | -| **CPU** | Intel® Core™ i3 或 AMD Phenom™ X3 8650 | Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置 | -| **GPU** | NVIDIA® GeForce® GTX 460 | NVIDIA® GeForce® GTX 660 或更高配置 | -| **内存** | 4 GB | 6 GB | -| **Storage** | 30 GB available hare drive space | | -| **Internet** | Boardband internet connection | | -| **Resolution** | 1024 x 768 minimum display resolution | | - -Below are the minimum system requirements for NNI on macOS. Due to potential programming changes, the minimum system requirements for NNI may change over time. - -| | Minimum Requirements | Recommended Specifications | -| -------------------- | --------------------------------------------------------- | ------------------------------ | -| **Operating System** | macOS 10.14.1 (latest version) | macOS 10.14.1 (latest version) | -| **CPU** | Intel® Core™ i5-760 or better | Intel® Core™ i7-4770 or better | -| **GPU** | NVIDIA® GeForce® GT 750M or AMD Radeon™ R9 M290 or better | AMD Radeon™ R9 M395X or better | -| **Memory** | 4 GB RAM | 8 GB RAM | -| **Storage** | 70GB available space 7200 RPM HDD | 70GB available space SSD | -| **Internet** | Boardband internet connection | | -| **Resolution** | 1024 x 768 minimum display resolution | | - -## Further reading - -* [Overview](Overview.md) -* [Use command line tool nnictl](NNICTLDOC.md) -* [Use NNIBoard](WebUI.md) -* [Define search space](SearchSpaceSpec.md) -* [Config an experiment](ExperimentConfig.md) -* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) -* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) -* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file +| | 最低配置 | 推荐配置 | +| -------- | ------------------------------------- | ----------------------------------------- | +| **操作系统** | Ubuntu 16.04 或以上版本 | Ubuntu 16.04 或以上版本 | +| **CPU** | Intel® Core™ i3 或 AMD Phenom™ X3 8650 | Intel® Core™ i5 或 AMD Phenom™ II X3 或更高配置 | +| **GPU** | NVIDIA® GeForce® GTX 460 | NVIDIA® GeForce® GTX 660 或更高配置 | +| **内存** | 4 GB | 6 GB | +| **存储** | 30 GB 可用的磁盘空间 | | +| **网络** | 宽带连接 | | +| **分辨率** | 1024 x 768 以上 | | + +以下是 NNI 在 MacOS 下的最低配置。 由于程序变更,NNI 的最低配置会有所更改。 + +| | 最低配置 | 推荐配置 | +| -------- | -------------------------------------------------- | ------------------------ | +| **操作系统** | macOS 10.14.1 (最新版本) | macOS 10.14.1 (最新版本) | +| **CPU** | Intel® Core™ i5-760 或更高 | Intel® Core™ i7-4770 或更高 | +| **GPU** | NVIDIA® GeForce® GT 750M 或 AMD Radeon™ R9 M290 或更高 | AMD Radeon™ R9 M395X 或更高 | +| **内存** | 4 GB | 8 GB | +| **存储** | 70GB 可用空间及 7200 RPM 硬盘 | 70GB 可用空间 SSD 硬盘 | +| **网络** | 宽带连接 | | +| **分辨率** | 1024 x 768 以上 | | + +## 更多 + +* [概述](Overview.md) +* [使用命令行工具 nnictl](NNICTLDOC.md) +* [使用 NNIBoard](WebUI.md) +* [定制搜索空间](SearchSpaceSpec.md) +* [配置实验](ExperimentConfig.md) +* [如何在本机运行实验 (支持多 GPU 卡)?](tutorial_1_CR_exp_local_api.md) +* [如何在多机上运行实验?](tutorial_2_RemoteMachineMode.md) +* [如何在 OpenPAI 上运行实验?](PAIMode.md) \ No newline at end of file From 1c7187340b7659db0490e341b9154578bf966077 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 10:59:16 +0800 Subject: [PATCH 0094/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 64fbde980e..63a78c9e1d 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,7 +6,7 @@ * **依赖项** -        python >= 3.5 git wget + python >= 3.5 git wget 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 From f344bb7765e1faefa68e990c2ba4efabad50c427 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 11:07:37 +0800 Subject: [PATCH 0095/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 63a78c9e1d..8777d33496 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,7 +6,7 @@ * **依赖项** - python >= 3.5 git wget + ``` python >= 3.5 git wget ``` 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 From 4a248154c45b7d334ffe645a3e435dcdc5f06557 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 11:14:25 +0800 Subject: [PATCH 0096/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 8777d33496..63a78c9e1d 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,7 +6,7 @@ * **依赖项** - ``` python >= 3.5 git wget ``` + python >= 3.5 git wget 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 From 6e5acfab1ec91b4d1d2966ac0fb9b9b95a20c0e1 Mon Sep 17 00:00:00 2001 From: squirrelsc Date: Wed, 2 Jan 2019 11:41:16 +0800 Subject: [PATCH 0097/1573] update format --- zh_CN/docs/Installation.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 63a78c9e1d..ebfbec1697 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -5,21 +5,25 @@ ## **安装** * **依赖项** - - python >= 3.5 git wget - + + python >= 3.5 + git + wget + 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** - - python3 -m pip install --user --upgrade nni + + python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** - - ``` git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh ``` + + git clone -b v0.4.1 https://github.com/Microsoft/nni.git + cd nni source + install.sh * **在 docker 映像中安装 NNI** - + 也可将 NNI 安装到 docker 映像中。 参考[这里](../deployment/docker/README.md)来生成 NNI 的 docker 映像。 也可通过此命令从 Docker Hub 中直接拉取 NNI 的映像 `docker pull msranni/nni:latest`。 ## **系统需求** From 5484fcf72ecd90dd17345922a6d737f99f157973 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 11:51:32 +0800 Subject: [PATCH 0098/1573] New translations CONTRIBUTING.md (Chinese Simplified) --- zh_CN/docs/CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/CONTRIBUTING.md b/zh_CN/docs/CONTRIBUTING.md index 2de74153cc..e00b4ff8a7 100644 --- a/zh_CN/docs/CONTRIBUTING.md +++ b/zh_CN/docs/CONTRIBUTING.md @@ -1,8 +1,8 @@ -# Contributing to Neural Network Intelligence (NNI) +# 改进 Neural Network Intelligence (NNI) -Great!! We are always on the lookout for more contributors to our code base. +欢迎!! 我们非常欢迎贡献者,特别是代码贡献者。 -Firstly, if you are unsure or afraid of anything, just ask or submit the issue or pull request anyways. You won't be yelled at for giving your best effort. The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions and don't want a wall of rules to get in the way of that. +首先,如果有什么不确定的事情,可随时提交问题或拉取请求。 You won't be yelled at for giving your best effort. The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions and don't want a wall of rules to get in the way of that. However, for those individuals who want a bit more guidance on the best way to contribute to the project, read on. This document will cover all the points we're looking for in your contributions, raising your chances of quickly merging or addressing your contributions. From 36c33267e2d5fd0b272cec909f8b25da7b9d8739 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 11:51:41 +0800 Subject: [PATCH 0099/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index ebfbec1697..09f70f6aa7 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -5,25 +5,28 @@ ## **安装** * **依赖项** - - python >= 3.5 - git - wget - + + python >= 3.5 + git + wget + + 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 * **通过 pip 命令安装 NNI** - - python3 -m pip install --user --upgrade nni + + python3 -m pip install --user --upgrade nni + * **通过源代码安装 NNI** - - git clone -b v0.4.1 https://github.com/Microsoft/nni.git - cd nni source - install.sh + + git clone -b v0.4.1 https://github.com/Microsoft/nni.git + cd nni + source install.sh + * **在 docker 映像中安装 NNI** - + 也可将 NNI 安装到 docker 映像中。 参考[这里](../deployment/docker/README.md)来生成 NNI 的 docker 映像。 也可通过此命令从 Docker Hub 中直接拉取 NNI 的映像 `docker pull msranni/nni:latest`。 ## **系统需求** From 9dcb3c95155cbc7a36c3ceb547ce2c3f27acbb5f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 12:01:27 +0800 Subject: [PATCH 0100/1573] New translations CONTRIBUTING.md (Chinese Simplified) --- zh_CN/docs/CONTRIBUTING.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/CONTRIBUTING.md b/zh_CN/docs/CONTRIBUTING.md index e00b4ff8a7..c6c70e9bfa 100644 --- a/zh_CN/docs/CONTRIBUTING.md +++ b/zh_CN/docs/CONTRIBUTING.md @@ -2,15 +2,15 @@ 欢迎!! 我们非常欢迎贡献者,特别是代码贡献者。 -首先,如果有什么不确定的事情,可随时提交问题或拉取请求。 You won't be yelled at for giving your best effort. The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions and don't want a wall of rules to get in the way of that. +首先,如果有什么不确定的事情,可随时提交问题或拉取请求。 不会有人因此而抱怨。:) 最有可能的是,会有礼貌的请求你修改一些内容。 我们会感激任何形式的贡献,不想用一堆规则来阻止这些贡献。 -However, for those individuals who want a bit more guidance on the best way to contribute to the project, read on. This document will cover all the points we're looking for in your contributions, raising your chances of quickly merging or addressing your contributions. +不管怎样,如果想要更有效的贡献代码,可以阅读以下内容。 本文档包括了所有在贡献中需要注意的要点,会加快合并代码、解决问题的速度。 -Looking for a quickstart, get acquainted with our [Get Started](./GetStarted.md) guide. +查看[快速入门](./GetStarted.md)来初步了解。 -There are a few simple guidelines that you need to follow before providing your hacks. +下面是一些简单的贡献指南。 -## Raising Issues +## 提出问题 When raising issues, please specify the following: From 39299055d106e10e86900b0eccda956990135b73 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 12:11:27 +0800 Subject: [PATCH 0101/1573] New translations CONTRIBUTING.md (Chinese Simplified) --- zh_CN/docs/CONTRIBUTING.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/zh_CN/docs/CONTRIBUTING.md b/zh_CN/docs/CONTRIBUTING.md index c6c70e9bfa..113e0a3838 100644 --- a/zh_CN/docs/CONTRIBUTING.md +++ b/zh_CN/docs/CONTRIBUTING.md @@ -10,20 +10,20 @@ 下面是一些简单的贡献指南。 -## 提出问题 +## 提交问题 -When raising issues, please specify the following: +在提出问题时,请说明以下事项: -- Setup details needs to be filled as specified in the issue template clearly for the reviewer to check. -- A scenario where the issue occurred (with details on how to reproduce it). -- Errors and log messages that are displayed by the software. -- Any other details that might be useful. +- 按照问题模板的内容来填写安装的细节,以便评审者检查。 +- 出现问题的场景 (尽量详细,以便重现问题)。 +- 错误和日志消息。 +- 其它可能有用的细节信息。 -## Submit Proposals for New Features +## 提交新功能建议 -- There is always something more that is required, to make it easier to suit your use-cases. Feel free to join the discussion on new features or raise a PR with your proposed change. +- 在适配使用场景时,总会需要一些新的功能。 可以加入新功能的讨论,也可以直接提交新功能的拉取请求。 -- Fork the repository under your own github handle. After cloning the repository. Add, commit, push and sqaush (if necessary) the changes with detailed commit messages to your fork. From where you can proceed to making a pull request. +- 在自己的 github 账户下 fork 存储库。 在 fork 后, 对于 add, commit, push, 或 squash (如需要) 等改动都需要详细的提交消息。 From where you can proceed to making a pull request. ## Contributing to Source Code and Bug Fixes From 4a06edd2aa9845189e8ffffad91ffbf09d47146e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 12:30:35 +0800 Subject: [PATCH 0102/1573] New translations CONTRIBUTING.md (Chinese Simplified) --- zh_CN/docs/CONTRIBUTING.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zh_CN/docs/CONTRIBUTING.md b/zh_CN/docs/CONTRIBUTING.md index 113e0a3838..07476fa655 100644 --- a/zh_CN/docs/CONTRIBUTING.md +++ b/zh_CN/docs/CONTRIBUTING.md @@ -23,22 +23,22 @@ - 在适配使用场景时,总会需要一些新的功能。 可以加入新功能的讨论,也可以直接提交新功能的拉取请求。 -- 在自己的 github 账户下 fork 存储库。 在 fork 后, 对于 add, commit, push, 或 squash (如需要) 等改动都需要详细的提交消息。 From where you can proceed to making a pull request. +- 在自己的 github 账户下 fork 存储库。 在 fork 后, 对于 add, commit, push, 或 squash (如需要) 等改动都需要详细的提交消息。 然后就可以提交拉去请求了。 -## Contributing to Source Code and Bug Fixes +## 参与源代码和缺陷修复 -Provide PRs with appropriate tags for bug fixes or enhancements to the source code. Do follow the correct naming conventions and code styles when you work on and do try to implement all code reviews along the way. +拉去请求需要标记正确的标签,表明是缺陷修复或是改进源代码。 所有代码都需要遵循正确的命名约定和代码风格。 -If you are looking for How to develop and debug the NNI source code, you can refer to [How to set up NNI developer environment doc](./SetupNNIDeveloperEnvironment.md) file in the `docs` folder. +参考[如何配置 NNI 的开发环境](./SetupNNIDeveloperEnvironment.md),来安装开发环境。 -Similarly for [writing trials](./WriteYourTrial.md) or [starting experiments](StartExperiment.md). For everything else, refer [here](https://github.com/Microsoft/nni/tree/master/docs). +同样,还需参考 [创建尝试](./WriteYourTrial.md) 或 [开始实验](StartExperiment.md)。 更多内容,可直接浏览[这里](https://github.com/Microsoft/nni/tree/master/docs)。 -## Solve Existing Issues +## 处理现有问题 -Head over to [issues](https://github.com/Microsoft/nni/issues) to find issues where help is needed from contributors. You can find issues tagged with 'good-first-issue' or 'help-wanted' to contribute in. +查看[问题列表](https://github.com/Microsoft/nni/issues),来找到需要贡献者的问题。 可以找找有 'good-first-issue' 或 'help-wanted' 标签的来开始贡献。 -A person looking to contribute can take up an issue by claiming it as a comment/assign their Github ID to it. In case there is no PR or update in progress for a week on the said issue, then the issue reopens for anyone to take up again. We need to consider high priority issues/regressions where response time must be a day or so. +修改问题的注释和指派人来表明此问题已经开始跟进。 如果上述问题在一周内没有拉取请求或更新状态,这个问题会重新开放给所有人。 高优先级的缺陷和回归问题需在一天内响应。 -## Code Styles & Naming Conventions +## 代码风格和命名约定 -We follow [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python code and naming conventions, do try to adhere to the same when making a pull request or making a change. One can also take the help of linters such as `flake8` or `pylint` \ No newline at end of file +NNI 遵循 [PEP8](https://www.python.org/dev/peps/pep-0008/) 的 Python 代码命名约定。在提交拉去请求时,请尽量遵循此规范。 可通过`flake8`或`pylint`的提示工具来帮助遵循规范。 \ No newline at end of file From c0de102161a159bc88afc98053873056d3fda794 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 12:34:58 +0800 Subject: [PATCH 0103/1573] New translations CONTRIBUTING.md (Chinese Simplified) --- zh_CN/docs/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/CONTRIBUTING.md b/zh_CN/docs/CONTRIBUTING.md index 07476fa655..fc399153e9 100644 --- a/zh_CN/docs/CONTRIBUTING.md +++ b/zh_CN/docs/CONTRIBUTING.md @@ -35,7 +35,7 @@ ## 处理现有问题 -查看[问题列表](https://github.com/Microsoft/nni/issues),来找到需要贡献者的问题。 可以找找有 'good-first-issue' 或 'help-wanted' 标签的来开始贡献。 +查看[问题列表](https://github.com/Microsoft/nni/issues),找到需要贡献的问题。 可以找找有 'good-first-issue' 或 'help-wanted' 标签的来开始贡献。 修改问题的注释和指派人来表明此问题已经开始跟进。 如果上述问题在一周内没有拉取请求或更新状态,这个问题会重新开放给所有人。 高优先级的缺陷和回归问题需在一天内响应。 From 3c74f954598ca814e478aacba01f872931818c43 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 12:35:09 +0800 Subject: [PATCH 0104/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/tuners/ga_customer_tuner/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/examples/tuners/ga_customer_tuner/README.md b/zh_CN/examples/tuners/ga_customer_tuner/README.md index 95b9238278..72b7049ee4 100644 --- a/zh_CN/examples/tuners/ga_customer_tuner/README.md +++ b/zh_CN/examples/tuners/ga_customer_tuner/README.md @@ -1,10 +1,10 @@ -# How to use ga_customer_tuner? +# 如何使用 ga_customer_tuner? -This tuner is a customized tuner which only suitable for trial whose code path is "~/nni/examples/trials/ga_squad", type `cd ~/nni/examples/trials/ga_squad` and check readme.md to get more information for ga_squad trial. +此定制的调参器仅适用于代码 "~/nni/examples/trials/ga_squad", 输入 `cd ~/nni/examples/trials/ga_squad` 查看 readme.md 来了解 ga_squad 的更多信息。 -# config +# 配置 -If you want to use ga_customer_tuner in your experiment, you could set config file as following format: +如果要在实验中使用 ga_customer_tuner 可按照下列格式来配置: tuner: codeDir: ~/nni/examples/tuners/ga_customer_tuner From ae05624945ded02116fcabeb4a9e15a4a7a98ac1 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 13:31:31 +0800 Subject: [PATCH 0105/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md index 3c087665cc..870b5aaa16 100644 --- a/zh_CN/docs/AnnotationSpec.md +++ b/zh_CN/docs/AnnotationSpec.md @@ -1,4 +1,4 @@ -# NNI Annotation +# NNI 标记 For good user experience and reduce user effort, we need to design a good annotation grammar. From e0f1890c71b30498367f71dd1282d8781e19c0cd Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 13:41:28 +0800 Subject: [PATCH 0106/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md index 870b5aaa16..d35d3d20ec 100644 --- a/zh_CN/docs/AnnotationSpec.md +++ b/zh_CN/docs/AnnotationSpec.md @@ -1,36 +1,36 @@ # NNI 标记 -For good user experience and reduce user effort, we need to design a good annotation grammar. +为了获得良好的用户体验并减少用户负担,NNI 设计了通过注释来使用的语法。 -If users use NNI system, they only need to: +使用 NNI 时,只需要: -1. Use nni.get_next_parameter() to retrieve hyper parameters from Tuner, before using other annotation, use following annotation at the begining of trial code: '''@nni.get_next_parameter()''' +1. 在使用其它标记前,用 nni.get_next_parameter() 从调参器获得超参: '''@nni.get_next_parameter()''' -2. Annotation variable in code as: +2. 在超参变量前加上如下标记: '''@nni.variable(nni.choice(2,3,5,7),name=self.conv_size)''' -3. Annotation intermediate in code as: +3. 在中间结果前加上: '''@nni.report_intermediate_result(test_acc)''' -4. Annotation output in code as: +4. 在输出结果前加上: '''@nni.report_final_result(test_acc)''' -5. Annotation `function_choice` in code as: +5. 在代码中使用函数 `function_choice`: '''@nni.function_choice(max_pool(h_conv1, self.pool_size),avg_pool(h_conv1, self.pool_size),name=max_pool)''' -In this way, they can easily implement automatic tuning on NNI. +通过这种方法,能够轻松的在 NNI 中实现自动调参。 -For `@nni.variable`, `nni.choice` is the type of search space and there are 10 types to express your search space as follows: +`@nni.variable`, `nni.choice` 为搜索空间的类型,有 10 种方法来表达搜索空间: 1. `@nni.variable(nni.choice(option1,option2,...,optionN),name=variable)` - Which means the variable value is one of the options, which should be a list The elements of options can themselves be stochastic expressions + 变量值是选项中的一种,这些变量可以是任意的表达式。 2. `@nni.variable(nni.randint(upper),name=variable)` - Which means the variable value is a random integer in the range [0, upper). + 变量可以是范围 [0, upper) 中的任意整数。 3. `@nni.variable(nni.uniform(low, high),name=variable)` Which means the variable value is a value uniformly between low and high. From ee0622106f3b88401fc3f297c2b52209420ae9e5 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 13:51:40 +0800 Subject: [PATCH 0107/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md index d35d3d20ec..4333e8e3c0 100644 --- a/zh_CN/docs/AnnotationSpec.md +++ b/zh_CN/docs/AnnotationSpec.md @@ -33,10 +33,10 @@ 变量可以是范围 [0, upper) 中的任意整数。 3. `@nni.variable(nni.uniform(low, high),name=variable)` - Which means the variable value is a value uniformly between low and high. + 变量值会是 low 和 high 之间均匀分布的某个值。 -4. `@nni.variable(nni.quniform(low, high, q),name=variable)` - Which means the variable value is a value like round(uniform(low, high) / q) * q +4. `@nni.variable(nni.uniform(low, high),name=variable)` + 变量值会是 low 和 high 之间均匀分布的某个值,公式为:round(uniform(low, high) / q) * q 5. `@nni.variable(nni.loguniform(low, high),name=variable)` Which means the variable value is a value drawn according to exp(uniform(low, high)) so that the logarithm of the return value is uniformly distributed. @@ -52,6 +52,6 @@ 9. `@nni.variable(nni.lognormal(label, mu, sigma),name=variable)` Which means the variable value is a value drawn according to exp(normal(mu, sigma)) - - 10. `@nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)` - Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file + +10. `@nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)` + Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file From 9e12486ace466600030a141a257e497796d003c2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 15:21:36 +0800 Subject: [PATCH 0108/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md index 4333e8e3c0..8ab7403986 100644 --- a/zh_CN/docs/AnnotationSpec.md +++ b/zh_CN/docs/AnnotationSpec.md @@ -24,7 +24,7 @@ 通过这种方法,能够轻松的在 NNI 中实现自动调参。 -`@nni.variable`, `nni.choice` 为搜索空间的类型,有 10 种方法来表达搜索空间: +`@nni.variable`, `nni.choice` 为搜索空间的类型,通过以下 10 种方法来定义搜索空间: 1. `@nni.variable(nni.choice(option1,option2,...,optionN),name=variable)` 变量值是选项中的一种,这些变量可以是任意的表达式。 @@ -39,7 +39,7 @@ 变量值会是 low 和 high 之间均匀分布的某个值,公式为:round(uniform(low, high) / q) * q 5. `@nni.variable(nni.loguniform(low, high),name=variable)` - Which means the variable value is a value drawn according to exp(uniform(low, high)) so that the logarithm of the return value is uniformly distributed. + 变量值是 exp(uniform(low, high)) 的点,数值以对数均匀分布。 6. `@nni.variable(nni.qloguniform(low, high, q),name=variable)` Which means the variable value is a value like round(exp(uniform(low, high)) / q) * q From fbe5fdfcb6b17c2898fec27998dae84f18fba9cb Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 15:31:41 +0800 Subject: [PATCH 0109/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md index 8ab7403986..8d0f94895d 100644 --- a/zh_CN/docs/AnnotationSpec.md +++ b/zh_CN/docs/AnnotationSpec.md @@ -35,17 +35,17 @@ 3. `@nni.variable(nni.uniform(low, high),name=variable)` 变量值会是 low 和 high 之间均匀分布的某个值。 -4. `@nni.variable(nni.uniform(low, high),name=variable)` +4. `@nni.variable(nni.quniform(low, high, q),name=variable)` 变量值会是 low 和 high 之间均匀分布的某个值,公式为:round(uniform(low, high) / q) * q 5. `@nni.variable(nni.loguniform(low, high),name=variable)` 变量值是 exp(uniform(low, high)) 的点,数值以对数均匀分布。 6. `@nni.variable(nni.qloguniform(low, high, q),name=variable)` - Which means the variable value is a value like round(exp(uniform(low, high)) / q) * q + 变量值会是 low 和 high 之间均匀分布的某个值,公式为:round(exp(uniform(low, high)) / q) * q 7. `@nni.variable(nni.normal(label, mu, sigma),name=variable)` - Which means the variable value is a real value that's normally-distributed with mean mu and standard deviation sigma. + 变量值为正态分布的实数值,平均值为 mu,标准方差为 sigma。 8. `@nni.variable(nni.qnormal(label, mu, sigma, q),name=variable)` Which means the variable value is a value like round(normal(mu, sigma) / q) * q From d431b012e7005ec85806c8679ad3ca90d8f21afa Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 15:39:34 +0800 Subject: [PATCH 0110/1573] New translations EnableAssessor.md (Chinese Simplified) --- zh_CN/docs/EnableAssessor.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/EnableAssessor.md b/zh_CN/docs/EnableAssessor.md index 0fdaaec12a..07bb582b7c 100644 --- a/zh_CN/docs/EnableAssessor.md +++ b/zh_CN/docs/EnableAssessor.md @@ -1,10 +1,10 @@ -# **Enable Assessor in your expeirment** +# **使用评估器** -Assessor module is for assessing running trials. One common use case is early stopping, which terminates unpromising trial jobs based on their intermediate results. +评估器模块用于评估正在运行的尝试。 最常用的情况是提前中止尝试。如果尝试的中间结果不够好,则可提前终止。 -## Using NNI built-in Assessor +## 使用 NNI 内置的评估器 -Here we use the same example `examples/trials/mnist-annotation`. We use `Medianstop` assessor for this experiment. The yaml configure file is shown below: +以下样例代码在 `examples/trials/mnist-annotation` 目录中。 We use `Medianstop` assessor for this experiment. The yaml configure file is shown below: authorName: your_name experimentName: auto_mnist From 83d68dd986b04beb7e9a5fbffdfb5189ad20d167 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 15:39:42 +0800 Subject: [PATCH 0111/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md index 8d0f94895d..b72e6deed0 100644 --- a/zh_CN/docs/AnnotationSpec.md +++ b/zh_CN/docs/AnnotationSpec.md @@ -48,10 +48,10 @@ 变量值为正态分布的实数值,平均值为 mu,标准方差为 sigma。 8. `@nni.variable(nni.qnormal(label, mu, sigma, q),name=variable)` - Which means the variable value is a value like round(normal(mu, sigma) / q) * q + 变量值分布的公式为: round(normal(mu, sigma) / q) * q 9. `@nni.variable(nni.lognormal(label, mu, sigma),name=variable)` - Which means the variable value is a value drawn according to exp(normal(mu, sigma)) + 变量值分布的公式为: exp(normal(mu, sigma)) 10. `@nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)` - Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file + 变量值分布的公式为: round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file From 8a71392456ce13fd03ab11ab5e3a0165c18fbc9a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 15:41:53 +0800 Subject: [PATCH 0112/1573] New translations EnableAssessor.md (Chinese Simplified) --- zh_CN/docs/EnableAssessor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/EnableAssessor.md b/zh_CN/docs/EnableAssessor.md index 07bb582b7c..cb478771c1 100644 --- a/zh_CN/docs/EnableAssessor.md +++ b/zh_CN/docs/EnableAssessor.md @@ -4,7 +4,7 @@ ## 使用 NNI 内置的评估器 -以下样例代码在 `examples/trials/mnist-annotation` 目录中。 We use `Medianstop` assessor for this experiment. The yaml configure file is shown below: +以下样例代码在 `examples/trials/mnist-annotation` 目录中。 此实验使用了 `Medianstop` 评估器。 yaml 配置文件如下: authorName: your_name experimentName: auto_mnist From b8658d0318b10f5f8e03319ab72609cad8c9d98e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 15:51:47 +0800 Subject: [PATCH 0113/1573] New translations EnableAssessor.md (Chinese Simplified) --- zh_CN/docs/EnableAssessor.md | 37 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/zh_CN/docs/EnableAssessor.md b/zh_CN/docs/EnableAssessor.md index cb478771c1..f9abf3eeff 100644 --- a/zh_CN/docs/EnableAssessor.md +++ b/zh_CN/docs/EnableAssessor.md @@ -8,15 +8,15 @@ authorName: your_name experimentName: auto_mnist - # how many trials could be concurrently running + # 并发运行数量 trialConcurrency: 2 - # maximum experiment running duration + # 实验运行时间 maxExecDuration: 3h - # empty means never stop + # 可为空,即数量不限 maxTrialNum: 100 - # choice: local, remote + # 可选值为: local, remote trainingServicePlatform: local - # choice: true, false + # 可选值为: true, false useAnnotation: true tuner: builtinTunerName: TPE @@ -32,38 +32,37 @@ gpuNum: 0 -For our built-in assessors, you need to fill two fields: `builtinAssessorName` which chooses NNI provided assessors (refer to [here]() for built-in assessors), `optimize_mode` which includes maximize and minimize (you want to maximize or minimize your trial result). +如使用内置的评估器,需要填写两个字段: `builtinAssessorName`,即所选择的评估器 (参考[这里]()),`optimize_mode` 可选项为 maximize 和 minimize (即需要最大化或最小化的结果)。 -## Using user customized Assessor +## 使用自定义的评估器 -You can also write your own assessor following the guidance [here](). For example, you wrote an assessor for `examples/trials/mnist-annotation`. You should prepare the yaml configure below: +可参考[这里](),来自定义评估器。 例如,为样例代码 `examples/trials/mnist-annotation` 写一个定制的评估器。 需要准备如下的 yaml 配置文件: authorName: your_name experimentName: auto_mnist - # how many trials could be concurrently running + # 并发运行数量 trialConcurrency: 2 - # maximum experiment running duration + # 实验运行时间 maxExecDuration: 3h - # empty means never stop + # 可为空,即数量不限 maxTrialNum: 100 - # choice: local, remote + # 可选值为: local, remote trainingServicePlatform: local - # choice: true, false + # 可选值为: true, false useAnnotation: true tuner: - # Possible values: TPE, Random, Anneal, Evolution + # 可选值为: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: optimize_mode: maximize assessor: - # Your assessor code directory + # 评估器代码目录 codeDir: - # Name of the file which contains your assessor class + # 评估器类的文件名 classFileName: - # Your assessor class name, must be a subclass of nni.Assessor + # 评估器类名,必须继承于 nni.Assessor className: - # Parameter names and literal values you want to pass to - # the __init__ constructor of your assessor class + # 参数名和需要输入给评估器 __init__ 构造函数的值。 classArgs: arg1: value1 gpuNum: 0 From 3068f11ce395ca1b00791c8fc5ed3729e2042ab7 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 16:56:45 +0800 Subject: [PATCH 0114/1573] New translations EnableAssessor.md (Chinese Simplified) --- zh_CN/docs/EnableAssessor.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/EnableAssessor.md b/zh_CN/docs/EnableAssessor.md index f9abf3eeff..49538920f0 100644 --- a/zh_CN/docs/EnableAssessor.md +++ b/zh_CN/docs/EnableAssessor.md @@ -72,12 +72,12 @@ gpuNum: 0 -You need to fill: `codeDir`, `classFileName`, `className`, and pass parameters to *\_init__ constructor through `classArgs` field if the *\_init__ constructor of your assessor class has required parameters. +必填项: `codeDir`, `classFileName`, `className`。如果评估器的 __init__ 构造函数有必填参数,需要用 `classArgs` 传入。 -**Note that** if you want to access a file (e.g., ```data.txt```) in the directory of your own assessor, you cannot use ```open('data.txt', 'r')```. Instead, you should use the following: +**注意** 如果需要访问 assessor 目录中的文件 (如: ```data.txt```),不能使用 ```open('data.txt', 'r')```。 要使用: _pwd = os.path.dirname(__file__) _fd = open(os.path.join(_pwd, 'data.txt'), 'r') -This is because your assessor is not executed in the directory of your assessor (i.e., ```pwd``` is not the directory of your own assessor). \ No newline at end of file +因为评估器不是在其自己的目录中执行的。(也就是说, ```pwd``` 不是评估器自己的目录)。 \ No newline at end of file From 26c209a55ac7f12f1410440dc453f063420773f6 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 16:57:35 +0800 Subject: [PATCH 0115/1573] New translations EnableAssessor.md (Chinese Simplified) --- zh_CN/docs/EnableAssessor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/EnableAssessor.md b/zh_CN/docs/EnableAssessor.md index 49538920f0..27bb1fbf1f 100644 --- a/zh_CN/docs/EnableAssessor.md +++ b/zh_CN/docs/EnableAssessor.md @@ -72,7 +72,7 @@ gpuNum: 0 -必填项: `codeDir`, `classFileName`, `className`。如果评估器的 __init__ 构造函数有必填参数,需要用 `classArgs` 传入。 +必填项: `codeDir`, `classFileName`, `className`。如果评估器的 \__init__ 构造函数有必填参数,需要用 `classArgs` 传入。 **注意** 如果需要访问 assessor 目录中的文件 (如: ```data.txt```),不能使用 ```open('data.txt', 'r')```。 要使用: From 5eb8236efdaef50d99be0d0d18eb274afdb72bf1 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 16:58:23 +0800 Subject: [PATCH 0116/1573] New translations EnableAssessor.md (Chinese Simplified) --- zh_CN/docs/EnableAssessor.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/EnableAssessor.md b/zh_CN/docs/EnableAssessor.md index 27bb1fbf1f..10c3fe607a 100644 --- a/zh_CN/docs/EnableAssessor.md +++ b/zh_CN/docs/EnableAssessor.md @@ -72,7 +72,7 @@ gpuNum: 0 -必填项: `codeDir`, `classFileName`, `className`。如果评估器的 \__init__ 构造函数有必填参数,需要用 `classArgs` 传入。 +必填项: `codeDir`, `classFileName`, `className`。如果评估器的 `__init__` 构造函数有必填参数,需要用 `classArgs` 传入。 **注意** 如果需要访问 assessor 目录中的文件 (如: ```data.txt```),不能使用 ```open('data.txt', 'r')```。 要使用: @@ -80,4 +80,4 @@ _fd = open(os.path.join(_pwd, 'data.txt'), 'r') -因为评估器不是在其自己的目录中执行的。(也就是说, ```pwd``` 不是评估器自己的目录)。 \ No newline at end of file +因为评估器不是在其自己的目录中执行的。(也就是说 ```pwd``` 不是评估器自己的目录)。 \ No newline at end of file From 325c68f1bd3c5fde325aac3d217a60ad06a7e0d2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 17:03:01 +0800 Subject: [PATCH 0117/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 94b8f7eb54..09d142677d 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -128,8 +128,8 @@ * 说明 - **experimentName** is the name of the experiment created. - TBD: add default value + **experimentName** 是实验的名称。 + 待实现:增加默认值 * **trialConcurrency** From edc108f7a93b51929d7fd1748fcdfeb2100c071f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 17:04:38 +0800 Subject: [PATCH 0118/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 09d142677d..985663f6c8 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -701,9 +701,9 @@ kubeflow use nfs as storage. ``` -kubeflow use azure storage +Kubeflow 使用 Azure 存储 - ``` + authorName: default experimentName: example_mni trialConcurrency: 1 @@ -742,5 +742,4 @@ kubeflow use azure storage name: AzureStorageAccountKey azureStorage: accountName: storage - azureShare: share01 - ``` \ No newline at end of file + azureShare: share01 \ No newline at end of file From 7f02d1c8f0a889ddfec22c7670e3318019db525b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 17:12:14 +0800 Subject: [PATCH 0119/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 54 +++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 985663f6c8..a2b4860d95 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -133,16 +133,16 @@ * **trialConcurrency** - * Description + * 说明 - **trialConcurrency** specifies the max num of trial jobs run simultaneously. + **trialConcurrency** 定义了并发尝试任务的最大数量。 - Note: if trialGpuNum is bigger than the free gpu numbers, and the trial jobs running simultaneously can not reach trialConcurrency number, some trial jobs will be put into a queue to wait for gpu allocation. + 注意:如果 trialGpuNum 大于空闲的 GPU 数量,并且并发的尝试任务数量还没达到 trialConcurrency,尝试任务会被放入队列,等待分配 GPU 资源。 * **maxExecDuration** - * Description + * 说明 **maxExecDuration** specifies the max duration time of an experiment.The unit of the time is {**s**, **m**, **h**, **d**}, which means {*seconds*, *minutes*, *hours*, *days*}. @@ -474,13 +474,13 @@ **host** is the host of pai. -## Examples +## 样例 -* **local mode** +* **本机模式** - If users want to run trial jobs in local machine, and use annotation to generate search space, could use the following config: + 如果要在本机运行尝试任务,并使用标记来生成搜索空间,可参考下列配置: - ``` + authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -501,13 +501,13 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - ``` + - Could add assessor configuration in config file if set assessor. + 如果要设置评估器,可以增加评估器配置: - ``` + authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -536,13 +536,13 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - ``` + - Or you could specify your own tuner and assessor file as following: + 或者可以指定自定义的调参器和评估器: - ``` + authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -573,14 +573,13 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - ``` + -* **remote mode** +* **远程模式** -If run trial jobs in remote machine, users could specify the remote mahcine information as fllowing format: +如果在远程服务器上运行尝试任务,需要增加服务器信息: - ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -618,12 +617,12 @@ If run trial jobs in remote machine, users could specify the remote mahcine info username: test sshKeyPath: /nni/sshkey passphrase: qwert - ``` + -* **pai mode** +* **pai 模式** - ``` + authorName: test experimentName: nni_test1 trialConcurrency: 1 @@ -647,7 +646,7 @@ If run trial jobs in remote machine, users could specify the remote mahcine info gpuNum: 4 cpuNum: 2 memoryMB: 10000 - # 在 OpenPAI 上用来运行 NNI 作业的 docker 映像 + # 在 OpenPAI 上用来运行 Nni 作业的 docker 映像 image: msranni/nni:latest # 在 OpenPAI 的 hdfs 上存储数据的目录,如:'hdfs://host:port/directory' dataDir: hdfs://10.11.12.13:9000/test @@ -658,16 +657,17 @@ If run trial jobs in remote machine, users could specify the remote mahcine info userName: test # OpenPAI 密码 passWord: test - # OpenPAI 服务器 IP + # OpenPAI 服务器 Ip host: 10.10.10.10 + -* **kubeflow mode** +* **Kubeflow 模式** -kubeflow use nfs as storage. +Kubeflow 使用 NFS 作为存储。 - ``` + authorName: default experimentName: example_mni trialConcurrency: 1 @@ -698,7 +698,7 @@ kubeflow use nfs as storage. nfs: server: 10.10.10.10 path: /var/nfs/general - ``` + Kubeflow 使用 Azure 存储 From de10fe2c64cedd3154e64336ca23144649fda115 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 17:20:13 +0800 Subject: [PATCH 0120/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index a2b4860d95..1809fdbcff 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -622,7 +622,7 @@ * **pai 模式** - + ``` authorName: test experimentName: nni_test1 trialConcurrency: 1 @@ -659,7 +659,7 @@ passWord: test # OpenPAI 服务器 Ip host: 10.10.10.10 - + ``` From 9ff594045fd2cd2e8c08e9dc0f2d8233ec72b089 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 17:21:43 +0800 Subject: [PATCH 0121/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 1809fdbcff..961a1c7109 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -480,7 +480,7 @@ 如果要在本机运行尝试任务,并使用标记来生成搜索空间,可参考下列配置: - + ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -501,13 +501,14 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 + ``` 如果要设置评估器,可以增加评估器配置: - + ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -536,13 +537,13 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - + ``` 或者可以指定自定义的调参器和评估器: - + ``` authorName: test experimentName: test_experiment trialConcurrency: 3 @@ -573,7 +574,7 @@ command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - + ``` * **远程模式** From 4aa49572895b3257dc5b390cb3e74d632402b6de Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 17:41:54 +0800 Subject: [PATCH 0122/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 961a1c7109..0dbc6e2559 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -144,7 +144,7 @@ * 说明 - **maxExecDuration** specifies the max duration time of an experiment.The unit of the time is {**s**, **m**, **h**, **d**}, which means {*seconds*, *minutes*, *hours*, *days*}. + **maxExecDuration** 定义实验执行的最长时间。时间单位:{**s**, **m**, **h**, **d**},分别代表:{*seconds*, *minutes*, *hours*, *days*}。 * **maxTrialNum** From 7633ad8552f5653f7b7046c8c2049627a634e948 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 17:55:47 +0800 Subject: [PATCH 0123/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 0dbc6e2559..a72829ca02 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -148,17 +148,17 @@ * **maxTrialNum** - * Description + * 说明 - **maxTrialNum** specifies the max number of trial jobs created by nni, including succeeded and failed jobs. + **maxTrialNum** 定义了尝试任务的最大数量,成功和失败的都计算在内。 * **trainingServicePlatform** - * Description + * 说明 - **trainingServicePlatform** specifies the platform to run the experiment, including {**local**, **remote**, **pai**, **kubeflow**}. + **trainingServicePlatform** 定义运行实验的平台,包括:{**local**, **remote**, **pai**, **kubeflow**}. - * **local** run an experiment on local ubuntu machine. + * **local** 在本机的 ubuntu 上运行实验。 * **remote** submit trial jobs to remote ubuntu machines, and **machineList** field should be filed in order to set up SSH connection to remote machine. From 3f0ebda8f76f7330e13eb5e05a93b5c8fbb189c3 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:02:00 +0800 Subject: [PATCH 0124/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index a72829ca02..7c6084b304 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -160,15 +160,15 @@ * **local** 在本机的 ubuntu 上运行实验。 - * **remote** submit trial jobs to remote ubuntu machines, and **machineList** field should be filed in order to set up SSH connection to remote machine. + * **remote** 将任务提交到远程的 ubuntu 上,必须用 **machineList** 来指定远程的 SSH 连接信息。 - * **pai** submit trial jobs to [OpenPai](https://github.com/Microsoft/pai) of Microsoft. For more details of pai configuration, please reference [PAIMOdeDoc](./PAIMode.md) + * **pai** 提交任务到微软开源的 [OpenPAI](https://github.com/Microsoft/pai) 上。 更多 OpenPAI 配置,参考 [pai 模式](./PAIMode.md)。 - * **kubeflow** submit trial jobs to [kubeflow](https://www.kubeflow.org/docs/about/kubeflow/), nni support kubeflow based on normal kubernetes and [azure kubernetes](https://azure.microsoft.com/en-us/services/kubernetes-service/). + * **kubeflow** 提交任务至 [Kubeflow](https://www.kubeflow.org/docs/about/kubeflow/)。 NNI 支持基于 Kubeflow 的 Kubenetes,以及[Azure Kubernetes](https://azure.microsoft.com/en-us/services/kubernetes-service/)。 * **searchSpacePath** - * Description + * 说明 **searchSpacePath** specifies the path of search space file, which should be a valid path in the local linux machine. From 25c8e82f2643ef97ed8cd5c4a54acce030a3b413 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:12:20 +0800 Subject: [PATCH 0125/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 7c6084b304..66d794c2ab 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -170,34 +170,34 @@ * 说明 - **searchSpacePath** specifies the path of search space file, which should be a valid path in the local linux machine. + **searchSpacePath** 定义搜索空间文件的路径,此文件必须在运行 nnictl 的本机。 - Note: if set useAnnotation=True, the searchSpacePath field should be removed. + 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 * **useAnnotation** - * Description + * 说明 - **useAnnotation** use annotation to analysis trial code and generate search space. + **useAnnotation** 定义使用标记来分析代码并生成搜索空间。 - Note: if set useAnnotation=True, the searchSpacePath field should be removed. + 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 * **nniManagerIp** - * Description + * 说明 - **nniManagerIp** set the IP address of the machine on which nni manager process runs. This field is optional, and if it's not set, eth0 device IP will be used instead. + **nniManagerIp** 设置 NNI 管理器运行的 IP 地址。 此字段为可选项,如果没有设置,则会使用 eth0 的 IP 地址。 - Note: run ifconfig on NNI manager's machine to check if eth0 device exists. If not, we recommend to set nnimanagerIp explicitly. + 注意: 可在 NNI 管理器机器上运行 ifconfig 来检查 eth0 是否存在。 如果不存在,推荐显式设置 nnimanagerIp。 * **tuner** - * Description + * 说明 - **tuner** specifies the tuner algorithm in the experiment, there are two kinds of ways to set tuner. One way is to use tuner provided by nni sdk, need to set **builtinTunerName** and **classArgs**. Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. + **tuner** 指定了实验的调参器算法。有两种方法可设置调参器。 一种方法是使用 NNI SDK 提供的调参器,需要设置 **builtinTunerName** 和 **classArgs**。 Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. * **builtinTunerName** and **classArgs** From cb09670b588f2fd9e7057fb668013ee66663ba88 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:16:27 +0800 Subject: [PATCH 0126/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 66d794c2ab..5e8a2a9c1c 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -197,19 +197,20 @@ * 说明 - **tuner** 指定了实验的调参器算法。有两种方法可设置调参器。 一种方法是使用 NNI SDK 提供的调参器,需要设置 **builtinTunerName** 和 **classArgs**。 Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. + **tuner** 指定了实验的调参器算法。有两种方法可设置调参器。 一种方法是使用 NNI SDK 提供的调参器,需要设置 **builtinTunerName** 和 **classArgs**。 另一种方法,是使用用户自定义的调参器,需要设置 **codeDirectory**,**classFileName**,**className** 和 **classArgs**。 - * **builtinTunerName** and **classArgs** + * **builtinTunerName** 和 **classArgs** * **builtinTunerName** - **builtinTunerName** specifies the name of system tuner, nni sdk provides four kinds of tuner, including {**TPE**, **Random**, **Anneal**, **Evolution**, **BatchTuner**, **GridSearch**} + **builtinTunerName** 指定了系统调参器的名字,NNI SDK 提供了多种调参器,如:{**TPE**, **Random**, **Anneal**, **Evolution**, **BatchTuner**, **GridSearch**}。 * **classArgs** - **classArgs** specifies the arguments of tuner algorithm. If the **builtinTunerName** is in {**TPE**, **Random**, **Anneal**, **Evolution**}, user should set **optimize_mode**. + **classArgs** 指定了调参器算法的参数。 如果 **builtinTunerName** 是{**TPE**, **Random**, **Anneal**, **Evolution**},用户需要设置 **optimize_mode**。 - * **codeDir**, **classFileName**, **className** and **classArgs** * **codeDir** + * **codeDir**, **classFileName**, **className** 和**classArgs** + * **codeDir** **codeDir** specifies the directory of tuner code. From 50a0f786046a6ad0d5ae725155f7dbbdb7bd66d6 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:20:38 +0800 Subject: [PATCH 0127/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 5e8a2a9c1c..1a2efd3150 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -212,24 +212,24 @@ * **codeDir**, **classFileName**, **className** 和**classArgs** * **codeDir** - **codeDir** specifies the directory of tuner code. + **codeDir** 指定调参器代码的目录。 * __classFileName__ - **classFileName** specifies the name of tuner file. + **classFileName** 指定调参器文件名。 * **className** - **className** specifies the name of tuner class. + **className** 指定调参器类名。 * **classArgs** - **classArgs** specifies the arguments of tuner algorithm. + **classArgs** 指定了调参器算法的参数。 * **gpuNum** - **gpuNum** specifies the gpu number to run the tuner process. The value of this field should be a positive number. + **gpuNum** 指定了运行调参器进程的 GPU 数量。 此字段的值必须是正整数。 Note: users could only specify one way to set tuner, for example, set {tunerName, optimizationMode} or {tunerCommand, tunerCwd}, and could not set them both. From 8d29e2a16670f542da280443de1a05822e70f81b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:22:45 +0800 Subject: [PATCH 0128/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 1a2efd3150..c5a3aa96fd 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -231,14 +231,14 @@ **gpuNum** 指定了运行调参器进程的 GPU 数量。 此字段的值必须是正整数。 - Note: users could only specify one way to set tuner, for example, set {tunerName, optimizationMode} or {tunerCommand, tunerCwd}, and could not set them both. + 注意: 只能使用一种方法来指定调参器,例如:设置{tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置。 * **assessor** - * Description + * 说明 - **assessor** specifies the assessor algorithm to run an experiment, there are two kinds of ways to set assessor. One way is to use assessor provided by nni sdk, users need to set **builtinAssessorName** and **classArgs**. Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. + **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. * **builtinAssessorName** and **classArgs** From e9aabc723f4e70cf1e7d54d67f9557dd5fa75a43 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:34:10 +0800 Subject: [PATCH 0129/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index c5a3aa96fd..3137981e38 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -238,7 +238,7 @@ * 说明 - **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 Another way is to use users' own tuner file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. + **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 另一种方法,是使用用户自定义的评估器,需要设置 **codeDirectory**,**classFileName**,**className** 和 **classArgs**。 * **builtinAssessorName** and **classArgs** From fb8d24c2076461aebcaa54ed44937a324fa69a8a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:42:06 +0800 Subject: [PATCH 0130/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 47 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 3137981e38..709d762cf1 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -240,89 +240,90 @@ **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 另一种方法,是使用用户自定义的评估器,需要设置 **codeDirectory**,**classFileName**,**className** 和 **classArgs**。 - * **builtinAssessorName** and **classArgs** + * **builtinAssessorName** 和 **classArgs** * **builtinAssessorName** - **builtinAssessorName** specifies the name of system assessor, nni sdk provides four kinds of tuner, including {**TPE**, **Random**, **Anneal**, **Evolution**} + **builtinAssessorName** 指定了系统评估器的名字,NNI SDK 提供了一种评估器:{**Medianstop**}。 * **classArgs** - **classArgs** specifies the arguments of tuner algorithm + **classArgs** 指定了评估器算法的参数。 - * **codeDir**, **classFileName**, **className** and **classArgs** * **codeDir** + * **codeDir**, **classFileName**, **className** and **classArgs** + * **codeDir** - **codeDir** specifies the directory of tuner code. + **codeDir** 指定评估器代码的目录。 * __classFileName__ - **classFileName** specifies the name of tuner file. + **classFileName** 指定评估器文件名。 * **className** - **className** specifies the name of tuner class. + **className** 指定评估器类名。 * **classArgs** - **classArgs** specifies the arguments of tuner algorithm. + **classArgs** 指定了评估器算法的参数。 * **gpuNum** - **gpuNum** specifies the gpu number to run the assessor process. The value of this field should be a positive number. + **gpuNum** 指定了运行评估器进程的 GPU 数量。 此字段的值必须是正整数。 - Note: users' could only specify one way to set assessor, for example,set {assessorName, optimizationMode} or {assessorCommand, assessorCwd}, and users could not set them both.If users do not want to use assessor, assessor fileld should leave to empty. + 注意: 只能使用一种方法来指定评估器,例如:设置 {assessorName, optimizationMode} 或 {assessorCommand, assessorCwd},不能同时设置。如果不需要使用评估器,可将其置为空。 -* **trial(local, remote)** +* **trial (local, remote)** * **command** - __command__ specifies the command to run trial process. + __command__ 指定了尝试进程的命令行。 * **codeDir** - **codeDir** specifies the directory of your own trial file. + **codeDir** 指定了尝试代码文件的目录。 * **gpuNum** - **gpuNum** specifies the num of gpu to run the trial process. Default value is 0. + **gpuNum** 指定了运行尝试进程的 GPU 数量。 默认值为 0。 -* **trial(pai)** +* **trial (pai)** * **command** - __command__ specifies the command to run trial process. + __command__ 指定了尝试进程的命令行。 * **codeDir** - **codeDir** specifies the directory of the own trial file. + **codeDir** 指定了尝试代码文件的目录。 * **gpuNum** - **gpuNum** specifies the num of gpu to run the trial process. Default value is 0. + **gpuNum** 指定了运行尝试进程的 GPU 数量。 默认值为 0。 * **cpuNum** - **cpuNum** is the cpu number of cpu to be used in pai container. + **cpuNum** 指定了 OpenPAI 容器中使用的 CPU 数量。 * **memoryMB** - **memoryMB** set the momory size to be used in pai's container. + **memoryMB** 指定了 OpenPAI 容器中使用的内存数量。 * **image** - **image** set the image to be used in pai. + **image** 指定了 OpenPAI 中使用的 docker 映像。 * **dataDir** - **dataDir** is the data directory in hdfs to be used. + **dataDir** 是 HDFS 中用到的数据目录变量。 * **outputDir** - **outputDir** is the output directory in hdfs to be used in pai, the stdout and stderr files are stored in the directory after job finished. + **outputDir** 是 HDFS 中用到的输出目录变量。在 OpenPAI 中,stdout 和 stderr 文件会在作业完成后,存放在此目录中。 * **trial(kubeflow)** From 41b4ba908ea06fe7c2fd7039d4191e38d04181f9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 18:55:10 +0800 Subject: [PATCH 0131/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 36 +++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 709d762cf1..629fe80853 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -325,71 +325,71 @@ **outputDir** 是 HDFS 中用到的输出目录变量。在 OpenPAI 中,stdout 和 stderr 文件会在作业完成后,存放在此目录中。 -* **trial(kubeflow)** +* **trial (kubeflow)** * **codeDir** - **codeDir** is the local directory where the code files in. + **codeDir** 指定了代码文件的本机路径。 - * **ps(optional)** + * **ps (可选)** - **ps** is the configuration for kubeflow's tensorflow-operator. + **ps** 是 Kubeflow 的 Tensorflow-operator 配置。 * **replicas** - **replicas** is the replica number of **ps** role. + **replicas** 是 **ps** 角色的副本数量。 * **command** - **command** is the run script in **ps**'s container. + **command** 是在 **ps** 的容器中运行的脚本命令。 * **gpuNum** - **gpuNum** set the gpu number to be used in **ps** container. + **gpuNum** 是在 **ps** 容器中使用的 GPU 数量。 * **cpuNum** - **cpuNum** set the cpu number to be used in **ps** container. + **cpuNum** 是在 **ps** 容器中使用的 CPU 数量。 * **memoryMB** - **memoryMB** set the memory size of the container. + **memoryMB** 指定了容器中使用的内存数量。 * **image** - **iamge** set the image to be used in **ps**. + **iamge** 设置了 **ps** 使用的 docker 映像。 * **worker** - **worker** is the configuration for kubeflow's tensorflow-operator. + **worker** 是 Kubeflow 的 Tensorflow-operator 配置。 * **replicas** - **replicas** is the replica number of **worker** role. + **replicas** 是 **worker** 角色的副本数量。 * **command** - **command** is the run script in **worker**'s container. + **command** 是在 **worker** 的容器中运行的脚本命令。 * **gpuNum** - **gpuNum** set the gpu number to be used in **worker** container. + **gpuNum** 是在 **worker** 容器中使用的 GPU 数量。 * **cpuNum** - **cpuNum** set the cpu number to be used in **worker** container. + **cpuNum** 是在 **worker** 容器中使用的 CPU 数量。 * **memoryMB** - **memoryMB** set the memory size of the container. + **memoryMB** 指定了容器中使用的内存数量。 * **image** - **iamge** set the image to be used in **worker**. + **iamge** 设置了 **worker** 使用的 docker 映像。 * **machineList** - __machineList__ should be set if users set __trainingServicePlatform__=remote, or it could be empty. + __machineList__ 要在 __trainingServicePlatform__=remote 时设置,否则其应为空。 * **ip** From 777819aa90e786b921380bda5dc3ffbd98852b85 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 19:02:12 +0800 Subject: [PATCH 0132/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 629fe80853..9305aab563 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -394,28 +394,28 @@ * **ip** - **ip** is the ip address of remote machine. + **ip** 是远程计算机的 ip 地址。 * **port** - **port** is the ssh port to be used to connect machine. + **端口** 是用于连接远程计算机的 ssh 端口。 - Note: if users set port empty, the default value will be 22. + 注意:如果 port 设为空,则为默认值 22。 * **username** - **username** is the account of remote machine. + **username** 是远程计算机的用户名。 * **passwd** - **passwd** specifies the password of the account. + **passwd** 指定了账户的密码。 * **sshKeyPath** - If users use ssh key to login remote machine, could set **sshKeyPath** in config file. **sshKeyPath** is the path of ssh key file, which should be valid. + 如果要使用 ssh 密钥登录远程计算机,则需要设置 **sshKeyPath**。 **sshKeyPath** 为有效的 ssh 密钥文件路径。 - Note: if users set passwd and sshKeyPath simultaneously, nni will try passwd. + 注意:如果同时设置了 passwd 和 sshKeyPath,NNI 会使用 passwd。 * **passphrase** From d7f84f73955cd4ef6f10ceb6698abf53f3fe50ec Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 19:22:21 +0800 Subject: [PATCH 0133/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 9305aab563..f532a446e2 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -420,61 +420,61 @@ * **passphrase** - **passphrase** is used to protect ssh key, which could be empty if users don't have passphrase. + **passphrase** 用于保护 ssh 密钥,如果没有使用,可为空。 * **kubeflowConfig**: * **operator** - **operator** specify the kubeflow's operator to be used, nni support **tf-operator** in current version. + **operator** 指定了 kubeflow 使用的 operator,NNI 当前版本支持 **tf-operator**。 * **storage** - **storage** specify the storage type of kubeflow, including {**nfs**, **azureStorage**}. This field is optional, and the default value is **nfs**. If the config use azureStorage, this field must be completed. + **storage** 指定了 kubeflow 的存储类型,包括 {**nfs**,**azureStorage**}。 此字段可选,默认值为 **nfs**。 如果使用了 azureStorage,此字段必须填写。 * **nfs** - **server** is the host of nfs server + **server** 是 NFS 服务器的地址 - **path** is the mounted path of nfs + **path** 是 NFS 挂载的路径 * **keyVault** - If users want to use azure kubernetes service, they should set keyVault to storage the private key of your azure storage account. Refer: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-manage-with-cli2 + 如果用户使用 Azure Kubernetes Service,需要设置 keyVault 来使用 Azure 存储账户的私钥。 参考: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-manage-with-cli2 * **vaultName** - **vaultName** is the value of ```--vault-name``` used in az command. + **vaultName** 是 az 命令中的 ```--vault-name``` 。 * **name** - **name** is the value of ```--name``` used in az command. + **name** 是 az 命令中的 ```--name``` 。 * **azureStorage** - If users use azure kubernetes service, they should set azure storage account to store code files. + 如果用户使用了 Azure Kubernetes Service,需要设置 Azure 存储账户来存放代码文件。 * **accountName** - **accountName** is the name of azure storage account. + **accountName** 是 Azure 存储账户的名称。 * **azureShare** - **azureShare** is the share of the azure file storage. + **azureShare** 是 Azure 文件存储的共享参数。 * **paiConfig** * **userName** - **userName** is the user name of your pai account. + **userName** 是 OpenPAI 的用户名。 * **password** - **password** is the password of the pai account. + **password** 是 OpenPAI 用户的密码。 * **host** - **host** is the host of pai. + **host** 是 OpenPAI 的主机地址。 ## 样例 From e6ebd6e7e5a23dd90b9c95085a471104e263882e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Wed, 2 Jan 2019 19:22:22 +0800 Subject: [PATCH 0134/1573] New translations FAQ.md (Chinese Simplified) --- zh_CN/docs/FAQ.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/FAQ.md b/zh_CN/docs/FAQ.md index 42d1b1e563..2779455aaa 100644 --- a/zh_CN/docs/FAQ.md +++ b/zh_CN/docs/FAQ.md @@ -1,12 +1,12 @@ -This page is for frequent asked questions and answers. +此页为常见问题 -### tmp folder fulled +### tmp 目录没空间了 -nnictl will use tmp folder as a temporary folder to copy files under codeDir when executing experimentation creation. When met errors like below, try to clean up **tmp** folder first. +nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下的文件。 当遇到下列错误时,先试试清空 **tmp** 目录。 > OSError: [Errno 28] No space left on device -### Cannot get trials' metrics in OpenPAI mode +### OpenPAI 模式下无法获得尝试的数据 In OpenPAI training mode, we start a rest server which listens on 51189 port in nniManager to receive metrcis reported from trials running in OpenPAI cluster. If you didn't see any metrics from WebUI in OpenPAI mode, check your machine where nniManager runs on to make sure 51189 port is turned on in the firewall rule. From 0b9d434ba713f7b68c9088cf5e5fa790ae6ffd08 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 10:44:41 +0800 Subject: [PATCH 0135/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 136 +++++++++++++++++---------------- 1 file changed, 71 insertions(+), 65 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index f532a446e2..5e064cac17 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -135,9 +135,9 @@ * 说明 - **trialConcurrency** 定义了并发尝试任务的最大数量。 - - 注意:如果 trialGpuNum 大于空闲的 GPU 数量,并且并发的尝试任务数量还没达到 trialConcurrency,尝试任务会被放入队列,等待分配 GPU 资源。 + __trialConcurrency__ specifies the max num of trial jobs run simultaneously. + + Note: if trialGpuNum is bigger than the free gpu numbers, and the trial jobs running simultaneously can not reach trialConcurrency number, some trial jobs will be put into a queue to wait for gpu allocation. * **maxExecDuration** @@ -170,9 +170,9 @@ * 说明 - **searchSpacePath** 定义搜索空间文件的路径,此文件必须在运行 nnictl 的本机。 - - 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 + __searchSpacePath__ specifies the path of search space file, which should be a valid path in the local linux machine. + + Note: if set useAnnotation=True, the searchSpacePath field should be removed. * **useAnnotation** @@ -181,8 +181,7 @@ **useAnnotation** 定义使用标记来分析代码并生成搜索空间。 - 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 - + Note: if set useAnnotation=True, the searchSpacePath field should be removed. * **nniManagerIp** @@ -190,8 +189,7 @@ **nniManagerIp** 设置 NNI 管理器运行的 IP 地址。 此字段为可选项,如果没有设置,则会使用 eth0 的 IP 地址。 - 注意: 可在 NNI 管理器机器上运行 ifconfig 来检查 eth0 是否存在。 如果不存在,推荐显式设置 nnimanagerIp。 - + Note: run ifconfig on NNI manager's machine to check if eth0 device exists. If not, we recommend to set nnimanagerIp explicitly. * **tuner** @@ -209,71 +207,81 @@ **classArgs** 指定了调参器算法的参数。 如果 **builtinTunerName** 是{**TPE**, **Random**, **Anneal**, **Evolution**},用户需要设置 **optimize_mode**。 - * **codeDir**, **classFileName**, **className** 和**classArgs** - * **codeDir** + * **codeDir**, **classFileName**, **className** and **classArgs** - **codeDir** 指定调参器代码的目录。 - - * __classFileName__ - + * **codeDir** + + __codeDir__ specifies the directory of tuner code. + - **classFileName** 指定调参器文件名。 + * **classFileName** + + __classFileName__ specifies the name of tuner file. + * **className** - - **className** 指定调参器类名。 + + __className__ specifies the name of tuner class. + * **classArgs** - - **classArgs** 指定了调参器算法的参数。 + + __classArgs__ specifies the arguments of tuner algorithm. + * **gpuNum** - **gpuNum** 指定了运行调参器进程的 GPU 数量。 此字段的值必须是正整数。 - - 注意: 只能使用一种方法来指定调参器,例如:设置{tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置。 + __gpuNum__ specifies the gpu number to run the tuner process. The value of this field should be a positive number. + + Note: users could only specify one way to set tuner, for example, set {tunerName, optimizationMode} or {tunerCommand, tunerCwd}, and could not set them both. * **assessor** * 说明 - **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 另一种方法,是使用用户自定义的评估器,需要设置 **codeDirectory**,**classFileName**,**className** 和 **classArgs**。 + **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 Another way is to use users' own assessor file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. * **builtinAssessorName** 和 **classArgs** * **builtinAssessorName** - - **builtinAssessorName** 指定了系统评估器的名字,NNI SDK 提供了一种评估器:{**Medianstop**}。 + + __builtinAssessorName__ specifies the name of system assessor, nni sdk provides one kind of assessor {__Medianstop__} + * **classArgs** - **classArgs** 指定了评估器算法的参数。 + __classArgs__ specifies the arguments of assessor algorithm + - * **codeDir**, **classFileName**, **className** and **classArgs** - * **codeDir** - - **codeDir** 指定评估器代码的目录。 + * **codeDir**, **classFileName**, **className** and **classArgs** - * __classFileName__ - + * **codeDir** + + __codeDir__ specifies the directory of assessor code. + - **classFileName** 指定评估器文件名。 + * **classFileName** + + __classFileName__ specifies the name of assessor file. + * **className** - - **className** 指定评估器类名。 + + __className__ specifies the name of assessor class. + * **classArgs** - - **classArgs** 指定了评估器算法的参数。 + + __classArgs__ specifies the arguments of assessor algorithm. + * **gpuNum** - - **gpuNum** 指定了运行评估器进程的 GPU 数量。 此字段的值必须是正整数。 - - 注意: 只能使用一种方法来指定评估器,例如:设置 {assessorName, optimizationMode} 或 {assessorCommand, assessorCwd},不能同时设置。如果不需要使用评估器,可将其置为空。 - + + __gpuNum__ specifies the gpu number to run the assessor process. The value of this field should be a positive number. + + Note: users' could only specify one way to set assessor, for example,set {assessorName, optimizationMode} or {assessorCommand, assessorCwd}, and users could not set them both.If users do not want to use assessor, assessor fileld should leave to empty. + * **trial (local, remote)** @@ -284,11 +292,13 @@ * **codeDir** - **codeDir** 指定了尝试代码文件的目录。 + __codeDir__ specifies the directory of your own trial file. + * **gpuNum** - **gpuNum** 指定了运行尝试进程的 GPU 数量。 默认值为 0。 + __gpuNum__ specifies the num of gpu to run the trial process. Default value is 0. + * **trial (pai)** @@ -299,7 +309,8 @@ * **codeDir** - **codeDir** 指定了尝试代码文件的目录。 + __codeDir__ specifies the directory of the own trial file. + * **gpuNum** @@ -357,7 +368,7 @@ * **image** - **iamge** 设置了 **ps** 使用的 docker 映像。 + **image** set the image to be used in **ps**. * **worker** @@ -385,7 +396,7 @@ * **image** - **iamge** 设置了 **worker** 使用的 docker 映像。 + **image** set the image to be used in **worker**. * **machineList** @@ -400,27 +411,25 @@ **端口** 是用于连接远程计算机的 ssh 端口。 - 注意:如果 port 设为空,则为默认值 22。 - + Note: if users set port empty, the default value will be 22. * **username** - **username** 是远程计算机的用户名。 + **username** is the account of remote machine. * **passwd** - **passwd** 指定了账户的密码。 + **passwd** specifies the password of the account. * **sshKeyPath** 如果要使用 ssh 密钥登录远程计算机,则需要设置 **sshKeyPath**。 **sshKeyPath** 为有效的 ssh 密钥文件路径。 - - 注意:如果同时设置了 passwd 和 sshKeyPath,NNI 会使用 passwd。 - + + Note: if users set passwd and sshKeyPath simultaneously, nni will try passwd. * **passphrase** - **passphrase** 用于保护 ssh 密钥,如果没有使用,可为空。 + **passphrase** is used to protect ssh key, which could be empty if users don't have passphrase. * **kubeflowConfig**: @@ -588,25 +597,24 @@ trialConcurrency: 3 maxExecDuration: 1h maxTrialNum: 10 - #可选项: local, remote, pai, kubeflow + #choice: local, remote, pai, kubeflow trainingServicePlatform: remote searchSpacePath: /nni/search_space.json - #可选项: true, false + #choice: true, false useAnnotation: false tuner: - #可选项: TPE, Random, Anneal, Evolution + #choice: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: - #可选项: maximize, minimize + #choice: maximize, minimize optimize_mode: maximize gpuNum: 0 trial: command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - # 如果是本地实验,machineList 可为空。 + #machineList can be empty if the platform is local machineList: - - ip: 10.10.10.10 port: 22 username: test @@ -621,7 +629,6 @@ sshKeyPath: /nni/sshkey passphrase: qwert - * **pai 模式** @@ -664,7 +671,6 @@ host: 10.10.10.10 ``` - * **Kubeflow 模式** From 1d2aaaf21a4e77f33976b8f33672fac3e9aa2782 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 10:52:08 +0800 Subject: [PATCH 0136/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 62 +++++++++++++++++----------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 5e064cac17..7618c7f221 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -135,9 +135,9 @@ * 说明 - __trialConcurrency__ specifies the max num of trial jobs run simultaneously. + trialConcurrency 定义了并发尝试任务的最大数量。 - Note: if trialGpuNum is bigger than the free gpu numbers, and the trial jobs running simultaneously can not reach trialConcurrency number, some trial jobs will be put into a queue to wait for gpu allocation. + 注意:如果 trialGpuNum 大于空闲的 GPU 数量,并且并发的尝试任务数量还没达到 trialConcurrency,尝试任务会被放入队列,等待分配 GPU 资源。 * **maxExecDuration** @@ -170,9 +170,9 @@ * 说明 - __searchSpacePath__ specifies the path of search space file, which should be a valid path in the local linux machine. + searchSpacePath 定义搜索空间文件的路径,此文件必须在运行 nnictl 的本机。 - Note: if set useAnnotation=True, the searchSpacePath field should be removed. + 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 * **useAnnotation** @@ -181,7 +181,7 @@ **useAnnotation** 定义使用标记来分析代码并生成搜索空间。 - Note: if set useAnnotation=True, the searchSpacePath field should be removed. + 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 * **nniManagerIp** @@ -189,7 +189,7 @@ **nniManagerIp** 设置 NNI 管理器运行的 IP 地址。 此字段为可选项,如果没有设置,则会使用 eth0 的 IP 地址。 - Note: run ifconfig on NNI manager's machine to check if eth0 device exists. If not, we recommend to set nnimanagerIp explicitly. + 注意: 可在 NNI 管理器机器上运行 ifconfig 来检查 eth0 是否存在。 如果不存在,推荐显式设置 nnimanagerIp。 * **tuner** @@ -211,76 +211,76 @@ * **codeDir** - __codeDir__ specifies the directory of tuner code. + __codeDir__ 指定了调参器代码目录。 * **classFileName** - __classFileName__ specifies the name of tuner file. + __classFileName__ 指定了调参器文件名。 * **className** - __className__ specifies the name of tuner class. + __className__ 指定了调参器类名。 * **classArgs** - __classArgs__ specifies the arguments of tuner algorithm. + __classArgs__ 指定了调参器算法的参数。 * **gpuNum** - __gpuNum__ specifies the gpu number to run the tuner process. The value of this field should be a positive number. + __gpuNum__ 指定了运行调参器进程的 GPU 数量。 此字段的值必须是正整数。 - Note: users could only specify one way to set tuner, for example, set {tunerName, optimizationMode} or {tunerCommand, tunerCwd}, and could not set them both. + 注意: 只能使用一种方法来指定调参器,例如:设置{tunerName, optimizationMode} 或 {tunerCommand, tunerCwd},不能同时设置。 * **assessor** * 说明 - **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 Another way is to use users' own assessor file, and need to set **codeDirectory**, **classFileName**, **className** and **classArgs**. + **assessor** 指定了实验的评估器算法。有两种方法可设置评估器。 一种方法是使用 NNI SDK 提供的评估器,需要设置 **builtinAssessorName** 和 **classArgs**。 另一种方法,是使用用户自定义的评估器,需要设置 **codeDirectory**,**classFileName**,**className** 和 **classArgs**。 * **builtinAssessorName** 和 **classArgs** * **builtinAssessorName** - __builtinAssessorName__ specifies the name of system assessor, nni sdk provides one kind of assessor {__Medianstop__} + __builtinAssessorName__ 指定了系统评估器的名称, NNI 内置评估器 {__Medianstop__} * **classArgs** - __classArgs__ specifies the arguments of assessor algorithm + __classArgs__ 指定了评估器算法的参数。 * **codeDir**, **classFileName**, **className** and **classArgs** * **codeDir** - __codeDir__ specifies the directory of assessor code. + __codeDir__ 指定了评估器代码目录。 * **classFileName** - __classFileName__ specifies the name of assessor file. + __classFileName__ 指定了调参器文件名。 * **className** - __className__ specifies the name of assessor class. + __className__ 指定了评估器类名。 * **classArgs** - __classArgs__ specifies the arguments of assessor algorithm. + __classArgs__ 指定了评估器算法的参数。 * **gpuNum** - __gpuNum__ specifies the gpu number to run the assessor process. The value of this field should be a positive number. + __gpuNum__ 指定了运行评估器进程的 GPU 数量。 此字段的值必须是正整数。 - Note: users' could only specify one way to set assessor, for example,set {assessorName, optimizationMode} or {assessorCommand, assessorCwd}, and users could not set them both.If users do not want to use assessor, assessor fileld should leave to empty. + 注意: 只能使用一种方法来指定评估器,例如:设置 {assessorName, optimizationMode} 或 {assessorCommand, assessorCwd},不能同时设置。如果不需要使用评估器,可将其置为空。 * **trial (local, remote)** @@ -292,12 +292,12 @@ * **codeDir** - __codeDir__ specifies the directory of your own trial file. + __codeDir__ 指定了尝试代码文件的目录。 * **gpuNum** - __gpuNum__ specifies the num of gpu to run the trial process. Default value is 0. + __gpuNum__ 指定了运行尝试进程的 GPU 数量。 默认值为 0。 * **trial (pai)** @@ -309,7 +309,7 @@ * **codeDir** - __codeDir__ specifies the directory of the own trial file. + __codeDir__ 指定了尝试代码文件的目录。 * **gpuNum** @@ -368,7 +368,7 @@ * **image** - **image** set the image to be used in **ps**. + **iamge** 设置了 **ps** 使用的 docker 映像。 * **worker** @@ -396,7 +396,7 @@ * **image** - **image** set the image to be used in **worker**. + **iamge** 设置了 **worker** 使用的 docker 映像。 * **machineList** @@ -411,25 +411,25 @@ **端口** 是用于连接远程计算机的 ssh 端口。 - Note: if users set port empty, the default value will be 22. + 注意:如果 port 设为空,则为默认值 22。 * **username** - **username** is the account of remote machine. + **username** 是远程计算机的用户名。 * **passwd** - **passwd** specifies the password of the account. + **passwd** 指定了账户的密码。 * **sshKeyPath** 如果要使用 ssh 密钥登录远程计算机,则需要设置 **sshKeyPath**。 **sshKeyPath** 为有效的 ssh 密钥文件路径。 - Note: if users set passwd and sshKeyPath simultaneously, nni will try passwd. + 注意:如果同时设置了 passwd 和 sshKeyPath,NNI 会使用 passwd。 * **passphrase** - **passphrase** is used to protect ssh key, which could be empty if users don't have passphrase. + **passphrase** 用于保护 ssh 密钥,如果没有使用,可为空。 * **kubeflowConfig**: From c9f8338f4530a18043a61abe73240c5308d4e675 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 11:02:36 +0800 Subject: [PATCH 0137/1573] New translations ExperimentConfig.md (Chinese Simplified) --- zh_CN/docs/ExperimentConfig.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/zh_CN/docs/ExperimentConfig.md b/zh_CN/docs/ExperimentConfig.md index 7618c7f221..9090c0c289 100644 --- a/zh_CN/docs/ExperimentConfig.md +++ b/zh_CN/docs/ExperimentConfig.md @@ -170,7 +170,7 @@ * 说明 - searchSpacePath 定义搜索空间文件的路径,此文件必须在运行 nnictl 的本机。 + __searchSpacePath__ 定义搜索空间文件的路径,此文件必须在运行 nnictl 的本机。 注意: 如果设置了 useAnnotation=True,searchSpacePath 字段必须被删除。 @@ -592,29 +592,31 @@ 如果在远程服务器上运行尝试任务,需要增加服务器信息: + authorName: test experimentName: test_experiment trialConcurrency: 3 maxExecDuration: 1h maxTrialNum: 10 - #choice: local, remote, pai, kubeflow + #可选项: local, remote, pai, kubeflow trainingServicePlatform: remote searchSpacePath: /nni/search_space.json - #choice: true, false + #可选项: true, false useAnnotation: false tuner: - #choice: TPE, Random, Anneal, Evolution + #可选项: TPE, Random, Anneal, Evolution builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize gpuNum: 0 trial: command: python3 mnist.py codeDir: /nni/mnist gpuNum: 0 - #machineList can be empty if the platform is local + # 如果是本地实验,machineList 可为空。 machineList: + - ip: 10.10.10.10 port: 22 username: test @@ -629,6 +631,7 @@ sshKeyPath: /nni/sshkey passphrase: qwert + * **pai 模式** From fd6e1a13711c9dacad19a7f67713deed161aa712 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 11:02:37 +0800 Subject: [PATCH 0138/1573] New translations FAQ.md (Chinese Simplified) --- zh_CN/docs/FAQ.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/FAQ.md b/zh_CN/docs/FAQ.md index 2779455aaa..011158e21e 100644 --- a/zh_CN/docs/FAQ.md +++ b/zh_CN/docs/FAQ.md @@ -8,7 +8,7 @@ nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下 ### OpenPAI 模式下无法获得尝试的数据 -In OpenPAI training mode, we start a rest server which listens on 51189 port in nniManager to receive metrcis reported from trials running in OpenPAI cluster. If you didn't see any metrics from WebUI in OpenPAI mode, check your machine where nniManager runs on to make sure 51189 port is turned on in the firewall rule. +在 OpenPAI 的训练模式下,nniManager 会在端口 51189 启动一个 RESTful 服务,来接收 OpenPAI 集群中尝试任务的回调数据。 If you didn't see any metrics from WebUI in OpenPAI mode, check your machine where nniManager runs on to make sure 51189 port is turned on in the firewall rule. ### Segmentation Fault (core dumped) when installing from source code From 4bcafe1bb0d6db13bc3aa50e00524d69bd3ef646 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 11:11:49 +0800 Subject: [PATCH 0139/1573] New translations FAQ.md (Chinese Simplified) --- zh_CN/docs/FAQ.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh_CN/docs/FAQ.md b/zh_CN/docs/FAQ.md index 011158e21e..6d0615c98f 100644 --- a/zh_CN/docs/FAQ.md +++ b/zh_CN/docs/FAQ.md @@ -8,18 +8,18 @@ nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下 ### OpenPAI 模式下无法获得尝试的数据 -在 OpenPAI 的训练模式下,nniManager 会在端口 51189 启动一个 RESTful 服务,来接收 OpenPAI 集群中尝试任务的回调数据。 If you didn't see any metrics from WebUI in OpenPAI mode, check your machine where nniManager runs on to make sure 51189 port is turned on in the firewall rule. +在 OpenPAI 的训练模式下,nniManager 会在端口 51189 启动一个 RESTful 服务,来接收 OpenPAI 集群中尝试任务的指标数据。 如果在 OpenPAI 模式下的网页中不能看到任何指标,需要检查 51189 端口是否在防火墙规则中已打开。 -### Segmentation Fault (core dumped) when installing from source code +### 源码安装时出现 Segmentation Fault (core dumped) -> make: *** [install-XXX] Segmentation fault (core dumped) There are two options: +> make: *** [install-XXX] Segmentation fault (core dumped) 有以下两种解决方案: -* Update or reinstall you current python's pip like `python3 -m pip install -U pip` -* Install nni with --no-cache-dir flag like `python3 -m pip install nni --no-cache-dir` +* 更新或重新安装 Python 中的 pip: `python3 -m pip install -U pip` +* 在安装 NNI 时,添加 --no-cache-dir 参数:`python3 -m pip install nni --no-cache-dir` -### Job management error: getIPV4Address() failed because os.networkInterfaces().eth0 is undefined. +### 作业管理错误:getIPV4Address() failed because os.networkInterfaces().eth0 is undefined. -Your machine don't have eth0 device, please set nniManagerIp in your config file manually. [refer](https://github.com/Microsoft/nni/blob/master/docs/ExperimentConfig.md) +计算机没有 eth0 设备,需要在配置文件中手动设置 nniManagerIp。 [参考此处](https://github.com/Microsoft/nni/blob/master/docs/ExperimentConfig.md) ### Exceed the MaxDuration but didn't stop From a4ce6cf6dee2bae143c415cae7b63df3039bbde9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 16:41:25 +0800 Subject: [PATCH 0140/1573] New translations FAQ.md (Chinese Simplified) --- zh_CN/docs/FAQ.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/FAQ.md b/zh_CN/docs/FAQ.md index 6d0615c98f..0078c86409 100644 --- a/zh_CN/docs/FAQ.md +++ b/zh_CN/docs/FAQ.md @@ -21,11 +21,11 @@ nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下 计算机没有 eth0 设备,需要在配置文件中手动设置 nniManagerIp。 [参考此处](https://github.com/Microsoft/nni/blob/master/docs/ExperimentConfig.md) -### Exceed the MaxDuration but didn't stop +### 运行时间超过了 MaxDuration ,但没有停止 -When the duration of experiment reaches the maximum duration, nniManager will not create new trials, but the existing trials will continue unless user manually stop the experiment. +当实验到达最长运行时间时,nniManager 不会创建新的尝试,但除非手动停止实验,运行中的尝试会继续。 -### Could not stop an experiment using `nnictl stop` +### 使用 `nnictl stop` 无法停止实验 If you upgrade your nni or you delete some config files of nni when there is an experiment running, this kind of issue may happen because the loss of config file. You could use `ps -ef | grep node` to find the pid of your experiment, and use `kill -9 {pid}` to kill it manually. From 75c4d62689cfb6da95606ec8bec309186b763a72 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 16:51:07 +0800 Subject: [PATCH 0141/1573] New translations FAQ.md (Chinese Simplified) --- zh_CN/docs/FAQ.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/FAQ.md b/zh_CN/docs/FAQ.md index 0078c86409..7283b61951 100644 --- a/zh_CN/docs/FAQ.md +++ b/zh_CN/docs/FAQ.md @@ -27,12 +27,12 @@ nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下 ### 使用 `nnictl stop` 无法停止实验 -If you upgrade your nni or you delete some config files of nni when there is an experiment running, this kind of issue may happen because the loss of config file. You could use `ps -ef | grep node` to find the pid of your experiment, and use `kill -9 {pid}` to kill it manually. +如果在实验运行时,升级了 nni 或删除了一些配置文件,会因为丢失配置文件而出现这类错误。 可以使用 `ps -ef | grep node` 命令来找到实验的 pid,并用 `kill -9 {pid}` 命令来停止实验进程。 -### Could not get `default metric` in webUI of virtual machines +### 无法在虚拟机的 NNI 网页中看到 `默认指标` -Config the network mode to bridge mode or other mode that could make virtual machine's host accessible from external machine, and make sure the port of virtual machine is not forbidden by firewall. +将虚拟机的网络配置为桥接模式来让虚拟机能被网络访问,并确保虚拟机的防火墙没有禁止相关端口。 -### Help us improve +### 帮助改进 -Please inquiry the problem in https://github.com/Microsoft/nni/issues to see whether there are other people already reported the problem, create a new one if there are no existing issues been created. \ No newline at end of file +在创建新问题前,请在 https://github.com/Microsoft/nni/issues 查看是否有人已经报告了相似的问题。 \ No newline at end of file From fd372bd35f46d341ab95c52e2a4db1f7193ad3a4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 17:02:05 +0800 Subject: [PATCH 0142/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index e03a7c1a74..519eb05cd3 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -1,4 +1,4 @@ -# **Get Started with NNI** +# **开始使用 NNI** ## **Installation** From 4af6a18fefa7ff09ba6011288d650637e3fb2284 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 17:02:06 +0800 Subject: [PATCH 0143/1573] New translations FAQ.md (Chinese Simplified) --- zh_CN/docs/FAQ.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/FAQ.md b/zh_CN/docs/FAQ.md index 7283b61951..3527d17929 100644 --- a/zh_CN/docs/FAQ.md +++ b/zh_CN/docs/FAQ.md @@ -29,7 +29,7 @@ nnictl 在执行时,使用 tmp 目录作为临时目录来复制 codeDir 下 如果在实验运行时,升级了 nni 或删除了一些配置文件,会因为丢失配置文件而出现这类错误。 可以使用 `ps -ef | grep node` 命令来找到实验的 pid,并用 `kill -9 {pid}` 命令来停止实验进程。 -### 无法在虚拟机的 NNI 网页中看到 `默认指标` +### 无法在虚拟机的 NNI 网页中看到 `指标数据` 将虚拟机的网络配置为桥接模式来让虚拟机能被网络访问,并确保虚拟机的防火墙没有禁止相关端口。 From 4fec24aceb71841bbb6bba1a87620455e290f179 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 17:11:55 +0800 Subject: [PATCH 0144/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index 519eb05cd3..bf00061e11 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -1,24 +1,31 @@ # **开始使用 NNI** -## **Installation** +## **安装** -* **Dependencies** +* **依赖项** - python >= 3.5 git wget + python >= 3.5 + git + wget + - python pip should also be correctly installed. You could use "python3 -m pip -v" to check in Linux. + 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 版本。 - * Note: we don't support virtual environment in current releases. + * 注意:当前版本不支持虚拟环境。 -* **Install NNI through pip** +* **通过 pip 命令安装 NNI** - python3 -m pip install --user --upgrade nni + python3 -m pip install --user --upgrade nni + -* **Install NNI through source code** +* **通过源代码安装 NNI** - git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh + git clone -b v0.4.1 https://github.com/Microsoft/nni.git + cd nni + source install.sh + -## **Quick start: run a customized experiment** +## **快速入门:运行自定义的实验** An experiment is to run multiple trial jobs, each trial job tries a configuration which includes a specific neural architecture (or model) and hyper-parameter values. To run an experiment through NNI, you should: @@ -29,18 +36,16 @@ An experiment is to run multiple trial jobs, each trial job tries a configuratio **Prepare trial**: Let's use a simple trial example, e.g. mnist, provided by NNI. After you installed NNI, NNI examples have been put in ~/nni/examples, run `ls ~/nni/examples/trials` to see all the trial examples. You can simply execute the following command to run the NNI mnist example: - python3 ~/nni/examples/trials/mnist-annotation/mnist.py - + python3 ~/nni/examples/trials/mnist-annotation/mnist.py This command will be filled in the yaml configure file below. Please refer to [here](howto_1_WriteTrial.md) for how to write your own trial. **Prepare tuner**: NNI supports several popular automl algorithms, including Random Search, Tree of Parzen Estimators (TPE), Evolution algorithm etc. Users can write their own tuner (refer to [here](howto_2_CustomizedTuner.md), but for simplicity, here we choose a tuner provided by NNI as below: - tuner: + tuner: builtinTunerName: TPE classArgs: optimize_mode: maximize - *builtinTunerName* is used to specify a tuner in NNI, *classArgs* are the arguments pass to the tuner, *optimization_mode* is to indicate whether you want to maximize or minimize your trial's result. From 95c8e111bb351f938b276526c69f77eab6b30121 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 17:21:42 +0800 Subject: [PATCH 0145/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index bf00061e11..7a79375377 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -27,14 +27,14 @@ ## **快速入门:运行自定义的实验** -An experiment is to run multiple trial jobs, each trial job tries a configuration which includes a specific neural architecture (or model) and hyper-parameter values. To run an experiment through NNI, you should: +实验会运行多个尝试任务,每个尝试任务会使用特定的神经网络(或模型)结构以及超参的值。 运行 NNI 实验,需要如下准备: -* Provide a runnable trial -* Provide or choose a tuner -* Provide a yaml experiment configure file -* (optional) Provide or choose an assessor +* 可运行的尝试的代码 +* 编写或选择调参器 +* 准备 yaml 的实验配置文件 +* (可选) 编写或选择评估器 -**Prepare trial**: Let's use a simple trial example, e.g. mnist, provided by NNI. After you installed NNI, NNI examples have been put in ~/nni/examples, run `ls ~/nni/examples/trials` to see all the trial examples. You can simply execute the following command to run the NNI mnist example: +**准备尝试**: 先从简单样例开始,如:NNI 样例中的 mnist。 After you installed NNI, NNI examples have been put in ~/nni/examples, run `ls ~/nni/examples/trials` to see all the trial examples. You can simply execute the following command to run the NNI mnist example: python3 ~/nni/examples/trials/mnist-annotation/mnist.py From 3f09c78593876a21cc7ea579b747503ec05858d2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 18:42:07 +0800 Subject: [PATCH 0146/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index 7a79375377..48e9d0ccdc 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -34,7 +34,7 @@ * 准备 yaml 的实验配置文件 * (可选) 编写或选择评估器 -**准备尝试**: 先从简单样例开始,如:NNI 样例中的 mnist。 After you installed NNI, NNI examples have been put in ~/nni/examples, run `ls ~/nni/examples/trials` to see all the trial examples. You can simply execute the following command to run the NNI mnist example: +**准备尝试**: 先从简单样例开始,如:NNI 样例中的 mnist。 NNI 样例在代码目录的 examples 中,运行 `ls ~/nni/examples/trials` 可以看到所有实验的样例。 You can simply execute the following command to run the NNI mnist example: python3 ~/nni/examples/trials/mnist-annotation/mnist.py From be6eac21bbfea4b6173d944e3515fa9c8f5021fd Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 18:56:56 +0800 Subject: [PATCH 0147/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index 48e9d0ccdc..5fe3e81d4c 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -34,22 +34,22 @@ * 准备 yaml 的实验配置文件 * (可选) 编写或选择评估器 -**准备尝试**: 先从简单样例开始,如:NNI 样例中的 mnist。 NNI 样例在代码目录的 examples 中,运行 `ls ~/nni/examples/trials` 可以看到所有实验的样例。 You can simply execute the following command to run the NNI mnist example: +**准备尝试**: 先从简单样例开始,如:NNI 样例中的 mnist。 NNI 样例在代码目录的 examples 中,运行 `ls ~/nni/examples/trials` 可以看到所有实验的样例。 执行下面的命令可轻松运行 NNI 的 mnist 样例: python3 ~/nni/examples/trials/mnist-annotation/mnist.py -This command will be filled in the yaml configure file below. Please refer to [here](howto_1_WriteTrial.md) for how to write your own trial. +上面的命令会写在 yaml 文件中。 参考[这里](howto_1_WriteTrial.md)来写出自己的实验代码。 -**Prepare tuner**: NNI supports several popular automl algorithms, including Random Search, Tree of Parzen Estimators (TPE), Evolution algorithm etc. Users can write their own tuner (refer to [here](howto_2_CustomizedTuner.md), but for simplicity, here we choose a tuner provided by NNI as below: +**准备调参器**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(遗传算法)等等。 也可以编写自己的调参器(参考[这里](howto_2_CustomizedTuner.md))。下面使用了 NNI 内置的调参器: tuner: builtinTunerName: TPE classArgs: optimize_mode: maximize -*builtinTunerName* is used to specify a tuner in NNI, *classArgs* are the arguments pass to the tuner, *optimization_mode* is to indicate whether you want to maximize or minimize your trial's result. +*builtinTunerName* 用来指定 NNI 中的调参器,*classArgs* 是传入到调参器的参数,*optimization_mode* 表明需要最大化还是最小化尝试的结果。 -**Prepare configure file**: Since you have already known which trial code you are going to run and which tuner you are going to use, it is time to prepare the yaml configure file. NNI provides a demo configure file for each trial example, `cat ~/nni/examples/trials/mnist-annotation/config.yml` to see it. Its content is basically shown below: +**准备配置文件**:编写好尝试的代码,并选择或编写好自己的调参器后,就要准备 yaml 配置文件了。 NNI 为每个尝试样例都提供了演示的配置文件,用命令`cat ~/nni/examples/trials/mnist-annotation/config.yml` 来查看其内容。 大致内容如下: authorName: your_name experimentName: auto_mnist @@ -78,28 +78,28 @@ This command will be filled in the yaml configure file below. Please refer to [h gpuNum: 0 -Here *useAnnotation* is true because this trial example uses our python annotation (refer to [here](../tools/annotation/README.md) for details). For trial, we should provide *trialCommand* which is the command to run the trial, provide *trialCodeDir* where the trial code is. The command will be executed in this directory. We should also provide how many GPUs a trial requires. +因为这个尝试代码使用了 NNI 标记的方法(参考[这里](../tools/annotation/README.md) ),所以*useAnnotation* 为 true。 *command* 是运行尝试代码所需要的命令,*codeDir* 是尝试代码的相对位置。 命令会在此目录中执行。 同时,也需要提供每个尝试进程所需的 GPU 数量。 -With all these steps done, we can run the experiment with the following command: +完成上述步骤后,可通过下列命令来启动实验: nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml -You can refer to [here](NNICTLDOC.md) for more usage guide of *nnictl* command line tool. +参考[这里](NNICTLDOC.md)来了解 *nnictl* 命令行工具的更多用法。 -## View experiment results +## 查看实验结果 -The experiment has been running now, NNI provides WebUI for you to view experiment progress, to control your experiment, and some other appealing features. The WebUI is opened by default by `nnictl create`. +实验开始运行后,可以通过 NNI 的网页来查看实验进程,并进行控制等。 网页界面默认会通过 `nnictl create` 命令打开。 -## Read more +## 更多内容 -* [Tuners supported in the latest NNI release](./HowToChooseTuner.md) -* [Overview](Overview.md) -* [Installation](Installation.md) -* [Use command line tool nnictl](NNICTLDOC.md) -* [Use NNIBoard](WebUI.md) -* [Define search space](SearchSpaceSpec.md) -* [Config an experiment](ExperimentConfig.md) +* [NNI 最新版本支持的调参器](./HowToChooseTuner.md) +* [概述](Overview.md) +* [安装](Installation.md) +* [使用命令行工具 nnictl](NNICTLDOC.md) +* [使用 NNIBoard](WebUI.md) +* [定制搜索空间](SearchSpaceSpec.md) +* [配置实验](ExperimentConfig.md) * [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) * [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) * [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From 3f84d3f562e35ec729761b97945832915c16a82a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Thu, 3 Jan 2019 19:02:21 +0800 Subject: [PATCH 0148/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index 5fe3e81d4c..811d37eff5 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -100,6 +100,6 @@ * [使用 NNIBoard](WebUI.md) * [定制搜索空间](SearchSpaceSpec.md) * [配置实验](ExperimentConfig.md) -* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) -* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) -* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file +* [如何在本机运行实验 (支持多 GPU 卡)?](tutorial_1_CR_exp_local_api.md) +* [如何在多机上运行实验?](tutorial_2_RemoteMachineMode.md) +* [如何在 OpenPAI 上运行实验?](PAIMode.md) \ No newline at end of file From 29aa34723095c214da6605c05038adb293365717 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 09:55:10 +0800 Subject: [PATCH 0149/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index 4d3eb4ea24..2ac2864c46 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -1,4 +1,4 @@ -# **Write a Trial Run on NNI** +# **在 NNI 上编写 Trial(尝试)代码** A **Trial** in NNI is an individual attempt at applying a set of parameters on a model. From c276a5aa3676b5c6b402a75030f19b3025a11434 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:01:30 +0800 Subject: [PATCH 0150/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index 2ac2864c46..f7be064d26 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -1,14 +1,14 @@ # **在 NNI 上编写 Trial(尝试)代码** -A **Trial** in NNI is an individual attempt at applying a set of parameters on a model. +**Trial(尝试)**是将一组参数在模型上独立的一次尝试。 -To define a NNI trial, you need to firstly define the set of parameters and then update the model. NNI provide two approaches for you to define a trial: `NNI API` and `NNI Python annotation`. +定义 NNI 的尝试,需要首先定义参数组,并更新模型代码。 NNI 有两种方法来定义尝试:`NNI API` 和 `NNI 标记`. ## NNI API -> Step 1 - Prepare a SearchSpace parameters file. +> 步骤1 - 准备搜索空间参数文件。 -An example is shown below: +样例如下: { "dropout_rate":{"_type":"uniform","_value":[0.1,0.5]}, @@ -18,7 +18,7 @@ An example is shown below: } -Refer to to learn more about search space. +参考 进一步了解搜索空间。 > Step 2 - Update model codes From fe56d8b399308e12bcbb351e4bd4a2988ac4b0d2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:11:26 +0800 Subject: [PATCH 0151/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index f7be064d26..f802fa036d 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -6,7 +6,7 @@ ## NNI API -> 步骤1 - 准备搜索空间参数文件。 +> 第一步:准备搜索空间参数文件。 样例如下: @@ -20,42 +20,42 @@ 参考 进一步了解搜索空间。 -> Step 2 - Update model codes +> 第二步:更新模型代码 - 2.1 Declare NNI API - Include `import nni` in your trial code to use NNI APIs. + 2.1 声明 NNI API + 在尝试代码中通过 `import nni` 来导入 NNI API。 - 2.2 Get predefined parameters - Use the following code snippet: + 2.2 获取预定义的参数 + 参考下列代码片段: RECEIVED_PARAMS = nni.get_next_parameter() - to get hyper-parameters' values assigned by tuner. `RECEIVED_PARAMS` is an object, for example: + 来获得调参器分配的超参值。 `RECEIVED_PARAMS` 是一个对象,例如: {"conv_size": 2, "hidden_size": 124, "learning_rate": 0.0307, "dropout_rate": 0.2029} - 2.3 Report NNI results - Use the API: + 2.3 向 NNI 返回结果 + 使用 API: `nni.report_intermediate_result(accuracy)` - to send `accuracy` to assessor. + 返回 `accuracy` 的值给评估器。 - Use the API: + 使用 API: `nni.report_final_result(accuracy)` - to send `accuracy` to tuner. + 返回 `accuracy` 的值给调参器。 -**NOTE**: +**注意**: accuracy - The `accuracy` could be any python object, but if you use NNI built-in tuner/assessor, `accuracy` should be a numerical variable (e.g. float, int). assessor - The assessor will decide which trial should early stop based on the history performance of trial (intermediate result of one trial). tuner - The tuner will generate next parameters/architecture based on the explore history (final result of all trials). -> Step 3 - Enable NNI API +> 第三步:启用 NNI API To enable NNI API mode, you need to set useAnnotation to *false* and provide the path of SearchSpace file (you just defined in step 1): @@ -78,7 +78,7 @@ An alternative to write a trial is to use NNI's syntax for python. Simple as any Again, take MNIST as an example, it only requires 2 steps to write a trial with NNI Annotation. -> Step 1 - Update codes with annotations +> 第一步:在代码中加入标记 Please refer the following tensorflow code snippet for NNI Annotation, the highlighted 4 lines are annotations that help you to: (1) tune batch\_size and (2) dropout\_rate, (3) report test\_acc every 100 steps, and (4) at last report test\_acc as final result. @@ -119,7 +119,7 @@ with tf.Session() as sess: > > > > Please refer to [Annotation README](../tools/nni_annotation/README.md) for more information about annotation syntax and its usage. > -> Step 2 - Enable NNI Annotation In the yaml configure file, you need to set *useAnnotation* to true to enable NNI annotation: +> 第二步:启用 NNI 标记 在 yaml 配置文件中,将 *useAnnotation* 设置为 true 来启用 NNI 标记。 useAnnotation: true From a0e09a379ff8a60bf70560d5f0a9c40a801a0526 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:21:26 +0800 Subject: [PATCH 0152/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index f802fa036d..c398380f29 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -50,9 +50,9 @@ **注意**: - accuracy - The `accuracy` could be any python object, but if you use NNI built-in tuner/assessor, `accuracy` should be a numerical variable (e.g. float, int). - assessor - The assessor will decide which trial should early stop based on the history performance of trial (intermediate result of one trial). - tuner - The tuner will generate next parameters/architecture based on the explore history (final result of all trials). + accuracy - 如果使用 NNI 内置的调参器/评估器,那么 `accuracy` 必须是数值(如 float, int)。在定制调参器/评估器时 `accuracy` 可以是任何类型的 Python 对象。 + 评估器 - 会根据尝试的历史值(即其中间结果),来决定这次尝试是否应该提前终止。 + 调参器 - 会根据探索的历史(所有尝试的最终结果)来生成下一组参数、架构。 > 第三步:启用 NNI API From 2154d14666f3921dd7bdc2ffc5b2c8728164ec0a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:31:35 +0800 Subject: [PATCH 0153/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index c398380f29..a77cb3870f 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -57,19 +57,19 @@ > 第三步:启用 NNI API -To enable NNI API mode, you need to set useAnnotation to *false* and provide the path of SearchSpace file (you just defined in step 1): +要启用 NNI 的 API 模式,需要将 useAnnotation 设置为 *false*,并提供搜索空间文件的路径(即第一步中定义的文件): useAnnotation: false searchSpacePath: /path/to/your/search_space.json -You can refer to [here](ExperimentConfig.md) for more information about how to set up experiment configurations. +参考 [here](ExperimentConfig.md) 进一步了解如何配置实验。 -(../examples/trials/README.md) for more information about how to write trial code using NNI APIs. +参考 \[这里\](../examples/trials/README.md) 进一步了解如何使用 NNI 的 API 来编写尝试的代码。 -## NNI Python Annotation +## NNI 标记 -An alternative to write a trial is to use NNI's syntax for python. Simple as any annotation, NNI annotation is working like comments in your codes. You don't have to make structure or any other big changes to your existing codes. With a few lines of NNI annotation, you will be able to: +另一种编写尝试的方法是使用 Python 注释来标记 NNI。 就像其它标记,NNI 的标记和代码中的注释一样。 You don't have to make structure or any other big changes to your existing codes. With a few lines of NNI annotation, you will be able to: * annotate the variables you want to tune * specify in which range you want to tune the variables From 1d99b9848da145ed826c6a9a0ffa6a2d147ace65 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:40:45 +0800 Subject: [PATCH 0154/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index a77cb3870f..9530a17e63 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -69,20 +69,20 @@ ## NNI 标记 -另一种编写尝试的方法是使用 Python 注释来标记 NNI。 就像其它标记,NNI 的标记和代码中的注释一样。 You don't have to make structure or any other big changes to your existing codes. With a few lines of NNI annotation, you will be able to: +另一种编写尝试的方法是使用 Python 注释来标记 NNI。 就像其它标记,NNI 的标记和代码中的注释一样。 不需要在代码中做大量改动。 只需要添加一些 NNI 标记,就能够: -* annotate the variables you want to tune -* specify in which range you want to tune the variables -* annotate which variable you want to report as intermediate result to `assessor` -* annotate which variable you want to report as the final result (e.g. model accuracy) to `tuner`. +* 标记需要调整的参数变量 +* 指定变量的搜索空间范围 +* 标记哪个变量需要作为中间结果范围给`评估器` +* 标记哪个变量需要作为最终结果(例如:模型精度)返回给`调参器`。 -Again, take MNIST as an example, it only requires 2 steps to write a trial with NNI Annotation. +同样以 MNIST 为例,只需要两步就能用 NNI 标记来编写尝试代码。 > 第一步:在代码中加入标记 -Please refer the following tensorflow code snippet for NNI Annotation, the highlighted 4 lines are annotations that help you to: (1) tune batch\_size and (2) dropout\_rate, (3) report test\_acc every 100 steps, and (4) at last report test\_acc as final result. +参考下列 tensorflow 的 NNI 标记的代码片段,高亮的 4 行标记实现了: (1) 调整 batch\_size 和 (2) dropout\_rate, (3) 每 100 步返回一次 test\_acc ,并且 (4) 在最后返回 test\_acc 作为最终结果。 -> What noteworthy is: as these new added codes are annotations, it does not actually change your previous codes logic, you can still run your code as usual in environments without NNI installed. +> 值得注意的是,新添加的代码都是注释,不会影响以前的执行逻辑。因此这些代码仍然能在没有安装 NNI 的环境中运行。 ```diff with tf.Session() as sess: @@ -111,19 +111,19 @@ with tf.Session() as sess: + """@nni.report_final_result(test_acc)""" ``` -> NOTE +> 注意 > -> > `@nni.variable` will take effect on its following line +> > `@nni.variable` 会影响下面紧接的一行。 > > -> > `@nni.report_intermediate_result`/`@nni.report_final_result` will send the data to assessor/tuner at that line. +> > `@nni.report_intermediate_result`/`@nni.report_final_result` 会在那行将数据发送给评估器、调参器。 > > -> > Please refer to [Annotation README](../tools/nni_annotation/README.md) for more information about annotation syntax and its usage. +> > 参考 [标记](../tools/nni_annotation/README.md) 了解更多关于标记的语法和用法。 > > 第二步:启用 NNI 标记 在 yaml 配置文件中,将 *useAnnotation* 设置为 true 来启用 NNI 标记。 useAnnotation: true -## More Trial Example +## 更多尝试的样例 -* [Automatic Model Architecture Search for Reading Comprehension.](../examples/trials/ga_squad/README.md) \ No newline at end of file +* [在阅读理解上使用自动模型架构搜索。](../../examples/trials/ga_squad/README.md) \ No newline at end of file From a3bcac8cb88f3ca926845d9a3e79c21313a630c0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:44:12 +0800 Subject: [PATCH 0155/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index 9530a17e63..d131410dfa 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -63,9 +63,9 @@ searchSpacePath: /path/to/your/search_space.json -参考 [here](ExperimentConfig.md) 进一步了解如何配置实验。 +参考 [这里](ExperimentConfig.md) 进一步了解如何配置实验。 -参考 \[这里\](../examples/trials/README.md) 进一步了解如何使用 NNI 的 API 来编写尝试的代码。 +参考 [README.md](../../examples/trials/README.md) 进一步了解如何使用 NNI 的 API 来编写尝试的代码。 ## NNI 标记 From 30834eb458740c7dce994c750d72393078574f45 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:45:25 +0800 Subject: [PATCH 0156/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index d131410dfa..a16ef50655 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -18,7 +18,7 @@ } -参考 进一步了解搜索空间。 +参考 [SearchSpaceSpec.md](./SearchSpaceSpec.md) 进一步了解搜索空间。 > 第二步:更新模型代码 From 14d26d92d84dac1158d19fde4003dab0a1991f61 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 10:51:40 +0800 Subject: [PATCH 0157/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index 5f619ea1f4..2c2ae233c9 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -1,4 +1,4 @@ -# **How To** - Customize Your Own Tuner +# **指南** - 自定义调参器 *Tuner receive result from Trial as a matric to evaluate the performance of a specific parameters/architecture configure. And tuner send next hyper-parameter or architecture configure to Trial.* From 3955b61f2a4e8cba3150ae408089b0f1791a5ae8 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 11:01:38 +0800 Subject: [PATCH 0158/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index 2c2ae233c9..2c8260f60a 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -1,6 +1,6 @@ # **指南** - 自定义调参器 -*Tuner receive result from Trial as a matric to evaluate the performance of a specific parameters/architecture configure. And tuner send next hyper-parameter or architecture configure to Trial.* +*调参器从尝试接收指标结果,来评估一组参数配置的性能。 And tuner send next hyper-parameter or architecture configure to Trial.* So, if user want to implement a customized Tuner, she/he only need to: From 65bed5cf0202c455d8733d8b1f99024bb5a7c534 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 13:35:07 +0800 Subject: [PATCH 0159/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index 2c8260f60a..0ec842073a 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -47,7 +47,7 @@ class CustomizedTuner(Tuner): ... ``` - receive_trial_result will receive ```the parameter_id, parameters, value``` as parameters input. Also, Tuner will receive the ```value``` object are exactly same value that Trial send. +`receive_trial_result` will receive `the parameter_id, parameters, value` as parameters input. Also, Tuner will receive the `value` object are exactly same value that Trial send. The ```your_parameters``` return from ```generate_parameters``` function, will be package as json object by NNI SDK. NNI SDK will unpack json object so the Trial will receive the exact same ```your_parameters``` from Tuner. @@ -65,16 +65,18 @@ For example: If the you implement the ```generate_parameters``` like this: It means your Tuner will always generate parameters ```{"dropout": 0.3, "learning_rate": 0.4}```. Then Trial will receive ```{"dropout": 0.3, "learning_rate": 0.4}``` by calling API ```nni.get_next_parameter()```. Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API ```nni.report_final_result()```, for example ```nni.report_final_result(0.93)```. Then your Tuner's ```receive_trial_result``` function will receied the result like: - parameter_id = 82347 - parameters = {"dropout": 0.3, "learning_rate": 0.4} - value = 0.93 - +```python +parameter_id = 82347 +parameters = {"dropout": 0.3, "learning_rate": 0.4} +value = 0.93 +``` **Note that** if you want to access a file (e.g., ```data.txt```) in the directory of your own tuner, you cannot use ```open('data.txt', 'r')```. Instead, you should use the following: - _pwd = os.path.dirname(__file__) - _fd = open(os.path.join(_pwd, 'data.txt'), 'r') - +```python +_pwd = os.path.dirname(__file__) +_fd = open(os.path.join(_pwd, 'data.txt'), 'r') +``` This is because your tuner is not executed in the directory of your tuner (i.e., ```pwd``` is not the directory of your own tuner). From 262eafb138882a8b8278180d53ba0ad27f3fcf2a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 14:31:58 +0800 Subject: [PATCH 0160/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index 0ec842073a..d8092777f8 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -1,12 +1,14 @@ # **指南** - 自定义调参器 -*调参器从尝试接收指标结果,来评估一组参数配置的性能。 And tuner send next hyper-parameter or architecture configure to Trial.* +*调参器从尝试接收指标结果,来评估一组超参或网络结构的性能。 然后调参器会将下一组超参或网络结构的配置发送给新的尝试。* -So, if user want to implement a customized Tuner, she/he only need to: +因此,如果要自定义调参器,需要: -1) Inherit a tuner of a base Tuner class 2) Implement receive_trial_result and generate_parameter function 3) Configure your customized tuner in experiment yaml config file +1. 从基类 Tuner 继承,创建新的调参器类 +2. 实现 receive_trial_result 和 generate_parameter 函数 +3. 在实验的 yaml 文件中配置好自定义的调参器 -Here ia an example: +样例如下: **1) Inherit a tuner of a base Tuner class** From 3c3b74f9d13a37a7c3ecb03684bcbe2de6988128 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 14:41:43 +0800 Subject: [PATCH 0161/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index d8092777f8..f6aa972783 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -10,7 +10,7 @@ 样例如下: -**1) Inherit a tuner of a base Tuner class** +**1) 从基类 Tuner 继承,创建新的调参器类** ```python from nni.tuner import Tuner @@ -20,7 +20,7 @@ class CustomizedTuner(Tuner): ... ``` -**2) Implement receive_trial_result and generate_parameter function** +**2) 实现 receive_trial_result 和 generate_parameter 函数** ```python from nni.tuner import Tuner @@ -49,23 +49,23 @@ class CustomizedTuner(Tuner): ... ``` -`receive_trial_result` will receive `the parameter_id, parameters, value` as parameters input. Also, Tuner will receive the `value` object are exactly same value that Trial send. +`receive_trial_result` 从输入中会接收 `parameter_id, parameters, value` 参数。 调参器会收到尝试进程发送的完全一样的 `value` 值。 -The ```your_parameters``` return from ```generate_parameters``` function, will be package as json object by NNI SDK. NNI SDK will unpack json object so the Trial will receive the exact same ```your_parameters``` from Tuner. + your_parameters 返回自 ```generate_parameters``` 函数,它会被 NNI SDK 打包为 json 对象。 NNI SDK 会解包 json 对象,因此,尝试也会收到完全相同来自 ```your_parameters``` 的数据。 -For example: If the you implement the ```generate_parameters``` like this: +例如,如下实现 ```generate_parameters``` : ```python def generate_parameters(self, parameter_id): ''' - Returns a set of trial (hyper-)parameters, as a serializable object + 返回尝试的超参组合的序列化对象 parameter_id: int ''' - # your code implements here. + # 代码实现位置 return {"dropout": 0.3, "learning_rate": 0.4} ``` -It means your Tuner will always generate parameters ```{"dropout": 0.3, "learning_rate": 0.4}```. Then Trial will receive ```{"dropout": 0.3, "learning_rate": 0.4}``` by calling API ```nni.get_next_parameter()```. Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API ```nni.report_final_result()```, for example ```nni.report_final_result(0.93)```. Then your Tuner's ```receive_trial_result``` function will receied the result like: +这也表示调参器总会生成参数 ```{"dropout": 0.3, "learning_rate": 0.4}```。 尝试会收到 ```{"dropout": 0.3, "learning_rate": 0.4}``` by calling API ```nni.get_next_parameter()```. Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API ```nni.report_final_result()```, for example ```nni.report_final_result(0.93)```. Then your Tuner's ```receive_trial_result``` function will receied the result like: ```python parameter_id = 82347 @@ -82,7 +82,7 @@ _fd = open(os.path.join(_pwd, 'data.txt'), 'r') This is because your tuner is not executed in the directory of your tuner (i.e., ```pwd``` is not the directory of your own tuner). -**3) Configure your customized tuner in experiment yaml config file** +**3) 在实验的 yaml 文件中配置好自定义的调参器** NNI needs to locate your customized tuner class and instantiate the class, so you need to specify the location of the customized tuner class and pass literal values as parameters to the \_\_init__ constructor. From 838d805db05fc2eec9c0c8479c9a5496b2dbeb0c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 14:49:38 +0800 Subject: [PATCH 0162/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index f6aa972783..36f5544d48 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -51,9 +51,9 @@ class CustomizedTuner(Tuner): `receive_trial_result` 从输入中会接收 `parameter_id, parameters, value` 参数。 调参器会收到尝试进程发送的完全一样的 `value` 值。 - your_parameters 返回自 ```generate_parameters``` 函数,它会被 NNI SDK 打包为 json 对象。 NNI SDK 会解包 json 对象,因此,尝试也会收到完全相同来自 ```your_parameters``` 的数据。 +`generate_parameters` 函数返回的 `your_parameters`,会被 NNI SDK 打包为 json。 然后 NNI SDK 会将 json 对象解包给尝试进程。因此,尝试进程会收到来自调参器的完全相同的 `your_parameters`。 -例如,如下实现 ```generate_parameters``` : +例如, 如下实现了 `generate_parameters`: ```python def generate_parameters(self, parameter_id): @@ -65,7 +65,7 @@ class CustomizedTuner(Tuner): return {"dropout": 0.3, "learning_rate": 0.4} ``` -这也表示调参器总会生成参数 ```{"dropout": 0.3, "learning_rate": 0.4}```。 尝试会收到 ```{"dropout": 0.3, "learning_rate": 0.4}``` by calling API ```nni.get_next_parameter()```. Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API ```nni.report_final_result()```, for example ```nni.report_final_result(0.93)```. Then your Tuner's ```receive_trial_result``` function will receied the result like: +这表示调参器会一直生成参数 `{"dropout": 0.3, "learning_rate": 0.4}`。 然后尝试进程也会在调用 API `nni.get_next_parameter()` 时得到 `{"dropout": 0.3, "learning_rate": 0.4}`。 Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API `nni.report_final_result()`, for example `nni.report_final_result(0.93)`. Then your Tuner's `receive_trial_result` function will receied the result like: ```python parameter_id = 82347 @@ -73,14 +73,14 @@ parameters = {"dropout": 0.3, "learning_rate": 0.4} value = 0.93 ``` -**Note that** if you want to access a file (e.g., ```data.txt```) in the directory of your own tuner, you cannot use ```open('data.txt', 'r')```. Instead, you should use the following: +**Note that** if you want to access a file (e.g., `data.txt`) in the directory of your own tuner, you cannot use `open('data.txt', 'r')`. Instead, you should use the following: ```python _pwd = os.path.dirname(__file__) _fd = open(os.path.join(_pwd, 'data.txt'), 'r') ``` -This is because your tuner is not executed in the directory of your tuner (i.e., ```pwd``` is not the directory of your own tuner). +This is because your tuner is not executed in the directory of your tuner (i.e., `pwd` is not the directory of your own tuner). **3) 在实验的 yaml 文件中配置好自定义的调参器** @@ -91,8 +91,8 @@ tuner: codeDir: /home/abc/mytuner classFileName: my_customized_tuner.py className: CustomizedTuner - # Any parameter need to pass to your tuner class __init__ constructor - # can be specified in this optional classArgs field, for example + # 任何传入 __init__ 构造函数的参数 + # 都需要声明在 classArgs 字段中,如: classArgs: arg1: value1 ``` From 2fc1fd3e7a08908e6783a7a8917c548ae74fcc2b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:02:05 +0800 Subject: [PATCH 0163/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index 36f5544d48..c05d2b0ed2 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -65,7 +65,7 @@ class CustomizedTuner(Tuner): return {"dropout": 0.3, "learning_rate": 0.4} ``` -这表示调参器会一直生成参数 `{"dropout": 0.3, "learning_rate": 0.4}`。 然后尝试进程也会在调用 API `nni.get_next_parameter()` 时得到 `{"dropout": 0.3, "learning_rate": 0.4}`。 Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API `nni.report_final_result()`, for example `nni.report_final_result(0.93)`. Then your Tuner's `receive_trial_result` function will receied the result like: +这表示调参器会一直生成参数 `{"dropout": 0.3, "learning_rate": 0.4}`。 而尝试进程也会在调用 API `nni.get_next_parameter()` 时得到 `{"dropout": 0.3, "learning_rate": 0.4}`。 尝试结束后的返回值(通常是某个指标),通过调用 API `nni.report_final_result()` 返回给调参器。如: `nni.report_final_result(0.93)`。 而调参器的 `receive_trial_result` 函数会收到如下结果: ```python parameter_id = 82347 @@ -73,18 +73,18 @@ parameters = {"dropout": 0.3, "learning_rate": 0.4} value = 0.93 ``` -**Note that** if you want to access a file (e.g., `data.txt`) in the directory of your own tuner, you cannot use `open('data.txt', 'r')`. Instead, you should use the following: +**注意** 如果需要存取自定义的调参器目录里的文件 (如, `data.txt`),不能使用 `open('data.txt', 'r')`。 要使用: ```python _pwd = os.path.dirname(__file__) _fd = open(os.path.join(_pwd, 'data.txt'), 'r') ``` -This is because your tuner is not executed in the directory of your tuner (i.e., `pwd` is not the directory of your own tuner). +这是因为自定义的调参器不是在自己的目录里执行的。(即,`pwd` 返回的目录不是调参器的目录)。 **3) 在实验的 yaml 文件中配置好自定义的调参器** -NNI needs to locate your customized tuner class and instantiate the class, so you need to specify the location of the customized tuner class and pass literal values as parameters to the \_\_init__ constructor. +NNI 需要定位到自定义的调参器类,并实例化它,因此需要指定自定义调参器类的文件位置,并将参数值传给 \_\_init__ 构造函数。 ```yaml tuner: @@ -97,7 +97,7 @@ tuner: arg1: value1 ``` -More detail example you could see: +更多样例,可参考: > - [evolution-tuner](../src/sdk/pynni/nni/evolution_tuner) > - [hyperopt-tuner](../src/sdk/pynni/nni/hyperopt_tuner) From b46e741a0ce1baa2dba1818a8cf776b1f7b33ef8 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:10:00 +0800 Subject: [PATCH 0164/1573] New translations howto_1_WriteTrial.md (Chinese Simplified) --- zh_CN/docs/howto_1_WriteTrial.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/howto_1_WriteTrial.md b/zh_CN/docs/howto_1_WriteTrial.md index a16ef50655..5aca646ec5 100644 --- a/zh_CN/docs/howto_1_WriteTrial.md +++ b/zh_CN/docs/howto_1_WriteTrial.md @@ -1,4 +1,4 @@ -# **在 NNI 上编写 Trial(尝试)代码** +# **实现 NNI 的 Trial(尝试)代码** **Trial(尝试)**是将一组参数在模型上独立的一次尝试。 @@ -65,18 +65,18 @@ 参考 [这里](ExperimentConfig.md) 进一步了解如何配置实验。 -参考 [README.md](../../examples/trials/README.md) 进一步了解如何使用 NNI 的 API 来编写尝试的代码。 +参考 [README.md](../../examples/trials/README.md) 进一步了解如何使用 NNI 的 API 来实现尝试的代码。 ## NNI 标记 -另一种编写尝试的方法是使用 Python 注释来标记 NNI。 就像其它标记,NNI 的标记和代码中的注释一样。 不需要在代码中做大量改动。 只需要添加一些 NNI 标记,就能够: +另一种实现尝试的方法是使用 Python 注释来标记 NNI。 就像其它标记,NNI 的标记和代码中的注释一样。 不需要在代码中做大量改动。 只需要添加一些 NNI 标记,就能够: * 标记需要调整的参数变量 * 指定变量的搜索空间范围 * 标记哪个变量需要作为中间结果范围给`评估器` * 标记哪个变量需要作为最终结果(例如:模型精度)返回给`调参器`。 -同样以 MNIST 为例,只需要两步就能用 NNI 标记来编写尝试代码。 +同样以 MNIST 为例,只需要两步就能用 NNI 标记来实现尝试代码。 > 第一步:在代码中加入标记 From d055958129df3b0e9805b12d3117a43ef9388b4e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:10:01 +0800 Subject: [PATCH 0165/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index c05d2b0ed2..fd98f6b770 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -99,10 +99,10 @@ tuner: 更多样例,可参考: -> - [evolution-tuner](../src/sdk/pynni/nni/evolution_tuner) -> - [hyperopt-tuner](../src/sdk/pynni/nni/hyperopt_tuner) -> - [evolution-based-customized-tuner](../examples/tuners/ga_customer_tuner) +> - [evolution-tuner](../../src/sdk/pynni/nni/evolution_tuner) +> - [hyperopt-tuner](../../src/sdk/pynni/nni/hyperopt_tuner) +> - [evolution-based-customized-tuner](../../examples/tuners/ga_customer_tuner) -## Write a more advanced automl algorithm +## 实现更高级的自动机器学习算法 -The methods above are usually enough to write a general tuner. However, users may also want more methods, for example, intermediate results, trials' state (e.g., the methods in assessor), in order to have a more powerful automl algorithm. Therefore, we have another concept called `advisor` which directly inherits from `MsgDispatcherBase` in [`src/sdk/pynni/nni/msg_dispatcher_base.py`](../src/sdk/pynni/nni/msg_dispatcher_base.py). Please refer to [here](./howto_3_CustomizedAdvisor.md) for how to write a customized advisor. \ No newline at end of file +上述内容足够写出通用的调参器。 但有时可能需要更多的信息,例如,中间结果,尝试的状态等等,从而能够实现更强大的自动机器学习算法。 因此,有另一个叫做 `advisor` 的类,直接继承于 `MsgDispatcherBase`,它位于 [`src/sdk/pynni/nni/msg_dispatcher_base.py`](../../src/sdk/pynni/nni/msg_dispatcher_base.py)。 参考[这里](./howto_3_CustomizedAdvisor.md)来了解如何实现自定义的 advisor。 \ No newline at end of file From 8a1064d6c412df91738431836515899f690c87af Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:10:05 +0800 Subject: [PATCH 0166/1573] New translations howto_3_CustomizedAdvisor.md (Chinese Simplified) --- zh_CN/docs/howto_3_CustomizedAdvisor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/howto_3_CustomizedAdvisor.md b/zh_CN/docs/howto_3_CustomizedAdvisor.md index 02bfcab587..21def539a7 100644 --- a/zh_CN/docs/howto_3_CustomizedAdvisor.md +++ b/zh_CN/docs/howto_3_CustomizedAdvisor.md @@ -1,4 +1,4 @@ -# **How To** - Customize Your Own Advisor +# **指南** - 自定义 advisor *Advisor targets the scenario that the automl algorithm wants the methods of both tuner and assessor. Advisor is similar to tuner on that it receives trial configuration request, final results, and generate trial configurations. Also, it is similar to assessor on that it receives intermediate results, trial's end state, and could send trial kill command. Note that, if you use Advisor, tuner and assessor are not allowed to be used at the same time.* From 2fdf5f0532bd5be00bbe18f9218d3f7053afed0e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:10:06 +0800 Subject: [PATCH 0167/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index 811d37eff5..eff3fd768a 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -30,9 +30,9 @@ 实验会运行多个尝试任务,每个尝试任务会使用特定的神经网络(或模型)结构以及超参的值。 运行 NNI 实验,需要如下准备: * 可运行的尝试的代码 -* 编写或选择调参器 +* 实现或选择调参器 * 准备 yaml 的实验配置文件 -* (可选) 编写或选择评估器 +* (可选) 实现或选择评估器 **准备尝试**: 先从简单样例开始,如:NNI 样例中的 mnist。 NNI 样例在代码目录的 examples 中,运行 `ls ~/nni/examples/trials` 可以看到所有实验的样例。 执行下面的命令可轻松运行 NNI 的 mnist 样例: @@ -40,7 +40,7 @@ 上面的命令会写在 yaml 文件中。 参考[这里](howto_1_WriteTrial.md)来写出自己的实验代码。 -**准备调参器**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(遗传算法)等等。 也可以编写自己的调参器(参考[这里](howto_2_CustomizedTuner.md))。下面使用了 NNI 内置的调参器: +**准备调参器**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(遗传算法)等等。 也可以实现自己的调参器(参考[这里](howto_2_CustomizedTuner.md))。下面使用了 NNI 内置的调参器: tuner: builtinTunerName: TPE @@ -49,7 +49,7 @@ *builtinTunerName* 用来指定 NNI 中的调参器,*classArgs* 是传入到调参器的参数,*optimization_mode* 表明需要最大化还是最小化尝试的结果。 -**准备配置文件**:编写好尝试的代码,并选择或编写好自己的调参器后,就要准备 yaml 配置文件了。 NNI 为每个尝试样例都提供了演示的配置文件,用命令`cat ~/nni/examples/trials/mnist-annotation/config.yml` 来查看其内容。 大致内容如下: +**准备配置文件**:实现尝试的代码,并选择或实现自定义的调参器后,就要准备 yaml 配置文件了。 NNI 为每个尝试样例都提供了演示的配置文件,用命令`cat ~/nni/examples/trials/mnist-annotation/config.yml` 来查看其内容。 大致内容如下: authorName: your_name experimentName: auto_mnist From e31eac8f93a4959ae7a1cd5b5c1001f9e8985da1 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:41:31 +0800 Subject: [PATCH 0168/1573] New translations howto_3_CustomizedAdvisor.md (Chinese Simplified) --- zh_CN/docs/howto_3_CustomizedAdvisor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/howto_3_CustomizedAdvisor.md b/zh_CN/docs/howto_3_CustomizedAdvisor.md index 21def539a7..96a2826f30 100644 --- a/zh_CN/docs/howto_3_CustomizedAdvisor.md +++ b/zh_CN/docs/howto_3_CustomizedAdvisor.md @@ -1,6 +1,6 @@ # **指南** - 自定义 advisor -*Advisor targets the scenario that the automl algorithm wants the methods of both tuner and assessor. Advisor is similar to tuner on that it receives trial configuration request, final results, and generate trial configurations. Also, it is similar to assessor on that it receives intermediate results, trial's end state, and could send trial kill command. Note that, if you use Advisor, tuner and assessor are not allowed to be used at the same time.* +*Advisor 用于同时需要调参器和评估器方法的自动机器学习算法。 Advisor 与调参器类似,它接收尝试的参数请求,最终结果,并生成尝试的参数。 另外,它也能像评估器一样接收中间结果,尝试的最终状态,并可以发送终止尝试的命令。 Note that, if you use Advisor, tuner and assessor are not allowed to be used at the same time.* So, if user want to implement a customized Advisor, she/he only need to: From c07492adbd4069f1ee4c5e2f6c14a06b9019e4df Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:51:49 +0800 Subject: [PATCH 0169/1573] New translations howto_3_CustomizedAdvisor.md (Chinese Simplified) --- zh_CN/docs/howto_3_CustomizedAdvisor.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/zh_CN/docs/howto_3_CustomizedAdvisor.md b/zh_CN/docs/howto_3_CustomizedAdvisor.md index 96a2826f30..16b649f030 100644 --- a/zh_CN/docs/howto_3_CustomizedAdvisor.md +++ b/zh_CN/docs/howto_3_CustomizedAdvisor.md @@ -1,14 +1,16 @@ # **指南** - 自定义 advisor -*Advisor 用于同时需要调参器和评估器方法的自动机器学习算法。 Advisor 与调参器类似,它接收尝试的参数请求,最终结果,并生成尝试的参数。 另外,它也能像评估器一样接收中间结果,尝试的最终状态,并可以发送终止尝试的命令。 Note that, if you use Advisor, tuner and assessor are not allowed to be used at the same time.* +*Advisor 用于同时需要调参器和评估器方法的自动机器学习算法。 Advisor 与调参器类似,它接收尝试的参数请求,最终结果,并生成尝试的参数。 另外,它也能像评估器一样接收中间结果,尝试的最终状态,并可以发送终止尝试的命令。 注意,在使用 Advisor 时,不能同时使用调参器和评估器。* -So, if user want to implement a customized Advisor, she/he only need to: +如果要自定义 Advisor,需要: -1) Define an Advisor inheriting from the MsgDispatcherBase class 2) Implement the methods with prefix `handle_` except `handle_request` 3) Configure your customized Advisor in experiment yaml config file +1. 从 MsgDispatcherBase 类继承并创建新的 Advisor 类 +2. 实现所有除了 `handle_request` 外的,以 `handle_` 前缀开始的方法 +3. 在实验的 yaml 文件中配置好自定义的 Advisor -Here ia an example: +样例如下: -**1) Define an Advisor inheriting from the MsgDispatcherBase class** +**1) 从 MsgDispatcherBase 类继承并创建新的 Advisor 类** ```python from nni.msg_dispatcher_base import MsgDispatcherBase @@ -18,11 +20,11 @@ class CustomizedAdvisor(MsgDispatcherBase): ... ``` -**2) Implement the methods with prefix `handle_` except `handle_request`** +**2) 实现所有除了 `handle_request` 外的,以 `handle_` 前缀开始的方法** -Please refer to the implementation of Hyperband ([src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py](../src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py)) for how to implement the methods. +参考 Hyperband 的实现 ([src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py](../../src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py)) 来学习如何实现这些方法。 -**3) Configure your customized Advisor in experiment yaml config file** +**3) 在实验的 yaml 文件中配置好自定义的 Advisor** Similar to tuner and assessor. NNI needs to locate your customized Advisor class and instantiate the class, so you need to specify the location of the customized Advisor class and pass literal values as parameters to the \_\_init__ constructor. From e8e3a876220edf25c9bfecd28f380631528f676b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 15:53:30 +0800 Subject: [PATCH 0170/1573] New translations howto_3_CustomizedAdvisor.md (Chinese Simplified) --- zh_CN/docs/howto_3_CustomizedAdvisor.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/howto_3_CustomizedAdvisor.md b/zh_CN/docs/howto_3_CustomizedAdvisor.md index 16b649f030..a3b5a9fa0b 100644 --- a/zh_CN/docs/howto_3_CustomizedAdvisor.md +++ b/zh_CN/docs/howto_3_CustomizedAdvisor.md @@ -26,15 +26,15 @@ class CustomizedAdvisor(MsgDispatcherBase): **3) 在实验的 yaml 文件中配置好自定义的 Advisor** -Similar to tuner and assessor. NNI needs to locate your customized Advisor class and instantiate the class, so you need to specify the location of the customized Advisor class and pass literal values as parameters to the \_\_init__ constructor. +与调参器和评估器类似。 NNI 需要定位到自定义的 Advisor 类,并实例化它,因此需要指定自定义 Advisor 类的文件位置,并将参数值传给 \_\_init__ 构造函数。 ```yaml advisor: codeDir: /home/abc/myadvisor classFileName: my_customized_advisor.py className: CustomizedAdvisor - # Any parameter need to pass to your advisor class __init__ constructor - # can be specified in this optional classArgs field, for example + # 任何传入 __init__ 构造函数的参数 + # 都需要声明在 classArgs 字段中,如: classArgs: arg1: value1 ``` \ No newline at end of file From b6d8ab81c652d24611d54e8e930a9f669c04e366 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 16:02:00 +0800 Subject: [PATCH 0171/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index ddfae2d979..eefdea0e09 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -1,18 +1,18 @@ -# How to use Tuner that NNI supports? +# 如何使用 NNI 支持的调参器? -For now, NNI has supported the following tuner algorithms. Note that NNI installation only installs a subset of those algorithms, other algorithms should be installed through `nnictl package install` before you use them. For example, for SMAC the installation command is `nnictl package install --name=SMAC`. +目前,NNI 已支持下列调参器算法。 注意,NNI 只安装了部分下列算法,其它算法在使用前需要通过 `nnictl package install` 命令安装。 例如,安装 SMAC 算法的命令为 `nnictl package install --name=SMAC`。 * [TPE](#TPE) -* [Random Search](#Random) -* [Anneal](#Anneal) -* [Naive Evolution](#Evolution) -* [SMAC](#SMAC) (to install through `nnictl`) +* [Random Search(随机搜索)](#Random) +* [Anneal(退火算法)](#Anneal) +* [Naive Evolution(遗传算法)](#Evolution) +* [SMAC](#SMAC) (需要通过 `nnictl` 命令安装) * [Batch Tuner](#Batch) -* [Grid Search](#Grid) +* [Grid Search(网格搜索)](#Grid) * [Hyperband](#Hyperband) -* [Network Morphism](#NetworkMorphism) (require pyTorch) +* [Network Morphism](#NetworkMorphism) (需要安装 pyTorch) - ## Supported tuner algorithms + ## 支持的调参器算法 We will introduce some basic knowledge about the tuner algorithms, suggested scenarios for each tuner, and their example usage (for complete usage spec, please refer to [here]()). From 03788a8d212484132dcbfc583610a5d728400128 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 16:21:49 +0800 Subject: [PATCH 0172/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index eefdea0e09..7658d69b02 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -14,29 +14,29 @@ ## 支持的调参器算法 -We will introduce some basic knowledge about the tuner algorithms, suggested scenarios for each tuner, and their example usage (for complete usage spec, please refer to [here]()). +这里将介绍这些调参器算法的基本知识,各个调参器建议使用的场景,以及使用样例(完整的使用样例参考 [这里]())。 **TPE** -The Tree-structured Parzen Estimator (TPE) is a sequential model-based optimization (SMBO) approach. SMBO methods sequentially construct models to approximate the performance of hyperparameters based on historical measurements, and then subsequently choose new hyperparameters to test based on this model. The TPE approach models P(x|y) and P(y) where x represents hyperparameters and y the associated evaluate matric. P(x|y) is modeled by transforming the generative process of hyperparameters, replacing the distributions of the configuration prior with non-parametric densities. This optimization approach is described in detail in [Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf). ​ -*Suggested scenario*: TPE, as a black-box optimization, can be used in various scenarios, and shows good performance in general. Especially when you have limited computation resource and can only try a small number of trials. From a large amount of experiments, we could found that TPE is far better than Random Search. +Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 TPE 方法对 P(x|y) 和 P(y) 建模,其中 x 表示超参,y 表示相关的评估指标。 P(x|y) 通过变换超参的生成过程来建模,用非参数密度(non-parametric densities)代替配置的先验分布。 细节可参考 [Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)。 ​ +*建议场景*: TPE 作为黑盒的优化方法,能在广泛的场景中使用,通常都能得到较好的结果。 特别是在计算资源有限,只能进行少量尝试时。 从大量的实验中,我们 发现 TPE 的性能远远优于随机搜索。 -*Usage*: +*用法*: ```yaml # config.yaml tuner: builtinTunerName: TPE classArgs: - # choice: maximize, minimize + # 可选项: maximize, minimize optimize_mode: maximize ``` -**Random Search** +**随机搜索** -In [Random Search for Hyper-Parameter Optimization](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) show that Random Search might be surprisingly simple and effective. We suggests that we could use Random Search as baseline when we have no knowledge about the prior distribution of hyper-parameters. +[Random Search for Hyper-Parameter Optimization](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) 中介绍了随机搜索惊人的简单和效果。 We suggests that we could use Random Search as baseline when we have no knowledge about the prior distribution of hyper-parameters. *Suggested scenario*: Random search is suggested when each trial does not take too long (e.g., each trial can be completed very soon, or early stopped by assessor quickly), and you have enough computation resource. Or you want to uniformly explore the search space. Random Search could be considered as baseline of search algorithm. From 4b74ea0c3c614838efab7cf266fe740feff2bdf9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 16:42:03 +0800 Subject: [PATCH 0173/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index 7658d69b02..366b87f952 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -20,9 +20,9 @@ **TPE** Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 TPE 方法对 P(x|y) 和 P(y) 建模,其中 x 表示超参,y 表示相关的评估指标。 P(x|y) 通过变换超参的生成过程来建模,用非参数密度(non-parametric densities)代替配置的先验分布。 细节可参考 [Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)。 ​ -*建议场景*: TPE 作为黑盒的优化方法,能在广泛的场景中使用,通常都能得到较好的结果。 特别是在计算资源有限,只能进行少量尝试时。 从大量的实验中,我们 发现 TPE 的性能远远优于随机搜索。 +*建议场景*: TPE 作为黑盒的优化方法,能在广泛的场景中使用,通常都能得到较好的结果。 特别是在计算资源有限,只能进行少量尝试时。 从大量的实验中,我们发现 TPE 的性能远远优于随机搜索。 -*用法*: +*用法*: ```yaml # config.yaml @@ -34,13 +34,13 @@ Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimiza ``` -**随机搜索** +**Random Search(随机搜索)** -[Random Search for Hyper-Parameter Optimization](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) 中介绍了随机搜索惊人的简单和效果。 We suggests that we could use Random Search as baseline when we have no knowledge about the prior distribution of hyper-parameters. +[Random Search for Hyper-Parameter Optimization](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) 中介绍了随机搜索惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 -*Suggested scenario*: Random search is suggested when each trial does not take too long (e.g., each trial can be completed very soon, or early stopped by assessor quickly), and you have enough computation resource. Or you want to uniformly explore the search space. Random Search could be considered as baseline of search algorithm. +*建议场景*:在每个尝试运行时间不长(例如,能够非常快的完成,或者很快的被评估器终止),并有充足计算资源的情况下。 或者需要均匀的探索搜索空间。 随机搜索可作为搜索算法的基准线。 -*Usage*: +*用法*: ```yaml # config.yaml @@ -49,25 +49,25 @@ Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimiza ``` -**Anneal** +**Anneal(退火算法)** -This simple annealing algorithm begins by sampling from the prior, but tends over time to sample from points closer and closer to the best ones observed. This algorithm is a simple variation on random search that leverages smoothness in the response surface. The annealing rate is not adaptive. +这种简单的退火算法从先前的采样开始,但随着时间的推理,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 -*Suggested scenario*: Anneal is suggested when each trial does not take too long, and you have enough computation resource(almost same with Random Search). Or the variables in search space could be sample from some prior distribution. +*建议场景*:当每个尝试的时间不长,并且有足够的计算资源时使用(与随机搜索基本相同)。 或者搜索空间的变量能从一些先验分布中采样。 -*Usage*: +*用法*: ```yaml # config.yaml tuner: builtinTunerName: Anneal classArgs: - # choice: maximize, minimize + # 可选项: maximize, minimize optimize_mode: maximize ``` -**Naive Evolution** +**Naive Evolution(遗传算法)** Naive Evolution comes from [Large-Scale Evolution of Image Classifiers](https://arxiv.org/pdf/1703.01041.pdf). It randomly initializes a population based on search space. For each generation, it chooses better ones and do some mutation (e.g., change a hyperparameter, add/remove one layer) on them to get the next generation. Naive Evolution requires many trials to works, but it's very simple and easily to expand new features. @@ -144,7 +144,7 @@ Note that the search space that BatchTuner supported like: The search space file including the high-level key `combine_params`. The type of params in search space must be `choice` and the `values` including all the combined-params value. -**Grid Search** +**Grid Search(网格搜索)** Grid Search performs an exhaustive searching through a manually specified subset of the hyperparameter space defined in the searchspace file. Note that the only acceptable types of search space are `choice`, `quniform`, `qloguniform`. **The number `q` in `quniform` and `qloguniform` has special meaning (different from the spec in [search space spec](./SearchSpaceSpec.md)). It means the number of values that will be sampled evenly from the range `low` and `high`.** From 5ba49268e7ceca18322603fd83d85977b20aa622 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 17:02:00 +0800 Subject: [PATCH 0174/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index eff3fd768a..d6644e03b0 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -40,7 +40,7 @@ 上面的命令会写在 yaml 文件中。 参考[这里](howto_1_WriteTrial.md)来写出自己的实验代码。 -**准备调参器**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(遗传算法)等等。 也可以实现自己的调参器(参考[这里](howto_2_CustomizedTuner.md))。下面使用了 NNI 内置的调参器: +**准备调参器**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(进化算法)等等。 也可以实现自己的调参器(参考[这里](howto_2_CustomizedTuner.md))。下面使用了 NNI 内置的调参器: tuner: builtinTunerName: TPE From f90dd34d4a9480db4743ec09a146e1beaa81151a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 17:02:02 +0800 Subject: [PATCH 0175/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index 366b87f952..fc39ebfeeb 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -5,7 +5,7 @@ * [TPE](#TPE) * [Random Search(随机搜索)](#Random) * [Anneal(退火算法)](#Anneal) -* [Naive Evolution(遗传算法)](#Evolution) +* [Naive Evolution(进化算法)](#Evolution) * [SMAC](#SMAC) (需要通过 `nnictl` 命令安装) * [Batch Tuner](#Batch) * [Grid Search(网格搜索)](#Grid) @@ -51,7 +51,7 @@ Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimiza **Anneal(退火算法)** -这种简单的退火算法从先前的采样开始,但随着时间的推理,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 +这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 *建议场景*:当每个尝试的时间不长,并且有足够的计算资源时使用(与随机搜索基本相同)。 或者搜索空间的变量能从一些先验分布中采样。 @@ -67,11 +67,11 @@ Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimiza ``` -**Naive Evolution(遗传算法)** +**Naive Evolution(进化算法)** -Naive Evolution comes from [Large-Scale Evolution of Image Classifiers](https://arxiv.org/pdf/1703.01041.pdf). It randomly initializes a population based on search space. For each generation, it chooses better ones and do some mutation (e.g., change a hyperparameter, add/remove one layer) on them to get the next generation. Naive Evolution requires many trials to works, but it's very simple and easily to expand new features. +进化算法来自于 [Large-Scale Evolution of Image Classifiers](https://arxiv.org/pdf/1703.01041.pdf)。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次尝试才能有效,但它也非常简单,也很容易扩展新功能。 -*Suggested scenario*: Its requirement of computation resource is relatively high. Specifically, it requires large inital population to avoid falling into local optimum. If your trial is short or leverages assessor, this tuner is a good choice. And, it is more suggested when your trial code supports weight transfer, that is, the trial could inherit the converged weights from its parent(s). This can greatly speed up the training progress. +*建议场景*:它需要相对较多的计算资源。 需要非常大的初始种群,以免落入局部最优中。 如果尝试时间很短,或者利用了评估器,这个调参器就非常合适。 And, it is more suggested when your trial code supports weight transfer, that is, the trial could inherit the converged weights from its parent(s). This can greatly speed up the training progress. *Usage*: From 321db39d3b75ec026b26efe3b02bf7337ed1bd43 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Fri, 4 Jan 2019 17:02:03 +0800 Subject: [PATCH 0176/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index d16a94eae4..76c225621a 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -122,7 +122,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 * [使用不同的调参器和评估器](docs/tutorial_3_tryTunersAndAssessors.md) * [实现自定义调参器](docs/howto_2_CustomizedTuner.md) * [实现自定义评估器](examples/assessors/README.md) -* [使用遗传算法为阅读理解任务找到好模型](examples/trials/ga_squad/README.md) +* [使用进化算法为阅读理解任务找到好模型](examples/trials/ga_squad/README.md) ## **贡献** From 19a1fbcc94aabb749ec2976fa0120698ede813b0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sun, 6 Jan 2019 13:31:33 +0800 Subject: [PATCH 0177/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index fc39ebfeeb..4ab7330f87 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -71,27 +71,27 @@ Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimiza 进化算法来自于 [Large-Scale Evolution of Image Classifiers](https://arxiv.org/pdf/1703.01041.pdf)。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次尝试才能有效,但它也非常简单,也很容易扩展新功能。 -*建议场景*:它需要相对较多的计算资源。 需要非常大的初始种群,以免落入局部最优中。 如果尝试时间很短,或者利用了评估器,这个调参器就非常合适。 And, it is more suggested when your trial code supports weight transfer, that is, the trial could inherit the converged weights from its parent(s). This can greatly speed up the training progress. +*建议场景*:它需要相对较多的计算资源。 需要非常大的初始种群,以免落入局部最优中。 如果尝试时间很短,或者利用了评估器,这个调参器就非常合适。 如果尝试代码支持权重迁移,即每次尝试会从上一轮继承已经收敛的权重,建议使用此算法。 这会大大提高训练速度。 -*Usage*: +*用法*: ```yaml # config.yaml tuner: builtinTunerName: Evolution classArgs: - # choice: maximize, minimize + # 可选项: maximize, minimize optimize_mode: maximize ``` **SMAC** -[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, in order to handle categorical parameters. The SMAC supported by nni is a wrapper on [the SMAC3 github repo](https://github.com/automl/SMAC3). +[SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) 基于 Sequential Model-Based Optimization (SMBO). 它会利用使用过的突出的模型(高斯随机过程模型),并将随机森林引入到SMBO中,来处理分类参数。 NNI 的 SMAC 通过包装 [SMAC3](https://github.com/automl/SMAC3) 来支持。 -Note that SMAC on nni only supports a subset of the types in [search space spec](./SearchSpaceSpec.md), including `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`. +NNI 中的 SMAC 只支持部分类型的[搜索空间](./SearchSpaceSpec.md),包括`choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`。 -*Installation*: +*安装*: * Install swig first. (`sudo apt-get install swig` for Ubuntu users) * Run `nnictl package install --name=SMAC` From 19fe35943b70714f6fa1e980b8ed303c94c57f14 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sun, 6 Jan 2019 13:41:38 +0800 Subject: [PATCH 0178/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index 4ab7330f87..07d112c124 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -93,30 +93,30 @@ NNI 中的 SMAC 只支持部分类型的[搜索空间](./SearchSpaceSpec.md), *安装*: -* Install swig first. (`sudo apt-get install swig` for Ubuntu users) -* Run `nnictl package install --name=SMAC` +* 安装 swig。 (Ubuntu 下使用 `sudo apt-get install swig`) +* 运行 `nnictl package install --name=SMAC` -*Suggested scenario*: Similar to TPE, SMAC is also a black-box tuner which can be tried in various scenarios, and is suggested when computation resource is limited. It is optimized for discrete hyperparameters, thus, suggested when most of your hyperparameters are discrete. +*建议场景*:与 TPE 类似,SMAC 也是一个可以被用在各种场景中的黑盒调参器。在计算资源有限时,也可以使用。 此算法为离散超参而优化,因此,如果大部分超参是离散值时,建议使用此算法。 -*Usage*: +*用法*: ```yaml # config.yaml tuner: builtinTunerName: SMAC classArgs: - # choice: maximize, minimize + # 可选项: maximize, minimize optimize_mode: maximize ``` **Batch tuner** -Batch tuner allows users to simply provide several configurations (i.e., choices of hyper-parameters) for their trial code. After finishing all the configurations, the experiment is done. Batch tuner only supports the type `choice` in [search space spec](./SearchSpaceSpec.md). +Batch tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都完成后,实验即结束。 Batch tuner 的[搜索空间](./SearchSpaceSpec.md)只支持 `choice`。 -*Suggested sceanrio*: If the configurations you want to try have been decided, you can list them in searchspace file (using `choice`) and run them using batch tuner. +*建议场景*:如果需要实验的配置已经决定好了,可通过 batch tuner 将它们列到搜索空间中运行即可。 -*Usage*: +*用法*: ```yaml # config.yaml @@ -124,7 +124,7 @@ Batch tuner allows users to simply provide several configurations (i.e., choices builtinTunerName: BatchTuner ``` -Note that the search space that BatchTuner supported like: +注意 BatchTuner 支持的搜索空间文件如下例: ```json { @@ -141,12 +141,12 @@ Note that the search space that BatchTuner supported like: } ``` -The search space file including the high-level key `combine_params`. The type of params in search space must be `choice` and the `values` including all the combined-params value. +搜索空间文件使用了键 `combine_params`。 参数类型必须是 `choice` ,并且 `values` 要包含所有需要实验的参数组合。 **Grid Search(网格搜索)** -Grid Search performs an exhaustive searching through a manually specified subset of the hyperparameter space defined in the searchspace file. Note that the only acceptable types of search space are `choice`, `quniform`, `qloguniform`. **The number `q` in `quniform` and `qloguniform` has special meaning (different from the spec in [search space spec](./SearchSpaceSpec.md)). It means the number of values that will be sampled evenly from the range `low` and `high`.** +网格搜索会穷举定义在搜索空间文件中的所有超参组合。 Note that the only acceptable types of search space are `choice`, `quniform`, `qloguniform`. **The number `q` in `quniform` and `qloguniform` has special meaning (different from the spec in [search space spec](./SearchSpaceSpec.md)). It means the number of values that will be sampled evenly from the range `low` and `high`.** *Suggested scenario*: It is suggested when search space is small, it is feasible to exhaustively sweeping the whole search space. From 095d97d5b14223fd19cb2db00e44f59812a668af Mon Sep 17 00:00:00 2001 From: Chi Song Date: Sun, 6 Jan 2019 13:51:40 +0800 Subject: [PATCH 0179/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index 07d112c124..3e9eb3130a 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -146,11 +146,11 @@ Batch tuner 能让用户简单的提供几组配置(如,超参选项的组 **Grid Search(网格搜索)** -网格搜索会穷举定义在搜索空间文件中的所有超参组合。 Note that the only acceptable types of search space are `choice`, `quniform`, `qloguniform`. **The number `q` in `quniform` and `qloguniform` has special meaning (different from the spec in [search space spec](./SearchSpaceSpec.md)). It means the number of values that will be sampled evenly from the range `low` and `high`.** +网格搜索会穷举定义在搜索空间文件中的所有超参组合。 注意,搜索空间仅支持 `choice`, `quniform`, `qloguniform`。 `quniform` 和 `qloguniform` 中的 **数字 `q` 有不同的含义(与[搜索空间](./SearchSpaceSpec.md)说明不同)。 在这里意味着会在 `low` 和 `high` 之间均匀取值的数量。

-*Suggested scenario*: It is suggested when search space is small, it is feasible to exhaustively sweeping the whole search space. +*建议场景*:当搜索空间比较小,能够遍历整个搜索空间。 -*Usage*: +*用法*: ```yaml # config.yaml From 755321c3c08ef2825a50744dd54df77995b19160 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 09:21:25 +0800 Subject: [PATCH 0180/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index 3e9eb3130a..b9fe21447c 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -161,7 +161,7 @@ Batch tuner 能让用户简单的提供几组配置(如,超参选项的组 **Hyperband** -[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) tries to use limited resource to explore as many configurations as possible, and finds out the promising ones to get the final result. The basic idea is generating many configurations and to run them for small number of STEPs to find out promising one, then further training those promising ones to select several more promising one. More detail can be referred to [here](../src/sdk/pynni/nni/hyperband_advisor/README.md). +[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) 尝试用有限的资源来探索尽量多的组合,从最有可能的组合中找到最好结果。 The basic idea is generating many configurations and to run them for small number of STEPs to find out promising one, then further training those promising ones to select several more promising one. More detail can be referred to [here](../src/sdk/pynni/nni/hyperband_advisor/README.md). *Suggested scenario*: It is suggested when you have limited computation resource but have relatively large search space. It performs good in the scenario that intermediate result (e.g., accuracy) can reflect good or bad of final result (e.g., accuracy) to some extent. From 2f1f9d9dc1ffd6913c289a1a72fa00da2377cc7e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 09:31:27 +0800 Subject: [PATCH 0181/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index b9fe21447c..e11dcee5d8 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -161,21 +161,20 @@ Batch tuner 能让用户简单的提供几组配置(如,超参选项的组 **Hyperband** -[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) 尝试用有限的资源来探索尽量多的组合,从最有可能的组合中找到最好结果。 The basic idea is generating many configurations and to run them for small number of STEPs to find out promising one, then further training those promising ones to select several more promising one. More detail can be referred to [here](../src/sdk/pynni/nni/hyperband_advisor/README.md). +[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) 尝试用有限的资源来探索尽量多的组合,从最有可能的组合中找到最好结果。 它的基本思路是生成大量的配置,并运行少量的步骤来找到有可能好的配置,然后继续训练找到其中更好的配置。 参考 [这里](../src/sdk/pynni/nni/hyperband_advisor/README.md),了解更多信息。 -*Suggested scenario*: It is suggested when you have limited computation resource but have relatively large search space. It performs good in the scenario that intermediate result (e.g., accuracy) can reflect good or bad of final result (e.g., accuracy) to some extent. +*建议场景*:当搜索空间很大,但计算资源有限时建议使用。 中间结果能够很好的反映最终结果的情况下,此算法会非常有效。 -*Usage*: +*用法*: ```yaml # config.yaml advisor: builtinAdvisorName: Hyperband classArgs: - # choice: maximize, minimize + # 可选项: maximize, minimize optimize_mode: maximize - # R: the maximum STEPS (could be the number of mini-batches or epochs) can be - # allocated to a trial. Each trial should use STEPS to control how long it runs. + # R: 可分配给尝试的最大的 STEPS(可以是小批量或 epoch 的数量)。 每个尝试都需要用 STEPS 来控制运行的时间。 R: 60 # eta: proportion of discarded trials eta: 3 From 6d3f85b19ddb2768fb15f3e03de448451e533728 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 09:41:45 +0800 Subject: [PATCH 0182/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index e11dcee5d8..ce86508bfb 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -7,7 +7,7 @@ * [Anneal(退火算法)](#Anneal) * [Naive Evolution(进化算法)](#Evolution) * [SMAC](#SMAC) (需要通过 `nnictl` 命令安装) -* [Batch Tuner](#Batch) +* [Batch Tuner(批量调参器)](#Batch) * [Grid Search(网格搜索)](#Grid) * [Hyperband](#Hyperband) * [Network Morphism](#NetworkMorphism) (需要安装 pyTorch) @@ -110,11 +110,11 @@ NNI 中的 SMAC 只支持部分类型的[搜索空间](./SearchSpaceSpec.md), ``` -**Batch tuner** +**Batch tuner(批量调参器)** -Batch tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都完成后,实验即结束。 Batch tuner 的[搜索空间](./SearchSpaceSpec.md)只支持 `choice`。 +批量调参器能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都完成后,实验即结束。 批量调参器 的[搜索空间](./SearchSpaceSpec.md)只支持 `choice`。 -*建议场景*:如果需要实验的配置已经决定好了,可通过 batch tuner 将它们列到搜索空间中运行即可。 +*建议场景*:如果需要实验的配置已经决定好了,可通过批量调参器将它们列到搜索空间中运行即可。 *用法*: @@ -124,7 +124,7 @@ Batch tuner 能让用户简单的提供几组配置(如,超参选项的组 builtinTunerName: BatchTuner ``` -注意 BatchTuner 支持的搜索空间文件如下例: +注意批量调参器支持的搜索空间文件如下例: ```json { @@ -176,41 +176,41 @@ Batch tuner 能让用户简单的提供几组配置(如,超参选项的组 optimize_mode: maximize # R: 可分配给尝试的最大的 STEPS(可以是小批量或 epoch 的数量)。 每个尝试都需要用 STEPS 来控制运行的时间。 R: 60 - # eta: proportion of discarded trials + # eta: 丢弃的尝试的比例 eta: 3 ``` **Network Morphism** -[Network Morphism](7) provides functions to automatically search for architecture of deep learning models. Every child network inherits the knowledge from its parent network and morphs into diverse types of networks, including changes of depth, width and skip-connection. Next, it estimates the value of child network using the history architecture and metric pairs. Then it selects the most promising one to train. More detail can be referred to [here](../src/sdk/pynni/nni/networkmorphism_tuner/README.md). +[Network Morphism](7) 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跳层连接(skip-connection)。 接着,使用历史的架构和指标,来估计子网络的值。 然后会选择最有希望的模型进行训练。 参考[这里](../src/sdk/pynni/nni/networkmorphism_tuner/README.md),了解更多信息。 -*Installation*: NetworkMorphism requires [pyTorch](https://pytorch.org/get-started/locally), so users should install it first. +*安装*: NetworkMorphism 需要 [pyTorch](https://pytorch.org/get-started/locally),必须提前安装它。 -*Suggested scenario*: It is suggested that you want to apply deep learning methods to your task (your own dataset) but you have no idea of how to choose or design a network. You modify the [example](../examples/trials/network_morphism/cifar10/cifar10_keras.py) to fit your own dataset and your own data augmentation method. Also you can change the batch size, learning rate or optimizer. It is feasible for different tasks to find a good network architecture. Now this tuner only supports the cv domain. +*建议场景*:需要将深度学习方法应用到自己的任务(自己的数据集)上,但不清楚该如何选择或设计网络。 可修改[样例](../examples/trials/network_morphism/cifar10/cifar10_keras.py)来适配自己的数据集和数据增强方法。 也可以修改批处理大小,学习率或优化器。 它可以为不同的任务找到好的网络架构。 当前,此调参器仅支持视觉领域。 -*Usage*: +*用法*: ```yaml # config.yaml tuner: builtinTunerName: NetworkMorphism classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize - #for now, this tuner only supports cv domain + #当前,仅支持 cv(视觉)领域 task: cv - #input image width + #输入图像宽度 input_width: 32 - #input image channel + #输入图像通道数量 input_channel: 3 - #number of classes + #分类的数量 n_output_node: 10 ``` -# How to use Assessor that NNI supports? +# 如何使用 NNI 支持的评估器? -For now, NNI has supported the following assessor algorithms. +目前,NNI 已支持下列评估器算法。 * [Medianstop](#Medianstop) * [Curvefitting](#Curvefitting) From 4844fa0c30fd5fa4c0a7495076965adf6788171e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 09:55:24 +0800 Subject: [PATCH 0183/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index ce86508bfb..299349b430 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -212,37 +212,35 @@ NNI 中的 SMAC 只支持部分类型的[搜索空间](./SearchSpaceSpec.md), 目前,NNI 已支持下列评估器算法。 -* [Medianstop](#Medianstop) -* [Curvefitting](#Curvefitting) +* [Medianstop(中位数终止)](#Medianstop) +* [Curvefitting(曲线拟合)](#Curvefitting) -## Supported Assessor Algorithms +## 支持的评估器算法 -**Medianstop** +**Medianstop(中位数终止)** -Medianstop is a simple early stopping rule mentioned in the [paper](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf). It stops a pending trial X at step S if the trial’s best objective value by step S is strictly worse than the median value of the running averages of all completed trials’ objectives reported up to step S. +Medianstop 是一种简单的提前停止规则,可参考[论文](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf)。 如果尝试 X 的在步骤 S 的最好目标值比所有已完成尝试的步骤 S 的中位数值明显低,就会停止运行尝试 X。 -*Suggested scenario*: It is applicable in a wide range of performance curves, thus, can be used in various scenarios to speed up the tuning progress. +*建议场景*:它适用于各种性能曲线,因而能被用到各种场景中来加速优化过程。 -*Usage*: +*用法*: ```yaml assessor: builtinAssessorName: Medianstop classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize - # (optional) A trial is determined to be stopped or not, - - * only after receiving start_step number of reported intermediate results. - * The default value of start_step is 0. + # (可选) 尽在接收到 start_step 数量个中间结果后,才判断尝试是否需要停止。 + # start_step 的默认值是 0。 start_step: 5 ``` -**Curvefitting** +**Curvefitting(曲线拟合)** -Curve Fitting Assessor is a LPA(learning, predicting, assessing) algorithm. It stops a pending trial X at step S if the prediction of final epoch's performance worse than the best final performance in the trial history. In this algorithm, we use 12 curves to fit the accuracy curve, the large set of parametric curve models are chosen from [reference paper](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf). The learning curves' shape coincides with our prior knowlwdge about the form of learning curves: They are typically increasing, saturating functions. +Curve Fitting 评估器是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的尝试 X 在 step S 比性能最好的尝试要差,就会提前终止它。 此算法中,使用了 12 条曲线来拟合精度曲线,从[参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf)中选择了大量的参数曲线模型。 The learning curves' shape coincides with our prior knowlwdge about the form of learning curves: They are typically increasing, saturating functions. *Suggested scenario*: It is applicable in a wide range of performance curves, thus, can be used in various scenarios to speed up the tuning progress. Even better, it's able to handle and assess curves with similar performance. From 4892ccd8e9b09b6bd53e353ef6c1d0b791624b23 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:11:28 +0800 Subject: [PATCH 0184/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index 299349b430..eda6fac4e3 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -240,31 +240,31 @@ Medianstop 是一种简单的提前停止规则,可参考[论文](https://stat **Curvefitting(曲线拟合)** -Curve Fitting 评估器是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的尝试 X 在 step S 比性能最好的尝试要差,就会提前终止它。 此算法中,使用了 12 条曲线来拟合精度曲线,从[参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf)中选择了大量的参数曲线模型。 The learning curves' shape coincides with our prior knowlwdge about the form of learning curves: They are typically increasing, saturating functions. +Curve Fitting 评估器是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的尝试 X 在 step S 比性能最好的尝试要差,就会提前终止它。 此算法中,使用了 12 条曲线来拟合精度曲线,从[参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf)中选择了大量的参数曲线模型。 学习曲线的形状与先验知识是一致的:都是典型的递增的、饱和的函数。 -*Suggested scenario*: It is applicable in a wide range of performance curves, thus, can be used in various scenarios to speed up the tuning progress. Even better, it's able to handle and assess curves with similar performance. +*建议场景*:它适用于各种性能曲线,因而能被用到各种场景中来加速优化过程。 更好的是,它能够处理并评估性能类似的曲线。 -*Usage*: +*用法*: ```yaml assessor: builtinAssessorName: Curvefitting classArgs: - # (required)The total number of epoch. - # We need to know the number of epoch to determine which point we need to predict. + # (必须) epoch 的总数。 + # 需要此数据来决定需要预测的点。 epoch_num: 20 - # (optional) choice: maximize, minimize - # Kindly reminds that if you choose minimize mode, please adjust the value of threshold >= 1.0 (e.g threshold=1.1) + # (可选项) choice: maximize, minimize + # 如果选择了 minimize 模式,需要调整阈值为 >= 1.0 (例如:threshold=1.1) - * The default value of optimize_mode is maximize + * optimize_mode 的默认值是 maximize optimize_mode: maximize - # (optional) A trial is determined to be stopped or not - # In order to save our computing resource, we start to predict when we have more than start_step(default=6) accuracy points. - # only after receiving start_step number of reported intermediate results. - * The default value of start_step is 6. + # (可选项) 决定尝试是否应被停止的次数 + # 为了节省资源,只有在大于 start_step(default=6) 的精度点才开始预测。 + # 只有在收到 start_step 个中间结果之后。 + # start_step 的默认值是 6。 start_step: 6 - # (optional) The threshold that we decide to early stop the worse performance curve. - # For example: if threshold = 0.95, optimize_mode = maximize, best performance in the history is 0.9, then we will stop the trial which predict value is lower than 0.95 * 0.9 = 0.855. - * The default value of threshold is 0.95. + # (可选) 决定是否提前终止的阈值。 + # 例如,如果 threshold = 0.95, optimize_mode = maximize,最好的历史结果是 0.9,那么会在尝试的预测值低于 0.95 * 0.9 = 0.855 时停止。 + * 阈值的默认值是 0.95。 threshold: 0.95 ``` \ No newline at end of file From ce0a64ff8691395de55e452560442590ebf03d6a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:21:40 +0800 Subject: [PATCH 0185/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 0662dc1621..6fe3e73cb5 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -1,11 +1,11 @@ -# **Run an Experiment on Kubeflow** +# **在 Kubeflow 上运行实验。** -Now NNI supports running experiment on [Kubeflow](https://github.com/kubeflow/kubeflow), called kubeflow mode. Before starting to use NNI kubeflow mode, you should have a kubernetes cluster, either on-prem or [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/), a Ubuntu machine on which [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) is setup to connect to your kubernetes cluster. If you are not familiar with kubernetes, [here](https://kubernetes.io/docs/tutorials/kubernetes-basics/) is a goot start. In kubeflow mode, your trial program will run as kubeflow job in kubernetes cluster. +NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 kubeflow 模式。 在开始使用 NNI 的 kubeflow 模式前,需要现有一个 kubernetes 集群,可以是私有部署的,或者是 [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/),并且需要一台配置好 [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 的 Ubuntu 计算机连接到此 kubernetes 集群。 如果不熟悉 kubernetes,可以先浏览[这里](https://kubernetes.io/docs/tutorials/kubernetes-basics/)。 在 kubeflow 模式下,每个尝试程序会在 kubernetes 集群中作为一个 kubeflow 作业来运行。 -## Prerequisite for on-premises Kubernetes Service +## 私有部署的 Kubernetes 的先决条件 -1. A **Kubernetes** cluster using Kubernetes 1.8 or later. Follow this [guideline](https://kubernetes.io/docs/setup/) to set up Kubernetes -2. Download, set up, and deploy **Kubelow** to your Kubernetes cluster. Follow this [guideline](https://www.kubeflow.org/docs/started/getting-started/) to set up Kubeflow +1. 采用 Kubernetes 1.8 或更高版本。 根据[指南](https://kubernetes.io/docs/setup/)来安装 Kubernetes。 +2. 在 Kubernetes 集群中下载、安装、部署 **Kubelow**。 根据[指南](https://www.kubeflow.org/docs/started/getting-started/)安装 Kubeflow。 3. Prepare a **kubeconfig** file, which will be used by NNI to interact with your kubernetes API server. By default, NNI manager will use $(HOME)/.kube/config as kubeconfig file's path. You can also specify other kubeconfig files by setting the **KUBECONFIG** environment variable. Refer this [guideline](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig) to learn more about kubeconfig. 4. If your NNI trial job needs GPU resource, you should follow this [guideline](https://github.com/NVIDIA/k8s-device-plugin) to configure **Nvidia device plugin for Kubernetes**. 5. Prepare a **NFS server** and export a general purpose mount (we recommend to map your NFS server path in `root_squash option`, otherwise permission issue may raise when nni copy files to NFS. Refer this [page](https://linux.die.net/man/5/exports) to learn what root_squash option is), or **Azure File Storage**. From 841ad3a7ea93df2e8f6b23742d2e6e3631af11c0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:27:50 +0800 Subject: [PATCH 0186/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 6fe3e73cb5..e4e7f5a5e3 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -6,10 +6,10 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 1. 采用 Kubernetes 1.8 或更高版本。 根据[指南](https://kubernetes.io/docs/setup/)来安装 Kubernetes。 2. 在 Kubernetes 集群中下载、安装、部署 **Kubelow**。 根据[指南](https://www.kubeflow.org/docs/started/getting-started/)安装 Kubeflow。 -3. Prepare a **kubeconfig** file, which will be used by NNI to interact with your kubernetes API server. By default, NNI manager will use $(HOME)/.kube/config as kubeconfig file's path. You can also specify other kubeconfig files by setting the **KUBECONFIG** environment variable. Refer this [guideline](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig) to learn more about kubeconfig. -4. If your NNI trial job needs GPU resource, you should follow this [guideline](https://github.com/NVIDIA/k8s-device-plugin) to configure **Nvidia device plugin for Kubernetes**. -5. Prepare a **NFS server** and export a general purpose mount (we recommend to map your NFS server path in `root_squash option`, otherwise permission issue may raise when nni copy files to NFS. Refer this [page](https://linux.die.net/man/5/exports) to learn what root_squash option is), or **Azure File Storage**. -6. Install **NFS client** on the machine where you install NNI and run nnictl to create experiment. Run this command to install NFSv4 client: +3. 配置 **kubeconfig** 文件,NNI 将使用此配置与 Kubernetes API 服务交互。 默认情况下,NNI 管理器会使用 $(HOME)/.kube/config 作为 kubeconfig 文件的路径。 也可以通过环境变量 **KUBECONFIG** 来指定其它 kubeconfig 文件。 根据[指南](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig)了解更多 kubeconfig 的信息。 +4. 如果 NNI 尝试作业需要 GPU 资源,需按照[指南](https://github.com/NVIDIA/k8s-device-plugin)来配置 **Kubernetes 下的 Nvidia 插件**。 +5. 准备 **NFS 服务器** 并导出通用的装载 (mount),推荐将 NFS 服务器路径映射到 `root_squash 选项`,否则可能会在 NNI 复制文件到 NFS 时出现权限问题。 参考[页面](https://linux.die.net/man/5/exports),来了解关于 root_squash 选项,或 **Azure File Storage**。 +6. 在安装 NNI 并运行 nnictl 的计算机上安装 **NFS 客户端**。 运行此命令安装 NFSv4 客户端: apt-get install nfs-common @@ -26,7 +26,7 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 ## Design -![](./img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. +![](../img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. For each trial, we will upload all the files in your local codeDir path (configured in nni_config.yaml) together with NNI generated files like parameter.cfg into a storage volumn. Right now we support two kinds of storage volumns: [nfs](https://en.wikipedia.org/wiki/Network_File_System) and [azure file storage](https://azure.microsoft.com/en-us/services/storage/files/), you should configure the storage volumn in nni config yaml file. After files are prepared, Kubeflow training service will call K8S rest API to create kubeflow jobs ([tf-operator](https://github.com/kubeflow/tf-operator) job or [pytorch-operator](https://github.com/kubeflow/pytorch-operator) job) in K8S, and mount your storage volumn into the job's pod. Output files of kubeflow job, like stdout, stderr, trial.log or model files, will also be copied back to the storage volumn. NNI will show the storage volumn's URL for each trial in WebUI, to allow user browse the log files and job's output files. From 833d2f64aa1e89f6a72b940e72c41d293cc6368d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:29:37 +0800 Subject: [PATCH 0187/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index e4e7f5a5e3..0021cfaf69 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -24,9 +24,9 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 4. Follow the [guideline](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal) to create azure file storage account. If you use Azure Kubernetes Service, nni need Azure Storage Service to store code files and the output files. 5. To access Azure storage service, nni need the access key of the storage account, and nni use [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) Service to protect your private key. Set up Azure Key Vault Service, add a secret to Key Vault to store the access key of Azure storage account. Follow this [guideline](https://docs.microsoft.com/en-us/azure/key-vault/quick-create-cli) to store the access key. -## Design +## 设计 -![](../img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. +![](../docs/img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. For each trial, we will upload all the files in your local codeDir path (configured in nni_config.yaml) together with NNI generated files like parameter.cfg into a storage volumn. Right now we support two kinds of storage volumns: [nfs](https://en.wikipedia.org/wiki/Network_File_System) and [azure file storage](https://azure.microsoft.com/en-us/services/storage/files/), you should configure the storage volumn in nni config yaml file. After files are prepared, Kubeflow training service will call K8S rest API to create kubeflow jobs ([tf-operator](https://github.com/kubeflow/tf-operator) job or [pytorch-operator](https://github.com/kubeflow/pytorch-operator) job) in K8S, and mount your storage volumn into the job's pod. Output files of kubeflow job, like stdout, stderr, trial.log or model files, will also be copied back to the storage volumn. NNI will show the storage volumn's URL for each trial in WebUI, to allow user browse the log files and job's output files. From e5651a0f22daf36d2f656fad49df09dc52cb493c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:31:30 +0800 Subject: [PATCH 0188/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 0021cfaf69..37251bb3c1 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -2,7 +2,7 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 kubeflow 模式。 在开始使用 NNI 的 kubeflow 模式前,需要现有一个 kubernetes 集群,可以是私有部署的,或者是 [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/),并且需要一台配置好 [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 的 Ubuntu 计算机连接到此 kubernetes 集群。 如果不熟悉 kubernetes,可以先浏览[这里](https://kubernetes.io/docs/tutorials/kubernetes-basics/)。 在 kubeflow 模式下,每个尝试程序会在 kubernetes 集群中作为一个 kubeflow 作业来运行。 -## 私有部署的 Kubernetes 的先决条件 +## 私有部署的 Kubernetes 的准备工作 1. 采用 Kubernetes 1.8 或更高版本。 根据[指南](https://kubernetes.io/docs/setup/)来安装 Kubernetes。 2. 在 Kubernetes 集群中下载、安装、部署 **Kubelow**。 根据[指南](https://www.kubeflow.org/docs/started/getting-started/)安装 Kubeflow。 @@ -14,9 +14,9 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 apt-get install nfs-common -7. Install **NNI**, follow the install guide [here](GetStarted.md). +7. 参考[指南](GetStarted.md)安装 **NNI**。 -## Prerequisite for Azure Kubernetes Service +## Azure 部署的 Kubernetes 的准备工作 1. NNI support kubeflow based on Azure Kubernetes Service, follow the [guideline](https://azure.microsoft.com/en-us/services/kubernetes-service/) to set up Azure Kubernetes Service. 2. Install [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) and **kubectl**. Use `az login` to set azure account, and connect kubectl client to AKS, refer this [guideline](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster). From 4c47bb18eae4e6c1574f9a0307f7165cb30e5a68 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:41:42 +0800 Subject: [PATCH 0189/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 37251bb3c1..ad2f978cd9 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -26,7 +26,7 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 ## 设计 -![](../docs/img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. +![](../../docs/img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. For each trial, we will upload all the files in your local codeDir path (configured in nni_config.yaml) together with NNI generated files like parameter.cfg into a storage volumn. Right now we support two kinds of storage volumns: [nfs](https://en.wikipedia.org/wiki/Network_File_System) and [azure file storage](https://azure.microsoft.com/en-us/services/storage/files/), you should configure the storage volumn in nni config yaml file. After files are prepared, Kubeflow training service will call K8S rest API to create kubeflow jobs ([tf-operator](https://github.com/kubeflow/tf-operator) job or [pytorch-operator](https://github.com/kubeflow/pytorch-operator) job) in K8S, and mount your storage volumn into the job's pod. Output files of kubeflow job, like stdout, stderr, trial.log or model files, will also be copied back to the storage volumn. NNI will show the storage volumn's URL for each trial in WebUI, to allow user browse the log files and job's output files. From 605f47bdde6b45b1c6c5cfac9c1f29ada545b774 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:52:47 +0800 Subject: [PATCH 0190/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 98 ++++++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index 76c225621a..2bc19c28ca 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -19,24 +19,32 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 * 定制自动机器学习算法,或比较不同的自动机器学习算法。 * 在自己的机器学习平台中支持自动机器学习。 -## **安装和验证** +## Related Projects -**通过 pip 命令安装** +Targeting at openness and advancing state-of-art technology, [Microsoft Research (MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/) had also released few other open source projects. -* 当前支持 Linux 和 MacOS。测试并支持的版本包括:Ubuntu 16.04 及更高版本,MacOS 10.14.1。 在 `python >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。. +* [OpenPAI](https://github.com/Microsoft/pai) : an open source platform that provides complete AI model training and resource management capabilities, it is easy to extend and supports on-premise, cloud and hybrid environments in various scale. +* [FrameworkController](https://github.com/Microsoft/frameworkcontroller) : an open source general-purpose Kubernetes Pod Controller that orchestrate all kinds of applications on Kubernetes by a single controller. +* [MMdnn](https://github.com/Microsoft/MMdnn) : A comprehensive, cross-framework solution to convert, visualize and diagnose deep neural network models. The "MM" in MMdnn stands for model management and "dnn" is an acronym for deep neural network. We encourage researchers and students leverage these projects to accelerate the AI development and research. + +## **Install & Verify** + +**Install through pip** + +* We support Linux and MacOS in current stage, Ubuntu 16.04 or higher, along with MacOS 10.14.1 are tested and supported. Simply run the following `pip install` in an environment that has `python >= 3.5`. ```bash - python3 -m pip install --user --upgrade nni + python3 -m pip install --upgrade nni ``` -* 注意: - * 如果在 docker 容器中以 root 运行,需要从上述安装命令中删除 `--user`。 - * 如果遇到如`Segmentation fault` 这样的任何错误请参考 [常见问题](docs/FAQ.md)。 +* Note: + * If you are in docker container (as root), please remove `--user` from the installation command. + * If there is any error like `Segmentation fault`, please refer to [FAQ](docs/FAQ.md) -**通过源代码安装** +**Install through source code** -* 当前支持 Linux(Ubuntu 16.04 及更高版本) 和 MacOS(10.14.1)。 -* 在 `python >= 3.5` 的环境中运行命令: `git` 和 `wget`,确保安装了这两个组件。 +* We support Linux (Ubuntu 16.04 or higher), MacOS (10.14.1) in our current stage. +* Run the following commands in an environment that has `python >= 3.5`, `git` and `wget`. ```bash git clone -b v0.4.1 https://github.com/Microsoft/nni.git @@ -44,25 +52,25 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 source install.sh ``` -参考[安装 NNI](docs/Installation.md) 了解系统需求。 +For the system requirements of NNI, please refer to [Install NNI](docs/Installation.md) -**验证安装** +**Verify install** -以下示例实验依赖于 TensorFlow 。 在运行前确保安装了 **TensorFlow**。 +The following example is an experiment built on TensorFlow. Make sure you have **TensorFlow installed** before running it. -* 通过克隆源代码下载示例。 +* Download the examples via clone the source code. ```bash git clone -b v0.4.1 https://github.com/Microsoft/nni.git ``` -* 运行 mnist 示例。 +* Run the mnist example. ```bash nnictl create --config nni/examples/trials/mnist/config.yml ``` -* 在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明实验已成功启动。 通过命令行输出的 `Web UI url` 来访问实验的界面。 +* Wait for the message `INFO: Successfully started experiment!` in the command line. This message indicates that your experiment has been successfully started. You can explore the experiment using the `Web UI url`. ``` INFO: Starting restful server... @@ -91,51 +99,51 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 ``` -* 在浏览器中打开 `Web UI url`,可看到下图的实验详细信息,以及所有的尝试任务。 查看[这里的](docs/WebUI.md)更多页面示例。 +* Open the `Web UI url` in your browser, you can view detail information of the experiment and all the submitted trial jobs as shown below. [Here](docs/WebUI.md) are more Web UI pages.
绘图 绘图
-## **文档** +## **Documentation** -* [NNI 概述](docs/Overview.md) -* [快速入门](docs/GetStarted.md) +* [NNI overview](docs/Overview.md) +* [Quick start](docs/GetStarted.md) -## **入门** +## **How to** -* [安装 NNI](docs/Installation.md) -* [使用命令行工具 nnictl](docs/NNICTLDOC.md) -* [使用 NNIBoard](docs/WebUI.md) -* [如何定义搜索空间](docs/SearchSpaceSpec.md) -* [如何定义一次尝试](docs/howto_1_WriteTrial.md) -* [配置实验](docs/ExperimentConfig.md) -* [如何使用标记](docs/howto_1_WriteTrial.md#nni-python-annotation) +* [Install NNI](docs/Installation.md) +* [Use command line tool nnictl](docs/NNICTLDOC.md) +* [Use NNIBoard](docs/WebUI.md) +* [How to define search space](docs/SearchSpaceSpec.md) +* [How to define a trial](docs/howto_1_WriteTrial.md) +* [Config an experiment](docs/ExperimentConfig.md) +* [How to use annotation](docs/howto_1_WriteTrial.md#nni-python-annotation) -## **教程** +## **Tutorials** -* [在本机运行实验 (支持多 GPU 卡)](docs/tutorial_1_CR_exp_local_api.md) -* [在多机上运行实验](docs/tutorial_2_RemoteMachineMode.md) -* [在 OpenPAI 上运行实验](docs/PAIMode.md) -* [在 Kubeflow 上运行实验。](docs/KubeflowMode.md) -* [使用不同的调参器和评估器](docs/tutorial_3_tryTunersAndAssessors.md) -* [实现自定义调参器](docs/howto_2_CustomizedTuner.md) -* [实现自定义评估器](examples/assessors/README.md) -* [使用进化算法为阅读理解任务找到好模型](examples/trials/ga_squad/README.md) +* [Run an experiment on local (with multiple GPUs)?](docs/tutorial_1_CR_exp_local_api.md) +* [Run an experiment on multiple machines?](docs/tutorial_2_RemoteMachineMode.md) +* [Run an experiment on OpenPAI?](docs/PAIMode.md) +* [Run an experiment on Kubeflow?](docs/KubeflowMode.md) +* [Try different tuners and assessors](docs/tutorial_3_tryTunersAndAssessors.md) +* [Implement a customized tuner](docs/howto_2_CustomizedTuner.md) +* [Implement a customized assessor](examples/assessors/README.md) +* [Use Genetic Algorithm to find good model architectures for Reading Comprehension task](examples/trials/ga_squad/README.md) -## **贡献** +## **Contribute** -欢迎贡献代码或提交建议,可在 [GitHub issues](https://github.com/Microsoft/nni/issues) 跟踪需求和缺陷。 +This project welcomes contributions and suggestions, we use [GitHub issues](https://github.com/Microsoft/nni/issues) for tracking requests and bugs. -推荐新贡献者从标有 **good first issue** 的简单需求开始。 +Issues with the **good first issue** label are simple and easy-to-start ones that we recommend new contributors to start with. -如要安装 NNI 开发环境,参考: [配置 NNI 开发环境](docs/SetupNNIDeveloperEnvironment.md)。 +To set up environment for NNI development, refer to the instruction: [Set up NNI developer environment](docs/SetupNNIDeveloperEnvironment.md) -在写代码之前,请查看并熟悉 NNI 代码贡献指南:[贡献](docs/CONTRIBUTING.md)。 +Before start coding, review and get familiar with the NNI Code Contribution Guideline: [Contributing](docs/CONTRIBUTING.md) -我们正在编写 [如何调试](docs/HowToDebug.md) 的页面,欢迎提交建议和问题。 +We are in construction of the instruction for [How to Debug](docs/HowToDebug.md), you are also welcome to contribute questions or suggestions on this area. -## **许可协议** +## **License** -整个代码库遵循 [MIT 许可协议](https://github.com/Microsoft/nni/blob/master/LICENSE) \ No newline at end of file +The entire codebase is under [MIT license](https://github.com/Microsoft/nni/blob/master/LICENSE) \ No newline at end of file From 4de4394bba90ef9a9852af7f3a041ed7dcb74206 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 11:53:05 +0800 Subject: [PATCH 0191/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/tuners/enas_nni/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 zh_CN/examples/tuners/enas_nni/README.md diff --git a/zh_CN/examples/tuners/enas_nni/README.md b/zh_CN/examples/tuners/enas_nni/README.md new file mode 100644 index 0000000000..1fdd887b53 --- /dev/null +++ b/zh_CN/examples/tuners/enas_nni/README.md @@ -0,0 +1,5 @@ +**Run ENAS in NNI** +=== + +Now we have an enas example [enas-nni](https://github.com/countif/enas_nni) run in nni from our contributors. Thanks our lovely contributors. +And welcome more and more people to join us! \ No newline at end of file From 9d639f910b5ac2d4476dc61e430d40fc1aecd706 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 12:01:37 +0800 Subject: [PATCH 0192/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index ad2f978cd9..514be88df2 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -1,6 +1,6 @@ # **在 Kubeflow 上运行实验。** -NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 kubeflow 模式。 在开始使用 NNI 的 kubeflow 模式前,需要现有一个 kubernetes 集群,可以是私有部署的,或者是 [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/),并且需要一台配置好 [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 的 Ubuntu 计算机连接到此 kubernetes 集群。 如果不熟悉 kubernetes,可以先浏览[这里](https://kubernetes.io/docs/tutorials/kubernetes-basics/)。 在 kubeflow 模式下,每个尝试程序会在 kubernetes 集群中作为一个 kubeflow 作业来运行。 +NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 kubeflow 模式。 在开始使用 NNI 的 kubeflow 模式前,需要有一个 kubernetes 集群,可以是私有部署的,或者是 [Azure Kubernetes Service(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/),并需要一台配置好 [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 的 Ubuntu 计算机连接到此 kubernetes 集群。 如果不熟悉 Kubernetes,可先浏览[这里](https://kubernetes.io/docs/tutorials/kubernetes-basics/)。 在 kubeflow 模式下,每个尝试程序会在 Kubernetes 集群中作为一个 kubeflow 作业来运行。 ## 私有部署的 Kubernetes 的准备工作 From b179b9f6049e434c3b10d1907942849178e2f862 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 12:01:38 +0800 Subject: [PATCH 0193/1573] New translations HowToChooseTuner.md (Chinese Simplified) --- zh_CN/docs/HowToChooseTuner.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/HowToChooseTuner.md b/zh_CN/docs/HowToChooseTuner.md index eda6fac4e3..9aa7a1e31d 100644 --- a/zh_CN/docs/HowToChooseTuner.md +++ b/zh_CN/docs/HowToChooseTuner.md @@ -161,7 +161,7 @@ NNI 中的 SMAC 只支持部分类型的[搜索空间](./SearchSpaceSpec.md), **Hyperband** -[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) 尝试用有限的资源来探索尽量多的组合,从最有可能的组合中找到最好结果。 它的基本思路是生成大量的配置,并运行少量的步骤来找到有可能好的配置,然后继续训练找到其中更好的配置。 参考 [这里](../src/sdk/pynni/nni/hyperband_advisor/README.md),了解更多信息。 +[Hyperband](https://arxiv.org/pdf/1603.06560.pdf) 尝试用有限的资源来探索尽量多的组合,从最有可能的组合中找到最好结果。 它的基本思路是生成大量的配置,并运行少量的步骤来找到有可能好的配置,然后继续训练找到其中更好的配置。 参考[这里](../src/sdk/pynni/nni/hyperband_advisor/README.md),了解更多信息。 *建议场景*:当搜索空间很大,但计算资源有限时建议使用。 中间结果能够很好的反映最终结果的情况下,此算法会非常有效。 @@ -183,7 +183,7 @@ NNI 中的 SMAC 只支持部分类型的[搜索空间](./SearchSpaceSpec.md), **Network Morphism** -[Network Morphism](7) 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跳层连接(skip-connection)。 接着,使用历史的架构和指标,来估计子网络的值。 然后会选择最有希望的模型进行训练。 参考[这里](../src/sdk/pynni/nni/networkmorphism_tuner/README.md),了解更多信息。 +[Network Morphism](7) 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 接着,使用历史的架构和指标,来估计子网络的值。 然后会选择最有希望的模型进行训练。 参考[这里](../src/sdk/pynni/nni/networkmorphism_tuner/README.md),了解更多信息。 *安装*: NetworkMorphism 需要 [pyTorch](https://pytorch.org/get-started/locally),必须提前安装它。 From 8e9338157cbcc5ff00dcae11c43f494f1bb470b6 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 12:11:31 +0800 Subject: [PATCH 0194/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 514be88df2..8f3e3d803c 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -18,8 +18,8 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 ## Azure 部署的 Kubernetes 的准备工作 -1. NNI support kubeflow based on Azure Kubernetes Service, follow the [guideline](https://azure.microsoft.com/en-us/services/kubernetes-service/) to set up Azure Kubernetes Service. -2. Install [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) and **kubectl**. Use `az login` to set azure account, and connect kubectl client to AKS, refer this [guideline](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster). +1. NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考[指南](https://azure.microsoft.com/en-us/services/kubernetes-service/)来设置 Azure Kubernetes Service。 +2. 安装 [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) 和 **kubectl**。 使用 `az login` 命令来设置 Azure 账户吗,并将 kubectl 客户端连接到 AKS,参考此[指南](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster)。 3. Deploy kubeflow on Azure Kubernetes Service, follow the [guideline](https://www.kubeflow.org/docs/started/getting-started/). 4. Follow the [guideline](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal) to create azure file storage account. If you use Azure Kubernetes Service, nni need Azure Storage Service to store code files and the output files. 5. To access Azure storage service, nni need the access key of the storage account, and nni use [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) Service to protect your private key. Set up Azure Key Vault Service, add a secret to Key Vault to store the access key of Azure storage account. Follow this [guideline](https://docs.microsoft.com/en-us/azure/key-vault/quick-create-cli) to store the access key. From 08f399aeab71b153abe69a62ca215da530765507 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 12:21:29 +0800 Subject: [PATCH 0195/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 8f3e3d803c..470f0c064e 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -20,15 +20,15 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 1. NNI 支持基于 Azure Kubernetes Service 的 Kubeflow,参考[指南](https://azure.microsoft.com/en-us/services/kubernetes-service/)来设置 Azure Kubernetes Service。 2. 安装 [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) 和 **kubectl**。 使用 `az login` 命令来设置 Azure 账户吗,并将 kubectl 客户端连接到 AKS,参考此[指南](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster)。 -3. Deploy kubeflow on Azure Kubernetes Service, follow the [guideline](https://www.kubeflow.org/docs/started/getting-started/). -4. Follow the [guideline](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal) to create azure file storage account. If you use Azure Kubernetes Service, nni need Azure Storage Service to store code files and the output files. -5. To access Azure storage service, nni need the access key of the storage account, and nni use [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) Service to protect your private key. Set up Azure Key Vault Service, add a secret to Key Vault to store the access key of Azure storage account. Follow this [guideline](https://docs.microsoft.com/en-us/azure/key-vault/quick-create-cli) to store the access key. +3. 在 Azure Kubernetes Service 上部署 Kubeflow,参考此[指南](https://www.kubeflow.org/docs/started/getting-started/)。 +4. 参考此[指南](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal)来创建 Azure 文件存储账户。 NNI 需要 Azure Storage Service 来存取代码和输出文件。 +5. NNI 需要访问密钥来连接 Azure 存储服务,NNI 使用 [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) 服务来保护私钥。 设置 Azure Key Vault 服务,并添加密钥到 Key Vault 中来存取 Azure 存储账户。 参考[指南](https://docs.microsoft.com/en-us/azure/key-vault/quick-create-cli)来存储访问密钥。 ## 设计 -![](../../docs/img/kubeflow_training_design.png) Kubeflow training service instantiates a kubernetes rest client to interact with your K8s cluster's API server. +![](../../docs/img/kubeflow_training_design.png) Kubeflow 训练服务会实例化一个 kubernetes 客户端来与 Kubernetes 集群的 API 服务器交互。 -For each trial, we will upload all the files in your local codeDir path (configured in nni_config.yaml) together with NNI generated files like parameter.cfg into a storage volumn. Right now we support two kinds of storage volumns: [nfs](https://en.wikipedia.org/wiki/Network_File_System) and [azure file storage](https://azure.microsoft.com/en-us/services/storage/files/), you should configure the storage volumn in nni config yaml file. After files are prepared, Kubeflow training service will call K8S rest API to create kubeflow jobs ([tf-operator](https://github.com/kubeflow/tf-operator) job or [pytorch-operator](https://github.com/kubeflow/pytorch-operator) job) in K8S, and mount your storage volumn into the job's pod. Output files of kubeflow job, like stdout, stderr, trial.log or model files, will also be copied back to the storage volumn. NNI will show the storage volumn's URL for each trial in WebUI, to allow user browse the log files and job's output files. +对于每个尝试,会上传本机 codeDir 路径(在 nni_config.yaml 中配置)中的所有文件,包括 parameter.cfg 这样的生成的文件到存储卷中。 当前支持两种存储卷:[nfs](https://en.wikipedia.org/wiki/Network_File_System) 和 [Azure 文件存储](https://azure.microsoft.com/en-us/services/storage/files/),需要在 NNI 的 yaml 文件中进行配置。 当文件准备好后,Kubeflow 训练服务会调用 Kubernetes 的 API 来创建 Kubeflow 作业 ([tf-operator](https://github.com/kubeflow/tf-operator) 作业或 [pytorch-operator](https://github.com/kubeflow/pytorch-operator) 作业) ,并将存储卷挂载到作业的 pod 中。 Output files of kubeflow job, like stdout, stderr, trial.log or model files, will also be copied back to the storage volumn. NNI will show the storage volumn's URL for each trial in WebUI, to allow user browse the log files and job's output files. ## Run an experiment From f4a4b3250184b611fd81acc70eff06e596ead82c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 12:31:46 +0800 Subject: [PATCH 0196/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 470f0c064e..07f26354c1 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -28,28 +28,28 @@ NNI 支持在 [Kubeflow](https://github.com/kubeflow/kubeflow)上运行,称为 ![](../../docs/img/kubeflow_training_design.png) Kubeflow 训练服务会实例化一个 kubernetes 客户端来与 Kubernetes 集群的 API 服务器交互。 -对于每个尝试,会上传本机 codeDir 路径(在 nni_config.yaml 中配置)中的所有文件,包括 parameter.cfg 这样的生成的文件到存储卷中。 当前支持两种存储卷:[nfs](https://en.wikipedia.org/wiki/Network_File_System) 和 [Azure 文件存储](https://azure.microsoft.com/en-us/services/storage/files/),需要在 NNI 的 yaml 文件中进行配置。 当文件准备好后,Kubeflow 训练服务会调用 Kubernetes 的 API 来创建 Kubeflow 作业 ([tf-operator](https://github.com/kubeflow/tf-operator) 作业或 [pytorch-operator](https://github.com/kubeflow/pytorch-operator) 作业) ,并将存储卷挂载到作业的 pod 中。 Output files of kubeflow job, like stdout, stderr, trial.log or model files, will also be copied back to the storage volumn. NNI will show the storage volumn's URL for each trial in WebUI, to allow user browse the log files and job's output files. +对于每个尝试,会上传本机 codeDir 路径(在 nni_config.yaml 中配置)中的所有文件,包括 parameter.cfg 这样的生成的文件到存储卷中。 当前支持两种存储卷:[nfs](https://en.wikipedia.org/wiki/Network_File_System) 和 [Azure 文件存储](https://azure.microsoft.com/en-us/services/storage/files/),需要在 NNI 的 yaml 文件中进行配置。 当文件准备好后,Kubeflow 训练服务会调用 Kubernetes 的 API 来创建 Kubeflow 作业 ([tf-operator](https://github.com/kubeflow/tf-operator) 作业或 [pytorch-operator](https://github.com/kubeflow/pytorch-operator) 作业) ,并将存储卷挂载到作业的 pod 中。 Kubeflow 作业的输出文件,例如 stdout, stderr, trial.log 以及模型文件,也会被复制回存储卷。 NNI 会在网页中显示每个尝试的存储卷的 URL,以便浏览日志和输出文件。 -## Run an experiment +## 运行实验 -Use `examples/trials/mnist` as an example. The nni config yaml file's content is like: +以 `examples/trials/mnist` 为例。 NNI 的 yaml 配置文件如下: authorName: your_name experimentName: example_mnist - # how many trials could be concurrently running + # 并发运行数量 trialConcurrency: 4 - # maximum experiment running duration + # 实验的最长运行时间 maxExecDuration: 3h - # empty means never stop + # 空意味着一直运行 maxTrialNum: 100 - # choice: local, remote, pai, kubeflow + # 可选的项目: local, remote, pai, kubeflow trainingServicePlatform: kubeflow - # choice: true, false + # 可选的项目: true, false useAnnotation: false tuner: builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选的项目: maximize, minimize optimize_mode: maximize trial: codeDir: ~/nni/examples/trials/mnist @@ -75,7 +75,7 @@ Use `examples/trials/mnist` as an example. The nni config yaml file's content is path: {your_nfs_server_exported_path} -If you use Azure Kubernetes Service, you should set `kubeflowConfig` in your config yaml file as follows: +如果使用了 Azure Kubernetes Service,需要在 yaml 文件中如下设置 `kubeflowConfig`: kubeflowConfig: operator: tf-operator @@ -88,23 +88,23 @@ If you use Azure Kubernetes Service, you should set `kubeflowConfig` in your con azureShare: {your_azure_share_name} -Note: You should explicitly set `trainingServicePlatform: kubeflow` in nni config yaml file if you want to start experiment in kubeflow mode. +注意:如果用 kubeflow 模式运行,需要在 yaml 文件中显式设置 `trainingServicePlatform: kubeflow`。 -Trial configuration in kubeflow mode have the following configuration keys: +kubeflow 模式的配置有下列主键: * codeDir - * code directory, where you put training code and config files -* worker (required). This config section is used to configure tensorflow worker role + * 代码目录,存放训练代码和配置文件 +* worker (必填)。 此部分用于配置 TensorFlow 的 worker 角色 * replicas - * Required key. Should be positive number depends on how many replication your want to run for tensorflow worker role. + * 必填。 需要运行的 TensorFlow woker 角色的数量,必须为正数。 * command - * Required key. Command to launch your trial job, like ```python mnist.py``` + * 必填。 用来运行尝试作业的命令,例如: ```python mnist.py``` * memoryMB - * Required key. Should be positive number based on your trial program's memory requirement + * 必填。 尝试程序的内存需求,必须为正数。 * cpuNum * gpuNum * image - * Required key. In kubeflow mode, your trial program will be scheduled by Kubernetes to run in [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/). This key is used to specify the Docker image used to create the pod where your trail program will run. + * 必填。 在 kubeflow 模式中,Kubernetes 会安排尝试程序在 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/) 中执行。 此键用来指定尝试程序的 pod 使用的 Docker 映像。 * 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. * ps (optional). This config section is used to configure tensorflow parameter server role. From 805a9f908f0b2805d76b9c45f4b296efac27b71d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 12:41:11 +0800 Subject: [PATCH 0197/1573] New translations KubeflowMode.md (Chinese Simplified) --- zh_CN/docs/KubeflowMode.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh_CN/docs/KubeflowMode.md b/zh_CN/docs/KubeflowMode.md index 07f26354c1..e28e10b804 100644 --- a/zh_CN/docs/KubeflowMode.md +++ b/zh_CN/docs/KubeflowMode.md @@ -105,18 +105,18 @@ kubeflow 模式的配置有下列主键: * gpuNum * image * 必填。 在 kubeflow 模式中,Kubernetes 会安排尝试程序在 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/) 中执行。 此键用来指定尝试程序的 pod 使用的 Docker 映像。 - * 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. -* ps (optional). This config section is used to configure tensorflow parameter server role. + * [Docker Hub](https://hub.docker.com/) 上有预制的 NNI Docker 映像 [nnimsra/nni](https://hub.docker.com/r/msranni/nni/)。 它包含了用来启动 NNI 实验所依赖的所有 Python 包,Node 模块和 JavaScript。 用来生成此映像的文件在[这里](../deployment/Dockerfile.build.base)。 可以直接使用此映像,或参考它来生成自己的映像。 +* ps (可选)。 此部分用于配置 TensorFlow 的 parameter 服务器角色。 -Once complete to fill nni experiment config file and save (for example, save as exp_kubeflow.yaml), then run the following command +完成并保存 NNI 实验配置文件后(例如可保存为:exp_kubeflow.yaml),运行以下命令: nnictl create --config exp_kubeflow.yaml -to start the experiment in kubeflow mode. NNI will create Kubeflow tfjob for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the kubeflow tfjob created by NNI in your Kubernetes dashboard. +来在 Kubeflow 模式下启动实验。 NNI 会为每个尝试创建 Kubeflow tfjob,作业名称的格式为 `nni_exp_{experiment_id}_trial_{trial_id}`。 可以在 Kubernetes 面板中看到创建的 Kubeflow tfjob。 -Notice: In kubeflow mode, NNIManager will start a rest server and listen on a port which is your NNI WebUI's port plus 1. For example, if your WebUI port is `8080`, the rest server will listen on `8081`, to receive metrics from trial job running in Kubernetes. So you should `enable 8081` TCP port in your firewall rule to allow incoming traffic. +注意:Kubeflow 模式下,NNIManager 会启动 RESTful 服务,监听端口为 NNI 网页服务器的端口加1。 例如,如果网页端口为`8080`,那么 RESTful 服务器会监听在 `8081`端口,来接收运行在 Kubernetes 中的尝试作业的指标。 因此,需要在防火墙中启用端口 `8081` 的 TCP 协议,以允许传入流量。 -Once a trial job is completed, you can goto NNI WebUI's overview page (like http://localhost:8080/oview) to check trial's information. +当一个尝试作业完成后,可以在 NNI 网页的概述页面(如:http://localhost:8080/oview)中查看尝试的信息。 -Any problems when using NNI in kubeflow mode, plesae create issues on [NNI github repo](https://github.com/Microsoft/nni), or send mail to nni@microsoft.com \ No newline at end of file +如果在使用 Kubeflow 模式时遇到任何问题,请到 [NNI github](https://github.com/Microsoft/nni)中创建问题,或发信给 nni@microsoft.com。 \ No newline at end of file From 405f33b6973dff8ae74e0efeea4bf52357094da4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:00:36 +0800 Subject: [PATCH 0198/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 648 ++++++++++++++++++++++------------------ 1 file changed, 350 insertions(+), 298 deletions(-) diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md index 1b7c188198..d37e74266a 100644 --- a/zh_CN/docs/NNICTLDOC.md +++ b/zh_CN/docs/NNICTLDOC.md @@ -1,4 +1,6 @@ -# nnictl +nnictl + +=== ## Introduction @@ -8,235 +10,276 @@ nnictl support commands: - nnictl create - nnictl stop - nnictl update - nnictl resume - nnictl trial - nnictl experiment - nnictl config - nnictl log - nnictl webui - nnictl tensorboard - nnictl top - +```bash +nnictl create +nnictl stop +nnictl update +nnictl resume +nnictl trial +nnictl experiment +nnictl config +nnictl log +nnictl webui +nnictl tensorboard +nnictl top +``` ### Manage an experiment * **nnictl create** - - * Description - - You can use this command to create a new experiment, using the configuration specified in config file. After this command is successfully done, the context will be set as this experiment, which means the following command you issued is associated with this experiment, unless you explicitly changes the context(not supported yet). - - * Usage - - nnictl create [OPTIONS] - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------- | - | --config, -c | True | | yaml configure file of the experiment | - | --port, -p | False | | the port of restful server | + + * Description + + You can use this command to create a new experiment, using the configuration specified in config file. + After this command is successfully done, the context will be set as this experiment, + which means the following command you issued is associated with this experiment, + unless you explicitly changes the context(not supported yet). + + + * Usage + + ```bash + nnictl create [OPTIONS] + ``` + + Options: + | Name, shorthand | Required|Default | Description | + | ------ | ------ | ------ |------ | + | --config, -c| True| |yaml configure file of the experiment| + | --port, -p | False| |the port of restful server| + * **nnictl resume** - - * Description - - You can use this command to resume a stopped experiment. - - * Usage - - nnictl resume [OPTIONS] - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ---------------------------------------------- | - | id | False | | The id of the experiment you want to resume | - | --port, -p | False | | Rest port of the experiment you want to resume | + + * Description + + You can use this command to resume a stopped experiment. + + * Usage + + ```bash + nnictl resume [OPTIONS] + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ---------------------------------------------- | + | id | False | | The id of the experiment you want to resume | + | --port, -p | False | | Rest port of the experiment you want to resume | * **nnictl stop** - - * Description - - You can use this command to stop a running experiment or multiple experiments. - - * Usage - - nnictl stop [id] - - * Detail - - 1.If there is an id specified, and the id matches the running experiment, nnictl will stop the corresponding experiment, or will print error message. 2.If there is no id specified, and there is an experiment running, stop the running experiment, or print error message. 3.If the id ends with *, nnictl will stop all experiments whose ids matchs the regular. 4.If the id does not exist but match the prefix of an experiment id, nnictl will stop the matched experiment. 5.If the id does not exist but match multiple prefix of the experiment ids, nnictl will give id information. 6.Users could use 'nnictl stop all' to stop all experiments + + * Description + + You can use this command to stop a running experiment or multiple experiments. + + * Usage + + ```bash + nnictl stop [id] + ``` + + * Detail + + 1. If there is an id specified, and the id matches the running experiment, nnictl will stop the corresponding experiment, or will print error message. + + 2. If there is no id specified, and there is an experiment running, stop the running experiment, or print error message. + + 3. If the id ends with *, nnictl will stop all experiments whose ids matchs the regular. + + 4. If the id does not exist but match the prefix of an experiment id, nnictl will stop the matched experiment. + + 5. If the id does not exist but match multiple prefix of the experiment ids, nnictl will give id information. + + 6. Users could use 'nnictl stop all' to stop all experiments * **nnictl update** - - * **nnictl update searchspace** + + * **nnictl update searchspace** + + * Description - * Description - - You can use this command to update an experiment's search space. + You can use this command to update an experiment's search space. + + * Usage - * Usage - - nnictl update searchspace [OPTIONS] - - Options: - - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | -------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --filename, -f | True | | the file storing your new search space | - - * **nnictl update concurrency** - * Description - - You can use this command to update an experiment's concurrency. - - * Usage - - nnictl update concurrency [OPTIONS] - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | --------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --value, -v | True | | the number of allowed concurrent trials | - - * **nnictl update duration** - - * Description - - You can use this command to update an experiment's concurrency. - - - * Usage - - nnictl update duration [OPTIONS] - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --value, -v | True | | the experiment duration will be NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. | - - * **nnictl update trialnum** - * Description - - You can use this command to update an experiment's maxtrialnum. - - * Usage - - nnictl update trialnum [OPTIONS] - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | --------------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --value, -v | True | | the new number of maxtrialnum you want to set | - -* **nnictl trial** - - * **nnictl trial ls** + ```bash + nnictl update searchspace [OPTIONS] + ``` - * Description - - You can use this command to show trial's information. + Options: - * Usage - - nnictl trial ls + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | -------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --filename, -f | True | | the file storing your new search space | + + * **nnictl update concurrency** + + * Description + + You can use this command to update an experiment's concurrency. + + * Usage + + ```bash + nnictl update concurrency [OPTIONS] + ``` Options: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - - * **nnictl trial kill** + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the number of allowed concurrent trials | + + * **nnictl update duration** * Description - - You can use this command to kill a trial job. + + You can use this command to update an experiment's concurrency. * Usage - - nnictl trial kill [OPTIONS] - - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --trialid, -t | True | | ID of the trial you want to kill. | - - * **nnictl top** + + ```bash + nnictl update duration [OPTIONS] + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the experiment duration will be NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. | + + * **nnictl update trialnum** * Description - - Monitor all of running experiments. + + You can use this command to update an experiment's maxtrialnum. * Usage - - nnictl top - - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --time, -t | False | | The interval to update the experiment status, the unit of time is second, and the default value is 3 second. | - -### Manage experiment information + + ```bash + nnictl update trialnum [OPTIONS] + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the new number of maxtrialnum you want to set | -* **nnictl experiment show** - - * Description +* **nnictl trial** + + * **nnictl trial ls** + + * Description - Show the information of experiment. - - * Usage + You can use this command to show trial's information. + + * Usage - nnictl experiment show + ```bash + nnictl trial ls + ``` Options: | Name, shorthand | Required | Default | Description | | --------------- | -------- | ------- | ------------------------------------ | | id | False | | ID of the experiment you want to set | - -* **nnictl experiment status** - - * Description + + * **nnictl trial kill** + + * Description - Show the status of experiment. - - * Usage + You can use this command to kill a trial job. + + * Usage - nnictl experiment status + ```bash + nnictl trial kill [OPTIONS] + ``` Options: | Name, shorthand | Required | Default | Description | | --------------- | -------- | ------- | ------------------------------------ | | id | False | | ID of the experiment you want to set | + | --trialid, -t | True | | ID of the trial you want to kill. | + + * **nnictl top** + + * Description + + Monitor all of running experiments. + + * Usage + + ```bash + nnictl top + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --time, -t | False | | The interval to update the experiment status, the unit of time is second, and the default value is 3 second. | + +### Manage experiment information + +* **nnictl experiment show** + + * Description + + Show the information of experiment. + + * Usage + + ```bash + nnictl experiment show + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + +* **nnictl experiment status** + + * Description + + Show the status of experiment. + + * Usage + + ```bash + nnictl experiment status + ``` + + Options: + + | Name, shorthand | Required|Default | Description | + | ------ | ------ | ------ |------ | + | id| False| |ID of the experiment you want to set| + * **nnictl experiment list** - - * Description - - Show the information of all the (running) experiments. - - * Usage + + * Description + + Show the information of all the (running) experiments. + + * Usage + ```bash nnictl experiment list + ``` Options: @@ -245,135 +288,144 @@ nnictl support commands: | all | False | False | Show all of experiments, including stopped experiments. | * **nnictl config show** - - * Description - - Display the current context information. - - - * Usage - - nnictl config show - + + * Description + + Display the current context information. + + * Usage + + ```bash + nnictl config show + ``` ### Manage log * **nnictl log stdout** - - * Description - - Show the stdout log content. - - * Usage - - nnictl log stdout [options] - - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --head, -h | False | | show head lines of stdout | - | --tail, -t | False | | show tail lines of stdout | - | --path, -p | False | | show the path of stdout file | + + * Description + + Show the stdout log content. + + * Usage + + ```bash + nnictl log stdout [options] + ``` + + Options: + + | Name, shorthand | Required|Default | Description | + | ------ | ------ | ------ |------ | + | id| False| |ID of the experiment you want to set| + | --head, -h| False| |show head lines of stdout| + | --tail, -t| False| |show tail lines of stdout| + | --path, -p| False| |show the path of stdout file| + * **nnictl log stderr** - - * Description - - Show the stderr log content. - - * Usage - - nnictl log stderr [options] - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --head, -h | False | | show head lines of stderr | - | --tail, -t | False | | show tail lines of stderr | - | --path, -p | False | | show the path of stderr file | + + * Description + + Show the stderr log content. + + * Usage + + ```bash + nnictl log stderr [options] + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --head, -h | False | | show head lines of stderr | + | --tail, -t | False | | show tail lines of stderr | + | --path, -p | False | | show the path of stderr file | * **nnictl log trial** - - * Description - - Show trial log path. - - * Usage - - nnictl log trial [options] - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | --------------- | - | id | False | | the id of trial | + + * Description + + Show trial log path. + + * Usage + + ```bash + nnictl log trial [options] + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------- | + | id | False | | the id of trial | ### Manage webui * **nnictl webui url** - - * Description - - Show the urls of the experiment. - - * Usage - - nnictl webui url - - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | + + * Description + + Show the urls of the experiment. + + * Usage + + ```bash + nnictl webui url + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | ### Manage tensorboard * **nnictl tensorboard start** - - * Description - - Start the tensorboard process. - - * Usage - - nnictl tensorboard start - - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --trialid | False | | ID of the trial | - | --port | False | 6006 | The port of the tensorboard process | - - * Detail - - 1. NNICTL support tensorboard function in local and remote platform for the moment, other platforms will be supported later. - 2. If you want to use tensorboard, you need to write your tensorboard log data to environment variable [NNI_OUTPUT_DIR] path. - 3. In local mode, nnictl will set --logdir=[NNI_OUTPUT_DIR] directly and start a tensorboard process. - 4. In remote mode, nnictl will create a ssh client to copy log data from remote machine to local temp directory firstly, and then start a tensorboard process in your local machine. You need to notice that nnictl only copy the log data one time when you use the command, if you want to see the later result of tensorboard, you should execute nnictl tensorboard command again. - 5. If there is only one trial job, you don't need to set trialid. If there are multiple trial jobs running, you should set the trialid, or you could use [nnictl tensorboard start --trialid all] to map --logdir to all trial log paths. + + * Description + + Start the tensorboard process. + + * Usage + + ```bash + nnictl tensorboard start + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --trialid | False | | ID of the trial | + | --port | False | 6006 | The port of the tensorboard process | + + * Detail + + 1. NNICTL support tensorboard function in local and remote platform for the moment, other platforms will be supported later. + 2. If you want to use tensorboard, you need to write your tensorboard log data to environment variable [NNI_OUTPUT_DIR] path. + 3. In local mode, nnictl will set --logdir=[NNI_OUTPUT_DIR] directly and start a tensorboard process. + 4. In remote mode, nnictl will create a ssh client to copy log data from remote machine to local temp directory firstly, and then start a tensorboard process in your local machine. You need to notice that nnictl only copy the log data one time when you use the command, if you want to see the later result of tensorboard, you should execute nnictl tensorboard command again. + 5. If there is only one trial job, you don't need to set trialid. If there are multiple trial jobs running, you should set the trialid, or you could use [nnictl tensorboard start --trialid all] to map --logdir to all trial log paths. * **nnictl tensorboard stop** - - * Description - - Stop all of the tensorboard process. - - * Usage - - nnictl tensorboard stop - - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | \ No newline at end of file + + * Description + + Stop all of the tensorboard process. + + * Usage + + ```bash + nnictl tensorboard stop + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | \ No newline at end of file From 85fa8328f833e9b9419be2caea5edcb1fea12571 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:03:08 +0800 Subject: [PATCH 0199/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 89 ++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md index d37e74266a..39753ed9d4 100644 --- a/zh_CN/docs/NNICTLDOC.md +++ b/zh_CN/docs/NNICTLDOC.md @@ -2,7 +2,7 @@ nnictl === -## Introduction +## 介绍 **nnictl** is a command line tool, which can be used to control experiments, such as start/stop/resume an experiment, start/stop NNIBoard, etc. @@ -38,16 +38,17 @@ nnictl top * Usage - ```bash - nnictl create [OPTIONS] - ``` - - Options: - | Name, shorthand | Required|Default | Description | - | ------ | ------ | ------ |------ | - | --config, -c| True| |yaml configure file of the experiment| - | --port, -p | False| |the port of restful server| - + ```bash + nnictl create [OPTIONS] + ``` + + Options: + + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------- | + | --config, -c | True | | yaml configure file of the experiment | + | --port, -p | False | | the port of restful server | * **nnictl resume** @@ -258,34 +259,33 @@ nnictl top * Usage - ```bash - nnictl experiment status - ``` - - Options: - - | Name, shorthand | Required|Default | Description | - | ------ | ------ | ------ |------ | - | id| False| |ID of the experiment you want to set| - + ```bash + nnictl experiment status + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | * **nnictl experiment list** * Description Show the information of all the (running) experiments. + + * Usage - * Usage - - ```bash - nnictl experiment list - ``` - - Options: - - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------------------------- | - | all | False | False | Show all of experiments, including stopped experiments. | + ```bash + nnictl experiment list + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------------------------- | + | all | False | False | Show all of experiments, including stopped experiments. | * **nnictl config show** @@ -309,19 +309,18 @@ nnictl top * Usage - ```bash - nnictl log stdout [options] - ``` - - Options: - - | Name, shorthand | Required|Default | Description | - | ------ | ------ | ------ |------ | - | id| False| |ID of the experiment you want to set| - | --head, -h| False| |show head lines of stdout| - | --tail, -t| False| |show tail lines of stdout| - | --path, -p| False| |show the path of stdout file| - + ```bash + nnictl log stdout [options] + ``` + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + | --head, -h | False | | show head lines of stdout | + | --tail, -t | False | | show tail lines of stdout | + | --path, -p | False | | show the path of stdout file | * **nnictl log stderr** From 2dbe2ea69358070afa0271e74cc1588d3db96804 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:11:49 +0800 Subject: [PATCH 0200/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 58 ++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md index 39753ed9d4..ab8faa675f 100644 --- a/zh_CN/docs/NNICTLDOC.md +++ b/zh_CN/docs/NNICTLDOC.md @@ -4,11 +4,11 @@ nnictl ## 介绍 -**nnictl** is a command line tool, which can be used to control experiments, such as start/stop/resume an experiment, start/stop NNIBoard, etc. +**nnictl** 是一个命令行工具,用来控制 NNI 实验,如启动、停止、继续实验,启动、停止 NNIBoard 等等。 -## Commands +## 命令 -nnictl support commands: +nnictl 支持的命令: ```bash nnictl create @@ -24,70 +24,68 @@ nnictl tensorboard nnictl top ``` -### Manage an experiment +### 管理实验 * **nnictl create** - * Description + * 说明 - You can use this command to create a new experiment, using the configuration specified in config file. - After this command is successfully done, the context will be set as this experiment, - which means the following command you issued is associated with this experiment, - unless you explicitly changes the context(not supported yet). + 此命令使用参数中的配置文件,来创建新的实验。 + 此命令成功完成后,上下文会被设置为此实验。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此实验。 - * Usage + * 用法 ```bash nnictl create [OPTIONS] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------- | - | --config, -c | True | | yaml configure file of the experiment | - | --port, -p | False | | the port of restful server | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ------------ | ----- | --- | ------------- | + | --config, -c | True | | 实验的 yaml 配置文件 | + | --port, -p | False | | RESTful 服务的端口 | * **nnictl resume** - * Description + * 说明 - You can use this command to resume a stopped experiment. + 使用此命令恢复已停止的实验。 - * Usage + * 用法 ```bash nnictl resume [OPTIONS] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ---------------------------------------------- | - | id | False | | The id of the experiment you want to resume | - | --port, -p | False | | Rest port of the experiment you want to resume | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | ---------------------- | + | id | False | | 要恢复的实验标识 | + | --port, -p | False | | 要恢复的实验使用的 RESTful 服务端口 | * **nnictl stop** - * Description + * 说明 - You can use this command to stop a running experiment or multiple experiments. + 使用此命令来停止正在运行的单个或多个实验。 - * Usage + * 用法 ```bash nnictl stop [id] ``` - * Detail + * 详细说明 - 1. If there is an id specified, and the id matches the running experiment, nnictl will stop the corresponding experiment, or will print error message. + 1. 如果指定了 id,并且此 id 匹配正在运行的实验,nnictl 会停止相应的实验,否则会输出错误信息。 - 2. If there is no id specified, and there is an experiment running, stop the running experiment, or print error message. + 2. 如果没有指定 id,并且当前有运行的实验,则会停止该实验,否则会输出错误信息。 - 3. If the id ends with *, nnictl will stop all experiments whose ids matchs the regular. + 3. 如果 id 以 * 结尾,nnictl 会停止所有匹配此通配符的实验。 4. If the id does not exist but match the prefix of an experiment id, nnictl will stop the matched experiment. From 9f24084cb7740d4a562627f3209fb7ae2bba8de3 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:21:40 +0800 Subject: [PATCH 0201/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 148 ++++++++++++++++++++-------------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md index ab8faa675f..92dfc64505 100644 --- a/zh_CN/docs/NNICTLDOC.md +++ b/zh_CN/docs/NNICTLDOC.md @@ -87,189 +87,189 @@ nnictl top 3. 如果 id 以 * 结尾,nnictl 会停止所有匹配此通配符的实验。 - 4. If the id does not exist but match the prefix of an experiment id, nnictl will stop the matched experiment. + 4. 如果 id 不存在,但匹配了某个实验的 id 前缀,nnictl 会停止匹配的实验。 - 5. If the id does not exist but match multiple prefix of the experiment ids, nnictl will give id information. + 5. 如果 id 不存在,但匹配多个实验 id 的前缀,nnictl 会输出这些 id 的信息。 - 6. Users could use 'nnictl stop all' to stop all experiments + 6. 可使用 'nnictl stop all' 来停止所有的实验。 * **nnictl update** * **nnictl update searchspace** - * Description + * 说明 - You can use this command to update an experiment's search space. + 可以用此命令来更新实验的搜索空间。 - * Usage + * 用法 ```bash nnictl update searchspace [OPTIONS] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | -------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --filename, -f | True | | the file storing your new search space | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | -------------- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | + | --filename, -f | True | | 新的搜索空间文件名 | * **nnictl update concurrency** - * Description + * 说明 - You can use this command to update an experiment's concurrency. + 可以用此命令来更新实验的并发设置。 - * Usage + * 用法 ```bash nnictl update concurrency [OPTIONS] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | --------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --value, -v | True | | the number of allowed concurrent trials | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----------- | ----- | --- | ------------ | + | id | False | | 需要设置的实验的 id | + | --value, -v | True | | 允许同时运行的尝试的数量 | * **nnictl update duration** - * Description + * 说明 - You can use this command to update an experiment's concurrency. + 可以用此命令来更新实验的运行时间。 - * Usage + * 用法 ```bash nnictl update duration [OPTIONS] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --value, -v | True | | the experiment duration will be NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----------- | ----- | --- | -------------------------------------------------------------- | + | id | False | | 需要设置的实验的 id | + | --value, -v | True | | 实验持续时间如没有单位,则为秒。 后缀可以为 's' 即秒 (默认值), 'm' 即分钟, 'h' 即小时或 'd' 即天。 | * **nnictl update trialnum** - * Description + * 说明 - You can use this command to update an experiment's maxtrialnum. + 可以用此命令来更新实验的最大尝试数量。 - * Usage + * 用法 ```bash nnictl update trialnum [OPTIONS] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | --------------------------------------------- | - | id | False | | ID of the experiment you want to set | - | --value, -v | True | | the new number of maxtrialnum you want to set | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----------- | ----- | --- | --------------------- | + | id | False | | 需要设置的实验的 id | + | --value, -v | True | | 需要设置的 maxtrialnum 的数量 | * **nnictl trial** * **nnictl trial ls** - * Description + * 说明 - You can use this command to show trial's information. + 使用此命令来查看尝试的信息。 - * Usage + * 用法 ```bash nnictl trial ls ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | * **nnictl trial kill** - * Description + * 说明 - You can use this command to kill a trial job. + 此命令用于终止尝试。 - * Usage + * 用法 ```bash nnictl trial kill [OPTIONS] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --trialid, -t | True | | ID of the trial you want to kill. | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ------------- | ----- | --- | ------------ | + | id | False | | 需要设置的实验的 id | + | --trialid, -t | True | | 需要终止的尝试的 id。 | * **nnictl top** - * Description + * 说明 - Monitor all of running experiments. + 查看正在运行的实验。 - * Usage + * 用法 ```bash nnictl top ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --time, -t | False | | The interval to update the experiment status, the unit of time is second, and the default value is 3 second. | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | -------------------------- | + | id | False | | 需要设置的实验的 id | + | --time, -t | False | | 刷新实验状态的时间间隔,单位为秒,默认值为 3 秒。 | -### Manage experiment information +### 管理实验信息 * **nnictl experiment show** - * Description + * 说明 - Show the information of experiment. + 显示实验的信息。 - * Usage + * 用法 ```bash nnictl experiment show ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | * **nnictl experiment status** - * Description + * 说明 - Show the status of experiment. + 显示实验的状态。 - * Usage + * 用法 ```bash nnictl experiment status ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | * **nnictl experiment list** - * Description + * 说明 Show the information of all the (running) experiments. From 04801b1d7defff2aa3f0bfd492bf9e30be9c3a7e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:31:35 +0800 Subject: [PATCH 0202/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 136 ++++++++++++++++++++-------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md index 92dfc64505..6415e5dff2 100644 --- a/zh_CN/docs/NNICTLDOC.md +++ b/zh_CN/docs/NNICTLDOC.md @@ -271,158 +271,158 @@ nnictl top * 说明 - Show the information of all the (running) experiments. + 显示正在运行的实验的信息 - * Usage + * 用法 ```bash nnictl experiment list ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------------------------- | - | all | False | False | Show all of experiments, including stopped experiments. | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | ----- | ---------------- | + | all | False | False | 显示所有实验,包括已停止的实验。 | * **nnictl config show** - * Description + * 说明 - Display the current context information. + 显示当前上下文信息。 - * Usage + * 用法 ```bash nnictl config show ``` -### Manage log +### 管理日志 * **nnictl log stdout** - * Description + * 说明 - Show the stdout log content. + 显示 stdout 日志内容。 - * Usage + * 用法 ```bash nnictl log stdout [options] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --head, -h | False | | show head lines of stdout | - | --tail, -t | False | | show tail lines of stdout | - | --path, -p | False | | show the path of stdout file | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | ---------------- | + | id | False | | 需要设置的实验的 id | + | --head, -h | False | | 显示 stdout 开始的若干行 | + | --tail, -t | False | | 显示 stdout 结尾的若干行 | + | --path, -p | False | | 显示 stdout 文件的路径 | * **nnictl log stderr** - * Description + * 说明 - Show the stderr log content. + 显示 stderr 日志内容。 - * Usage + * 用法 ```bash nnictl log stderr [options] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --head, -h | False | | show head lines of stderr | - | --tail, -t | False | | show tail lines of stderr | - | --path, -p | False | | show the path of stderr file | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | ---------------- | + | id | False | | 需要设置的实验的 id | + | --head, -h | False | | 显示 stderr 开始的若干行 | + | --tail, -t | False | | 显示 stderr 结尾的若干行 | + | --path, -p | False | | 显示 stderr 文件的路径 | * **nnictl log trial** - * Description + * 说明 - Show trial log path. + 显示尝试日志的路径。 - * Usage + * 用法 ```bash nnictl log trial [options] ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | --------------- | - | id | False | | the id of trial | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ------ | + | id | False | | 尝试的 id | -### Manage webui +### 管理网页 * **nnictl webui url** - * Description + * 说明 - Show the urls of the experiment. + 显示实验的 URL。 - * Usage + * 用法 ```bash nnictl webui url ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | -### Manage tensorboard +### 管理 tensorboard * **nnictl tensorboard start** - * Description + * 说明 - Start the tensorboard process. + 启动 tensorboard 进程。 - * Usage + * 用法 ```bash nnictl tensorboard start ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | - | --trialid | False | | ID of the trial | - | --port | False | 6006 | The port of the tensorboard process | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | --------- | ----- | ---- | ----------------- | + | id | False | | 需要设置的实验的 id | + | --trialid | False | | 尝试的 id | + | --port | False | 6006 | tensorboard 进程的端口 | - * Detail + * 详细说明 - 1. NNICTL support tensorboard function in local and remote platform for the moment, other platforms will be supported later. - 2. If you want to use tensorboard, you need to write your tensorboard log data to environment variable [NNI_OUTPUT_DIR] path. - 3. In local mode, nnictl will set --logdir=[NNI_OUTPUT_DIR] directly and start a tensorboard process. - 4. In remote mode, nnictl will create a ssh client to copy log data from remote machine to local temp directory firstly, and then start a tensorboard process in your local machine. You need to notice that nnictl only copy the log data one time when you use the command, if you want to see the later result of tensorboard, you should execute nnictl tensorboard command again. - 5. If there is only one trial job, you don't need to set trialid. If there are multiple trial jobs running, you should set the trialid, or you could use [nnictl tensorboard start --trialid all] to map --logdir to all trial log paths. + 1. NNICTL 当前仅支持本机和远程平台的 tensorboard,其它平台暂不支持。 + 2. 如果要使用 tensorboard,需要将 tensorboard 日志输出到环境变量 [NNI_OUTPUT_DIR] 路径下。 + 3. 在 local 模式中,nnictl 会直接设置 --logdir=[NNI_OUTPUT_DIR] 并启动 tensorboard 进程。 + 4. 在 remote 模式中,nnictl 会创建一个 ssh 客户端来将日志数据从远程计算机复制到本机临时目录中,然后在本机开始 tensorboard 进程。 需要注意的是,nnictl 只在使用此命令时复制日志数据,如果要查看最新的 tensorboard 结果,需要再次执行 nnictl tensorboard 命令。 + 5. 如果只有一个尝试任务,不需要设置 trialid。 如果有多个运行的尝试作业,需要设置 trialid,或使用 [nnictl tensorboard start --trialid all] 来将 --logdir 映射到所有尝试的路径。 * **nnictl tensorboard stop** - * Description + * 说明 - Stop all of the tensorboard process. + 停止所有 tensorboard 进程。 - * Usage + * 用法 ```bash nnictl tensorboard stop ``` - Options: + 选项: - | Name, shorthand | Required | Default | Description | - | --------------- | -------- | ------- | ------------------------------------ | - | id | False | | ID of the experiment you want to set | \ No newline at end of file + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | \ No newline at end of file From 1cc9b2498b698cfc2aeb7de0b1865986b08197c5 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:33:45 +0800 Subject: [PATCH 0203/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md index 6415e5dff2..ed25e80bc2 100644 --- a/zh_CN/docs/NNICTLDOC.md +++ b/zh_CN/docs/NNICTLDOC.md @@ -30,9 +30,7 @@ nnictl top * 说明 - 此命令使用参数中的配置文件,来创建新的实验。 - 此命令成功完成后,上下文会被设置为此实验。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此实验。 - + 此命令使用参数中的配置文件,来创建新的实验。 此命令成功完成后,上下文会被设置为此实验。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此实验。 * 用法 From b1829dbe9063f646991fe23b80951a5d4dbd9086 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:38:26 +0800 Subject: [PATCH 0204/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md index 6fb6e3979d..7170dbb0bf 100644 --- a/zh_CN/docs/Overview.md +++ b/zh_CN/docs/Overview.md @@ -1,15 +1,15 @@ -# NNI Overview +# NNI 概述 -NNI (Neural Network Intelligence) is a toolkit to help users run automated machine learning experiments. For each experiment, user only need to define a search space and update a few lines of code, and then leverage NNI build-in algorithms and training services to search the best hyper parameters and/or neural architecture. +NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工具包。 每次实验,用户只需要定义搜索空间,改动几行代码,就能利用 NNI 内置的算法和训练服务来搜索最好的超参组合以及神经网络结构。 -> Step 1: [Define search space](SearchSpaceSpec.md) +> 第一步:[定义搜索空间](SearchSpaceSpec.md) > -> Step 2: [Update model codes](howto_1_WriteTrial.md) +> 第二步:[改动模型代码](howto_1_WriteTrial.md) > -> Step 3: [Define Experiment](ExperimentConfig.md) +> 第三步:[定义实验配置](ExperimentConfig.md)

-drawing +drawing

After user submits the experiment through a command line tool [nnictl](../tools/README.md), a demon process (NNI manager) take care of search process. NNI manager continuously get search settings that generated by tuning algorithms, then NNI manager asks the training service component to dispatch and run trial jobs in a targeted training environment (e.g. local machine, remote servers and cloud). The results of trials jobs such as model accurate will send back to tuning algorithms for generating more meaningful search settings. NNI manager stops the search process after it find the best models. @@ -17,7 +17,7 @@ After user submits the experiment through a command line tool [nnictl](../tools/ ## Architecture Overview

-drawing +drawing

User can use the nnictl and/or a visualized Web UI nniboard to monitor and debug a given experiment. From 4da26648ab833bbb018af3f243ff780a55f92d2a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:40:13 +0800 Subject: [PATCH 0205/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md index 7170dbb0bf..f11f2e5b50 100644 --- a/zh_CN/docs/Overview.md +++ b/zh_CN/docs/Overview.md @@ -17,7 +17,7 @@ After user submits the experiment through a command line tool [nnictl](../tools/ ## Architecture Overview

-drawing +drawing

User can use the nnictl and/or a visualized Web UI nniboard to monitor and debug a given experiment. From e13c95b7c33c7aa20393dcb12dfe0b4a6b147983 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:41:33 +0800 Subject: [PATCH 0206/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md index f11f2e5b50..959c5b093f 100644 --- a/zh_CN/docs/Overview.md +++ b/zh_CN/docs/Overview.md @@ -12,7 +12,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 drawing

-After user submits the experiment through a command line tool [nnictl](../tools/README.md), a demon process (NNI manager) take care of search process. NNI manager continuously get search settings that generated by tuning algorithms, then NNI manager asks the training service component to dispatch and run trial jobs in a targeted training environment (e.g. local machine, remote servers and cloud). The results of trials jobs such as model accurate will send back to tuning algorithms for generating more meaningful search settings. NNI manager stops the search process after it find the best models. +用户通过命令行工具 [nnictl](../tools/README.md) 创建实验后,守护进程(NNI 管理器)会开始搜索过程。 NNI manager continuously get search settings that generated by tuning algorithms, then NNI manager asks the training service component to dispatch and run trial jobs in a targeted training environment (e.g. local machine, remote servers and cloud). The results of trials jobs such as model accurate will send back to tuning algorithms for generating more meaningful search settings. NNI manager stops the search process after it find the best models. ## Architecture Overview From 6edc181b2e277dfad7f955df2d1f45b40106c381 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 13:52:08 +0800 Subject: [PATCH 0207/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md index 959c5b093f..e3df97ab78 100644 --- a/zh_CN/docs/Overview.md +++ b/zh_CN/docs/Overview.md @@ -12,9 +12,9 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 drawing

-用户通过命令行工具 [nnictl](../tools/README.md) 创建实验后,守护进程(NNI 管理器)会开始搜索过程。 NNI manager continuously get search settings that generated by tuning algorithms, then NNI manager asks the training service component to dispatch and run trial jobs in a targeted training environment (e.g. local machine, remote servers and cloud). The results of trials jobs such as model accurate will send back to tuning algorithms for generating more meaningful search settings. NNI manager stops the search process after it find the best models. +用户通过命令行工具 [nnictl](../tools/README.md) 创建实验后,守护进程(NNI 管理器)会开始搜索过程。 NNI 管理器不断地通过搜索配置的优化算法来生成参数配置,并通过训练服务组件,在目标训练环境中(例如:本机、远程服务器、云服务等),来调度并运行尝试的任务。 尝试任务的模型精度等结果会返回给优化算法,以便生成更好的参数配置。 NNI 管理器会在找到最佳模型后停止搜索过程。 -## Architecture Overview +## 体系结构概述

drawing From b766680665828643b3c8805a6958a0c7268560f9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:01:56 +0800 Subject: [PATCH 0208/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md index e3df97ab78..08792217e8 100644 --- a/zh_CN/docs/Overview.md +++ b/zh_CN/docs/Overview.md @@ -20,27 +20,27 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 drawing

-User can use the nnictl and/or a visualized Web UI nniboard to monitor and debug a given experiment. +用户可以用 nnictl 或可视化的 WEB 界面 NNIBoard 来查看并调试指定的实验。 -NNI provides a set of examples in the package to get you familiar with the above process. In the following example [/examples/trials/mnist], we had already set up the configuration and updated the training codes for you. You can directly run the following command to start an experiment. +NNI 提供了一组样例来帮助熟悉以上过程。 -## Key Concepts +## 主要概念 -**Experiment** in NNI is a method for testing different assumptions (hypotheses) by Trials under conditions constructed and controlled by NNI. During the experiment, one or more conditions are allowed to change in an organized manner and effects of these changes on associated conditions. +**Experiment(实验)**,在 NNI 中是通过 Trial(尝试)在给定的条件来测试不同的假设情况。 在实验过程中,会有条理的修改一个或多个条件,以便测试它们对相关条件的影响。 -### **Trial** +### **Trial(尝试)** -**Trial** in NNI is an individual attempt at applying a set of parameters on a model. +**Trial(尝试)**是将一组参数在模型上独立的一次尝试。 -### **Tuner** +### **Tuner(调参器)** -**Tuner** in NNI is an implementation of Tuner API for a special tuning algorithm. [Read more about the Tuners supported in the latest NNI release](HowToChooseTuner.md) +**Tuner(调参器)**,在 NNI 中是实现了调参器 API 的某个超参调优算法。 [了解 NNI 中最新内置的调参器](HowToChooseTuner.md) -### **Assessor** +### **Assessor(评估器)** -**Assessor** in NNI is an implementation of Assessor API for optimizing the execution of experiment. +**Assessor(评估器)**,实现了评估器 API,用来加速实验执行过程。 -## Learn More +## 了解更多信息 * [Get started](GetStarted.md) * [Install NNI](Installation.md) From 5f75f9df3df222f1e0b9dcbe6776133b3e330502 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:03:19 +0800 Subject: [PATCH 0209/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md index 08792217e8..345a9cde6e 100644 --- a/zh_CN/docs/Overview.md +++ b/zh_CN/docs/Overview.md @@ -42,14 +42,14 @@ NNI 提供了一组样例来帮助熟悉以上过程。 ## 了解更多信息 -* [Get started](GetStarted.md) -* [Install NNI](Installation.md) -* [Use command line tool nnictl](NNICTLDOC.md) -* [Use NNIBoard](WebUI.md) -* [Use annotation](howto_1_WriteTrial.md#nni-python-annotation) +* [开始使用](GetStarted.md) +* [安装 NNI](Installation.md) +* [使用命令行工具 nnictl](NNICTLDOC.md) +* [使用 NNIBoard](WebUI.md) +* [使用标记](howto_1_WriteTrial.md#nni-python-annotation) -### **Tutorials** +### **教程** -* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) -* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) -* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file +* [如何在本机运行实验 (支持多 GPU 卡)?](tutorial_1_CR_exp_local_api.md) +* [如何在多机上运行实验?](tutorial_2_RemoteMachineMode.md) +* [如何在 OpenPAI 上运行实验?](PAIMode.md) \ No newline at end of file From c9dd2e88e8b6b0e86df693a99dec96751f4b0499 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:11:47 +0800 Subject: [PATCH 0210/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md index e350126d26..64e8a4e935 100644 --- a/zh_CN/docs/PAIMode.md +++ b/zh_CN/docs/PAIMode.md @@ -1,26 +1,26 @@ # **在 OpenPAI 上运行实验** -NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运行实验,即 pai 模式。 在使用 NNI 的 pai 模式前, 需要有 [OpenPAI](https://github.com/Microsoft/pai) 群集的账户。 See [here](https://github.com/Microsoft/pai#how-to-deploy) if you don't have any OpenPAI account and want to deploy an OpenPAI cluster. In pai mode, your trial program will run in pai's container created by Docker. +NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运行实验,即 pai 模式。 在使用 NNI 的 pai 模式前, 需要有 [OpenPAI](https://github.com/Microsoft/pai) 群集的账户。 如果没有 OpenPAI 账户,参考[这里](https://github.com/Microsoft/pai#how-to-deploy)来进行部署。 在 pai 模式中,会在 Docker 创建的容器中运行尝试程序。 -## Setup environment +## 设置环境 -Install NNI, follow the install guide [here](GetStarted.md). +参考[指南](GetStarted.md)安装 NNI。 -## Run an experiment +## 运行实验 -Use `examples/trials/mnist-annotation` as an example. The nni config yaml file's content is like: +以 `examples/trials/mnist-annotation` 为例。 NNI 的 yaml 配置文件如下: authorName: your_name experimentName: auto_mnist - # how many trials could be concurrently running + # 并发运行的尝试数量 trialConcurrency: 2 - # maximum experiment running duration + # 实验的最长持续运行时间 maxExecDuration: 3h - # empty means never stop + # 空表示一直运行 maxTrialNum: 100 - # choice: local, remote, pai + # 可选项: local, remote, pai trainingServicePlatform: pai - # choice: true, false + # 可选项: true, false useAnnotation: true tuner: builtinTunerName: TPE @@ -35,35 +35,35 @@ Use `examples/trials/mnist-annotation` as an example. The nni config yaml file's image: openpai/pai.example.tensorflow dataDir: hdfs://10.1.1.1:9000/nni outputDir: hdfs://10.1.1.1:9000/nni - # Configuration to access OpenPAI Cluster + # 配置访问的 OpenPAI 集群 paiConfig: userName: your_pai_nni_user passWord: your_pai_password host: 10.1.1.1 -Note: You should set `trainingServicePlatform: pai` in nni config yaml file if you want to start experiment in pai mode. +注意:如果用 pai 模式运行,需要在 yaml 文件中设置 `trainingServicePlatform: pai`。 -Compared with LocalMode and [RemoteMachineMode](RemoteMachineMode.md), trial configuration in pai mode have five additional keys: +与本机模式,以及[远程计算机模式](RemoteMachineMode.md)相比,pai 模式的尝试有额外的配置: * cpuNum - * Required key. Should be positive number based on your trial program's CPU requirement + * 必填。 尝试程序的 CPU 需求,必须为正数。 * memoryMB - * 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. + * 必填。 在 pai 模式中,尝试程序由 OpenPAI 在 [Docker 容器](https://www.docker.com/)中安排运行。 此键用来指定尝试程序的容器使用的 Docker 映像。 + * [Docker Hub](https://hub.docker.com/) 上有预制的 NNI Docker 映像 [nnimsra/nni](https://hub.docker.com/r/msranni/nni/)。 它包含了用来启动 NNI 实验所依赖的所有 Python 包,Node 模块和 JavaScript。 用来生成此映像的文件在[这里](../deployment/Dockerfile.build.base)。 可以直接使用此映像,或参考它来生成自己的映像。 * 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} + * 可选。 指定了尝试用于下载数据的 HDFS 数据目录。 格式应为 hdfs://{your HDFS host}:9000/{数据目录} * outputDir - * Optional key. It specifies the HDFS output direcotry for trial. Once the trial is completed (either succeed or fail), trial's stdout, stderr will be copied to this directory by NNI sdk automatically. The format should be something like hdfs://{your HDFS host}:9000/{your output directory} + * 可选。 指定了尝试的 HDFS 输出目录。 尝试在完成(成功或失败)后,尝试的 stdout, stderr 会被 NNI 自动复制到此目录中。 格式应为 hdfs://{your HDFS host}:9000/{输出目录} -Once complete to fill nni experiment config file and save (for example, save as exp_pai.yaml), then run the following command +完成并保存 NNI 实验配置文件后(例如可保存为:exp_pai.yaml),运行以下命令: nnictl create --config exp_pai.yaml -to start the experiment in pai mode. NNI will create OpanPAI job for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the pai jobs created by NNI in your OpenPAI cluster's web portal, like: ![](./img/nni_pai_joblist.jpg) +来在 pai 模式下启动实验。 NNI will create OpanPAI job for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the pai jobs created by NNI in your OpenPAI cluster's web portal, like: ![](./img/nni_pai_joblist.jpg) Notice: In pai mode, NNIManager will start a rest server and listen on a port which is your NNI WebUI's port plus 1. For example, if your WebUI port is `8080`, the rest server will listen on `8081`, to receive metrics from trial job running in Kubernetes. So you should `enable 8081` TCP port in your firewall rule to allow incoming traffic. From 83867b90c9bb5b5b67602b0ce6122a476bf82f82 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:15:09 +0800 Subject: [PATCH 0211/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md index 64e8a4e935..34def5b29c 100644 --- a/zh_CN/docs/PAIMode.md +++ b/zh_CN/docs/PAIMode.md @@ -63,15 +63,15 @@ NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运 nnictl create --config exp_pai.yaml -来在 pai 模式下启动实验。 NNI will create OpanPAI job for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. You can see the pai jobs created by NNI in your OpenPAI cluster's web portal, like: ![](./img/nni_pai_joblist.jpg) +来在 pai 模式下启动实验。 NNI 会为每个尝试创建 OpenPAI 作业,作业名称的格式为 `nni_exp_{experiment_id}_trial_{trial_id}`。 可以在 OpenPAI 集群的网站中看到 NNI 创建的作业,例如: ![](../../docs/img/nni_pai_joblist.jpg) Notice: In pai mode, NNIManager will start a rest server and listen on a port which is your NNI WebUI's port plus 1. For example, if your WebUI port is `8080`, the rest server will listen on `8081`, to receive metrics from trial job running in Kubernetes. So you should `enable 8081` TCP port in your firewall rule to allow incoming traffic. Once a trial job is completed, you can goto NNI WebUI's overview page (like http://localhost:8080/oview) to check trial's information. -Expand a trial information in trial list view, click the logPath link like: ![](./img/nni_webui_joblist.jpg) +Expand a trial information in trial list view, click the logPath link like: ![](../../docs/img/nni_webui_joblist.jpg) -And you will be redirected to HDFS web portal to browse the output files of that trial in HDFS: ![](./img/nni_trial_hdfs_output.jpg) +And you will be redirected to HDFS web portal to browse the output files of that trial in HDFS: ![](../../docs/img/nni_trial_hdfs_output.jpg) You can see there're three fils in output folder: stderr, stdout, and trial.log From c0c7edf0fcf41a8a2741f065b1ff274a46c76056 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:20:00 +0800 Subject: [PATCH 0212/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 77 ++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md index 34def5b29c..f58835f751 100644 --- a/zh_CN/docs/PAIMode.md +++ b/zh_CN/docs/PAIMode.md @@ -10,37 +10,38 @@ NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运 以 `examples/trials/mnist-annotation` 为例。 NNI 的 yaml 配置文件如下: - authorName: your_name - experimentName: auto_mnist - # 并发运行的尝试数量 - trialConcurrency: 2 - # 实验的最长持续运行时间 - maxExecDuration: 3h - # 空表示一直运行 - maxTrialNum: 100 - # 可选项: local, remote, pai - trainingServicePlatform: pai - # 可选项: true, false - useAnnotation: true - tuner: - builtinTunerName: TPE - classArgs: - optimize_mode: maximize - trial: - command: python3 mnist.py - codeDir: ~/nni/examples/trials/mnist-annotation - gpuNum: 0 - cpuNum: 1 - memoryMB: 8196 - image: openpai/pai.example.tensorflow - dataDir: hdfs://10.1.1.1:9000/nni - outputDir: hdfs://10.1.1.1:9000/nni - # 配置访问的 OpenPAI 集群 - paiConfig: - userName: your_pai_nni_user - passWord: your_pai_password - host: 10.1.1.1 - +```yaml +authorName: your_name +experimentName: auto_mnist +# 并发运行的尝试数量 +trialConcurrency: 2 +# 实验的最长持续运行时间 +maxExecDuration: 3h +# 空表示一直运行 +maxTrialNum: 100 +# 可选项: local, remote, pai +trainingServicePlatform: pai +# 可选项: true, false +useAnnotation: true +tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize +trial: + command: python3 mnist.py + codeDir: ~/nni/examples/trials/mnist-annotation + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + image: openpai/pai.example.tensorflow + dataDir: hdfs://10.1.1.1:9000/nni + outputDir: hdfs://10.1.1.1:9000/nni +# 配置访问的 OpenPAI 集群 +paiConfig: + userName: your_pai_nni_user + passWord: your_pai_password + host: 10.1.1.1 +``` 注意:如果用 pai 模式运行,需要在 yaml 文件中设置 `trainingServicePlatform: pai`。 @@ -65,16 +66,16 @@ NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运 来在 pai 模式下启动实验。 NNI 会为每个尝试创建 OpenPAI 作业,作业名称的格式为 `nni_exp_{experiment_id}_trial_{trial_id}`。 可以在 OpenPAI 集群的网站中看到 NNI 创建的作业,例如: ![](../../docs/img/nni_pai_joblist.jpg) -Notice: In pai mode, NNIManager will start a rest server and listen on a port which is your NNI WebUI's port plus 1. For example, if your WebUI port is `8080`, the rest server will listen on `8081`, to receive metrics from trial job running in Kubernetes. So you should `enable 8081` TCP port in your firewall rule to allow incoming traffic. +注意:pai 模式下,NNIManager 会启动 RESTful 服务,监听端口为 NNI 网页服务器的端口加1。 例如,如果网页端口为`8080`,那么 RESTful 服务器会监听在 `8081`端口,来接收运行在 Kubernetes 中的尝试作业的指标。 因此,需要在防火墙中启用端口 `8081` 的 TCP 协议,以允许传入流量。 -Once a trial job is completed, you can goto NNI WebUI's overview page (like http://localhost:8080/oview) to check trial's information. +当一个尝试作业完成后,可以在 NNI 网页的概述页面(如:http://localhost:8080/oview)中查看尝试的信息。 -Expand a trial information in trial list view, click the logPath link like: ![](../../docs/img/nni_webui_joblist.jpg) +在尝试列表页面中展开尝试信息,点击如下的 logPath: ![](../../docs/img/nni_webui_joblist.jpg) -And you will be redirected to HDFS web portal to browse the output files of that trial in HDFS: ![](../../docs/img/nni_trial_hdfs_output.jpg) +接着将会打开 HDFS 的 WEB 界面,并浏览到尝试的输出文件: ![](../../docs/img/nni_trial_hdfs_output.jpg) -You can see there're three fils in output folder: stderr, stdout, and trial.log +在输出目录中可以看到三个文件:stderr, stdout, 以及 trial.log -If you also want to save trial's other output into HDFS, like model files, you can use environment variable `NNI_OUTPUT_DIR` in your trial code to save your own output files, and NNI SDK will copy all the files in `NNI_OUTPUT_DIR` from trial's container to HDFS. +如果希望将尝试的模型数据等其它输出保存到HDFS中,可在尝试代码中使用 `NNI_OUTPUT_DIR` 来自己保存输出文件,NNI SDK会从尝试的容器中将 `NNI_OUTPUT_DIR` 中的文件复制到 HDFS 中。 -Any problems when using NNI in pai mode, plesae create issues on [NNI github repo](https://github.com/Microsoft/nni), or send mail to nni@microsoft.com \ No newline at end of file +如果在使用 pai 模式时遇到任何问题,请到 [NNI github](https://github.com/Microsoft/nni)中创建问题,或发信给 nni@microsoft.com。 \ No newline at end of file From 65a60fa53e9193ed56786509cdae44da21198216 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:21:43 +0800 Subject: [PATCH 0213/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index b19a9b9800..58118b190e 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -1,9 +1,9 @@ -# Release 0.4 - 12/6/2018 +# 发布 0.4 - 12/6/2018 -## Major Features +## 主要功能 -* [Kubeflow Training service](./KubeflowMode.md) - * Support tf-operator +* [Kubeflow 训练服务](./KubeflowMode.md) + * 支持 tf-operator * [Distributed trial example](../examples/trials/mnist-distributed/dist_mnist.py) on Kubeflow * [Grid search tuner](../src/sdk/pynni/nni/README.md#Grid) * [Hyperband tuner](../src/sdk/pynni/nni/README.md#Hyperband) From e47bebdc06628cb87460187894866e396abd372f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:31:44 +0800 Subject: [PATCH 0214/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 58 +++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index 58118b190e..bfc270a1b8 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -4,37 +4,37 @@ * [Kubeflow 训练服务](./KubeflowMode.md) * 支持 tf-operator - * [Distributed trial example](../examples/trials/mnist-distributed/dist_mnist.py) on Kubeflow -* [Grid search tuner](../src/sdk/pynni/nni/README.md#Grid) -* [Hyperband tuner](../src/sdk/pynni/nni/README.md#Hyperband) -* Support launch NNI experiment on MAC + * Kubeflow 上的[分布式尝试样例](../examples/trials/mnist-distributed/dist_mnist.py) +* [网格搜索调参器](../src/sdk/pynni/nni/README.md#Grid) +* [Hyperband 调参器](../src/sdk/pynni/nni/README.md#Hyperband) +* 支持在 MAC 上运行 NNI 实验 * WebUI - * UI support for hyperband tuner - * Remove tensorboard button - * Show experiment error message - * Show line numbers in search space and trial profile - * Support search a specific trial by trial number - * Show trial's hdfsLogPath - * Download experiment parameters - -## Others - -* Asynchronous dispatcher -* Docker file update, add pytorch library -* Refactor 'nnictl stop' process, send SIGTERM to nni manager process, rather than calling stop Rest API. -* OpenPAI training service bug fix - * Support NNI Manager IP configuration(nniManagerIp) in PAI cluster config file, to fix the issue that user’s machine has no eth0 device - * File number in codeDir is capped to 1000 now, to avoid user mistakenly fill root dir for codeDir - * Don’t print useless ‘metrics is empty’ log int PAI job’s stdout. Only print useful message once new metrics are recorded, to reduce confusion when user checks PAI trial’s output for debugging purpose - * Add timestamp at the beginning of each log entry in trial keeper. - -# Release 0.3.0 - 11/2/2018 - -## NNICTL new features and updates - -* Support running multiple experiments simultaneously. + * 支持 hyperband 调参器 + * 移除 tensorboard 按钮 + * 显示实验的错误消息 + * 显示搜索空间和尝试配置的行号 + * 支持通过指定的尝试 id 来搜索 + * 显示尝试的 hdfsLogPath + * 下载实验参数 + +## 其它 + +* 异步调度 +* 更新 Docker 文件,增加 pytorch 库 +* 重构 'nnictl stop' 过程,发送 SIGTERM 给 NNI 管理器进程,而不是调用停止 Restful API. +* OpenPAI 训练服务修复缺陷 + * 在 NNI 管理器中为 PAI 集群配置文件支持 IP 配置(nniManagerIp),来修复用户计算机没有 eth0 设备的问题。 + * codeDir 中的文件数量上限改为1000,避免用户无意中填写了 root 目录。 + * 移除 PAI 作业的 stdout 日志中无用的 ‘metrics is empty’。 在新指标被记录时,仅输出有用的消息,来减少用户检查 PAI 尝试输出时的困惑。 + * 在尝试 keeper 的开始增加时间戳。 + +# 发布 0.3.0 - 11/2/2018 + +## NNICTL 的新功能和更新 + +* 支持同时运行多个实验。 - Before v0.3, NNI only supports running single experiment once a time. After this realse, users are able to run multiple experiments simultaneously. Each experiment will require a unique port, the 1st experiment will be set to the default port as previous versions. You can specify a unique port for the rest experiments as below: + 在 v0.3 以前,NNI 仅支持一次运行一个实验。 此版本开始,用户可以同时运行多个实验。 Each experiment will require a unique port, the 1st experiment will be set to the default port as previous versions. You can specify a unique port for the rest experiments as below: nnictl create --port 8081 --config From 569e602b29e88cbea247e017163458e3479d1ba3 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:41:31 +0800 Subject: [PATCH 0215/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index bfc270a1b8..9a837626a8 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -34,17 +34,17 @@ * 支持同时运行多个实验。 - 在 v0.3 以前,NNI 仅支持一次运行一个实验。 此版本开始,用户可以同时运行多个实验。 Each experiment will require a unique port, the 1st experiment will be set to the default port as previous versions. You can specify a unique port for the rest experiments as below: + 在 v0.3 以前,NNI 仅支持一次运行一个实验。 此版本开始,用户可以同时运行多个实验。 每个实验都需要一个唯一的端口,第一个实验会像以前版本一样使用默认端口。 需要为其它实验指定唯一端口: nnictl create --port 8081 --config -* Support updating max trial number. use ```nnictl update --help``` to learn more. Or refer to [NNICTL Spec](https://github.com/Microsoft/nni/blob/master/docs/NNICTLDOC.md) for the fully usage of NNICTL. +* 支持更新最大尝试的数量。 使用 ```nnictl update --help``` 了解更多信息。 或参考 [NNICTL 说明](https://github.com/Microsoft/nni/blob/master/docs/NNICTLDOC.md)来查看完整帮助。 -## API new features and updates +## API 的新功能和更新 -* breaking change: nn.get_parameters() is refactored to nni.get_next_parameter. All examples of prior releases can not run on v0.3, please clone nni repo to get new examples. If you had applied NNI to your own codes, please update the API accordingly. +* 不兼容的改动:nn.get_parameters() 改为 nni.get_next_parameter。 所有以前版本的样例将无法在 v0.3 上运行,需要重新克隆 NNI 代码库获取新样例。 如果在自己的代码中使用了 NNI,也需要相应的更新。 -* New API **nni.get_sequence_id()**. Each trial job is allocated a unique sequence number, which can be retrieved by nni.get_sequence_id() API. +* 新 API **nni.get_sequence_id()**。 每个尝试任务都会被分配一个唯一的序列数字,可通过 nni.get_sequence_id() API 来获取。 git clone -b v0.3 https://github.com/Microsoft/nni.git From e86d80821b2c57e975ef45a40aeaffcd2daa13d0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 14:51:33 +0800 Subject: [PATCH 0216/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index 9a837626a8..8ea50dc4cb 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -48,14 +48,14 @@ git clone -b v0.3 https://github.com/Microsoft/nni.git -* **nni.report_final_result(result)** API supports more data types for result parameter. It can be of following types: +* **nni.report_final_result(result)** API 支持了更多结果参数的类型。 可用类型: * int * float - * A python dict containing 'default' key, the value of 'default' key should be of type int or float. The dict can contain any other key value pairs. + * 包含有 'default' 键值的 dict,'default' 的值必须为 int 或 float。 dict 可以包含任何其它键值对。 -## New tuner support +## 新的内置调参器 -* **Batch Tuner** which iterates all parameter combination, can be used to submit batch trial jobs. +* **Batch Tuner(批处理调参器)** 会执行所有曹参组合,可被用来批量提交尝试任务。 ## New examples From 30fb9e48da3faf6ef1a07e58b34a5acf078e666b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 15:11:39 +0800 Subject: [PATCH 0217/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index 8ea50dc4cb..ab4371d2a3 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -57,21 +57,21 @@ * **Batch Tuner(批处理调参器)** 会执行所有曹参组合,可被用来批量提交尝试任务。 -## New examples +## 新样例 -* A NNI Docker image for public usage: ```docker pull msranni/nni:latest``` -* New trial example: [NNI Sklearn Example](https://github.com/Microsoft/nni/tree/master/examples/trials/sklearn) -* New competition example: [Kaggle Competition TGS Salt Example](https://github.com/Microsoft/nni/tree/master/examples/trials/kaggle-tgs-salt) +* 公共的 NNI Docker 映像: ```docker pull msranni/nni:latest``` +* 新的尝试样例: [NNI Sklearn 样例](https://github.com/Microsoft/nni/tree/master/examples/trials/sklearn) +* 新的竞赛样例:[Kaggle Competition TGS Salt](https://github.com/Microsoft/nni/tree/master/examples/trials/kaggle-tgs-salt) -## Others +## 其它 -* UI refactoring, refer to [WebUI doc](WebUI.md) for how to work with the new UI. -* Continuous Integration: NNI had switched to Azure pipelines -* [Known Issues in release 0.3.0](https://github.com/Microsoft/nni/labels/nni030knownissues). +* 界面重构,参考[网页文档](WebUI.md),了解如何使用新界面。 +* 持续集成:NNI 已切换到 Azure pipelines。 +* [0.3.0 的已知问题](https://github.com/Microsoft/nni/labels/nni030knownissues)。 -# Release 0.2.0 - 9/29/2018 +# 发布 0.2.0 - 9/29/2018 -## Major Features +## 主要功能 * 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 From 105883e91b55d0c2a88b8b9a657e462fba627000 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 15:19:59 +0800 Subject: [PATCH 0218/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 82 +++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index ab4371d2a3..ec8af9436b 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -5,8 +5,8 @@ * [Kubeflow 训练服务](./KubeflowMode.md) * 支持 tf-operator * Kubeflow 上的[分布式尝试样例](../examples/trials/mnist-distributed/dist_mnist.py) -* [网格搜索调参器](../src/sdk/pynni/nni/README.md#Grid) -* [Hyperband 调参器](../src/sdk/pynni/nni/README.md#Hyperband) +* [网格搜索调参器](../../src/sdk/pynni/nni/README.md#Grid) +* [Hyperband 调参器](../../src/sdk/pynni/nni/README.md#Hyperband) * 支持在 MAC 上运行 NNI 实验 * WebUI * 支持 hyperband 调参器 @@ -73,42 +73,42 @@ ## 主要功能 -* 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 (See [here](HowToChooseTuner.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 - * Update ga squad example and related documentation - * WebUI UX small enhancement and bug fix - -## Known Issues - -[Known Issues in release 0.2.0](https://github.com/Microsoft/nni/labels/nni020knownissues). - -# Release 0.1.0 - 9/10/2018 (initial release) - -Initial release of Neural Network Intelligence (NNI). - -## Major Features - -* Installation and Deployment - * Support pip install and source codes install - * Support training services on local mode(including Multi-GPU mode) as well as multi-machines mode -* Tuners, Assessors and Trial - * Support AutoML algorithms including: hyperopt_tpe, hyperopt_annealing, hyperopt_random, and evolution_tuner - * Support assessor(early stop) algorithms including: medianstop algorithm - * Provide Python API for user defined tuners and assessors - * Provide Python API for user to wrap trial code as NNI deployable codes -* Experiments - * Provide a command line toolkit 'nnictl' for experiments management - * Provide a WebUI for viewing experiments details and managing experiments -* Continuous Integration - * Support CI by providing out-of-box integration with [travis-ci](https://github.com/travis-ci) on ubuntu -* Others - * Support simple GPU job scheduling - -## Known Issues - -[Known Issues in release 0.1.0](https://github.com/Microsoft/nni/labels/nni010knownissues). \ No newline at end of file +* 支持 [OpenPAI](https://github.com/Microsoft/pai) (又称 pai) 训练服务 (参考[这里](./PAIMode.md)来了解如何在 pai 模式下提交 NNI 任务) + * 支持 pai 模式的训练服务。 NNI 尝试可发送至 OpenPAI 集群上运行 + * NNI 尝试输出 (包括日志和模型文件) 会被复制到 OpenPAI 的 HDFS 中。 +* 支持 [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) 调参器 (参考[这里](HowToChooseTuner.md),了解如何使用 SMAC 调参器) + * [SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) 基于 Sequential Model-Based Optimization (SMBO). 它会利用使用过的突出的模型(高斯随机过程模型),并将随机森林引入到SMBO中,来处理分类参数。 NNI 的 SMAC 通过包装 [SMAC3](https://github.com/automl/SMAC3) 来支持。 +* 支持将 NNI 安装在 [conda](https://conda.io/docs/index.html) 和 Python 虚拟环境中。 +* 其它 + * 更新 ga squad 样例与相关文档 + * 用户体验改善及缺陷修复 + +## 已知问题 + +[0.2.0 的已知问题](https://github.com/Microsoft/nni/labels/nni020knownissues)。 + +# 发布 0.1.0 - 9/10/2018 (首个版本) + +首次发布 Neural Network Intelligence (NNI)。 + +## 主要功能 + +* 安装和部署 + * 支持 pip 和源代码安装 + * 支持本机(包括多 GPU 卡)训练和远程多机训练模式 +* 调参器,评估器和尝试 + * 支持的自动机器学习算法包括: hyperopt_tpe, hyperopt_annealing, hyperopt_random, 和 evolution_tuner。 + * 支持评估器(提前终止)算法包括:medianstop。 + * 提供 Python API 来自定义调参器和评估器 + * 提供 Python API 来包装尝试代码,以便能在 NNI 中运行 +* 实验 + * 提供命令行工具 'nnictl' 来管理实验 + * 提供网页界面来查看并管理实验 +* 持续集成 + * 使用 Ubuntu 的 [travis-ci](https://github.com/travis-ci) 来支持持续集成 +* 其它 + * 支持简单的 GPU 任务调度 + +## 已知问题 + +[0.1.0 的已知问题](https://github.com/Microsoft/nni/labels/nni010knownissues)。 \ No newline at end of file From c1dc6a7aa83a22349cb8eaf96119feb8805e8414 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 15:20:35 +0800 Subject: [PATCH 0219/1573] New translations RELEASE.md (Chinese Simplified) --- zh_CN/docs/RELEASE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/RELEASE.md b/zh_CN/docs/RELEASE.md index ec8af9436b..653c8546ac 100644 --- a/zh_CN/docs/RELEASE.md +++ b/zh_CN/docs/RELEASE.md @@ -5,8 +5,8 @@ * [Kubeflow 训练服务](./KubeflowMode.md) * 支持 tf-operator * Kubeflow 上的[分布式尝试样例](../examples/trials/mnist-distributed/dist_mnist.py) -* [网格搜索调参器](../../src/sdk/pynni/nni/README.md#Grid) -* [Hyperband 调参器](../../src/sdk/pynni/nni/README.md#Hyperband) +* [网格搜索调参器](../src/sdk/pynni/nni/README.md#Grid) +* [Hyperband 调参器](../src/sdk/pynni/nni/README.md#Hyperband) * 支持在 MAC 上运行 NNI 实验 * WebUI * 支持 hyperband 调参器 From fba0f0ec9e7cf3b0d243c82b4ec9278c03f0a4f8 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 15:23:32 +0800 Subject: [PATCH 0220/1573] New translations RemoteMachineMode.md (Chinese Simplified) --- zh_CN/docs/RemoteMachineMode.md | 81 +++++++++++++++++---------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/zh_CN/docs/RemoteMachineMode.md b/zh_CN/docs/RemoteMachineMode.md index 657b15f48a..689b3f3ebd 100644 --- a/zh_CN/docs/RemoteMachineMode.md +++ b/zh_CN/docs/RemoteMachineMode.md @@ -1,6 +1,6 @@ -# **Run an Experiment on Multiple Machines** +**Run an Experiment on Multiple Machines** -NNI supports running an experiment on multiple machines through SSH channel, called `remote` mode. NNI assumes that you have access to those machines, and already setup the environment for running deep learning training code. +=== NNI supports running an experiment on multiple machines through SSH channel, called `remote` mode. NNI assumes that you have access to those machines, and already setup the environment for running deep learning training code. e.g. Three machines and you login in with account `bob` (Note: the account is not necessarily the same on different machine): @@ -18,7 +18,9 @@ For remote machines that are used only to run trials but not the nnictl, you can * **Install python SDK through pip** + ```bash python3 -m pip install --user --upgrade nni-sdk + ``` ## Run an experiment @@ -26,45 +28,46 @@ Install NNI on another machine which has network accessibility to those three ma We use `examples/trials/mnist-annotation` as an example here. `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` to see the detailed configuration file: - authorName: default - experimentName: example_mnist - trialConcurrency: 1 - maxExecDuration: 1h - maxTrialNum: 10 - #choice: local, remote, pai - trainingServicePlatform: remote - #choice: true, false - useAnnotation: true - tuner: - #choice: TPE, Random, Anneal, Evolution, BatchTuner - #SMAC (SMAC should be installed through nnictl) - builtinTunerName: TPE - classArgs: - #choice: maximize, minimize - optimize_mode: maximize - trial: - command: python3 mnist.py - codeDir: . - gpuNum: 0 - #machineList can be empty if the platform is local - machineList: - - - ip: 10.1.1.1 - username: bob - passwd: bob123 - #port can be skip if using default ssh port 22 - #port: 22 - - ip: 10.1.1.2 - username: bob - passwd: bob123 - - ip: 10.1.1.3 - username: bob - passwd: bob123 - +```yaml +authorName: default +experimentName: example_mnist +trialConcurrency: 1 +maxExecDuration: 1h +maxTrialNum: 10 +#choice: local, remote, pai +trainingServicePlatform: remote +#choice: true, false +useAnnotation: true +tuner: + #choice: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC should be installed through nnictl) + builtinTunerName: TPE + classArgs: + #choice: maximize, minimize + optimize_mode: maximize +trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 +#machineList can be empty if the platform is local +machineList: + - ip: 10.1.1.1 + username: bob + passwd: bob123 + #port can be skip if using default ssh port 22 + #port: 22 + - ip: 10.1.1.2 + username: bob + passwd: bob123 + - ip: 10.1.1.3 + username: bob + passwd: bob123 +``` Simply filling the `machineList` section and then run: - nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml - +```bash +nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml +``` to start the experiment. \ No newline at end of file From 0aba172afa960ede0a5084458b4ccdca94bf8835 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 15:31:51 +0800 Subject: [PATCH 0221/1573] New translations RemoteMachineMode.md (Chinese Simplified) --- zh_CN/docs/RemoteMachineMode.md | 50 +++++++++++++++++---------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/zh_CN/docs/RemoteMachineMode.md b/zh_CN/docs/RemoteMachineMode.md index 689b3f3ebd..b2fa4508bc 100644 --- a/zh_CN/docs/RemoteMachineMode.md +++ b/zh_CN/docs/RemoteMachineMode.md @@ -1,32 +1,34 @@ -**Run an Experiment on Multiple Machines** +**在多机上运行实验** -=== NNI supports running an experiment on multiple machines through SSH channel, called `remote` mode. NNI assumes that you have access to those machines, and already setup the environment for running deep learning training code. +=== -e.g. Three machines and you login in with account `bob` (Note: the account is not necessarily the same on different machine): +NNI 支持通过 SSH 通道在多台计算机上运行实验,称为 `remote` 模式。 NNI 需要这些计算机的访问权限,并提前配置好深度学习训练环境。 -| IP | Username | Password | -| -------- | -------- | -------- | -| 10.1.1.1 | bob | bob123 | -| 10.1.1.2 | bob | bob123 | -| 10.1.1.3 | bob | bob123 | +例如:有三台服务器,登录账户为 `bob`(注意:账户不必在各台计算机上一致): -## Setup NNI environment +| IP | 用户名 | 密码 | +| -------- | --- | ------ | +| 10.1.1.1 | bob | bob123 | +| 10.1.1.2 | bob | bob123 | +| 10.1.1.3 | bob | bob123 | -Install NNI on each of your machines following the install guide [here](GetStarted.md). +## 设置 NNI 环境 -For remote machines that are used only to run trials but not the nnictl, you can just install python SDK: +按照[指南](GetStarted.md)在每台计算机上安装 NNI。 -* **Install python SDK through pip** +对于只需要运行尝试,不需要使用 nnictl 命令的计算机,可只安装 SDK: + +* **通过 pip 安装 SDK** ```bash python3 -m pip install --user --upgrade nni-sdk ``` -## Run an experiment +## 运行实验 -Install NNI on another machine which has network accessibility to those three machines above, or you can just use any machine above to run nnictl command line tool. +在另一台计算机,或在其中任何一台上安装 NNI,并运行 nnictl 工具。 -We use `examples/trials/mnist-annotation` as an example here. `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` to see the detailed configuration file: +以 `examples/trials/mnist-annotation` 为例。 `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` 来查看详细配置: ```yaml authorName: default @@ -34,27 +36,27 @@ experimentName: example_mnist trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 -#choice: local, remote, pai +#可选项: local, remote, pai trainingServicePlatform: remote -#choice: true, false +#可选项: true, false useAnnotation: true tuner: - #choice: TPE, Random, Anneal, Evolution, BatchTuner - #SMAC (SMAC should be installed through nnictl) + #可选项: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC 需要通过 nnictl 安装) builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize trial: command: python3 mnist.py codeDir: . gpuNum: 0 -#machineList can be empty if the platform is local +#local 模式下 machineList 可为空 machineList: - ip: 10.1.1.1 username: bob passwd: bob123 - #port can be skip if using default ssh port 22 + #使用默认端口 22 时,该配置可跳过 #port: 22 - ip: 10.1.1.2 username: bob @@ -64,10 +66,10 @@ machineList: passwd: bob123 ``` -Simply filling the `machineList` section and then run: +简单填写 `machineList` 部分,然后运行: ```bash nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml ``` -to start the experiment. \ No newline at end of file +来启动实验。 \ No newline at end of file From e11769ad81a953d235abf4a463d36858584f21ee Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 15:41:54 +0800 Subject: [PATCH 0222/1573] New translations SearchSpaceSpec.md (Chinese Simplified) --- zh_CN/docs/SearchSpaceSpec.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh_CN/docs/SearchSpaceSpec.md b/zh_CN/docs/SearchSpaceSpec.md index 0a153145a3..ede1d5e09b 100644 --- a/zh_CN/docs/SearchSpaceSpec.md +++ b/zh_CN/docs/SearchSpaceSpec.md @@ -1,8 +1,8 @@ -## How to define search space? +## 如何定义搜索空间? -### Hyper-parameter Search Space +### 超参搜索空间 -* A search space configure example as follow: +* 超参搜索空间配置样例: ```python { @@ -15,18 +15,18 @@ ``` -The example define ```dropout_rate``` as variable which priori distribution is uniform distribution, and its value from ```0.1``` and ```0.5```. The tuner will sample parameters/architecture by understanding the search space first. +此样例定义了 `dropout_rate` 变量,它的先验分布为均匀分布,值在 `0.1` 与 `0.5` 之间。 调参器会首先了解搜索空间,然后从中采样。 -User should define the name of variable, type and candidate value of variable. The candidate type and value for variable is here: +用户需要定义变量名、类型和取值范围。 变量类型和取值范围包括: * {"_type":"choice","_value":options} - * Which means the variable value is one of the options, which should be a list The elements of options can themselves be [nested] stochastic expressions. In this case, the stochastic choices that only appear in some of the options become conditional parameters. + * 变量值会是列表中的 options 之一。options 的元素可以是 [nested] 嵌套的随机表达式。 在这种情况下,随机选项仅会出现在某些选项满足条件时。 * {"_type":"randint","_value":[upper]} - * Which means the variable value is a random integer in the range [0, upper). The semantics of this distribution is that there is no more correlation in the loss function between nearby integer values, as compared with more distant integer values. This is an appropriate distribution for describing random seeds for example. If the loss function is probably more correlated for nearby integer values, then you should probably use one of the "quantized" continuous distributions, such as either quniform, qloguniform, qnormal or qlognormal. Note that if you want to change lower bound, you can use `quniform` for now. + * 此变量为范围 [0, upper) 之间的随机整数。 这种分布的语义,在较远整数与附近整数之间的损失函数无太大关系, 这是用来描述随机种子的较好分布。 如果损失函数与较近的整数更相关,则应该使用某个"quantized"的连续分布,如quniform, qloguniform, qnormal 或 qlognormal。 Note that if you want to change lower bound, you can use `quniform` for now. * {"_type":"uniform","_value":[low, high]} From 76176256b8011a044ee709fcef13a3d7ace1d50a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 15:52:03 +0800 Subject: [PATCH 0223/1573] New translations SearchSpaceSpec.md (Chinese Simplified) --- zh_CN/docs/SearchSpaceSpec.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/SearchSpaceSpec.md b/zh_CN/docs/SearchSpaceSpec.md index ede1d5e09b..9f1a07772d 100644 --- a/zh_CN/docs/SearchSpaceSpec.md +++ b/zh_CN/docs/SearchSpaceSpec.md @@ -26,18 +26,18 @@ * {"_type":"randint","_value":[upper]} - * 此变量为范围 [0, upper) 之间的随机整数。 这种分布的语义,在较远整数与附近整数之间的损失函数无太大关系, 这是用来描述随机种子的较好分布。 如果损失函数与较近的整数更相关,则应该使用某个"quantized"的连续分布,如quniform, qloguniform, qnormal 或 qlognormal。 Note that if you want to change lower bound, you can use `quniform` for now. + * 此变量为范围 [0, upper) 之间的随机整数。 这种分布的语义,在较远整数与附近整数之间的损失函数无太大关系, 这是用来描述随机种子的较好分布。 如果损失函数与较近的整数更相关,则应该使用某个"quantized"的连续分布,如quniform, qloguniform, qnormal 或 qlognormal。 注意,如果需要改动数字下限,可以使用 `quniform`。 * {"_type":"uniform","_value":[low, high]} - * Which means the variable value is a value uniformly between low and high. + * 变量是 low 和 high 之间均匀分布的值。 * When optimizing, this variable is constrained to a two-sided interval. * {"_type":"quniform","_value":[low, high, q]} - * Which means the variable value is a value like round(uniform(low, high) / q) * q + * 这表示变量值会类似于 round(uniform(low, high) / q) * q * Suitable for a discrete value with respect to which the objective is still somewhat "smooth", but which should be bounded both above and below. If you want to uniformly choose integer from a range [low, high], you can write `_value` like this: `[low, high, 1]`. From 83b67f37859b88ef690a15908740d3097779f765 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:05:35 +0800 Subject: [PATCH 0224/1573] New translations SearchSpaceSpec.md (Chinese Simplified) --- zh_CN/docs/SearchSpaceSpec.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/zh_CN/docs/SearchSpaceSpec.md b/zh_CN/docs/SearchSpaceSpec.md index 9f1a07772d..d484509dd1 100644 --- a/zh_CN/docs/SearchSpaceSpec.md +++ b/zh_CN/docs/SearchSpaceSpec.md @@ -38,46 +38,46 @@ * {"_type":"quniform","_value":[low, high, q]} * 这表示变量值会类似于 round(uniform(low, high) / q) * q - * Suitable for a discrete value with respect to which the objective is still somewhat "smooth", but which should be bounded both above and below. If you want to uniformly choose integer from a range [low, high], you can write `_value` like this: `[low, high, 1]`. + * 适用于离散,同时反映了某种"平滑"的数值,但上下限都有限制。 如果需要从范围 [low, high] 中均匀选择整数,可以如下定义 `_value`:`[low, high, 1]`。 * {"_type":"loguniform","_value":[low, high]} - * Which means the variable value is a value drawn from a range [low, high] according to a loguniform distribution like exp(uniform(log(low), log(high))), so that the logarithm of the return value is uniformly distributed. - * When optimizing, this variable is constrained to be positive. + * 变量值在范围 [low, high] 中是 loguniform 分布,如 exp(uniform(log(low), log(high))),因此返回值是对数均匀分布的。 + * 当优化时,此变量必须是正数。 * {"_type":"qloguniform","_value":[low, high, q]} - * Which means the variable value is a value like round(loguniform(low, high)) / q) * q - * Suitable for a discrete variable with respect to which the objective is "smooth" and gets smoother with the size of the value, but which should be bounded both above and below. + * 这表示变量值会类似于 round(loguniform(low, high)) / q) * q + * 适用于值是“平滑”的离散变量,但上下限均有限制。 * {"_type":"normal","_value":[label, mu, sigma]} - * Which means the variable value is a real value that's normally-distributed with mean mu and standard deviation sigma. When optimizing, this is an unconstrained variable. + * 变量值为实数,且为正态分布,均值为 mu,标准方差为 sigma。 优化时,此变量不受约束。 * {"_type":"qnormal","_value":[label, mu, sigma, q]} - * Which means the variable value is a value like round(normal(mu, sigma) / q) * q - * Suitable for a discrete variable that probably takes a value around mu, but is fundamentally unbounded. + * 这表示变量值会类似于 round(normal(mu, sigma) / q) * q + * 适用于在 mu 周围的离散变量,且没有上下限限制。 * {"_type":"lognormal","_value":[label, mu, sigma]} - * Which means the variable value is a value drawn according to exp(normal(mu, sigma)) so that the logarithm of the return value is normally distributed. When optimizing, this variable is constrained to be positive. + * 变量值为 exp(normal(mu, sigma)) 分布,范围值是对数的正态分布。 当优化时,此变量必须是正数。 * {"_type":"qlognormal","_value":[label, mu, sigma, q]} - * Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q - * Suitable for a discrete variable with respect to which the objective is smooth and gets smoother with the size of the variable, which is bounded from one side. + * 这表示变量值会类似于 round(exp(normal(mu, sigma)) / q) * q + * 适用于值是“平滑”的离散变量,但某一边有界。 -Note that SMAC only supports a subset of the types above, including `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`. In the current version, SMAC does not support cascaded search space (i.e., conditional variable in SMAC). +注意:SMAC 仅支持部分类型,包括 `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`。 当前版本中,SMAC 不支持级联搜索空间(即,SMAC中的条件变量)。 -Note that GridSearch Tuner only supports a subset of the types above, including `choic`, `quniform` and `qloguniform`, where q here specifies the number of values that will be sampled. Details about the last two type as follows +注意,网格搜索调参器仅支持部分类型,包括 `choice`, `quniform` and `qloguniform`, 这里的 q 指定了采样的数量。 最后两种类型的细节如下: -* Type 'quniform' will receive three values [low, high, q], where [low, high] specifies a range and 'q' specifies the number of values that will be sampled evenly. Note that q should be at least 2. It will be sampled in a way that the first sampled value is 'low', and each of the following values is (high-low)/q larger that the value in front of it. +* 类型 'quniform' 接收三个值 [low, high, q], 其中 [low, high] 指定了范围,而 'q' 指定了会被均匀采样的值的数量。 注意 q 至少为 2。 它的第一个采样值为 'low',每个采样值都会比前一个大 (high-low)/q 。 * Type 'qloguniform' behaves like 'quniform' except that it will first change the range to [log(low), log(high)] and sample and then change the sampled value back. \ No newline at end of file From e334dcf2bcac66b6c9763cad6a93c80008dedfa9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:06:43 +0800 Subject: [PATCH 0225/1573] New translations SearchSpaceSpec.md (Chinese Simplified) --- zh_CN/docs/SearchSpaceSpec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/SearchSpaceSpec.md b/zh_CN/docs/SearchSpaceSpec.md index d484509dd1..99ce44a9bd 100644 --- a/zh_CN/docs/SearchSpaceSpec.md +++ b/zh_CN/docs/SearchSpaceSpec.md @@ -80,4 +80,4 @@ 注意,网格搜索调参器仅支持部分类型,包括 `choice`, `quniform` and `qloguniform`, 这里的 q 指定了采样的数量。 最后两种类型的细节如下: * 类型 'quniform' 接收三个值 [low, high, q], 其中 [low, high] 指定了范围,而 'q' 指定了会被均匀采样的值的数量。 注意 q 至少为 2。 它的第一个采样值为 'low',每个采样值都会比前一个大 (high-low)/q 。 -* Type 'qloguniform' behaves like 'quniform' except that it will first change the range to [log(low), log(high)] and sample and then change the sampled value back. \ No newline at end of file +* 类型 'qloguniform' 的行为与 'quniform' 类似,不同处在于首先将范围改为 [log(low), log(high)] 采样后,再将数值还原。 \ No newline at end of file From d66f96860e9f460c1f8dc5333b9a0e74b37d026d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:12:17 +0800 Subject: [PATCH 0226/1573] New translations SetupNNIDeveloperEnvironment.md (Chinese Simplified) --- zh_CN/docs/SetupNNIDeveloperEnvironment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/SetupNNIDeveloperEnvironment.md b/zh_CN/docs/SetupNNIDeveloperEnvironment.md index 3b877bb32a..48b134d4a4 100644 --- a/zh_CN/docs/SetupNNIDeveloperEnvironment.md +++ b/zh_CN/docs/SetupNNIDeveloperEnvironment.md @@ -1,6 +1,6 @@ -# **Set up NNI developer environment** +# **设置 NNI 开发环境** -## Best practice for debug NNI source code +## 调试 NNI 源代码的最佳实践 For debugging NNI source code, your development environment should be under Ubuntu 16.04 (or above) system with python 3 and pip 3 installed, then follow the below steps. From 90ed79a22a3667a6c5bc6fcaea61005d17fb5258 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:20:16 +0800 Subject: [PATCH 0227/1573] New translations SetupNNIDeveloperEnvironment.md (Chinese Simplified) --- zh_CN/docs/SetupNNIDeveloperEnvironment.md | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/zh_CN/docs/SetupNNIDeveloperEnvironment.md b/zh_CN/docs/SetupNNIDeveloperEnvironment.md index 48b134d4a4..22c4df1f5f 100644 --- a/zh_CN/docs/SetupNNIDeveloperEnvironment.md +++ b/zh_CN/docs/SetupNNIDeveloperEnvironment.md @@ -2,57 +2,57 @@ ## 调试 NNI 源代码的最佳实践 -For debugging NNI source code, your development environment should be under Ubuntu 16.04 (or above) system with python 3 and pip 3 installed, then follow the below steps. +要调试 NNI 源代码,需要 Ubuntu 16.04 或更高版本系统的开发环境,并需要安装 Python 3.x 以及 pip3,然后遵循以下步骤。 -**1. Clone the source code** +**1. 克隆源代码** -Run the command +运行命令 git clone https://github.com/Microsoft/nni.git -to clone the source code +来克隆源代码 -**2. Prepare the debug environment and install dependencies** +**2. 准备调试环境并安装依赖项** -Change directory to the source code folder, then run the command +将目录切换到源码目录,然后运行命令 make install-dependencies -to install the dependent tools for the environment +来安装环境的依赖项工具 -**3. Build source code** +**3. 生成源代码** -Run the command +运行命令 make build -to build the source code +来生成源代码 -**4. Install NNI to development environment** +**4. 将 NNI 安装到开发环境中** -Run the command +运行命令 make dev-install -to install the distribution content to development environment, and create cli scripts +来安装分发内容到开发环境,并创建 cli 脚本 -**5. Check if the environment is ready** +**5. 检查环境是否正确** -Now, you can try to start an experiment to check if your environment is ready. For example, run the command +尝试启动实验来检查环境。 例如,运行命令 nnictl create --config ~/nni/examples/trials/mnist/config.yml -And open WebUI to check if everything is OK +并打开网页界面查看 -**6. Redeploy** +**6. 重新部署** -After the code changes, use **step 3** to rebuild your codes, then the changes will take effect immediately. +代码改动后,用**第 3 步**来重新生成代码,改动会立即生效。 * * * -At last, wish you have a wonderful day. For more contribution guidelines on making PR's or issues to NNI source code, you can refer to our [CONTRIBUTING](./CONTRIBUTING.md) document. \ No newline at end of file +最后,希望一切顺利。 参考[贡献](./CONTRIBUTING.md)文档,来了解更多创建拉取请求或问题的指南。 \ No newline at end of file From 6001579be340558fe5e504e11cac273f329d567f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:22:00 +0800 Subject: [PATCH 0228/1573] New translations StartExperiment.md (Chinese Simplified) --- zh_CN/docs/StartExperiment.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/StartExperiment.md b/zh_CN/docs/StartExperiment.md index 521d25cb8a..b992517861 100644 --- a/zh_CN/docs/StartExperiment.md +++ b/zh_CN/docs/StartExperiment.md @@ -1,8 +1,8 @@ -# How to start an experiment +# 如何启动实验 -## 1.Introduce +## 1. 简介 -There are few steps to start an new experiment of nni, here are the process. +There are few steps to start an new experiment of nni, here are the process. ## 2.Details From f1d1e052ffc177be109bfc1e35ba3e0716ae7403 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:28:53 +0800 Subject: [PATCH 0229/1573] New translations StartExperiment.md (Chinese Simplified) --- zh_CN/docs/StartExperiment.md | 44 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/zh_CN/docs/StartExperiment.md b/zh_CN/docs/StartExperiment.md index b992517861..e5cf07b87f 100644 --- a/zh_CN/docs/StartExperiment.md +++ b/zh_CN/docs/StartExperiment.md @@ -2,40 +2,40 @@ ## 1. 简介 -There are few steps to start an new experiment of nni, here are the process. +NNI 实验的启动分为几步,流程如下。 -## 2.Details +## 2. 详细说明 -### 2.1 Check environment +### 2.1 检查环境 -1. Check if there is an old experiment running -2. Check if the port of restfurl server is free. -3. Validate the content of config yaml file. -4. Prepare a config file to to record the information of this experiment. +1. 检查是否有旧的实验正在运行。 +2. 检查 RESTful 服务端口是否可用。 +3. 验证 yaml 配置文件的内容。 +4. 准备配置文件来记录实验信息。 -### 2.2 Start restful server +### 2.2 启动 RESTful 服务 -Start an restful server process to manage nni experiment, the default port is 8080. +启动 RESTful 服务进程来管理 NNI 实验,默认端口为 8080。 -### 2.3 Check restful server +### 2.3 检查 RESTful 服务 -Check whether restful server process is successfully started and could get a response when send message to restful server. +检查是否 RESTful 服务进程成功启动,发送到 RESTful 服务的消息是否正常返回。 -### 2.4 Set experiment config +### 2.4 设置实验配置 -Call restful server to set experiment config before starting an experiment, experiment config includes the config values in config yaml file. +在启动实验前调用 RESTful 服务来设置实验配置,包括 yaml 配置文件中的值。 -### 2.5 Check experiment cofig +### 2.5 检查实验配置 -Check the response content of restful srver, if the status code of response is 200, the config is successfully set. +检查 RESTful 服务的返回内容,如果状态为 200,则表示配置设置成功。 -### 2.6 Start Experiment +### 2.6 启动实验 -Call restful server process to setup an experiment. +调用 RESTful 服务进程来设置实验。 -### 2.7 Check experiment +### 2.7 检查实验 -1. Check the response of restful server. -2. Handle error information. -3. Print success or error information to screen. -4. Save configuration information to config file of nnictl. \ No newline at end of file +1. 检查 RESTful 服务的返回值。 +2. 处理错误信息。 +3. 输出成功或失败信息。 +4. 保存配置信息到 nnictl 的配置文件。 \ No newline at end of file From 69e08a8e0c8329aa32418b886d2aa00c39af3863 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:31:55 +0800 Subject: [PATCH 0230/1573] New translations tutorial_1_CR_exp_local_api.md (Chinese Simplified) --- zh_CN/docs/tutorial_1_CR_exp_local_api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/tutorial_1_CR_exp_local_api.md b/zh_CN/docs/tutorial_1_CR_exp_local_api.md index fa2f4a1986..ee062bd82e 100644 --- a/zh_CN/docs/tutorial_1_CR_exp_local_api.md +++ b/zh_CN/docs/tutorial_1_CR_exp_local_api.md @@ -1,4 +1,4 @@ -# **Tutorial: Create and Run an Experiment on local with NNI API** +# **教程:使用 NNI API 在本地创建和运行实验** In this tutorial, we will use the example in [~/examples/trials/mnist] to explain how to create and run an experiment on local with NNI API. From c49c0f015254de3a9c6c18ac8078201464070af1 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:41:57 +0800 Subject: [PATCH 0231/1573] New translations tutorial_1_CR_exp_local_api.md (Chinese Simplified) --- zh_CN/docs/tutorial_1_CR_exp_local_api.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/tutorial_1_CR_exp_local_api.md b/zh_CN/docs/tutorial_1_CR_exp_local_api.md index ee062bd82e..11c95b4f1c 100644 --- a/zh_CN/docs/tutorial_1_CR_exp_local_api.md +++ b/zh_CN/docs/tutorial_1_CR_exp_local_api.md @@ -1,10 +1,10 @@ # **教程:使用 NNI API 在本地创建和运行实验** -In this tutorial, we will use the example in [~/examples/trials/mnist] to explain how to create and run an experiment on local with NNI API. +本教程会使用 [~/examples/trials/mnist] 样例来解释如何在本地使用 NNI API 来创建并运行实验。 -> Before starts +> 在开始前 -You have an implementation for MNIST classifer using convolutional layers, the Python code is in `mnist_before.py`. +要有一个使用卷积层对 MNIST 分类的代码,如 `mnist_before.py`。 > Step 1 - Update model codes From c4a17f279a1a40a5c755d86546a0600bbb187ec7 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 16:49:37 +0800 Subject: [PATCH 0232/1573] New translations tutorial_1_CR_exp_local_api.md (Chinese Simplified) --- zh_CN/docs/tutorial_1_CR_exp_local_api.md | 66 +++++++++++------------ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/zh_CN/docs/tutorial_1_CR_exp_local_api.md b/zh_CN/docs/tutorial_1_CR_exp_local_api.md index 11c95b4f1c..33cbf98fc7 100644 --- a/zh_CN/docs/tutorial_1_CR_exp_local_api.md +++ b/zh_CN/docs/tutorial_1_CR_exp_local_api.md @@ -6,48 +6,48 @@ 要有一个使用卷积层对 MNIST 分类的代码,如 `mnist_before.py`。 -> Step 1 - Update model codes +> 第一步:更新模型代码 -To enable NNI API, make the following changes: +对代码进行以下改动来启用 NNI API: - 1.1 Declare NNI API - Include `import nni` in your trial code to use NNI APIs. + 1.1 声明 NNI API + 在尝试代码中通过 `import nni` 来导入 NNI API。 - 1.2 Get predefined parameters - Use the following code snippet: + 1.2 获取预定义的参数 + 参考下列代码片段: RECEIVED_PARAMS = nni.get_next_parameter() - to get hyper-parameters' values assigned by tuner. `RECEIVED_PARAMS` is an object, for example: + 来获得调参器分配的超参值。 `RECEIVED_PARAMS` 是一个对象,例如: {"conv_size": 2, "hidden_size": 124, "learning_rate": 0.0307, "dropout_rate": 0.2029} - 1.3 Report NNI results - Use the API: + 1.3 向 NNI 返回结果 + 使用 API: `nni.report_intermediate_result(accuracy)` - to send `accuracy` to assessor. + 返回 `accuracy` 的值给评估器。 - Use the API: + 使用 API: `nni.report_final_result(accuracy)` - to send `accuracy` to tuner. + 返回 `accuracy` 的值给调参器。 -We had made the changes and saved it to `mnist.py`. +将改动保存到 `mnist.py` 文件中。 -**NOTE**: +**注意**: - accuracy - The `accuracy` could be any python object, but if you use NNI built-in tuner/assessor, `accuracy` should be a numerical variable (e.g. float, int). - assessor - The assessor will decide which trial should early stop based on the history performance of trial (intermediate result of one trial). - tuner - The tuner will generate next parameters/architecture based on the explore history (final result of all trials). + accuracy - 如果使用 NNI 内置的调参器/评估器,那么 `accuracy` 必须是数值(如 float, int)。在定制调参器/评估器时 `accuracy` 可以是任何类型的 Python 对象。 + 评估器 - 会根据尝试的历史值(即其中间结果),来决定这次尝试是否应该提前终止。 + 调参器 - 会根据探索的历史(所有尝试的最终结果)来生成下一组参数、架构。 -> Step 2 - Define SearchSpace +> 第二步:定义搜索空间 -The hyper-parameters used in `Step 1.2 - Get predefined parameters` is defined in a `search_space.json` file like below: +在 `Step 1.2 获取预定义的参数` 中使用的超参定义在 `search_space.json` 文件中: { "dropout_rate":{"_type":"uniform","_value":[0.1,0.5]}, @@ -57,37 +57,37 @@ The hyper-parameters used in `Step 1.2 - Get predefined parameters` is defined i } -Refer to to learn more about search space. +参考 [SearchSpaceSpec.md](./SearchSpaceSpec.md) 进一步了解搜索空间。 -> Step 3 - Define Experiment +> 第三步:定义实验 > -> > 3.1 enable NNI API mode +> > 3.1 启用 NNI API 模式 -To enable NNI API mode, you need to set useAnnotation to *false* and provide the path of SearchSpace file (you just defined in step 1): +要启用 NNI 的 API 模式,需要将 useAnnotation 设置为 *false*,并提供搜索空间文件的路径(即第一步中定义的文件): useAnnotation: false searchSpacePath: /path/to/your/search_space.json -To run an experiment in NNI, you only needed: +在 NNI 中运行实验,只需要: -* Provide a runnable trial -* Provide or choose a tuner -* Provide a yaml experiment configure file -* (optional) Provide or choose an assessor +* 可运行的尝试的代码 +* 实现或选择调参器 +* 准备 yaml 的实验配置文件 +* (可选) 实现或选择评估器 -**Prepare trial**: +**准备尝试**: -> A set of examples can be found in ~/nni/examples after your installation, run `ls ~/nni/examples/trials` to see all the trial examples. +> 在克隆代码后,可以在 ~/nni/examples 中找到一些样例,运行 `ls examples/trials` 查看所有尝试样例。 -Let's use a simple trial example, e.g. mnist, provided by NNI. After you installed NNI, NNI examples have been put in ~/nni/examples, run `ls ~/nni/examples/trials` to see all the trial examples. You can simply execute the following command to run the NNI mnist example: +先从 NNI 提供的简单尝试样例,如 MNIST 开始。 NNI 样例在代码目录的 examples 中,运行 `ls ~/nni/examples/trials` 可以看到所有实验的样例。 执行下面的命令可轻松运行 NNI 的 mnist 样例: python ~/nni/examples/trials/mnist-annotation/mnist.py -This command will be filled in the yaml configure file below. Please refer to [here](howto_1_WriteTrial) for how to write your own trial. +上面的命令会写在 yaml 文件中。 参考[这里](./howto_1_WriteTrial.md)来写出自己的实验代码。 -**Prepare tuner**: NNI supports several popular automl algorithms, including Random Search, Tree of Parzen Estimators (TPE), Evolution algorithm etc. Users can write their own tuner (refer to [here](CustomizedTuner.md)), but for simplicity, here we choose a tuner provided by NNI as below: +**准备调参器**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(进化算法)等等。 也可以实现自己的调参器(参考[这里](./CustomizedTuner.md))。下面使用了 NNI 内置的调参器: tuner: builtinTunerName: TPE From e30611901e080fb5b754a2c2042eaa234c8da6ea Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:01:44 +0800 Subject: [PATCH 0233/1573] New translations tutorial_1_CR_exp_local_api.md (Chinese Simplified) --- zh_CN/docs/tutorial_1_CR_exp_local_api.md | 38 +++++++++++------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/zh_CN/docs/tutorial_1_CR_exp_local_api.md b/zh_CN/docs/tutorial_1_CR_exp_local_api.md index 33cbf98fc7..d30fa111bc 100644 --- a/zh_CN/docs/tutorial_1_CR_exp_local_api.md +++ b/zh_CN/docs/tutorial_1_CR_exp_local_api.md @@ -95,26 +95,26 @@ optimize_mode: maximize -*builtinTunerName* is used to specify a tuner in NNI, *classArgs* are the arguments pass to the tuner (the spec of builtin tuners can be found [here]()), *optimization_mode* is to indicate whether you want to maximize or minimize your trial's result. +*builtinTunerName* 用来指定 NNI 中的调参器,*classArgs* 是传入到调参器的参数(内置调参器在[这里]()),*optimization_mode* 表明需要最大化还是最小化尝试的结果。 -**Prepare configure file**: Since you have already known which trial code you are going to run and which tuner you are going to use, it is time to prepare the yaml configure file. NNI provides a demo configure file for each trial example, `cat ~/nni/examples/trials/mnist-annotation/config.yml` to see it. Its content is basically shown below: +**准备配置文件**:实现尝试的代码,并选择或实现自定义的调参器后,就要准备 yaml 配置文件了。 NNI 为每个尝试样例都提供了演示的配置文件,用命令`cat ~/nni/examples/trials/mnist-annotation/config.yml` 来查看其内容。 大致内容如下: authorName: your_name experimentName: auto_mnist - # how many trials could be concurrently running - trialConcurrency: 1 + # 并发运行数量 + trialConcurrency: 2 - # maximum experiment running duration + # 实验运行时间 maxExecDuration: 3h - # empty means never stop + # 可为空,即数量不限 maxTrialNum: 100 - # choice: local, remote + # 可选值为: local, remote trainingServicePlatform: local - # choice: true, false + # 可选值为: true, false useAnnotation: true tuner: builtinTunerName: TPE @@ -126,28 +126,28 @@ gpuNum: 0 -Here *useAnnotation* is true because this trial example uses our python annotation (refer to [here](../tools/annotation/README.md) for details). For trial, we should provide *trialCommand* which is the command to run the trial, provide *trialCodeDir* where the trial code is. The command will be executed in this directory. We should also provide how many GPUs a trial requires. +因为这个尝试代码使用了 NNI 标记的方法(参考[这里](../tools/annotation/README.md) ),所以*useAnnotation* 为 true。 *command* 是运行尝试代码所需要的命令,*codeDir* 是尝试代码的相对位置。 命令会在此目录中执行。 同时,也需要提供每个尝试进程所需的 GPU 数量。 -With all these steps done, we can run the experiment with the following command: +完成上述步骤后,可通过下列命令来启动实验: nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml -You can refer to [here](NNICTLDOC.md) for more usage guide of *nnictl* command line tool. +参考[这里](NNICTLDOC.md)来了解 *nnictl* 命令行工具的更多用法。 -## View experiment results +## 查看实验结果 -The experiment has been running now. Oher than *nnictl*, NNI also provides WebUI for you to view experiment progress, to control your experiment, and some other appealing features. +实验应该一直在运行。 除了 *nnictl* 以外,还可以通过 NNI 的网页来查看实验进程,进行控制和其它一些有意思的功能。 -## Using multiple local GPUs to speed up search +## 使用多个本地 GPU 加快搜索速度 -The following steps assume that you have 4 NVIDIA GPUs installed at local and [tensorflow with GPU support](https://www.tensorflow.org/install/gpu). The demo enables 4 concurrent trail jobs and each trail job uses 1 GPU. +下列步骤假设本机有 4 块 NVIDIA GPUs,参考 [tensorflow with GPU support](https://www.tensorflow.org/install/gpu)。 演示启用了 4 个并发的尝试任务,每个尝试任务使用了 1 块 GPU。 -**Prepare configure file**: NNI provides a demo configuration file for the setting above, `cat ~/nni/examples/trials/mnist-annotation/config_gpu.yml` to see it. The trailConcurrency and gpuNum are different from the basic configure file: +**准备配置文件**:NNI 提供了演示用的配置文件,使用 `cat examples/trials/mnist-annotation/config_gpu.yml` 来查看。 trailConcurrency 和 gpuNum 与基本配置文件不同: ... - # how many trials could be concurrently running + # 可同时运行的尝试数量 trialConcurrency: 4 ... @@ -158,9 +158,9 @@ The following steps assume that you have 4 NVIDIA GPUs installed at local and [t gpuNum: 1 -We can run the experiment with the following command: +用下列命令运行实验: nnictl create --config ~/nni/examples/trials/mnist-annotation/config_gpu.yml -You can use *nnictl* command line tool or WebUI to trace the training progress. *nvidia_smi* command line tool can also help you to monitor the GPU usage during training. \ No newline at end of file +可以用 *nnictl* 命令行工具或网页界面来跟踪训练过程。 *nvidia_smi* 命令行工具能在训练过程中查看 GPU 使用情况。 \ No newline at end of file From 3c5cfc75822c6e6ec6f9541c5659000ac63c0881 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:07:35 +0800 Subject: [PATCH 0234/1573] Delete tutorial_3_tryTunersAndAccessors.md --- .../docs/tutorial_3_tryTunersAndAccessors.md | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 zh_CN/docs/tutorial_3_tryTunersAndAccessors.md diff --git a/zh_CN/docs/tutorial_3_tryTunersAndAccessors.md b/zh_CN/docs/tutorial_3_tryTunersAndAccessors.md deleted file mode 100644 index 7473623f9a..0000000000 --- a/zh_CN/docs/tutorial_3_tryTunersAndAccessors.md +++ /dev/null @@ -1,45 +0,0 @@ -# Tutorial - Try different Tuners and Accessors - -NNI provides an easy to adopt approach to set up parameter tuning algorithms as well as early stop policies, we call them **Tuners** and **Accessors**. - -**Tuner** specifies the algorithm you use to generate hyperparameter sets for each trial. In NNI, we support two approaches to set the tuner. - -1. Directly use tuner provided by nni sdk - - required fields: builtinTunerName and classArgs. - - -2. Customize your own tuner file - - required fields: codeDirectory, classFileName, className and classArgs. - - -### **Learn More about tuners** - -* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) -* [Tuners in the latest NNI release](../src/sdk/pynni/nni/README.md) -* [How to implement your own tuner](howto_2_CustomizedTuner.md) - -**Assessor** specifies the algorithm you use to apply early stop policy. In NNI, there are two approaches to set theassessor. - -1. Directly use accessor provided by nni sdk - - required fields: builtinAssessorName and classArgs. - - -2. Customize your own tuner file - - required fields: codeDirectory, classFileName, className and classArgs. - - -### **Learn More about assessor** - -* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) -* Find more about the detailed instruction about [enable accessor](EnableAssessor.md) -* [How to implement your own assessor](../examples/assessors/README.md) - -## **Learn More** - -* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) -* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) -* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file From ba950bb6a9aaac0986bbb6e49322c3300149ba3e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:12:17 +0800 Subject: [PATCH 0235/1573] New translations tutorial_2_RemoteMachineMode.md (Chinese Simplified) --- zh_CN/docs/tutorial_2_RemoteMachineMode.md | 49 +++++++++++----------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/zh_CN/docs/tutorial_2_RemoteMachineMode.md b/zh_CN/docs/tutorial_2_RemoteMachineMode.md index db8be9295d..14c6d9bf6d 100644 --- a/zh_CN/docs/tutorial_2_RemoteMachineMode.md +++ b/zh_CN/docs/tutorial_2_RemoteMachineMode.md @@ -1,58 +1,57 @@ -# **Tutorial: Run an experiment on multiple machines** +# **教程:在多机上运行实验** -NNI supports running an experiment on multiple machines through SSH channel, called `remote` mode. NNI assumes that you have access to those machines, and already setup the environment for running deep learning training code. +NNI 支持通过 SSH 通道在多台计算机上运行实验,称为 `remote` 模式。 NNI 需要这些计算机的访问权限,并提前配置好深度学习训练环境。 -e.g. Three machines and you login in with account `bob` (Note: the account is not necessarily the same on different machine): +例如:有三台服务器,登录账户为 `bob`(注意:账户不必在各台计算机上一致): -| IP | Username | Password | -| -------- | -------- | -------- | -| 10.1.1.1 | bob | bob123 | -| 10.1.1.2 | bob | bob123 | -| 10.1.1.3 | bob | bob123 | +| IP | 用户名 | 密码 | +| -------- | --- | ------ | +| 10.1.1.1 | bob | bob123 | +| 10.1.1.2 | bob | bob123 | +| 10.1.1.3 | bob | bob123 | -## Setup NNI environment +## 设置 NNI 环境 -Install NNI on each of your machines following the install guide [here](GetStarted.md). +按照[指南](GetStarted.md)在每台计算机上安装 NNI。 -For remote machines that are used only to run trials but not the nnictl, you can just install python SDK: +对于只需要运行尝试,不需要使用 nnictl 命令的计算机,可只安装 SDK: -* **Install python SDK through pip** +* **通过 pip 安装 SDK** python3 -m pip install --user --upgrade nni-sdk -## Run an experiment +## 运行实验 -Install NNI on another machine which has network accessibility to those three machines above, or you can just use any machine above to run nnictl command line tool. +在另一台计算机,或在其中任何一台上安装 NNI,并运行 nnictl 工具。 -We use `examples/trials/mnist-annotation` as an example here. `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` to see the detailed configuration file: +以 `examples/trials/mnist-annotation` 为例。 `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` 来查看详细配置: authorName: default experimentName: example_mnist trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 - #choice: local, remote, pai + #可选项: local, remote, pai trainingServicePlatform: remote - #choice: true, false + #可选项: true, false useAnnotation: true tuner: - #choice: TPE, Random, Anneal, Evolution, BatchTuner - #SMAC (SMAC should be installed through nnictl) + #可选项: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC 需要通过 nnictl 安装) builtinTunerName: TPE classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize trial: command: python3 mnist.py codeDir: . gpuNum: 0 - #machineList can be empty if the platform is local + #local 模式下 machineList 可为空 machineList: - - ip: 10.1.1.1 username: bob passwd: bob123 - #port can be skip if using default ssh port 22 + #使用默认端口 22 时,该配置可跳过 #port: 22 - ip: 10.1.1.2 username: bob @@ -62,9 +61,9 @@ We use `examples/trials/mnist-annotation` as an example here. `cat ~/nni/example passwd: bob123 -Simply filling the `machineList` section and then run: +简单填写 `machineList` 部分,然后运行: nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml -to start the experiment. \ No newline at end of file +来启动实验。 \ No newline at end of file From 70d1c60c0dadacb342368729ed14dfe631d463e4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:12:18 +0800 Subject: [PATCH 0236/1573] New translations tutorial_3_tryTunersAndAssessors.md (Chinese Simplified) --- zh_CN/docs/tutorial_3_tryTunersAndAssessors.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md b/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md index c09e319c5d..311ec945a8 100644 --- a/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md +++ b/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md @@ -1,12 +1,12 @@ -# Tutorial - Try different Tuners and Assessors +# 教程 - 尝试不同的调参器和评估器 -NNI provides an easy to adopt approach to set up parameter tuning algorithms as well as early stop policies, we call them **Tuners** and **Assessors**. +NNI 提供了简单的方法来设置不同的参数优化算法,以及提前终止策略。NNI 将它们分别称为**调参器**和**评估器**。 -**Tuner** specifies the algorithm you use to generate hyperparameter sets for each trial. In NNI, we support two approaches to set the tuner. +**调参器** 指定了为每个尝试生成参数的算法。 在 NNI 中,有两种方法来设置调参器。 -1. Directly use tuner provided by nni sdk +1. 直接使用 NNI 提供的调参器 - required fields: builtinTunerName and classArgs. + 必填字段:builtinTunerName 和 classArgs。 2. Customize your own tuner file From ce7b9348be829a2e3e96498fb16f17a16f1f0df8 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:16:27 +0800 Subject: [PATCH 0237/1573] New translations tutorial_3_tryTunersAndAssessors.md (Chinese Simplified) --- .../docs/tutorial_3_tryTunersAndAssessors.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md b/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md index 311ec945a8..6c655c20a1 100644 --- a/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md +++ b/zh_CN/docs/tutorial_3_tryTunersAndAssessors.md @@ -9,37 +9,37 @@ NNI 提供了简单的方法来设置不同的参数优化算法,以及提前 必填字段:builtinTunerName 和 classArgs。 -2. Customize your own tuner file +2. 自定义调参器文件 - required fields: codeDirectory, classFileName, className and classArgs. + 必填字段:codeDirectory, classFileName, className 和 classArgs。 -### **Learn More about tuners** +### **了解有关调参器的更多信息** -* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) -* [Tuners in the latest NNI release](HowToChooseTuner.md) -* [How to implement your own tuner](howto_2_CustomizedTuner.md) +* 有关所需字段的详细定义和用法,参考[配置实验](ExperimentConfig.md)。 +* [NNI 最新版本支持的调参器](HowToChooseTuner.md) +* [如何自定义调参器](howto_2_CustomizedTuner.md) -**Assessor** specifies the algorithm you use to apply early stop policy. In NNI, there are two approaches to set theassessor. +**评估器** 指定了用于提前终止尝试的策略。 在 NNI 中,支持两种方法来设置评估器。 -1. Directly use assessor provided by nni sdk +1. 直接使用 NNI 提供的评估器 - required fields: builtinAssessorName and classArgs. + 必填字段:builtinAssessorName 和 classArgs。 -2. Customize your own assessor file +2. 自定义评估器文件 - required fields: codeDirectory, classFileName, className and classArgs. + 必填字段:codeDirectory, classFileName, className 和 classArgs。 -### **Learn More about assessor** +### **了解有关评估器的更多信息** -* For detailed defintion and usage aobut the required field, please refer to [Config an experiment](ExperimentConfig.md) -* Find more about the detailed instruction about [enable assessor](EnableAssessor.md) -* [How to implement your own assessor](../examples/assessors/README.md) +* 有关所需字段的详细定义和用法,参考[配置实验](ExperimentConfig.md)。 +* 查看[启用评估器](EnableAssessor.md),了解更多信息。 +* [如何自定义评估器](../examples/assessors/README.md) -## **Learn More** +## **了解更多信息** -* [How to run an experiment on local (with multiple GPUs)?](tutorial_1_CR_exp_local_api.md) -* [How to run an experiment on multiple machines?](tutorial_2_RemoteMachineMode.md) -* [How to run an experiment on OpenPAI?](PAIMode.md) \ No newline at end of file +* [如何在本机运行实验 (支持多 GPU 卡)?](tutorial_1_CR_exp_local_api.md) +* [如何在多机上运行实验?](tutorial_2_RemoteMachineMode.md) +* [如何在 OpenPAI 上运行实验?](PAIMode.md) \ No newline at end of file From 40ad763f4d3d91f1b76bdb447c33eadfc6b2245b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:18:30 +0800 Subject: [PATCH 0238/1573] New translations WebUI.md (Chinese Simplified) --- zh_CN/docs/WebUI.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/zh_CN/docs/WebUI.md b/zh_CN/docs/WebUI.md index 7583b9bc21..e72a5f9370 100644 --- a/zh_CN/docs/WebUI.md +++ b/zh_CN/docs/WebUI.md @@ -1,23 +1,23 @@ # WebUI -## View summary page +## 查看概要页面 Click the tab "Overview". * See the experiment trial profile and search space message. * Support to download the experiment result. -![](./img/over1.png) +![](../../docs/img/over1.png) * See good performance trials. -![](./img/over2.png) +![](../../docs/img/over2.png) ## View job default metric Click the tab "Default Metric" to see the point graph of all trials. Hover to see its specific default metric and search space message. -![](./img/accuracy.png) +![](../../docs/img/accuracy.png) ## View hyper parameter @@ -26,13 +26,13 @@ Click the tab "Hyper Parameter" to see the parallel graph. * You can select the percentage to see top trials. * Choose two axis to swap its positions -![](./img/hyperPara.png) +![](../../docs/img/hyperPara.png) ## View Trial Duration Click the tab "Trial Duration" to see the bar graph. -![](./img/trial_duration.png) +![](../../docs/img/trial_duration.png) ## View trials status @@ -41,10 +41,10 @@ Click the tab "Trials Detail" to see the status of the all trials. Specifically: * Trial detail: trial's id, trial's duration, start time, end time, status, accuracy and search space file. * If you run a pai experiment, you can also see the hdfsLogPath. -![](./img/table_openrow.png) +![](../../docs/img/table_openrow.png) * Kill: you can kill a job that status is running. * Support to search for a specific trial. * Intermediate Result Graph. -![](./img/intermediate.png) \ No newline at end of file +![](../../docs/img/intermediate.png) \ No newline at end of file From 6300f01ed28cc370defa65b7a953032281b34db7 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:22:02 +0800 Subject: [PATCH 0239/1573] New translations WebUI.md (Chinese Simplified) --- zh_CN/docs/WebUI.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/zh_CN/docs/WebUI.md b/zh_CN/docs/WebUI.md index e72a5f9370..4c33977182 100644 --- a/zh_CN/docs/WebUI.md +++ b/zh_CN/docs/WebUI.md @@ -2,39 +2,39 @@ ## 查看概要页面 -Click the tab "Overview". +点击标签 "Overview"。 -* See the experiment trial profile and search space message. -* Support to download the experiment result. +* 查看实验的配置和搜索空间内容。 +* 支持下载实验结果。 ![](../../docs/img/over1.png) -* See good performance trials. +* 查看最好结果的尝试。 ![](../../docs/img/over2.png) -## View job default metric +## 查看任务默认指标 -Click the tab "Default Metric" to see the point graph of all trials. Hover to see its specific default metric and search space message. +点击 "Default Metric" 来查看所有尝试的点图。 悬停鼠标来查看默认指标和搜索空间信息。 ![](../../docs/img/accuracy.png) -## View hyper parameter +## 查看超参 -Click the tab "Hyper Parameter" to see the parallel graph. +点击 "Hyper Parameter" 标签查看图像。 -* You can select the percentage to see top trials. -* Choose two axis to swap its positions +* 可选择百分比查看最好的尝试。 +* 选择两个轴来交换位置。 ![](../../docs/img/hyperPara.png) -## View Trial Duration +## 查看尝试运行时间 -Click the tab "Trial Duration" to see the bar graph. +点击 "Trial Duration" 标签来查看柱状图。 ![](../../docs/img/trial_duration.png) -## View trials status +## 查看尝试状态 Click the tab "Trials Detail" to see the status of the all trials. Specifically: From ee3e0426d1c229ffab7613c6d6b50833c9ab34fd Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:25:33 +0800 Subject: [PATCH 0240/1573] New translations WebUI.md (Chinese Simplified) --- zh_CN/docs/WebUI.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zh_CN/docs/WebUI.md b/zh_CN/docs/WebUI.md index 4c33977182..c46ae49d2c 100644 --- a/zh_CN/docs/WebUI.md +++ b/zh_CN/docs/WebUI.md @@ -36,15 +36,15 @@ ## 查看尝试状态 -Click the tab "Trials Detail" to see the status of the all trials. Specifically: +点击 "Trials Detail" 标签查看所有尝试的状态。 特别是: -* Trial detail: trial's id, trial's duration, start time, end time, status, accuracy and search space file. -* If you run a pai experiment, you can also see the hdfsLogPath. +* 尝试详情:尝试的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间。 +* 如果在 pai 模式下,还可以看到 hdfsLogPath。 ![](../../docs/img/table_openrow.png) -* Kill: you can kill a job that status is running. -* Support to search for a specific trial. -* Intermediate Result Graph. +* Kill: 可终止正在运行的任务。 +* 支持搜索某个特定的尝试。 +* 中间结果图。 ![](../../docs/img/intermediate.png) \ No newline at end of file From ec6cb0a814354abd76c07a1cbce587b6fb355b25 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:32:00 +0800 Subject: [PATCH 0241/1573] New translations WebUI.md (Chinese Simplified) --- zh_CN/docs/WebUI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/WebUI.md b/zh_CN/docs/WebUI.md index c46ae49d2c..087d64b5dc 100644 --- a/zh_CN/docs/WebUI.md +++ b/zh_CN/docs/WebUI.md @@ -1,4 +1,4 @@ -# WebUI +# Web 界面 ## 查看概要页面 From 9712157453afe2ea873681671615227ee4caa50a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:32:02 +0800 Subject: [PATCH 0242/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/assessors/README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/zh_CN/examples/assessors/README.md b/zh_CN/examples/assessors/README.md index 1a2903fab5..d058123b1b 100644 --- a/zh_CN/examples/assessors/README.md +++ b/zh_CN/examples/assessors/README.md @@ -1,10 +1,10 @@ -# Define your own Assessor +# 自定义评估器 -*Assessor receive intermediate result from Trial and decide whether the Trial should be killed. Once the Trial experiment meets the early stop conditions, the assessor will kill the Trial.* +*评估器从尝试中接收中间结果,并决定此尝试是否应该终止。 一旦尝试满足提前终止条件,评估器将终止此尝试。* -So, if users want to implement a customized Assessor, they only need to: +因此,如果要自定义评估器,需要: -**1) Inherit an assessor of a base Assessor class** +**1) 继承于 Assessor 基类,创建评估器类** ```python from nni.assessor import Assessor @@ -14,7 +14,7 @@ class CustomizedAssessor(Assessor): ... ``` -**2) Implement assess trial function** +**2) 实现评估尝试的函数** ```python from nni.assessor import Assessor, AssessResult @@ -25,15 +25,15 @@ class CustomizedAssessor(Assessor): def assess_trial(self, trial_history): """ - Determines whether a trial should be killed. Must override. - trial_history: a list of intermediate result objects. - Returns AssessResult.Good or AssessResult.Bad. + 决定是否应该终止尝试。 必须重载。 + trial_history: 中间结果列表对象。 + 返回 AssessResult.Good 或 AssessResult.Bad。 """ - # you code implement here. + # 代码实现于此处。 ... ``` -**3) Write a script to run Assessor** +**3) 实现脚本来运行评估器** ```python import argparse @@ -42,7 +42,7 @@ import CustomizedAssesor def main(): parser = argparse.ArgumentParser(description='parse command line parameters.') - # parse your assessor arg here. + # 在这里解析评估器的参数 ... FLAGS, unparsed = parser.parse_known_args() @@ -52,7 +52,7 @@ def main(): main() ``` -Please noted in 2). The object ```trial_history``` are exact the object that Trial send to Assesor by using SDK ```report_intermediate_result``` function. +注意 2) 中。 对象 ```trial_history``` are exact the object that Trial send to Assesor by using SDK ```report_intermediate_result``` function. Also, user could override the ```run``` function in Assessor to control the process logic. From 40be919f42b21a21eba21ac131cb4475314b1eb0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:36:45 +0800 Subject: [PATCH 0243/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/assessors/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/examples/assessors/README.md b/zh_CN/examples/assessors/README.md index d058123b1b..32d46effe6 100644 --- a/zh_CN/examples/assessors/README.md +++ b/zh_CN/examples/assessors/README.md @@ -38,11 +38,11 @@ class CustomizedAssessor(Assessor): ```python import argparse -import CustomizedAssesor +import CustomizedAssessor def main(): parser = argparse.ArgumentParser(description='parse command line parameters.') - # 在这里解析评估器的参数 + # parse your assessor arg here. ... FLAGS, unparsed = parser.parse_known_args() @@ -52,10 +52,10 @@ def main(): main() ``` -注意 2) 中。 对象 ```trial_history``` are exact the object that Trial send to Assesor by using SDK ```report_intermediate_result``` function. +注意 2) 中, 对象 `trial_history` 和 `report_intermediate_result` 函数返回给评估器的完全一致。 -Also, user could override the ```run``` function in Assessor to control the process logic. +也可以重载评估器的 `run` 函数来控制过程逻辑。 -More detail example you could see: +更多样例,可参考: > - [Base-Assessor](https://msrasrg.visualstudio.com/NeuralNetworkIntelligenceOpenSource/_git/Default?_a=contents&path=%2Fsrc%2Fsdk%2Fpynni%2Fnni%2Fassessor.py&version=GBadd_readme) \ No newline at end of file From 651afa851a61c740ada60b6ef934729a6dadd172 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:42:14 +0800 Subject: [PATCH 0244/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/cifar10_pytorch/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/examples/trials/cifar10_pytorch/README.md b/zh_CN/examples/trials/cifar10_pytorch/README.md index e5b6c87ec2..00c0d4bae4 100644 --- a/zh_CN/examples/trials/cifar10_pytorch/README.md +++ b/zh_CN/examples/trials/cifar10_pytorch/README.md @@ -1,3 +1,3 @@ -This example requires pytorch. pytorch install package should be chosen based on python version and cuda version. +此样例需要安装 Pytorch。 Pytorch 安装包需要选择所基于的 Python 和 CUDA 版本。 -Here is an example of the environment python==3.5 and cuda == 8.0, then using the following commands to install pytorch: python3 -m pip install http://download.pytorch.org/whl/cu80/torch-0.4.1-cp35-cp35m-linux_x86_64.whl python3 -m pip install torchvision \ No newline at end of file +以下是 python==3.5 和 cuda == 8.0 下的环境样例,使用下列命令来安装 Pytorch: python3 -m pip install http://download.pytorch.org/whl/cu80/torch-0.4.1-cp35-cp35m-linux_x86_64.whl python3 -m pip install torchvision \ No newline at end of file From 739f906c66318f68129456a8051ed89073197b7f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:42:16 +0800 Subject: [PATCH 0245/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index 9ba6f34a43..8459904c59 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -1,10 +1,10 @@ -# 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: +对于阅读理解项目,注意力和循环神经网络(RNN)模块已经被证明非常有效。 使用的搜索空间如下: 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.) From 7664c5fe9628a20d51959b9e2009537970bc0d48 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:45:57 +0800 Subject: [PATCH 0246/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index 8459904c59..059c4d6346 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -6,7 +6,7 @@ 对于阅读理解项目,注意力和循环神经网络(RNN)模块已经被证明非常有效。 使用的搜索空间如下: -1. IDENTITY (Effectively means keep training). +1. IDENTITY (Effectively 表示继续训练)。 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.) @@ -14,7 +14,7 @@ 6. ADD-SKIP (Identity between random layers). 7. REMOVE-SKIP (Removes random skip). -![ga-squad-logo](./ga_squad.png) +![ga-squad-logo](../../../../examples/trials/ga_squad/ga_squad.png) ## New version From fa72f10657801a913fc91414b00def8215f72d0a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:47:35 +0800 Subject: [PATCH 0247/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index 059c4d6346..a586d4ea8d 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -35,16 +35,18 @@ Execute the following command to download needed files using the downloading scr ### Download manually 1. download "dev-v1.1.json" and "train-v1.1.json" in https://rajpurkar.github.io/SQuAD-explorer/ - + + ```bash 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/ - + + ```bash wget http://nlp.stanford.edu/data/glove.840B.300d.zip unzip glove.840B.300d.zip - + ``` ### Update configuration From 289603f96abc34212fb55fda23bec7a310fc81be Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 17:57:08 +0800 Subject: [PATCH 0248/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 54 ++++++++++++------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index a586d4ea8d..32618007a1 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -7,59 +7,59 @@ 对于阅读理解项目,注意力和循环神经网络(RNN)模块已经被证明非常有效。 使用的搜索空间如下: 1. IDENTITY (Effectively 表示继续训练)。 -2. INSERT-RNN-LAYER (Inserts a LSTM. Comparing the performance of GRU and LSTM in our experiment, we decided to use LSTM here.) +2. INSERT-RNN-LAYER (插入 LSTM。 在实验中比较了 GRU 和 LSTM 的性能后,我们决定在这里采用 LSTM。) 3. REMOVE-RNN-LAYER -4. INSERT-ATTENTION-LAYER(Inserts a attention layer.) +4. INSERT-ATTENTION-LAYER (插入注意力层。) 5. REMOVE-ATTENTION-LAYER -6. ADD-SKIP (Identity between random layers). -7. REMOVE-SKIP (Removes random skip). +6. ADD-SKIP (在随机层之间一致). +7. REMOVE-SKIP (移除随机跳过). ![ga-squad-logo](../../../../examples/trials/ga_squad/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? +# 如何运行此样例? -## Run this example on local or remote +## 在本机或远程上运行此样例 -### 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/ +1. 在 https://rajpurkar.github.io/SQuAD-explorer/ 下载 "dev-v1.1.json" 和 "train-v1.1.json"。 ```bash 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/ +2. 在 https://nlp.stanford.edu/projects/glove/ 下载 "glove.840B.300d.txt"。 ```bash wget http://nlp.stanford.edu/data/glove.840B.300d.zip unzip glove.840B.300d.zip ``` -### Update configuration +### 更新配置 -Modify `nni/examples/trials/ga_squad/config.yml`, here is the default configuration: +修改 `nni/examples/trials/ga_squad/config.yml`,以下是默认配置: authorName: default experimentName: example_ga_squad trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 1 - #choice: local, remote + #可选项: local, remote trainingServicePlatform: local - #choice: true, false + #可选项: true, false useAnnotation: false tuner: codeDir: ~/nni/examples/tuners/ga_customer_tuner @@ -73,33 +73,33 @@ Modify `nni/examples/trials/ga_squad/config.yml`, here is the default configurat 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. +在 "trial" 部分中,如果需要使用 GPU 来进行架构搜索,可将 `gpuNum` 从 `0` 改为 `1`。 根据训练时长,可以增加 `maxTrialNum` 和 `maxExecDuration`。 -`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. +`trialConcurrency` 是并发运行的尝试的数量。如果将 `gpuNum` 设置为 1,则需要与 GPU 数量一致。 -### submit this job +### 提交任务 nnictl create --config ~/nni/examples/trials/ga_squad/config.yml -## Run this example on OpenPAI +## 在 OpenPAI 上运行此样例 -Due to the memory limitation of upload, we only upload the source code and complete the data download and training on OpenPAI. This experiment requires sufficient memory that `memoryMB >= 32G`, and the training may last for several hours. +根据上传大小的限制,仅上传源代码,并在训练过程中下载数据。 本实验需要的内存 `memoryMB >= 32G`,训练过程可能需要数小时。 -### Update configuration +### 更新配置 -Modify `nni/examples/trials/ga_squad/config_pai.yaml`, here is the default configuration: +修改 `nni/examples/trials/ga_squad/config_pai.yaml`,以下是默认配置: authorName: default experimentName: example_ga_squad trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 - #choice: local, remote, pai + #可选项: local, remote, pai trainingServicePlatform: pai - #choice: true, false + #可选项: true, false useAnnotation: false - #Your nni_manager ip + # nni_manager 的 ip nniManagerIp: 10.10.10.10 tuner: codeDir: ../../tuners/ga_customer_tuner From c57bfc250df9b63c038a2eaa478b85a19ab92c31 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:02:01 +0800 Subject: [PATCH 0249/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 36 ++++++++++++------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index 32618007a1..fb896d5453 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -113,45 +113,45 @@ gpuNum: 0 cpuNum: 1 memoryMB: 32869 - #The docker image to run nni job on pai + #在 OpenPAI 上运行 NNI 任务的 Docker 映像 image: msranni/nni:latest - #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' + #在 OpenPAI 的 hdfs 目录上存储数据的目录,如:'hdfs://host:port/directory' dataDir: hdfs://10.10.10.10:9000/username/nni - #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' + #在 OpenPAI 的 hdfs 目录上存储输出的目录,如:'hdfs://host:port/directory' outputDir: hdfs://10.10.10.10:9000/username/nni paiConfig: - #The username to login pai + #登录 OpenPAI 的用户名 userName: username - #The password to login pai + #登录 OpenPAI 的密码 passWord: password - #The host of restful server of pai + # OpenPAI 的 RESTful 服务器地址 host: 10.10.10.10 -Please change the default value to your personal account and machine information. Including `nniManagerIp`, `dataDir`, `outputDir`, `userName`, `passWord` and `host`. +将默认值改为个人账户和服务器信息。 包括 `nniManagerIp`, `dataDir`, `outputDir`, `userName`, `passWord` 和 `host`。 -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. +在 "trial" 部分中,如果需要使用 GPU 来进行架构搜索,可将 `gpuNum` 从 `0` 改为 `1`。 根据训练时长,可以增加 `maxTrialNum` 和 `maxExecDuration`。 -`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. +`trialConcurrency` 是并发运行的尝试的数量。如果将 `gpuNum` 设置为 1,则需要与 GPU 数量一致。 -### submit this job +### 提交任务 nnictl create --config ~/nni/examples/trials/ga_squad/config_pai.yml -# 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 implementation for attention mechanism in Tensorflow. -* `data.py` contains functions for data preprocessing. -* `evaluate.py` contains the evaluation script. +* `attention.py` 包含了 Tensorflow 注意力算法的实现。 +* `data.py` 包含了数据处理函数。 +* `evaluate.py` 包含了评估脚本。 * `graph.py` contains the definition of the computation graph. * `rnn.py` contains an implementation for GRU in Tensorflow. * `train_model.py` is a wrapper for the whole question answering model. From 7762439fc9a5754c1d2c5ccf87e5d72070146d62 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:11:43 +0800 Subject: [PATCH 0250/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index fb896d5453..25ed8d20aa 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -152,13 +152,13 @@ * `attention.py` 包含了 Tensorflow 注意力算法的实现。 * `data.py` 包含了数据处理函数。 * `evaluate.py` 包含了评估脚本。 -* `graph.py` contains the definition of the computation graph. -* `rnn.py` contains an implementation for GRU in Tensorflow. -* `train_model.py` is a wrapper for the whole question answering model. +* `graph.py` 包含了计算图的定义。 +* `rnn.py` 包含了 TensorFlow 的 GRU 实现。 +* `train_model.py` 是整个文档模型的封装。 -Among those files, `trial.py` and `graph_to_tf.py` is special. +这些文件中,`trial.py` 和 `graph_to_tf.py` 非常特别。 -`graph_to_tf.py` has a function named as `graph_to_network`, here is its skeleton code: +`graph_to_tf.py` 有一个叫做 `graph_to_network`的函数,其框架代码如下: def graph_to_network(input1, input2, @@ -187,15 +187,15 @@ Among those files, `trial.py` and `graph_to_tf.py` is special. # ...... 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. +正如我们看到的,这个函数实际上是个编译器。它将内部模型的 DAG 配置`图`(在`模型配置格式`章节介绍)转换为 Tensorflow 的计算图。 topology = graph.is_topology() -performs topological sorting on the internal graph representation, and the code inside the loop: +将内部图表示进行拓扑排序,代码在下列循环中: for _, topo_i in enumerate(topology): From d46fa81d128738086b3b84e44ea2a8d67eb9364d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:22:32 +0800 Subject: [PATCH 0251/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index 25ed8d20aa..75ee64c99f 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -200,17 +200,17 @@ for _, topo_i in enumerate(topology): -performs actually conversion that maps each layer to a part in Tensorflow computation graph. +执行实际转换,将每层映射为 TensorFlow 计算图中的一部分。 -### 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`: +调参器比尝试代码简单很多。 它们共用了同样的 `graph.py`。 此外,调参器有 `customer_tuner.py`,其中最重要的类是 `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: @@ -238,14 +238,14 @@ The tuner is much more simple than the trial. They actually share the same `grap # ...... -As we can see, the overloaded method `generate_parameters` implements a pretty naive mutation algorithm. The code lines: +重载函数 `generate_parameters` 实现了简单的变异算法。 代码如下: 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. +控制突变过程。 It will always take two random individuals in the population, only keeping and mutating the one with better result. ## Model configuration format From a380d324e6baf594469afdd49ecd43ddd8094079 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:28:08 +0800 Subject: [PATCH 0252/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index 75ee64c99f..9bf0859cd3 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -245,11 +245,11 @@ indiv = copy.deepcopy(self.population[0]) -控制突变过程。 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, @@ -295,11 +295,11 @@ Here is an example of the model configuration, which is passed from the tuner to } -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: +每个模型配置都有一个 "layers" 部分,这是层定义的 JSON 列表。 每层的定义也是一个 JSON 对象: -* `type` is the type of the layer. 0, 1, 2, 3, 4 correspond to attention, self-attention, RNN, input and output layer respectively. -* `size` is the length of the output. "x", "y" correspond 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 +* `type` 是层的类型。 0, 1, 2, 3, 4 对应注意力、自注意力、RNN、输入和输出层。 +* `size` 是输出的长度。 "x", "y" 对应文档长度和问题长度。 +* `input_size` 是该层的输入数量。 +* `input` 表示输入层的索引。 +* `output` 是输出层的索引,该层会作为这些层的输入。 +* `is_delete` 表示此层是否可用。 \ No newline at end of file From 0e47820d5113890b96d53c102cc6cdb073a9b035 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:32:38 +0800 Subject: [PATCH 0253/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/kaggle-tgs-salt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/examples/trials/kaggle-tgs-salt/README.md b/zh_CN/examples/trials/kaggle-tgs-salt/README.md index 835bc9329b..c7d15ce4f0 100644 --- a/zh_CN/examples/trials/kaggle-tgs-salt/README.md +++ b/zh_CN/examples/trials/kaggle-tgs-salt/README.md @@ -1,4 +1,4 @@ -## 33rd place solution code for Kaggle [TGS Salt Identification Chanllenge](https://www.kaggle.com/c/tgs-salt-identification-challenge) +## Kaggle 比赛 [TGS Salt Identification Chanllenge](https://www.kaggle.com/c/tgs-salt-identification-challenge) 第 33 名的解决方案 This example shows how to enable AutoML for competition code by running it on NNI without any code change. To run this code on NNI, firstly you need to run it standalone, then configure the config.yml and: From fb053509678bb3307c8200402f447165f3101858 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:32:40 +0800 Subject: [PATCH 0254/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index 2bc19c28ca..d0c9f87caa 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -19,15 +19,15 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 * 定制自动机器学习算法,或比较不同的自动机器学习算法。 * 在自己的机器学习平台中支持自动机器学习。 -## Related Projects +## 相关项目 -Targeting at openness and advancing state-of-art technology, [Microsoft Research (MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/) had also released few other open source projects. +以开发和先进技术为目标,[Microsoft Research (MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/) 发布了一些开源项目。 * [OpenPAI](https://github.com/Microsoft/pai) : an open source platform that provides complete AI model training and resource management capabilities, it is easy to extend and supports on-premise, cloud and hybrid environments in various scale. * [FrameworkController](https://github.com/Microsoft/frameworkcontroller) : an open source general-purpose Kubernetes Pod Controller that orchestrate all kinds of applications on Kubernetes by a single controller. * [MMdnn](https://github.com/Microsoft/MMdnn) : A comprehensive, cross-framework solution to convert, visualize and diagnose deep neural network models. The "MM" in MMdnn stands for model management and "dnn" is an acronym for deep neural network. We encourage researchers and students leverage these projects to accelerate the AI development and research. -## **Install & Verify** +## **安装和验证** **Install through pip** From be4f6e1b6378747e31250c782d28cea186df05ad Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:41:57 +0800 Subject: [PATCH 0255/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/kaggle-tgs-salt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/examples/trials/kaggle-tgs-salt/README.md b/zh_CN/examples/trials/kaggle-tgs-salt/README.md index c7d15ce4f0..96520c1c6f 100644 --- a/zh_CN/examples/trials/kaggle-tgs-salt/README.md +++ b/zh_CN/examples/trials/kaggle-tgs-salt/README.md @@ -1,6 +1,6 @@ ## Kaggle 比赛 [TGS Salt Identification Chanllenge](https://www.kaggle.com/c/tgs-salt-identification-challenge) 第 33 名的解决方案 -This example shows how to enable AutoML for competition code by running it on NNI without any code change. To run this code on NNI, firstly you need to run it standalone, then configure the config.yml and: +此样例展示了如何在没有任何代码改动的情况下通过 NNI 来为竞赛代码使用自动机器学习。 要在 NNI 上运行此代码,首先需要单独运行它,然后配置 config.yml: nnictl create --config config.yml From 3d372cc2f2ea67565ade6bb86164c6a1d6a6b168 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:41:58 +0800 Subject: [PATCH 0256/1573] New translations README.md (Chinese Simplified) --- zh_CN/README.md | 92 ++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/zh_CN/README.md b/zh_CN/README.md index d0c9f87caa..db4c2279bd 100644 --- a/zh_CN/README.md +++ b/zh_CN/README.md @@ -23,28 +23,28 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 以开发和先进技术为目标,[Microsoft Research (MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/) 发布了一些开源项目。 -* [OpenPAI](https://github.com/Microsoft/pai) : an open source platform that provides complete AI model training and resource management capabilities, it is easy to extend and supports on-premise, cloud and hybrid environments in various scale. -* [FrameworkController](https://github.com/Microsoft/frameworkcontroller) : an open source general-purpose Kubernetes Pod Controller that orchestrate all kinds of applications on Kubernetes by a single controller. -* [MMdnn](https://github.com/Microsoft/MMdnn) : A comprehensive, cross-framework solution to convert, visualize and diagnose deep neural network models. The "MM" in MMdnn stands for model management and "dnn" is an acronym for deep neural network. We encourage researchers and students leverage these projects to accelerate the AI development and research. +* [OpenPAI](https://github.com/Microsoft/pai):作为开源平台,提供了完整的 AI 模型训练和资源管理能力,能轻松扩展,并支持各种规模的私有部署、云和混合环境。 +* [FrameworkController](https://github.com/Microsoft/frameworkcontroller):开源的通用 Kubernetes Pod 控制器,通过单个控制器来编排 Kubernetes 上所有类型的应用。 +* [MMdnn](https://github.com/Microsoft/MMdnn):一个完成、跨框架的解决方案,能够转换、可视化、诊断深度神经网络模型。 MMdnn 中的 "MM" 表示model management(模型管理),而 "dnn" 是 deep neural network(深度神经网络)的缩写。 我们鼓励研究人员和学生利用这些项目来加速 AI 开发和研究。 ## **安装和验证** -**Install through pip** +**通过 pip 命令安装** -* We support Linux and MacOS in current stage, Ubuntu 16.04 or higher, along with MacOS 10.14.1 are tested and supported. Simply run the following `pip install` in an environment that has `python >= 3.5`. +* 当前支持 Linux 和 MacOS。测试并支持的版本包括:Ubuntu 16.04 及更高版本,MacOS 10.14.1。 在 `python >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。 ```bash python3 -m pip install --upgrade nni ``` -* Note: - * If you are in docker container (as root), please remove `--user` from the installation command. - * If there is any error like `Segmentation fault`, please refer to [FAQ](docs/FAQ.md) +* 注意: + * 如果在 docker 容器中以 root 运行,需要从上述安装命令中删除 `--user`。 + * 如果遇到如`Segmentation fault` 这样的任何错误请参考 [常见问题](docs/FAQ.md)。 -**Install through source code** +**通过源代码安装** -* We support Linux (Ubuntu 16.04 or higher), MacOS (10.14.1) in our current stage. -* Run the following commands in an environment that has `python >= 3.5`, `git` and `wget`. +* 当前支持 Linux(Ubuntu 16.04 及更高版本) 和 MacOS(10.14.1)。 +* 在 `python >= 3.5` 的环境中运行命令: `git` 和 `wget`,确保安装了这两个组件。 ```bash git clone -b v0.4.1 https://github.com/Microsoft/nni.git @@ -52,25 +52,25 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 source install.sh ``` -For the system requirements of NNI, please refer to [Install NNI](docs/Installation.md) +参考[安装 NNI](docs/Installation.md) 了解系统需求。 -**Verify install** +**验证安装** -The following example is an experiment built on TensorFlow. Make sure you have **TensorFlow installed** before running it. +以下示例实验依赖于 TensorFlow 。 在运行前确保安装了 **TensorFlow**。 -* Download the examples via clone the source code. +* 通过克隆源代码下载示例。 ```bash git clone -b v0.4.1 https://github.com/Microsoft/nni.git ``` -* Run the mnist example. +* 运行 mnist 示例。 ```bash nnictl create --config nni/examples/trials/mnist/config.yml ``` -* Wait for the message `INFO: Successfully started experiment!` in the command line. This message indicates that your experiment has been successfully started. You can explore the experiment using the `Web UI url`. +* 在命令行中等待输出 `INFO: Successfully started experiment!`。 此消息表明实验已成功启动。 通过命令行输出的 `Web UI url` 来访问实验的界面。 ``` INFO: Starting restful server... @@ -99,51 +99,51 @@ The following example is an experiment built on TensorFlow. Make sure you have * ``` -* Open the `Web UI url` in your browser, you can view detail information of the experiment and all the submitted trial jobs as shown below. [Here](docs/WebUI.md) are more Web UI pages. +* 在浏览器中打开 `Web UI url`,可看到下图的实验详细信息,以及所有的尝试任务。 查看[这里的](docs/WebUI.md)更多页面示例。
绘图 绘图
-## **Documentation** +## **文档** -* [NNI overview](docs/Overview.md) -* [Quick start](docs/GetStarted.md) +* [NNI 概述](docs/Overview.md) +* [快速入门](docs/GetStarted.md) -## **How to** +## **入门** -* [Install NNI](docs/Installation.md) -* [Use command line tool nnictl](docs/NNICTLDOC.md) -* [Use NNIBoard](docs/WebUI.md) -* [How to define search space](docs/SearchSpaceSpec.md) -* [How to define a trial](docs/howto_1_WriteTrial.md) -* [Config an experiment](docs/ExperimentConfig.md) -* [How to use annotation](docs/howto_1_WriteTrial.md#nni-python-annotation) +* [安装 NNI](docs/Installation.md) +* [使用命令行工具 nnictl](docs/NNICTLDOC.md) +* [使用 NNIBoard](docs/WebUI.md) +* [如何定义搜索空间](docs/SearchSpaceSpec.md) +* [如何定义一次尝试](docs/howto_1_WriteTrial.md) +* [配置实验](docs/ExperimentConfig.md) +* [如何使用标记](docs/howto_1_WriteTrial.md#nni-python-annotation) -## **Tutorials** +## **教程** -* [Run an experiment on local (with multiple GPUs)?](docs/tutorial_1_CR_exp_local_api.md) -* [Run an experiment on multiple machines?](docs/tutorial_2_RemoteMachineMode.md) -* [Run an experiment on OpenPAI?](docs/PAIMode.md) -* [Run an experiment on Kubeflow?](docs/KubeflowMode.md) -* [Try different tuners and assessors](docs/tutorial_3_tryTunersAndAssessors.md) -* [Implement a customized tuner](docs/howto_2_CustomizedTuner.md) -* [Implement a customized assessor](examples/assessors/README.md) -* [Use Genetic Algorithm to find good model architectures for Reading Comprehension task](examples/trials/ga_squad/README.md) +* [在本机运行实验 (支持多 GPU 卡)](docs/tutorial_1_CR_exp_local_api.md) +* [在多机上运行实验](docs/tutorial_2_RemoteMachineMode.md) +* [在 OpenPAI 上运行实验](docs/PAIMode.md) +* [在 Kubeflow 上运行实验。](docs/KubeflowMode.md) +* [使用不同的调参器和评估器](docs/tutorial_3_tryTunersAndAssessors.md) +* [实现自定义调参器](docs/howto_2_CustomizedTuner.md) +* [实现自定义评估器](examples/assessors/README.md) +* [使用进化算法为阅读理解任务找到好模型](examples/trials/ga_squad/README.md) -## **Contribute** +## **贡献** -This project welcomes contributions and suggestions, we use [GitHub issues](https://github.com/Microsoft/nni/issues) for tracking requests and bugs. +欢迎贡献代码或提交建议,可在 [GitHub issues](https://github.com/Microsoft/nni/issues) 跟踪需求和缺陷。 -Issues with the **good first issue** label are simple and easy-to-start ones that we recommend new contributors to start with. +推荐新贡献者从标有 **good first issue** 的简单需求开始。 -To set up environment for NNI development, refer to the instruction: [Set up NNI developer environment](docs/SetupNNIDeveloperEnvironment.md) +如要安装 NNI 开发环境,参考: [配置 NNI 开发环境](docs/SetupNNIDeveloperEnvironment.md)。 -Before start coding, review and get familiar with the NNI Code Contribution Guideline: [Contributing](docs/CONTRIBUTING.md) +在写代码之前,请查看并熟悉 NNI 代码贡献指南:[贡献](docs/CONTRIBUTING.md)。 -We are in construction of the instruction for [How to Debug](docs/HowToDebug.md), you are also welcome to contribute questions or suggestions on this area. +我们正在编写 [如何调试](docs/HowToDebug.md) 的页面,欢迎提交建议和问题。 -## **License** +## **许可协议** -The entire codebase is under [MIT license](https://github.com/Microsoft/nni/blob/master/LICENSE) \ No newline at end of file +整个代码库遵循 [MIT 许可协议](https://github.com/Microsoft/nni/blob/master/LICENSE) \ No newline at end of file From a0fcda36b214c567820178e0e774c27b271e9198 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:52:19 +0800 Subject: [PATCH 0257/1573] New translations README.md (Chinese Simplified) --- .../examples/trials/kaggle-tgs-salt/README.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/zh_CN/examples/trials/kaggle-tgs-salt/README.md b/zh_CN/examples/trials/kaggle-tgs-salt/README.md index 96520c1c6f..662ec750f8 100644 --- a/zh_CN/examples/trials/kaggle-tgs-salt/README.md +++ b/zh_CN/examples/trials/kaggle-tgs-salt/README.md @@ -5,46 +5,46 @@ nnictl create --config config.yml -This code can still run standalone, the code is for reference, it requires at least one week effort to reproduce the competition result. +此代码仍然能够单独运行,但需要至少一周来重现竞赛的结果。 -[Solution summary](https://www.kaggle.com/c/tgs-salt-identification-challenge/discussion/69593) +[解决方案概述](https://www.kaggle.com/c/tgs-salt-identification-challenge/discussion/69593) -Preparation: +准备: -Download competition data, run preprocess.py to prepare training data. +下载完整的数据,运行 preprocess.py 来准备数据。 -Stage 1: +阶段 1: -Train fold 0-3 for 100 epochs, for each fold, train 3 models: +将目录 0-3 训练 100 个 epoch,对于每个目录,训练三个模型: python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV4 python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV5 --layers 50 python3 train.py --ifolds 0 --epochs 100 --model_name UNetResNetV6 -Stage 2: +阶段 2: -Fine tune stage 1 models for 300 epochs with cosine annealing lr scheduler: +使用余弦退火学习率调度器运行 300 次 epoch 来微调阶段 1 的模型: python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4 -Stage 3: +阶段 3: -Fine tune Stage 2 models with depths channel: +用深度通道微调阶段 2 的模型: python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4 --depths -Stage 4: +阶段 4: -Make prediction for each model, then ensemble the result to generate peasdo labels. +为每个模型进行预测,组合结果生成伪标签。 -Stage 5: +阶段 5: -Fine tune stage 3 models with pseudo labels +用伪标签微调阶段 3 的模型 python3 train.py --ifolds 0 --epochs 300 --lrs cosine --lr 0.001 --min_lr 0.0001 --model_name UNetResNetV4 --depths --pseudo -Stage 6: Ensemble all stage 3 and stage 5 models. \ No newline at end of file +阶段 6: 将所有阶段 3 和阶段 5 的模型组合起来。 \ No newline at end of file From 9b4650b99639f6ae1d060bb4ddbfb25035121c11 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 18:52:21 +0800 Subject: [PATCH 0258/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/network_morphism/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/zh_CN/examples/trials/network_morphism/README.md b/zh_CN/examples/trials/network_morphism/README.md index 9e56b183b4..21367cc631 100644 --- a/zh_CN/examples/trials/network_morphism/README.md +++ b/zh_CN/examples/trials/network_morphism/README.md @@ -1,22 +1,22 @@ -# Network Morphism for Automatic Model Architecture Search in NNI +# 在 NNI 中用网络形态算法来进行自动模型结构搜索 -The Network Morphism is a build-in Tuner using network morphism techniques to search and evaluate the new network architecture. This example shows us how to use it to find good model architectures for deep learning. +Network Morphism (网络形态)是内置的调参器,它使用了网络形态技术来搜索和评估新的网络结构。 该样例展示了如何使用它来为深度学习找到好的模型架构。 -## How to run this example? +## 如何运行此样例? -### 1. Training framework support +### 1. 训练框架支持 -The network morphism now is framework-based, and we have not implemented the framework-free methods. The training frameworks which we have supported yet are Pytorch and Keras. If you get familiar with the intermediate JSON format, you can build your own model in your own training framework. In the future, we will change to intermediate format from JSON to ONNX in order to get a [standard intermediate representation spec](https://github.com/onnx/onnx/blob/master/docs/IR.md). +网络形态当前基于框架,还没有实现与框架脱离的方法。 当前支持 Pytorch 和 Keras。 如果熟悉 JSON 中间格式,可以在自定义的训练框架中生成自己的模型。 随后,我们会将中间结果从 JSON 转换为 ONNX,从而能够成为[标准的中间表达](https://github.com/onnx/onnx/blob/master/docs/IR.md)。 -### 2. Install the requirements +### 2. 安装需求 ```bash -# install the requirements packages +# 安装依赖包 cd examples/trials/network_morphism/ pip install -r requirements.txt ``` -### 3. Update configuration +### 3. 更新配置 Modify `examples/trials/network_morphism/cifar10/config.yaml` to fit your own task, note that searchSpacePath is not required in our configuration. Here is the default configuration: From dedfefbcae548283957ad37710c2e7661b8f3aa2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 19:01:54 +0800 Subject: [PATCH 0259/1573] New translations README.md (Chinese Simplified) --- .../trials/network_morphism/README.md | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/zh_CN/examples/trials/network_morphism/README.md b/zh_CN/examples/trials/network_morphism/README.md index 21367cc631..dabc6f2522 100644 --- a/zh_CN/examples/trials/network_morphism/README.md +++ b/zh_CN/examples/trials/network_morphism/README.md @@ -18,7 +18,7 @@ pip install -r requirements.txt ### 3. 更新配置 -Modify `examples/trials/network_morphism/cifar10/config.yaml` to fit your own task, note that searchSpacePath is not required in our configuration. Here is the default configuration: +修改 `examples/trials/network_morphism/cifar10/config.yaml` 来适配自己的任务。注意,searchSpacePath 在配置中不需要。 默认配置: ```yaml authorName: default @@ -26,83 +26,83 @@ experimentName: example_cifar10-network-morphism trialConcurrency: 1 maxExecDuration: 48h maxTrialNum: 200 -#choice: local, remote, pai +#可选项: local, remote, pai trainingServicePlatform: local -#choice: true, false +#可选项: true, false useAnnotation: false tuner: - #choice: TPE, Random, Anneal, Evolution, BatchTuner, NetworkMorphism - #SMAC (SMAC should be installed through nnictl) + #可选项: TPE, Random, Anneal, Evolution, BatchTuner, NetworkMorphism + #SMAC (SMAC 需要通过 nnictl 安装) builtinTunerName: NetworkMorphism classArgs: - #choice: maximize, minimize + #可选项: maximize, minimize optimize_mode: maximize - #for now, this tuner only supports cv domain + #当前仅支持视觉领域 task: cv - #modify to fit your input image width + #修改来适配自己的图像大小 input_width: 32 - #modify to fit your input image channel + #修改来适配自己的图像通道 input_channel: 3 - #modify to fit your number of classes + #修改来适配自己的分类数量 n_output_node: 10 trial: - # your own command here + # 自己的命令 command: python3 cifar10_keras.py codeDir: . 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. +在 "trial" 部分中,如果需要使用 GPU 来进行架构搜索,可将 `gpuNum` 从 `0` 改为 `1`。 根据训练时长,可以增加 `maxTrialNum` 和 `maxExecDuration`。 -`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. +`trialConcurrency` 是并发运行的尝试的数量。如果将 `gpuNum` 设置为 1,则需要与 GPU 数量一致。 -### 4. Call "json\_to\_graph()" function in your own code +### 4. 在代码中调用 "json\_to\_graph()" 函数 -Modify your code and call "json\_to\_graph()" function to build a pytorch model or keras model from received json string. Here is the simple example. +修改代码来调用 "json\_to\_graph()" 函数来从收到的 JSON 字符串生成一个 Pytorch 或 Keras 模型。 简单样例: ```python import nni from nni.networkmorphism_tuner.graph import json_to_graph def build_graph_from_json(ir_model_json): - """build a pytorch model from json representation + """从 JSON 生成 Pytorch 模型 """ graph = json_to_graph(ir_model_json) model = graph.produce_torch_model() return model -# trial get next parameter from network morphism tuner +# 从网络形态调参器中获得下一组参数 RCV_CONFIG = nni.get_next_parameter() -# call the function to build pytorch model or keras model +# 调用函数来生成 Pytorch 或 Keras 模型 net = build_graph_from_json(RCV_CONFIG) -# training procedure +# 训练过程 # .... -# report the final accuracy to nni +# 将最终精度返回给 NNI nni.report_final_result(best_acc) ``` -### 5. Submit this job +### 5. 提交任务 ```bash -# You can use nni command tool "nnictl" to create the a job which submit to the nni -# finally you successfully commit a Network Morphism Job to nni +# 可以使用命令行工具 "nnictl" 来创建任务 +# 最终会成功提交一个网络形态任务到 NNI nnictl create --config config.yaml ``` -## Trial Examples +## 尝试样例 -The trial has some examples which can guide you which located in `examples/trials/network_morphism/`. You can refer to it and modify to your own task. Hope this will help you to build your code. +下面的代码可在 `examples/trials/network_morphism/` 中找到。 可参考此代码来更新自己的任务。 希望它对你有用。 ### FashionMNIST -`Fashion-MNIST` is a dataset of [Zalando](https://jobs.zalando.com/tech/)'s article images—consisting of a training set of 60,000 examples and a test set of 10,000 examples. Each example is a 28x28 grayscale image, associated with a label from 10 classes. It is a modern image classification dataset widely used to replacing MNIST as a baseline dataset, because the dataset MNIST is too easy and overused. +`Fashion-MNIST` 是来自 [Zalando](https://jobs.zalando.com/tech/) 文章的图片 — 有 60,000 个样例的训练集和 10,000 个样例的测试集。 每个样例是 28x28 的灰度图,分为 10 个类别。 由于 MNIST 数据集过于简单,该数据集现在开始被广泛使用,用来替换 MNIST 作为基准数据集。 -There are two examples, [FashionMNIST-keras.py](./FashionMNIST/FashionMNIST_keras.py) and [FashionMNIST-pytorch.py](./FashionMNIST/FashionMNIST_pytorch.py). Attention, you should change the `input_width` to 28 and `input_channel` to 1 in `config.yaml` for this dataset. +这里有两个样例,[FashionMNIST-keras.py](./FashionMNIST/FashionMNIST_keras.py) 和 [FashionMNIST-pytorch.py](./FashionMNIST/FashionMNIST_pytorch.py)。 注意,在 `config.yaml` 中,需要为此数据集修改 `input_width` 为 28,以及 `input_channel` 为 1。 ### Cifar10 -The `CIFAR-10` dataset [Canadian Institute For Advanced Research](https://www.cifar.ca/) is a collection of images that are commonly used to train machine learning and computer vision algorithms. It is one of the most widely used datasets for machine learning research. The CIFAR-10 dataset contains 60,000 32x32 color images in 10 different classes. +`CIFAR-10` 数据集 [Canadian Institute For Advanced Research](https://www.cifar.ca/) 是广泛用于机器学习和视觉算法训练的数据集。 它是机器学习领域最广泛使用的数据集之一。 The CIFAR-10 dataset contains 60,000 32x32 color images in 10 different classes. There are two examples, [cifar10-keras.py](./cifar10/cifar10_keras.py) and [cifar10-pytorch.py](./cifar10/cifar10_pytorch.py). The value `input_width` is 32 and the value `input_channel` is 3 in `config.yaml` for this dataset. \ No newline at end of file From d6c1002edb5645f35bb06fc09fef4a6ca5e1627c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 19:02:56 +0800 Subject: [PATCH 0260/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/network_morphism/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/examples/trials/network_morphism/README.md b/zh_CN/examples/trials/network_morphism/README.md index dabc6f2522..9245d9a928 100644 --- a/zh_CN/examples/trials/network_morphism/README.md +++ b/zh_CN/examples/trials/network_morphism/README.md @@ -103,6 +103,6 @@ nnictl create --config config.yaml ### Cifar10 -`CIFAR-10` 数据集 [Canadian Institute For Advanced Research](https://www.cifar.ca/) 是广泛用于机器学习和视觉算法训练的数据集。 它是机器学习领域最广泛使用的数据集之一。 The CIFAR-10 dataset contains 60,000 32x32 color images in 10 different classes. +`CIFAR-10` 数据集 [Canadian Institute For Advanced Research](https://www.cifar.ca/) 是广泛用于机器学习和视觉算法训练的数据集。 它是机器学习领域最广泛使用的数据集之一。 CIFAR-10 数据集包含了 60,000 张 32x32 的彩色图片,分为 10 类。 -There are two examples, [cifar10-keras.py](./cifar10/cifar10_keras.py) and [cifar10-pytorch.py](./cifar10/cifar10_pytorch.py). The value `input_width` is 32 and the value `input_channel` is 3 in `config.yaml` for this dataset. \ No newline at end of file +这里有两个样例,[cifar10-keras.py](./cifar10/cifar10_keras.py) 和 [cifar10-pytorch.py](./cifar10/cifar10_pytorch.py)。 在 `config.yaml` 中,该数据集 `input_width` 的值是 32,并且 `input_channel` 是 3。 \ No newline at end of file From 906d64d167b1c8cc9001ad07fc40d3ce18eefa8e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 19:12:16 +0800 Subject: [PATCH 0261/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/zh_CN/examples/trials/README.md b/zh_CN/examples/trials/README.md index 70065a8c13..6bac86a086 100644 --- a/zh_CN/examples/trials/README.md +++ b/zh_CN/examples/trials/README.md @@ -1,4 +1,4 @@ -# How to write a Trial running on NNI? +# 如何在 NNI 中实现尝试的代码? *Trial receive the hyper-parameter/architecture configure from Tuner, and send intermediate result to Assessor and final result to Tuner.* @@ -6,7 +6,7 @@ So when user want to write a Trial running on NNI, she/he should: **1)Have an original Trial could run**, -Trial's code could be any machine learning code that could run in local. Here we use ```mnist-keras.py``` as example: +Trial's code could be any machine learning code that could run in local. 这里使用 `mnist-kraas. py` 作为样例: ```python import argparse @@ -86,7 +86,7 @@ if __name__ == '__main__': **2)Get configure from Tuner** -User import ```nni``` and use ```nni.get_next_parameter()``` to receive configure. Please noted **10**, **24** and **25** line in the following code. +User import `nni` and use `nni.get_next_parameter()` to receive configure. Please noted **10**, **24** and **25** line in the following code. ```python import argparse @@ -119,7 +119,7 @@ if __name__ == '__main__': **3) Send intermediate result** -Use ```nni.report_intermediate_result``` to send intermediate result to Assessor. Please noted **5** line in the following code. +Use `nni.report_intermediate_result` to send intermediate result to Assessor. Please noted **5** line in the following code. ```python ... @@ -142,7 +142,7 @@ def train(args, params): **4) Send final result** -Use ```nni.report_final_result``` to send final result to Trial. Please noted **15** line in the following code. +Use `nni.report_final_result` to send final result to Trial. Please noted **15** line in the following code. ```python ... @@ -163,7 +163,7 @@ def train(args, params): ... ``` -Here is the complete example: +这是完整的样例: ```python import argparse @@ -186,7 +186,7 @@ NUM_CLASSES = 10 def create_mnist_model(hyper_params, input_shape=(H, W, 1), num_classes=NUM_CLASSES): ''' - Create simple convolutional model + 创建简单的卷积模型 ''' layers = [ Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape), @@ -209,7 +209,7 @@ def create_mnist_model(hyper_params, input_shape=(H, W, 1), num_classes=NUM_CLAS def load_mnist_data(args): ''' - Load MNIST dataset + 加载 MNIST 数据集 ''' (x_train, y_train), (x_test, y_test) = mnist.load_data() @@ -225,18 +225,18 @@ def load_mnist_data(args): class SendMetrics(keras.callbacks.Callback): ''' - Keras callback to send metrics to NNI framework + Keras 回调来返回中间结果给 NNI ''' def on_epoch_end(self, epoch, logs={}): ''' - Run on end of each epoch + 在每个 epoch 结束时运行 ''' LOG.debug(logs) nni.report_intermediate_result(logs) def train(args, params): ''' - Train model + 训练模型 ''' x_train, y_train, x_test, y_test = load_mnist_data(args) model = create_mnist_model(params) @@ -250,7 +250,7 @@ def train(args, params): def generate_default_params(): ''' - Generate default hyper parameters + 生成默认超参 ''' return { 'optimizer': 'Adam', @@ -267,12 +267,12 @@ if __name__ == '__main__': ARGS, UNKNOWN = PARSER.parse_known_args() try: - # get parameters from tuner + # 从调参器中获取参数 RECEIVED_PARAMS = nni.get_next_parameter() LOG.debug(RECEIVED_PARAMS) PARAMS = generate_default_params() PARAMS.update(RECEIVED_PARAMS) - # train + # 训练 train(ARGS, PARAMS) except Exception as e: LOG.exception(e) From 1371b0ca732e362f33de961db01733f79b32289e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Mon, 7 Jan 2019 19:12:17 +0800 Subject: [PATCH 0262/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/network_morphism/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/examples/trials/network_morphism/README.md b/zh_CN/examples/trials/network_morphism/README.md index 9245d9a928..ad0583b08c 100644 --- a/zh_CN/examples/trials/network_morphism/README.md +++ b/zh_CN/examples/trials/network_morphism/README.md @@ -6,7 +6,7 @@ Network Morphism (网络形态)是内置的调参器,它使用了网络形 ### 1. 训练框架支持 -网络形态当前基于框架,还没有实现与框架脱离的方法。 当前支持 Pytorch 和 Keras。 如果熟悉 JSON 中间格式,可以在自定义的训练框架中生成自己的模型。 随后,我们会将中间结果从 JSON 转换为 ONNX,从而能够成为[标准的中间表达](https://github.com/onnx/onnx/blob/master/docs/IR.md)。 +网络形态当前基于框架,还没有实现与框架脱离的方法。 当前支持 Pytorch 和 Keras。 如果熟悉 JSON 中间格式,可以在自定义的训练框架中生成自己的模型。 随后,我们会将中间结果从 JSON 转换为 ONNX,从而能够成为[标准的中间表示](https://github.com/onnx/onnx/blob/master/docs/IR.md)。 ### 2. 安装需求 From 5133f8bf7fee0408bed00dce48efa632d6cc1619 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:43:12 +0800 Subject: [PATCH 0263/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zh_CN/examples/trials/README.md b/zh_CN/examples/trials/README.md index 6bac86a086..5aa6c7c671 100644 --- a/zh_CN/examples/trials/README.md +++ b/zh_CN/examples/trials/README.md @@ -1,12 +1,12 @@ # 如何在 NNI 中实现尝试的代码? -*Trial receive the hyper-parameter/architecture configure from Tuner, and send intermediate result to Assessor and final result to Tuner.* +*尝试从调参器中接收超参和架构配置,并将中间结果发送给评估器,最终结果发送给调参器。* -So when user want to write a Trial running on NNI, she/he should: +当用户需要在 NNI 上运行尝试时,需要: -**1)Have an original Trial could run**, +**1) 写好原始的训练代码**。 -Trial's code could be any machine learning code that could run in local. 这里使用 `mnist-kraas. py` 作为样例: +尝试的代码可以是任何能在本机运行的机器学习代码。 这里使用 `mnist-kraas. py` 作为样例: ```python import argparse @@ -84,9 +84,9 @@ if __name__ == '__main__': train(ARGS, PARAMS) ``` -**2)Get configure from Tuner** +**2) 从调参器获取配置** -User import `nni` and use `nni.get_next_parameter()` to receive configure. Please noted **10**, **24** and **25** line in the following code. +导入 `NNI` 并用 `nni.get_next_parameter()` 来接收参数。 注意代码中的 **10**, **24** 和 **25** 行。 ```python import argparse @@ -117,9 +117,9 @@ if __name__ == '__main__': train(ARGS, PARAMS) ``` -**3) Send intermediate result** +**3) 发送中间结果** -Use `nni.report_intermediate_result` to send intermediate result to Assessor. Please noted **5** line in the following code. +用 `nni.report_intermediate_result` 将中间结果发送给评估器。 注意第 **5** 行。 ```python ... @@ -140,9 +140,9 @@ def train(args, params): ... ``` -**4) Send final result** +**4) 发送最终结果** -Use `nni.report_final_result` to send final result to Trial. Please noted **15** line in the following code. +用 `nni.report_final_result` 将最终结果发送给调参器。 注意第 **15** 行。 ```python ... From 58f1aa4aa9b92cca1d25d089ea3a57149ab6eda9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:43:13 +0800 Subject: [PATCH 0264/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/tuners/enas_nni/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/examples/tuners/enas_nni/README.md b/zh_CN/examples/tuners/enas_nni/README.md index 1fdd887b53..0c55375cd8 100644 --- a/zh_CN/examples/tuners/enas_nni/README.md +++ b/zh_CN/examples/tuners/enas_nni/README.md @@ -1,4 +1,4 @@ -**Run ENAS in NNI** +**在 NNI 中运行 ENAS** === Now we have an enas example [enas-nni](https://github.com/countif/enas_nni) run in nni from our contributors. Thanks our lovely contributors. From 4117a2e2fdec63f896aff3d94f605b6d04a0e0ba Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:45:52 +0800 Subject: [PATCH 0265/1573] New translations README.md (Chinese Simplified) --- .../src/sdk/pynni/nni/curvefitting_assessor/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md index 19ca01e72b..f54f9cd3bc 100644 --- a/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md +++ b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md @@ -1,13 +1,13 @@ -# Curve Fitting Assessor on NNI +# NNI 中的 Curve Fitting 评估器 -## 1. Introduction +## 1. 介绍 -Curve Fitting Assessor is a LPA(learning, predicting, assessing) algorithm. It stops a pending trial X at step S if the prediction of final epoch's performance is worse than the best final performance in the trial history. +Curve Fitting 评估器是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的尝试 X 在 step S 比性能最好的尝试要差,就会提前终止它。 -In this algorithm, we use 12 curves to fit the learning curve, the large set of parametric curve models are chosen from [reference paper](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf). The learning curves' shape coincides with our prior knowlwdge about the form of learning curves: They are typically increasing, saturating functions. +此算法中,使用了 12 条曲线来拟合学习曲线,从[参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf)中选择了大量的参数曲线模型。 学习曲线的形状与先验知识是一致的:都是典型的递增的、饱和的函数。

-drawing +drawing

We combine all learning curve models into a single, more powerful model. This combined model is given by a weighted linear combination: From 0197efbc165ec84caa741b06de9ecdcf6517d0e9 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:46:05 +0800 Subject: [PATCH 0266/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/tuners/enas_nni/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/examples/tuners/enas_nni/README.md b/zh_CN/examples/tuners/enas_nni/README.md index 0c55375cd8..bbea28dd5d 100644 --- a/zh_CN/examples/tuners/enas_nni/README.md +++ b/zh_CN/examples/tuners/enas_nni/README.md @@ -1,5 +1,5 @@ **在 NNI 中运行 ENAS** === -Now we have an enas example [enas-nni](https://github.com/countif/enas_nni) run in nni from our contributors. Thanks our lovely contributors. -And welcome more and more people to join us! \ No newline at end of file +来自贡献者的 [enas-nni](https://github.com/countif/enas_nni) 可运行在 NNI 中。 非常感谢! +欢迎更多志愿者加入我们! \ No newline at end of file From f3d8e26fbcf0598bb37665f33d439a2ab71317a2 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:52 +0800 Subject: [PATCH 0267/1573] New translations PAIMode.md (Chinese Simplified) --- zh_CN/docs/PAIMode.md | 65 +++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/zh_CN/docs/PAIMode.md b/zh_CN/docs/PAIMode.md index f58835f751..a1360ed960 100644 --- a/zh_CN/docs/PAIMode.md +++ b/zh_CN/docs/PAIMode.md @@ -10,38 +10,37 @@ NNI 支持在 [OpenPAI](https://github.com/Microsoft/pai) (简称 pai)上运 以 `examples/trials/mnist-annotation` 为例。 NNI 的 yaml 配置文件如下: -```yaml -authorName: your_name -experimentName: auto_mnist -# 并发运行的尝试数量 -trialConcurrency: 2 -# 实验的最长持续运行时间 -maxExecDuration: 3h -# 空表示一直运行 -maxTrialNum: 100 -# 可选项: local, remote, pai -trainingServicePlatform: pai -# 可选项: true, false -useAnnotation: true -tuner: - builtinTunerName: TPE - classArgs: - optimize_mode: maximize -trial: - command: python3 mnist.py - codeDir: ~/nni/examples/trials/mnist-annotation - gpuNum: 0 - cpuNum: 1 - memoryMB: 8196 - image: openpai/pai.example.tensorflow - dataDir: hdfs://10.1.1.1:9000/nni - outputDir: hdfs://10.1.1.1:9000/nni -# 配置访问的 OpenPAI 集群 -paiConfig: - userName: your_pai_nni_user - passWord: your_pai_password - host: 10.1.1.1 -``` + authorName: your_name + experimentName: auto_mnist + # 并发运行的尝试数量 + trialConcurrency: 2 + # 实验的最长持续运行时间 + maxExecDuration: 3h + # 空表示一直运行 + maxTrialNum: 100 + # 可选项: local, remote, pai + trainingServicePlatform: pai + # 可选项: true, false + useAnnotation: true + tuner: + builtinTunerName: TPE + classArgs: + optimize_mode: maximize + trial: + command: python3 mnist.py + codeDir: ~/nni/examples/trials/mnist-annotation + gpuNum: 0 + cpuNum: 1 + memoryMB: 8196 + image: openpai/pai.example.tensorflow + dataDir: hdfs://10.1.1.1:9000/nni + outputDir: hdfs://10.1.1.1:9000/nni + # 配置访问的 OpenPAI 集群 + paiConfig: + userName: your_pai_nni_user + passWord: your_pai_password + host: 10.1.1.1 + 注意:如果用 pai 模式运行,需要在 yaml 文件中设置 `trainingServicePlatform: pai`。 @@ -64,7 +63,7 @@ paiConfig: nnictl create --config exp_pai.yaml -来在 pai 模式下启动实验。 NNI 会为每个尝试创建 OpenPAI 作业,作业名称的格式为 `nni_exp_{experiment_id}_trial_{trial_id}`。 可以在 OpenPAI 集群的网站中看到 NNI 创建的作业,例如: ![](../../docs/img/nni_pai_joblist.jpg) +来在 pai 模式下启动实验。 NNI will create OpanPAI job for each trial, and the job name format is something like `nni_exp_{experiment_id}_trial_{trial_id}`. 可以在 OpenPAI 集群的网站中看到 NNI 创建的作业,例如: ![](../../docs/img/nni_pai_joblist.jpg) 注意:pai 模式下,NNIManager 会启动 RESTful 服务,监听端口为 NNI 网页服务器的端口加1。 例如,如果网页端口为`8080`,那么 RESTful 服务器会监听在 `8081`端口,来接收运行在 Kubernetes 中的尝试作业的指标。 因此,需要在防火墙中启用端口 `8081` 的 TCP 协议,以允许传入流量。 From 05b69c509aa7ae5f675cf54100519728b060bad6 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:53 +0800 Subject: [PATCH 0268/1573] New translations over1.png (Chinese Simplified) --- zh_CN/docs/img/over1.png | Bin 0 -> 64843 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/over1.png diff --git a/zh_CN/docs/img/over1.png b/zh_CN/docs/img/over1.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5c6a0db3ffd3675327890b591a90522caed07a GIT binary patch literal 64843 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𖡝|{{9 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 HYwGtutC3>7 literal 0 HcmV?d00001 From efa84b8bd762967c1ccb52315662f5eb10b62322 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:54 +0800 Subject: [PATCH 0269/1573] New translations accuracy.png (Chinese Simplified) --- zh_CN/docs/img/accuracy.png | Bin 0 -> 29489 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/accuracy.png diff --git a/zh_CN/docs/img/accuracy.png b/zh_CN/docs/img/accuracy.png new file mode 100644 index 0000000000000000000000000000000000000000..92558b730ce766499924d39207db1cf3d5df3780 GIT binary patch literal 29489 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 Q&U}K@Md{qs`aSgD0KaZ^jQ{`u literal 0 HcmV?d00001 From 13499e8ede1ad81183fbda20769881443f9ac02a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:55 +0800 Subject: [PATCH 0270/1573] New translations hyperPara.png (Chinese Simplified) --- zh_CN/docs/img/hyperPara.png | Bin 0 -> 87109 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/hyperPara.png diff --git a/zh_CN/docs/img/hyperPara.png b/zh_CN/docs/img/hyperPara.png new file mode 100644 index 0000000000000000000000000000000000000000..d69fa6fc198880062201aa8518d7c5584b099a48 GIT binary patch literal 87109 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 literal 0 HcmV?d00001 From 7e12e12549b9461be19fad6cc64f0754214df5b0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:56 +0800 Subject: [PATCH 0271/1573] New translations intermediate.png (Chinese Simplified) --- zh_CN/docs/img/intermediate.png | Bin 0 -> 36797 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/intermediate.png diff --git a/zh_CN/docs/img/intermediate.png b/zh_CN/docs/img/intermediate.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f052d9340e84b9ac2ed6115ecffeb9eb75ac51 GIT binary patch literal 36797 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 literal 0 HcmV?d00001 From 35962cdf45c15161e27ed7880b99f552167e0401 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:57 +0800 Subject: [PATCH 0272/1573] New translations kubeflow_training_design.png (Chinese Simplified) --- zh_CN/docs/img/kubeflow_training_design.png | Bin 0 -> 44723 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/kubeflow_training_design.png diff --git a/zh_CN/docs/img/kubeflow_training_design.png b/zh_CN/docs/img/kubeflow_training_design.png new file mode 100644 index 0000000000000000000000000000000000000000..b2acc7adc434339a84f6a2eb45d01b2970a191f0 GIT binary patch literal 44723 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 literal 0 HcmV?d00001 From ab28c18f2ae9eab2ebbfa5d14217af4bc5df6bce Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:58 +0800 Subject: [PATCH 0273/1573] New translations nni_arch_overview.png (Chinese Simplified) --- zh_CN/docs/img/nni_arch_overview.png | Bin 0 -> 126232 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/nni_arch_overview.png diff --git a/zh_CN/docs/img/nni_arch_overview.png b/zh_CN/docs/img/nni_arch_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..621f16a0ddfde3bdef49058aff64baaf36b82e01 GIT binary patch literal 126232 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�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 SB`W#vv;WrZ|9S`hO#KfcLu^z4 literal 0 HcmV?d00001 From 17ce80e00b868c039e6cc42b24b3725fa92d7fe8 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:48:59 +0800 Subject: [PATCH 0274/1573] New translations nni_logo.png (Chinese Simplified) --- zh_CN/docs/img/nni_logo.png | Bin 0 -> 23931 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/nni_logo.png diff --git a/zh_CN/docs/img/nni_logo.png b/zh_CN/docs/img/nni_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6479e46b40479565556c3a00d526133b9f5239 GIT binary patch literal 23931 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 literal 0 HcmV?d00001 From 35ae3e1b334b04de368383c951a5ac76b80d29ba Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:00 +0800 Subject: [PATCH 0275/1573] New translations over2.png (Chinese Simplified) --- zh_CN/docs/img/over2.png | Bin 0 -> 28819 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/over2.png diff --git a/zh_CN/docs/img/over2.png b/zh_CN/docs/img/over2.png new file mode 100644 index 0000000000000000000000000000000000000000..783ab2127f56acf9d861c9a13cafade42d758140 GIT binary patch literal 28819 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 literal 0 HcmV?d00001 From d7ae9ab456c1a3035c34dc6962c72e2a9f58912a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:02 +0800 Subject: [PATCH 0276/1573] New translations table_openrow.png (Chinese Simplified) --- zh_CN/docs/img/table_openrow.png | Bin 0 -> 40171 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/table_openrow.png diff --git a/zh_CN/docs/img/table_openrow.png b/zh_CN/docs/img/table_openrow.png new file mode 100644 index 0000000000000000000000000000000000000000..ceabea6bd4b5a3ebaa37878d918eb34856a94285 GIT binary patch literal 40171 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 jQvOHQl0tz;XP4KW?;=W7 Date: Tue, 8 Jan 2019 09:49:03 +0800 Subject: [PATCH 0277/1573] New translations trial_detail.png (Chinese Simplified) --- zh_CN/docs/img/trial_detail.png | Bin 0 -> 59843 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/trial_detail.png diff --git a/zh_CN/docs/img/trial_detail.png b/zh_CN/docs/img/trial_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..66841b950484686193af0cae6fb19e19fed9027d GIT binary patch literal 59843 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�rpJ|##08Vzdjt9D!xG*wZB&e!|!;(GktL-mW%U*fqI~C;4l?XsktDgo!B+j3% zzhxykl0wQENu0mz_7<}+3ptv9cAKDWBG_c-g-f4FLoh0(kaUn|!w6`1N`rWll|WN} zkAr~lLVQjRTv18MDu2-3%9IGm2(lSKpiwU68*=*H%xRxU9?*jCRu~qnLWQmjMC7t> z;Gd1m%$o6`E1fEg%&oP9z*7oVWV;3qZ>GV4xBl?icts%L)3>Pce@MBC5I5Ksoy+bX z%)Otusu2NCKknAK&HD<%0B@bZr>^o+J%8V;fOL6pSakzaUypi*c8tNI8CH#ksFrJo|b=nqi-hxG*iUDfA5uFz2KGrK9h)Dr!BLB}h3$OLdS z9BMUUpzgx%@*^jx6yoPVNtUX!FMt~gY`Fl_7T`pxf6JfN?SX-TBTMGXC13&(sAI~}#IM(yfkgKBUvCjiKkn!gy zA~Y3Bid{J^9q~iQ;$*-5_sn{=_hxBhWI1vnQCE4+Z4l9^UQB~|rnQ~$I{o>dZP8!% zV@{3`F_1T80p|;`&-|YTwJ5BeQvRH)j1y0dp1BnQy886Tm?9i`0=V@DDdeSxKYOTW z`arqG(i-0U95nvAUkvhq5bPu+_!)Gm7H4!fk8oBTwDtx3QaOd-Wz(k9N-+T!=*&ecBH{y4g`Jm+WBB} za{6q)LcLJ0Z7$(`Fvv0WJk@rlY Date: Tue, 8 Jan 2019 09:49:04 +0800 Subject: [PATCH 0278/1573] New translations trial_duration.png (Chinese Simplified) --- zh_CN/docs/img/trial_duration.png | Bin 0 -> 32930 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/trial_duration.png diff --git a/zh_CN/docs/img/trial_duration.png b/zh_CN/docs/img/trial_duration.png new file mode 100644 index 0000000000000000000000000000000000000000..728a5764729ac9ecaae5fcfbafa1be7478d742ea GIT binary patch literal 32930 zcmeFYcTiLN{x)jcvJsVSMMc1EL!_xlFVSs5Kwt|3LMSQ%h5(UXLu`nOh;*q@As}5O zBtjrTrASLOlt4lfsgaTd2uXmDZ`Cn@)iTfvk4;y^W zTAy9BraDP(<;HKoXW2WKoP*b_+4_0)Z*3dw?X5Ly?&@2dKYKO8o!uxKbCm^u>!wz z>A|fR;d}patxN&_**~s*aK+=|KW_W+t#-kjL}cf||5lT?b|*Sl^6|Z$f6Z&25IMjf zdhW=o#$9_?FmCJ3{)YMWlZ7|Sr?T0sB6h_0M5;P6c4|Xqca~hHDy)*={S-g<)o?hG zy2A$)sLYsnuxuZwz0)`6&!4l2x&q(ZEvRBmRH~WG^!l$+m!slOshZOweyk8XkKnS+ zLX>F}y>+$$&TiYfslV2J`YL?y7D4tRTMBzp#ThUx4p@K8Py8ePipkv-TO<`{!u^|M zI-OU;pi9Re(y1B07MO4Eaq)qeK4~1SVpO@f_-WiCXBxq)_G2GCH|A61m&7FBsUJ<@ z&FVQjs7i(hWBjdtEsa#7UGP!D9~!D{f$uk}yyh?<=qnDc&Dor%uc@tWG@HyD(2KY6 zc#*z+_@6^D>^v^oH+pvnxLR5elW%RWN1x7Pl8%Jbg16)$_#s5-5py(sI?1~qaii7d zpX0!QaY`hNQD6||4`1in(-$?jAan5NaKnErU!FP;#^cl+)-$+y2vr z-@sFyw@VSG`oh|jLpBaHG?GvV?{##UOD0$odjbqXB#~qWx50H@?1ie7GUeisK1jV^ zTki_ro4BB3{~mU2hKDrb9uD`oxW@*C=jm3y+1n=SQp8?QlM%zY_1mqonoNlHX2ujU1YU zT7JqQ3c@xn8Px#)s8~&A~UzK!1kV8=t<+Zzdq9ic#!h0S8V&x=KQ z*6b@|*!A0BX*2Qy2JhOd@eyYnUiUwKn0X2o6L z_UDIGzH{ap&+{YUTsukeZ@&S4eg{)ChcuGL?KK7&ABn!(_!XIh8O^6ahfIfqZV;m- z%*kbgY7pEP76nP#Q6rn=r5khdaZUNJXm5Q5*lEH?rBlM`Jkkc@#QN}6GeK_Pm;qDp z2iJ%I^Mvw{O3dhzd5IV0@?;>WV-lICHQBLmNJ8b&<{TIvTd!FHwNqw{`DHu zJ<&0WVDinTnz~)q-*+|m%9vZ)YYgO{85zb~Q^5TqX<&5DV}cI6jXtRxR8imFrl3WN zWJ+m0x#!x_rKW+T*7pUO(aLAc*cGkX#IZF&Khx7fK9G3FfE~q~p$f$@!a0V5wugnf z*?e5Ss!3`KD;(3|K)jfj=U=Qngl?G8F_k}n&?x(Jw(?=`%DMOM?+weQn$vATnr5?C zxJjbrj@(?Yy7*khkT6FjL*t|0zXqaAzIKIYuLBK&BdR#P9;SH({!f1H>>d#i;VG*T z4uR9oX8L<*A}nR$k(a&QlP+cFt<8%nRv+=OCfdaPMMRz%Vm& zd8`z05^j9hJr&d7E1wvRPv*f1Pf?Y9f=|Fsc}!1l8DM&ps+@@ha`KQs$NpaqTZDgh zbV^*C91v-Q zP=Az5!Sl`Gu!9ofg3@SDnYL??AOq1G2;qpjDK_jw`Gnke#sw<_<9A8&JCxhYDPe?P z;M$4@ymoZeYXJ{H#pe0d$}1r%#=dZExCL$?egC!wwk8Kx66dMnv6AFuNnig(rPJ47 zkhk!?WGQ~kCD5&XTkS<7!>T3pPgARVB`jG5B|lalRoM2kf`r_zevYh-qerMg;~y#E846DQUA1}hnhM} zG%(mZQSjV~8B_gu{g+>PdlgQeA(nd?bZfRv4Rxo|;xSI#U;a82sV>OF`0fgOY6n7} zWOR2$MPcWLiysbrt7NpmyVKb6u+rduDy-6Gg&!LlPcZe5?-ijc*MAx>ty4KI^_Hp( z9SMI+EHA<+jFHpIACZFB82&;bOP~Oltx59oz`h-TKS19BGTRn>0br21IhT8q{@xj% z8ZZ$~hNB}zOICulV}n5aLfb;MyG_UN^kr=%G1=H@TH9kOgd_Db%Crmi#>Tc1RS}KM5{K38HEAfZ zpv;54tEFc)(p zw5id{A@7C2QGb%8qM@FCAUxoDuq0J|6?6BW`Gr%f$w+5~`y_fk+t#?&*FI>rOBz{u z1{e@=l+{S*t(kYTW@D>p3X3P*J|*iY5c~)T@GAOCkAGh?Z_hHzS_e#1KX0}4fckRRfc^k3QUWEuY1#>FhPLBPbvX4ltfxz?w+ zM=fNR#Z~&90O7`GS~!3MX}KjYm`VbZ4%IvDMvI9HoPw`a)gYTLQ#&y^-4?4Ka}2tU zWaJKCn0e_WGMoM|Q64UY%3~`8V=88YN`ik3Rk=D8E{U7l*v$(pxpJgPj9+M z>f&(a8*jt+#wAkvIQ2<)EO#ys$OMzF^ufW1krmS_%IW+cW>2WNT2%sB>fE+o%-GJv zA2Q9qdwPZ0-HDq*96j?h**)9F_d4AKx-{SxH2bWlM9(XpxFW9UcW$nlLaMU6so_I) z&K{T0LdNG9cCVjWq)!5osH32zfQcQ`7)a2b@#_m9BUfvxH;uxzWA~!J{Ugep;d|q0 zq|5D+OofEpziR95OmI!403|zrJaZLXQ+-$o{xZRTPRR;pl1isfM6f@hLc5 zo91g|OjA^hs?h%&4)Wv9EGUR(F4Q2813vlYv>p`V3Gsm*IDIuCzGs(4lj0JzDH zdCArTgn0<-rIR|HB;2%+pcBro(^=`UHOBVkt?&xVazjnNaZnc$7vZJzF90QdNxAba18kkE_^6&iDhdnKEg9}b_)z@t{)Jmvv`_LM%sC9 zd*{gg`R(cIN@>1c}~9bYW{#JnqT#027VBWRm0L{LgtI}^1S?2 z5I`}A8C)Y7w2!VSwb_vWclS5|wut0jA*}*6tLj(Ij{J&kF;~jWmtX!GIIiG5Gvtn# z3L^QO000eI9JnU(8nN4A=*Dkh%a~8HkjPQ;{87K-Hl$RBR%FacCiz%4qXED8_!RfD z4=b*Q8=|QdYvpiz;L#PTldo^Cxrc}3hBXd;@w1f=rK+<}pF=AOr)sB9K-C{4lUEy? z&3^$_?jv0ulvG@33Cl7Hi3#$0p#2a4S5nN^p;&y<`Y%qq&=&1bMfIvDOo={e3}OzK z(={haD5ZY@uttm|RnhyNx5}fMYP(PT9_}2S!i&DZ-(i@<)u3nC$B2gRrti^oQl6eM zkq&z{_Qyl_px|oJR!QknAzeP{Qb1?TCSMYU|5!JU+Ht)Qz3O`p{`P3S!N(SPgL3F2 z=#uW?B&{J{R3c{3L43v6nY;c=Rm}2a1ym>wlNx9IgeTW^Zxrj=Mf_sPOv&o381Dw0 z5Djf>$5^1cd2D;`J(F8iZVn5Mv6E$rqUD!p)+YCEZFsQN->ipiUwp4a5I5s?&pa7NVW=}%a(hvaN2wV3|U!) zr9;>phQng_V%{i2osPlIM&F}QmGEP_B7^&rIM~qD74LkpGB-D62@+k&rp^e$t+0(b zLe;XT<)6Rt5?EUzK>e+_O>`jyA!%t?GS0(3CoH)SC;D=ipT5D)!=KQ(ml@(&fiiZP zyqqHO`1ZJ(M8-HOLq&7>I)c|jK2EJLMEP7w{dL$2(H%~_u1}tPCD#OD7H#fK@sA#x zmcoVCtSO4sv?Qgv&x1#sVl74b`PH0a-V0G!(vWc&{0DZ57Ns378a^aX!{I7ed%slc zK}XZAbGEwrImLh4;OAG@VsyyGDZ`$+nh?*v)gFBp#YQWI;~jVXNbIB&TF&u+5(miM z3K34yIm^i=mDD@8f0biC{R~kVyyMti-hyKVN_jZwt zE$xJ9hXcMSV*eB(W$Ka2D7e4nji}g3Fij32nCHMWIuU`klbF0XW?FX7<8TW%r>=r7zx~wunop%gJHOM(AZ&4;8qQ%ZTQ38a6~Mo z7TKWwvVzksG{s+XJ0ge%-8=)~K4;$G+JuK&({OkX*BmxFgo03dC%6vNjtzuCrlR;- z@M#H7E9tsOlbye|oZTbw{cil0f;2g}G?kmGalpgj0%6xXFPMy$KfgKO@Y-=r#K_~q z+Im4*G;zaFM^v-2c@ij90f-Rx!zqye0jNUHHL1 zlB1K*r(AQ zZ!9D;d1MZ!ua;TNj&0(<`LqzjTyf~1TXG!a+*uy#@Z_rvnT9M6);rRC7$osyI?CU_ zfd0CoUS0G!5GoZcG$`<_Mv$~vHudJT!`r;swc!RqfN%9h=i@eOu&eN1NX3;;E!nM} z(+ToN2ijo5tSS&=?zQwjz21jZN%}E;dW$$6Lnp5lwTfO%UqO?#z>xz_r2_k6rkdIN zplCWzGxOL_kecnw-1hBoUtOC$MaUoY6Rf3G;fM1xhK$~bDzL#-wM;d3uAFu4a^)vQ z7FXgT9}aJ)7gwm{F@&qrZhUvfGP->u+bkTxhJ+qmGp%vE-}FnW6AjE}Te*5yaAW0! zm-L>I-6OA^5_R!7YsaR3%*FC*XBnm{%j5l->jFlo;Sd&8K71}OB>E(idK4BfwwYOD zu007w3cSluNms*=yFM93<^F;vFhI(6lg-pzq{w2i&h!C)bJn}r)6p_Plz=;-8sRI! z^qeOYn{XRziW5W#2i**Z(6~&DOa1im&dEW}2t_Z$j|N^`q~R+o9TVL?6tX7!FIEnx zVO(jUm8Y)24^kZFYYA`)yqpC8u+k7JscGHFV)qNO`kwbLtUPPt=zD^b20{V@V3GBN0>6;K4~%ZSj7#OsMV> zBc*vu9fiacCwfID!FY|-TF*KXnInpgN)re`&ft{{6IA%7Sd1TuGQky3w!U!^8gchv z(eh^z!ByIU)io1P*rn*s?0l6!^=@t{K<`*_GBU2(4>4JsT`p?jvsNqC6P!aHawLq3 z83c)3xh{C3F6Q>&?d*eZ!K=rMT6Lxh8lEqL={#g8djvlsr1=;#hZ^v6exkiXL#zwS z$~Zb|Zlb=9+y7PrfPpYEtzVX8MGA3&^%ebu=Fg76y4UC7MXmZzJ?J!k*pJ+lBj9=b z-1(~R-pH2dT&p3$lU!MvCBqI`oX3g|1%FKBZKM{{nc@u@7(ZTmUtEa*vF;Bh)qZ{f z8g0gGtcGi0n<_C(s?r@tUb6ollvt6}TLIEY*bUTK8t&oeQ)-i9=s{ge8~mU(YZ=8# zO(=DCo7v3tX5Tp3bf3JWFBmR6&&`1&+ln(2;%azb&qBY!gBR1SB-uq9A}7*TX}y~R zQ=NM*tk$OhGbPluU*La!W0J^3+{`pVF=NVE0pu@B>4mwVd@r_TdX+~Gl>Zs1XMra6 zRnp=w`geaM&;c4BDI310?~A~xuRC&9g>h9_rM(NMc)r;o&Of}^$-}r7=LeJ{(H$9& z<`hfmLt>z%IqKaj?o7DA(K|O*Yac$;P=C|wEKTL`2cLl{0Z`$zX=*g^YD=rklq6>D z0F5_-J$;D`%63LxiJbwuKLoGkp!1SEX#xuV*_$1Fex2`yHVvA1Bkf)CD5n?iKB7IH zgv=2*7U0gF_Y=SK{P;YhDX$)pldCH426QHfN)0EdB=GFnzT}!zJqnJtVOhqOgAaD= z`=OgoFgBe{P5e9;Uc`;iD0@Br`MLBYZTZrzZYDg2^302GD;_WIJPL+|)NtvS!YK?Q6zAaZT~O zr0v3$;Z&U0T&FDVNRCu87*khgbh9BGBCT3lLWYIqH%3JI^u!|q6u442es-}<0qFV< zXO6#?(z@Ib`r01(=|de<(#l`2)22ppA0P}>%{fvl+nJQ~_b8KQ1s~3GciVfA&JnO< zEWkO}9f;*m4oP{g_xv>K)N|lrmKYP$$dvcp0EHTA1@7 zUT!=c`52T{%Tmejc9Lo8903>$Bz<-mAUw^aANY5IXjQ~+F~Gsh|Cr+YqBPaVG5Q)> z$qGj(9dyYBJ0g=rl0Hxk?=0x7=snjNS4Cs`M{a$8jCmsx6|_W36#zTBG~YE&dxJ?6 zCFfXSJAdOpo_86GX0Q;(znZ`O#{q{BFZ2+f&3nqwv^4-$_02a;HpwhQOhBr?_`7Qk z$rxO`F)!1-O0g5P`Hg5+lQ3g(>=C7SC*eaGzpccJ+$9%YTQq@fbPk*;@fRU5MRozT zKpUGcWC^jqb=a!I;~FI61)h`ok*HLxKKJ&@JAkU9 zi)bnc+!f2kBp>!56nItk-K1ND$yZU=a49|kTe0p7K{Uw{(FFv zg+y9P=Wl)k9JSA!6dNJ2o4c2!98n;cZjZDja5LjO{mnFUEY@^FCmU@=Ogqal(IJvO zby1@48?Ia1DFBz*e(?ra6Dv)tx1G>5SauAS75jAs=y2N0+#S9i6~3tBM#Oeb0*qh~ zYku>%2~|Ld0Ygm`A<%%Id54d z7vI-^(qx08ePJDp_1kmp0__Nf5&ZPdF$aCDdn@Fl=JyF(M6hU>zA zfFffdoR8n2#}TkNdo|`_ONzF7) zGta#0?i4ikeNs+}?^V455D$}}P_v~66Eq4tHTp&I0@o@gDBkY-Dp|wfj5LumUP@m{ zt`5G|vB#Y5A_bIyVr}xDoDPnf{FYtdb7X$puycK%lCi2S7_W(vAvL_K;q#KXy_Vop z?szQV8jC=_Tuo`R{PNNr^Ldex+>e0#6?sJX)#LE^7oj;G8zi-rL=jwHJd!SzrO!Vd z6V1*R)gLjG5h6{r<>#=ZG5<>RC(*rUE=y)oR!2}|sAwx9*D+?SSiMuHBT08Zh!vaq zi@u0=1QJkH3^i-krUz+O8xE#hJgEnirzV?Yqe#;<n0DCwe~1ds;DkCzB-LF}~s;(}&V#OzoAWHL$HHN)pvOYG;H zOrP~Oe=%_A@o{N;x#@h~U=6`d`6}M22D>y~ix7@)x42!mBXXVHr(g!pNm+93rU*!z zB6T)bbI!W!Z92ELyX<&nUi~>v%{%^~T7+2}!X-fB7nTr%9LI@=o@W4{g+h<#9I#yk zlEU^CA>m4NcvNW56CQckBNw97s?D4Q1c6w98*b!&v8M@Or3Oc(uQ<@NKYf3{3y_J@ zPehO89i5(?$h69~4ZY=%XAsHRq2^!WEG^+JX%?dv4r_Z*gRc)g@>TP94rW37=h{JF zd$m6HYH`q3Be*m~q%kyT4e!cyhbh+ap!x%QrEyufWpy^7k`Z)u!Pyu9rYam%uR^3? z%O}#Yr95kuj&oL#MKgx83AG|XqFezop*F|tK%CmihSS3DIlI~lgHUhAKfR&L1c{5s zEhKE6NV~de%jW>H^hdTFId2>8nqrnYn?cU!b7GxKh>ydD$>~!CJ}5N7tg6jNL#XAy z6mUrg5q#sD;E_Fv>z6)dv%;6;C91?ilS3Z~fb<1T%1e)b;iGPQ4&U)W;6&}Ol!RyR zv(0rXz9wDG{@V-DQs#D#$=5oO-E<}!NpM-}bqo>fs{W{7mxm=-0F2dizyPi$GH7NL>PyErecll~L4+Q_j@b6-oDT|LMnb zU<#+qIE)kLRcK&US$*F|J#y=y^ApPe%d7^(c$5eryzTPIP2ApG6QB$$^y`dQ0_Y($SyE9l zxV^HC6l=#2RBsrLvvRtx#s(A?>2iaKY_tP)J0l6^pVk>yq0;DqnCgD&$pnw2KDO?L z8PfwHo%m5{hF#F-k(5S>;QhJ&YUX_TEvv{=0KO$RJXOKlxkS(S0fG45j&r`lBU@0F zPyA*H&X-bBd9B4xot@4p!C&D4AJYT?7)nxE;$ouJ2`h#bL_gm^m3dIsZ|Tt&H@*{< z>2h@il*)^dA;m;+QXh@7#%OOWMTG7l{%!BZX2j%29om$QcbW42|1RT)#5d_FgK;YCx7B z%iNr?oW3FgWX+Vk?f1y_DX;9FNk6>$K5QMjL$6;#IAT`fs&;Mi+GG;}q2~c#&OAKV zSVg&nvU0F2xBRQKBEZ#MkVM)YgPFeTvnu#VR&%~VZ3Mt$*Tt(8XIMP$I470tz)9dG zwnmN|ma%r`N~QRQOOTVW!JW674`xal=WmTkP!9=<&01CN72;oA%BG5jh_yaPA+Qwsp$r+!sll zr@!E)M}(R^m)Z#i1- z*jSm2Pk*t4ekr5u)|Cg}>VL z`0y>O@WiObd(c0A!gV|#=>;0B)T&i=4C=Kt&L?xnvV>wle|-)^b+>+C?v-_&1cYmy(5H~u<( zd^k<-*V&oFuhDCNogS3^pIhF1jmECqaHqG`dClWLd@C~^V6S+7@7e%dcz$Ow=jLyg ziZ{1Nc0PK2raQd{{N15xKf3k+6nEp;-@)SxyCZh#ZX{j?zB_Y1 za7xSZ75dNq@3uGgZ0dD2Z2ZmrLgGE0)g}FLCAU6d*D?Rcx{LOE9<9@LvVq-m`hR1{ z1_x?qhGz6wvN@Sd&h>hH;UK^G&c%zZ*}70Wf5%GKB`UPa%iG(Ca!y<>Hmzn!(SBM(%2dR+%bm;H~8{0K%h-WmQx3&16kpZjlI zD!$|EJJtMT2VyS4<8qFk|KNMCX-XAB%%^z3`F)YR2|7Y5PGR;G+cMwXcu=DovGLac zH*bzqU>QaT$;#N+tvZtvDdY1!?R7`?JlnV4=O{4y18)pM71aNxZq3TdQgW_ml3!%V-80wUaB#FbV(#YT z8^Fno%Kkz@PXy%D*0*7?1pc?fo{$yW3ItUv;6vm}Ve&s*jHmRdxYpWgqzMNS4xolcJvA3(e06^MEQcXQEZsLVbC_ zi<;B5O9z(0hV4P3k00_BPoWcu%P+oJ8p9#vD$c&pX*3FMDu+dn#%@QFMcZn~3PV*R zptoe=we`?9S-f{Hu?|?|3e3iNtYg&E!bMF9t`R;|^e@4eWFm-NjZnW}I z?_v+o*bJSzg_&^D*V7wNzD*b!jO1LS+&niK;FEKr&Juz&rt;4uR+tlA8*Ylvm{A;0 zpRdhxiyj#n>>s9otZY4#_%lQ9#<6e8*k)ovLZhPUHwYAA4X^vpZ`aIye~Rp=>1F^W z?|};aU5DgVHGUsC!&!(+9n-2*%*oaJBA9Zf+E__XOOB(I!aqM;T2_72UW zl1vUN1YooDVeSUirt2(e`Kjey3l3@)sTI=R9pQ903+N-Z#g@w4AE1VeSf z$R8?$GbP3ODgL`PUB-rjPK-H=Y3?kIE%{|>7)+;$DQ+$;EtZw_C_GPhTT9fJVY4*1 ze`WEjLoJ*0wb+_q%$I%b#XxwM>h6Q#mnP~%r}g{>zA~$u*MGA$@Tzn^F?>@utHHKRzH*IoRdA@>}Izu5NiYeU=qrwhKLR@x)yY;6uPY6>)F^i zvpK=UOCF7unD!sB2p*8zIE!szjm-&F#kT2*nV`@&5I?~lwGw^S6yN9B= zjds*2FSZ}K#28gm}3+O)eC<(MfKf*JcC!c-8 z4#wfZK>Zq3VmgbU7Dkj~xLr2A`96)Jy7h+*(Dol}me!z2rrcjc^{(e+k1Xg6B= zUa}S^$*}^B`XrV~NWK-MOIB{TY~xH4z3AqzakhuxapEcypL;qwIrZ+zD+N&4``?3_ z>Xi?A`ghzn?03_=gJD?eB_on1*3x0_uSWDvyce06l9%g14^?n zQ(0VC!%HnVH^+dimK6sut4KZ@1tF}=ck1{MFI!tXKu;Gop+0{$`4&RJ9nkh)jTzYZ11pR=nq!9r7YuzmITA!3l9~ z`>^QD3VYJ=yLZdqPabD02D}rvB|Y^Z)9++W@4md4U*5pLm*UW(SlLGT3ld3lS}1Y4 ze)u9QZYbl!j2DhUhh3ehkL%(5m^)=|Ej#>U{BP;bjFS-nMEpd}d=qDU#|uA3L*!^{ zqO7c}a448m?py<;Q$ves5eLU@QSeA(Q!2o!_JJZc7Bv6m&}u+!vlH&nIGYw0W!WG` z{&iFXll=`r^||j%C&NfK6$lK^uI))9~s%to{3nd6Ytct35}Gm3UIgcS>~Vq^-*fpIb#dP{t?`a}<=+}_z#PD$ zmQF!6GtWsYA5wNF+#=qUO5DYA2@i3bsk2TpM(49zF!xvbb^7yX6J&zN>c*~OYs0T4 z?4Eb+V6$!#D%WUX#+}P*i?M3hx#mHRLJ%jy)22Q+or-DX(4XqDjtPmj^&FF(|5M>e zwkR3Tnz8R)!-e?=1V)bUC;2I)o(7CiaNho14`fD~Ik7fQS0ae4P72dmiW%(~nDO4pedD!`@IU zmZ}Y|EoyflDDQ;7<4wCDOKK}edjG@}elg4bs7;jjg(NcZQXYgJ={l4+TI{T?6G#<% z2FMLb5xReg?HBu;Jkm>E>iJXEs~QeM!~>p5jRGokI|u-xmuB$#kWip>IE~Q&YKP8| zk(PuuAaQ4AYJ!iV#6XD^7xv{G<@(S8W~H-$c!SpLtfNY0UYr)aNH${chNf}~Huh`h zF2dFKruN@5s=MumpcSg7q_DbjL(1q_&=cF_Zk=%no4aIt^m0yK?m~0(NhU@w?*vG* z$J({77<|+wM;R1oNqSHjosQvqubrOIw*_ZZhk6o5Ss9q`D>X-}od4{Z@4hlx{Dpvf zmTS5z&~rPgYkhuew>FyOvDxp*_XcQFkWDZ_@-H0!O{OUd~-!6U-u}>w=_9qyh&jiwF;@ z7N7C-Jm+81*JQd~m%tus5$H+rZ)TJ()S445Ch{RerInis(3zBWe0IZz0>{6@98W%hnIP7*P<87#jXrzya{|-Wc*(JdHaO9de|)=ZUmw%@9RAw=5&_G!H+2GWnojMFiP%GCsStgsz%v~cB3|0?xvV%=uWK;$3pyqb|% zvw!>gGy!!CSLlw1JIzy{p>LIKs>G?c8(snj@L$zT+XbLLy^3xdE$UNCsF#lmb&2Zg z>b3rui3zRkA+IOcii+pdI@zWJ%!cmLLpMAv8)`cPySk28rE*f_O4nEDcL=20qZ$)2 z>h0yaQzc=cnc~DCjwZ)Ewfy$X!C-qz*{1tIHp|zCG1yq9mOW5Fdp}Vrxh?yr>?8m? zLZB_+_&~GYC9qNZOUG zhq!@Ew6&r2rhk~XW%}GO zLc!_&sXj-EmX~vlZlpCr2dD*_;r-G@{v7GJt?%F`6sP_7Q$6)QMbjQbd0Ab$76P*$ z)AbTkN?p`*K3-Nd9&d1cuN4q9!$lSexobOIZy?U$VM+(SwqdnyueOD|HrzvLDzrXV ziuPD@$|{9fV4n2c4gyxsi@;27YfvQXzm?M)tY8@#+Zsmh4};K1f4(GR^nQ=hqKYpn9Uo-5sd2zV@fcdwAK2~xLSRe^hHN}?P} zXT4N)D$nv1(=Pcwuj^c5ePHhvsr(=mY0`hhl!;9D5rlIC^KVCY^u4C+7C-Y)k(Tey znpEF?wEN}h8#DfHGWFm_F2_ZMcZ;Gv@bXl9c25cg)kV??2)F{G%(6(D3Cyq%HiUf3>x5J;W#111(A4;dI@wnSr`s z*2RgdW8w@0!dTc2i4Qo&IEJ({;JT)yjgLQBVAG2d`k)`+kv!l*W8|D9fAZwz9TP z|9GuFWHQy(EHb|P*Ul`AhNLvmp7%kz2Y9f@D#;o56j}lA{FsK}J%_eD zx{nD?Sw`kUVLW}ktGn3m%uX1;C3B|ZgfZ*-F{b+ex$~=pLPR|p^_Je43~S_PxW)S_F0SVpXhTq-PUn19Q*pp z8*xGFUC$o2E=NgloK3Y)8B{$!bf^iC06wOL-4UVHR%yW0pQU*K#LC;siIi^|&8F5) zxeRyfGoN+69{tPXYRMxyg8#8>{t z-ma^-l3cRmy+BXOHyo!ekZ(`z*F>ByA?Z*1D&XYT$4g;MJz^+*6$Vhr@^Nbvn&S+&Vd^wc#g(Bh-JoHwRU9Ki3 zfZhqxx<@=m%QroGWfeVr(MP^U_oSfiYp<{FuI;Jq&^+CgTER8CNpR%F*6pH( zaVGM19;`}k+P=0w9QpJz;&$d*%jl-LX)&o(qH|V=Sav4dc~c8ASs)WP2R4z}_H8YR zPi{Q(vdvrOEaO;R9jRgm4 zifR8+Ex?Jy`raH_fV8_s7JL;(Sly)G00j#*yZ|#D*ZydjEqp{9L0-x=G=)qq-?O4c z1x&@c3O)KuYQ`BOZO`}Vq#@@~3}{|%ZUe+#m=n$-<{8JXMAX`Ca`nFG@?$t&#l6Nm zk$T1v4-~WVrVB5|!f&&>1&6UEwDm6elTX+C}mEoB+o3&F(|bz|?!L2;M{0-IZGh29H{#;E%aSgQof61}bKS zac5iS^N~I=jg8+A2YS2AH#fE6I2%PaA`N!=LYjF+Z}qpDQepM@{OPg$Hj^8*PcM+j z%8N%r5WbmT#gSBTCT8g7g%nHk%$#BzX?*J8a`9{q3~va~nAM(b03BHm+yCNC{%Hsq z;EC<+?D{Lf`q2JzfT7Ktcd$;lC77-vn86q(7A1zk6K``iSpAM-=cm!cj^L2=uq5tc zDAqcd)Sq7$b~Z`AXm_uShkOxQMw!5fKYpu7b0yu_^L}>Q9ZO^M+SK&DB^E-6l!Akd z#7yTuLZK1-G7mbyas!QZF!5o(e9B-rJv8&y5)j$kUqRKWKX&@s72m+6ktb6#7u78u zsI%8-d6=Kt<1V)#N4)A0gVfyt@^;d{Kmf>Xct?@3;ik>b_0zbWBdKj=B<*GDPB)Oj09X z>hN*&?5t#rcW9G$)?Vm1s)B>Zu64iv4tVM&hF?xTbxNma98F-@JYwjdonaGW&7tj`%l(yX7%}_m0b|~h@%@# zs-7)yCTnHGntG!me~ine`l!0thMsL25K2H-zy9JIu0lw8#^DoPS*iEEmlr1OsHftq z8s?t{n_u7luNwQONYX-fL=Yc6U7_!fAZwh+n3e3zXxIxhEzjb2@&OLO&d%qUCPZq1a|jFpVXQ9oYC57iWGk#&n#el}^OkbU!nvG<>Tzxsw! z^yug)^7lOF8t*Mro5xPv`VZ0JKGsq+p6TJ(CL90pfxOuss#?*Fm%oc_hXIc6GSW;8 z$PFoHg7$)9SKvar!UsFw6-G2SodJ+VHNl;aQ}H2ZgM!E*qQ zSz}$Yv`j%NV&mg3)2*}{$A-4OeE6>-^k*qlhW;qGdER!oyj;WLhqWFcv`jr5qgvLE ze;sacV2l)5kZ3T6t#`@FyMHajDpM=n#eL`QpmWca^>_Sl3fkj1P@H}d71jihp|m!| z-KQu;he1Zi@b-UO>-%%}Kc&s4{r?Xrpa1_Y0Tp=~jm6sLn+$S= z#+{~n7hQnDa`k|vV@Rxo>Gro*3ebK<|Im%EpNI%ShFMx#Iyz?5{IThu!t& z_QC(pOjdVJ=8G360){^H_d8-y#zscBP)0;of7^ek)=f=+Q+Edq!as*yw?Y64#?<|o z^z@)z|5T;dpM!wEcsUnnL4o%=&Re4l{{4#uXKK)mp$~z+@b8xY^pA~q$(SEC=r{lw zOW$T}87TgTV*U{j?^dsOb}T*D=2YR*V)hRK{r8PY8UN75oBlZae@aXLKjTpcu078) z+EGZ{Vj_#8%lu5OtGXL-tb6Ns+X{glEA8<9`E3OcP-BOHKBs%lqq&bVDh8Qrp53e7 zpmXEY$1{7ZPQ3UWFQ1u~X0U7LCV*zitdX1U^QwF0Ha^sp`Zv`mP4A^F;q}i8cO2cZ z`C;{j^>w}wX#9QL#tF3F?rYTdKirSxK=eauxn`}e(V@ruPwa?2_u$@%jO#})AKml2 zr|ia{K5|%2z^+p z#9vvR&v^{mO0XoSzHH{|no1TN`}x5C$O%ix`t$K$GQwh=&v~6=#wS4SsLFBwK9@l< zajvgVU#0I&y{(#m(qI2Jr^nYJqS9=+`^F)zg=o($NRon&4iHuXL70!f_OG{SZlsYn zKHj=bgS|5U=;`u$mn%Y5l#>0TSOP>thf`f{dU|?F%A0=SqkkXrBbmtWqbxlz`gz}{ zP4xjVnC+!YKVVorR3h;7nZYwV>Y8tV+M(EG0YvRGN>J1qHTKKD)Y z6fJjrUndk?n+xozanbBjOu@xOyHKTwI{km&f=lUP0T8ze>En!^^_L)R`<$Jf1NC@* zKUZ;nJqo?{&AIcIICTAys?)$*pBF5Ry^~ur$ebTP?qo#&$DUk*C^()@chrY!n!Za5 z^E-Gi@5PJnyrtZ6_kTClK|5+4emPqlUz?$P4Vcz#7)%AIK0;?AT!+?VY5x1A8$GCA zx|)V~BhA99<0$r(f8W>#+Uz$SV*DTSN(%pFn>{fQ*78(o4i)_ZU;1CJu=zc@(-$0U z>8l7%g8m72`0t;FEJ z%aF_&o`QoOL{_N~m`O4j50^k~{kkrk?pUlHr0#3Jky(9S$Lo}N{i>tyxeQ^Y_j92J zZ;yn$07f4N*ejq41LsbzKe6$@V*J$0Rp-=2@9)`ebm`|R9%Rib?%UklRNX})A%MnS z87S0b5ABYepWpt!iu?9>Cj0;Y?%Ul_NF^dErQ0ENaEPLuib;-}%p5ApNRl?y(CzF_ zI?hxMMTRye+T^ULgi@AGrjbgDMkSM``o6DglPP_^zdwGz&#(V_T)W=a`~7;q-p|+b z^?bdq%d6N8y0gvWRW5ihJE^8%{SldRV;8s;~_|QYco6{8T@p&ETw$tu; zb9N%q5jmYI3+_vvO?g?lW|nM(cNBy$%XX!J;}Y&0ej)x;BC*8v%<@D@?@w=9KC;TB zZz;_9W;AQf>I()WsE1``+?h$YuIf(4pDLtPkLIx--L}ON!jJQdN%0JHIETa^MZ{6*~5v2ap=5qH^kbB(;3U0A<=E9r;vc%^LC;C+-|XHt=dJz zM;x^PW#mPVmfK(nM7DD;?YMtkdca57q>uZW@csew;<>vP+xEueyfz$Fw1A(J{fES^ z)wj3Ts`Hk3d8BV1gM7Q=sx|g|hh&GWY|ED8#fNVW)s^d}ZAx06CO>1jIrASFWiv^5 ztetIyTNSD~6M-cx1g|Ex?9>RHHRIe22(H)9X29ppA5A|bjTGV3Jp|Tb%^5w&{ugZW z$my$1vFtL?r2FGdoKHJ7Oi} zUr{TL@ZYuL`q|g+%0`Oa6T@6;48jGxItxu+RMejufrbS=QL7sfj18&>Jr!bR*+|T& z-5GV!fnyOLkLc(fy4!wIQNIyzmH>ho087PwZ$8$U(-|qUv^p=dPK&IKHNn5zDfbk> z45e`q z_t4rrrdFvDsJlh9KfoT{nOEyU@*QS+8FRnbQHx*!%_bm^teoI7(tcwfH@aclU(J%y z^Oj?8K@s`=8Z)f~7rD!{MBdS3SuLJf40w>L)u^I&m~KGzMf}g5`omf90{Em*tZ5 zTf;f$*eSYRBkPej+Iefdh9YD zg+irCUCvEP*kDekFIN!lH?((~TsUSBJS%FErEZVg2KcU-(dCbFtBEDjAfWi=6Ak{7 zn6ULsasg~A@ms{)>nA6+$Ig`cKfVDn987P(&N*@B%@tb*vE&qyU$et~(f7R?S&p3* z$5J3pqD(3}9I8n-hk^t|m9{I{{%t?A9@KFGWiAWsFxY4G z&oQNaxA$_(aq>DChto6<@)^R$@Go@E^EWM5o6$<`o&_m{GlF0?-!gDoX06P2_>_o- zzCypf<+GI3jCHCALCSjhG4;`;!A;+*)#ZI!%CdCl%$f5lLdUB*Ke@!cHPWa6MbR&= zdWJYaqaC_Np*V%gl@=}2>e0lx&B6F%E@8B1?5{`GYJqqc+HI&AcI7 z!9IKKw$8WOjfmd94C@)TpAZtZ^JkJuFs20lyVnm>$?+1l?m9CU6+c5cqzJNWq_Q6g zItqB=;0KQxT0*B=qbp8=CYNgCHj!cG>hiprF<10U`lk^}fLLm-Jag$z4%$d&-h(-T z0D(8YcrO7{%=MY{cxgn13?P&9pg^PG$=QsEu#nvETGrT}CvQf=558YoN{^QLyahtS z-xzH75$y5a(GkWid@?mH>6mOglVs(l@u*+~x$X2)q`murH~D?BoN4B<;|QNe_Hby~ z`Q-3UtzHK*-2~BpEu`&HgTf8fnJwzyLmH$5rCwZD`dSpW*PS5*VqR?w6Yto-?QMBk zTwJ4M426pcaEWHJ&obHHmRVR@TFkvhkN@;0*ldoQR$%)UgAfuycFd$g9QOelfg8rr zaB1KAtcIRjbkh4ptv#k^1)B)`{e$6ceHnsHanF7_cjISgd2-1-W^R~9lx`qyOR46o zTkZ|6!|j~nNcv4gFfPRKuFTR+Z%kvJdjq1RC=YBe9yd%NU& zYNruy$VEO}Vm-)QtAAv#LE}-~k7Vpu7YAPa2I}Lx0u!oUQe5jL5+OSFsG!E~AmEy+b%QLTDt#ccg{WJE&pgE(y z!?7DF%(PpB^wCn(X}CD-q0uz zuhL?x$8Yg0+8w*#+7!2Vu^qY|nDVZ?M`68i@g-2Uq1b$6MorSV^Z`Kz9^cs~F&qveYs$HqcKEc!z|@M7<)9$8+L*WVsE@{DoGO(c5#C^_FV#yaCgk z!qV(wqq$RU*Yae%TVOzhTQuq6F6*iIN&!6p{juq3uJTk-AqKcm#<)Vec5Mm!1I=R1KUDK$|umA+rvVk#nJ4KuvTpqk&!>>52B`A|(ThBk;_ z4)}jIy~ae%_a14E<<+qFEH1>K4ZrNM5u;YtWbKREMFqYg3V<=H>F6|<{pCG(EN%wO z^ezZteq}aOhxW`1{m_)>okqLyID6VFPk16$7Ewoa06fVm5lWknj=z^#=&Pjm*J+a{rztxF$4!G-`=VTCA#|ddRl;}EgZUgxMI!V6_ z+`l;s-b6SfpX)h!!ptwm-yJ8MZufg9U@j4%08ZEYxvwu(gXjGLh27`td$)b%%9V!? zAKnlEXRDK@nVG_03y*V3f8`B87}H|EK?gKC1^C1`H*~N~U7s}_ym41iRb{e#xmmSw z(^rTjO&SQSmv;Km6X`z+i9n$P<${bmB~V72w%XYBQxu?+lb4_gi2{vr(Xe%toqc?L zlVIZ9ZJ4EAK zyF%aAkriLn8AL^Xj#^E=S<~w^K*2b{=kvjXua&=k6Kr|M+D2@f!I66Xxlhr37)n<* zvfm570u|u|pkH0rxqky9KH2*I*j^I54QM74v15{<00H&Heto{#DOCsw!OK3|Fd@d zgeZ{Hz1VB+%Y4bASJ`4PX(6+3DL~8;N}ASO6efcp+jHo2U_H&5oaKt65y)-yezj6wgF+og7;7{?ju{ zF1(~Z`TZl`BQ_T9cTo9c1tLoS5WTl%NJV$hQm=7Pw~@_WCS7r|CxM?%G3Yh)dSE6> z%(|0-c<|NR6gD3UTXS6*e2u6C5}0NK?49q4?NIrIv+nN&Kw$!HU4rKsAfc^-QsyJ% zz~hfysY2-h%D82#mI2+*4ocqMBRala(XIK-wF-I;`TDvsXb*lJRQok4?z@?nNF-{J zgv2#Cg|DCwA^Mfjr$oXH1PYU{HYwJEhl+gg&2*q$`a!!I;{o9~QfgPkV|lW20BFCs zgIk`G&VX6Wq!BGBaN18!`6Lnl;KhjGZ~KgAot*=#N1zPZ^2f7%)&NKE zbl|q;z_Qs|Noe!NCk8Hh>}*%)d|MAGmF4IvL-+KUw5#>NqA$noy%-kCQpR<+wN}p; zx6HV|Kl10Nc%V8ixuV6zIq^AYzfRF_1<+&ug)*+)O9-iaqS4hv=A+ zXQ+bBM0wr#ejV0>39%&7BAb8|Pz!Ey?KPgZ=Q+^e#L?-j1`outFVW~7GRw$3kMR_8 zq8_n#{#m9@d+!J`_TYbbrU&ZDIWJUU&!=f%@9uut#Ov*<>At()^6J)37RO!6@fI2x!VTHr zQfS|8vJn;6vuvvUt+$FO?gC+ZM)w%neaKON|^{%;cxZ~ptUdkw`OO11DFs02_PM~SmQyNqc3dJT%|m-cE?1VoXGsJ=L80}l21S)`J} z^0Mn$j){GyWcr>3HC>ziTh%W=>RmkoF$&9xCoc*K!zEQgg%AAxbLY;@mzUoL2#Ttz zB2*i(Q+0;~cl3AJ0xH24Tfc1nQ>a7I+8WA|WM!qGGR3O1+7KfNH%kMKdP<+u(E(06 z#>2x79_EsUXqdanf^cMnaF~Ta%F?{fl@#F$sQn0y2WlT+B4GmtI)E#S$&h#UQ=d$#E&W(8f7A-L2`mNwa4;X+ z4&x6;z9M&Q()rm}Kw$|~655X^Kgs;}=V_Ec(?}|)XF&FYQ=Z}HPjr3SmMiw0{8S}& z5Xzgoe2S)%rS<~X(`E$hp{u#yZBhusRVL#R198}=My40?= zgVwOiRY{KPR3N^@H2ei8QK~yRW#nPTw-rKfmP4b_D+@fJ*Ic~P`$3%(lJvzA8_VnT z5mKu`NuMJ(cWOWaC$Ynoi`m(dEj(2{;M2J;t4DP|%C)FVCfd?LVxzOih>43By1QhY z<6mRyP@Z|Ao@9v*;-e=}I6Ct3g-3Hx^@V6rYNLt-=qrW1oi1%RzM~V2A{()>-qlt9 z+1tmKzeI7%Y^X{^ro)9ZVWDv%Ab^W7JlxKhYFJPyyPkC|Yv3Otc>Y9H5{OV*gmX^) z-BnN_$?Ul><<;9McsDy+Piz&NDFNyyKaC8oHkj7rF+SaL;uOVo4XWt-yI?RFb93`; z+v0DO$U_CcNwEhU_cJ@2y2jb}fN1(ZZkJ25*Ny@=_W43H+9_HzHPf&L8H z!=?Qd^#B`=p-Axi`>`^}m!Ud+zHK=07)HGHQ zNi1UY;R3|GsMwa@Tm+SuJZa&fgDaR~^uU=zI1xZeRp&*(m3&LfN!N_3%h$kLBrHo$ zaG5pas+-v;+c(R8CCX0$RCQbeP&Hl_T%kHK)A@Lq9uN&-+6mPozp-Q75f^wLhf33sIPsgi zMc6;}-B8U(s68hj5QLa|3)ifCZJKflN#xfI^?BL^kP%516$5 zl>E(k!y!QMSt}_31FcmMUx*v0CkdGph~7L?m#m!nIjq|8>ekV(5&Ozu`1@(iqdijk zcJYh|X-~w)8Q{YQi$5Rs`x8oBezI*Okq^FUtO<&KpkHeK{Q1Sj#c4fomNsc}l~Cv` z98wXjqPBNP>V4L0^M)$^ z*t&31!N`5zt# z*Utkk!31_e zxN!bo{jn3LEh)XEk1Vm7t#_1k91`<>}XmY z`VAj{TNZF07kzoucn=mN<$-^8fXOc0l~Qs6NFAU6O??CYvVbV*OYkcu;p)6(lH(cI06B^(=-ZW^b=Z4tm1lT4hc!eP P)ZEzgtbEAB1> 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 Lhb7J2JL-P`lm?bI literal 0 HcmV?d00001 From ea3ea177d7498766283bb3fa2f329be3d4e62a99 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:05 +0800 Subject: [PATCH 0279/1573] New translations webui_overview_page.png (Chinese Simplified) --- zh_CN/docs/img/webui_overview_page.png | Bin 0 -> 90287 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/webui_overview_page.png diff --git a/zh_CN/docs/img/webui_overview_page.png b/zh_CN/docs/img/webui_overview_page.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9ad216e7b11b4d0de1160705f890fb2d6cd3bb GIT binary patch literal 90287 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�cyX^gx;z960{qSCyh(-c^& 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 z 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 ekcscc784VjU_uho Date: Tue, 8 Jan 2019 09:49:07 +0800 Subject: [PATCH 0280/1573] New translations webui_trialdetail_page.png (Chinese Simplified) --- zh_CN/docs/img/webui_trialdetail_page.png | Bin 0 -> 96051 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/webui_trialdetail_page.png diff --git a/zh_CN/docs/img/webui_trialdetail_page.png b/zh_CN/docs/img/webui_trialdetail_page.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ffa7b0b7eaa6d60ae6ab445afb995d6716d186 GIT binary patch literal 96051 zcmeFZXIPV2)CH1}La1C%OVL_i1$(rbvFCLq$J1*J*}k&@68 zl_nq{EkHtugiZ*7&{OYWX1;O0`~N=QpUd+gFA2|k&b!Y#d#}CLi4nIA_4n>Nx@*gp zEqkwDyJEa$%l5!6TYeqf@e6n*<;CtO@MEjDvHqnkC7s7+z%ReKTr{}2WlL%7ZjQq? z@cYh3*DSraY!M6F{N5TnvFNmA3qSYzm5ZhUc5`HbkYiKuDgIZ#xr3S!@x!?`sU~vC zHuG|8Q>P5G{-|kWTE-+^iE*;-I4K+P=1gS5;O@ashLI;vee^%@$Bw7RBbp7DM}p;} zM%uI1w(+{=wGQvu{$fkj7C(O-#=zPshshMw;a|#iwI*Cboz2dlc>epP9e@ARxUbto z=zo3zFFT8HRsQq#1Hb>#23^wOv>TQ)H(6ry*36V_q|Nw zPGYZ-mTvTc*IaU#Y%nP&pKf@w_+fl3)TEy%;}`nGA?Ig+IuCQP zH>XniKl205Re$h&x-}%j=``CkuuoCQtpl$ejH zPPLJtxv5OfKWXj^t#%koF=a~yJNl}o*K%Tl`*e>P@CdD@%6v-xPWxPY(SNZRuB3;j z*MOM3o{GtRn_BC12O1FYNzq3aJ!5qv1DkJc2%Ylp(h590gCL8t5&NWg{nv!W3^|D% zqcx7rQzEL*xih%CE9O+gMsd#ue&}&S@>ynb*qO@x|1P7N!!oHP&7OFW7ia(Es?vjs zl6nv5pQEG!Z<;1+ykvBAWGn4_kNx0zvjSQ>?UMW-ruqldByTA$1>em@g{Mio&ZHRn z_vbAb=MD0|&Hh+Pi&i70GaNb6`O3c3*<@w+V7F47|-eZ^jg#8)XT@__${r%X7 zLC(GlX#-x;-?Ymd0;)VdF-sAjA1LK<=ZLRAW(h-~or)Kh>6`nzd5WR^CSIC24t*Ks z;nc?;;;H4%@H1{0oRfeam?g4#jKza5;|~1$aB3#YB)L@GVKJe%}CI?8|K|0-zDzwqDTxeU;vfUi3nV({th)*Lfb zy#)Kv2LY{e>3~H{dRbDpL(a3L_j@m1byG0xNFI2pBll4JyXnMpga(ocR!f&GA~QeA z(0*XAZp)ir%Bd*y3;dO|#hA?8P0>j#6myWi;Jd2p|LT8b3L!35W^&D6kM=UWISI=n zPhBTE3d2+1X#&JHWX68W&(kipF?k~d7S*17cr{n~1cUsQHeWfnTdtRUWgG;O*QaSw zA+0(yEjGOIbvf~`=j7KZ_eh~&kLJ$z_&&LcuZ#Han1%ONu}0TY|Zq`cUfr2%eYWigRk|&r|A{2 zFS?o6_8S1q6gHVZD}peB{f5u?;5W{lt;L$C+f`)@E$9mwG_InASPnTLpHs2+cRS7- z{|n*YUBWlVt)1_V-JR-0Z##`ErlVv3nB6C|At5mK%&WQB?C9(M1(#HZ97N!m_a8hf z4ojVpd972fv96!2l&IadetYHgNnN~-PlUfA z`&+9K{m^YSasmHA^2Kb5A8HfH6gaZ4Tl36r3+&b$Pyi4P+~4|(GOa~wGOv zOtTUB#{CXCkY9GCHOn0e0s*gxw7Fhlwz|ja<^7x1O|}L8?9F($#OyoXQ8=^y`6_pd z@u{xjeIs7z90#!2>_7v2x#SK1KmG&iMgVFVd(vU-jA3c9)sQK6wWJCq@n_+rSyyo# zOD^z(@8Ow+X3eYi{!zah*xwcN(lye3yj<(jgDh1hUqdI?x;vU;isE=HagCgp-R$Ld z_jPVYyy5573=`Lxelh0lG%WH7UgOQz|3+I1L>t4jCS{+D>?m_{ioe^9o$mdO?BK?8 zN2J3J&t#-G^RZnTua@QaHAC7TU2=k;71KycMbDBcZOOsV_+n_iMb_}B1>ps5Hbwco z;yKd`^iUgCu5!F^XQP-jsH90oZm`1-}5?_yUQnA)2Pw3ptpp}D|zTS)yBKn ze)~a$r7KHbGt2Obg*5xcx6~Mh{ny(tMF*s%SRFm|`q*Gx;pZ0}0E@=|E7DaU(r3Uf z#ZK5o6kBXYS`MFx*1VN$p;hih(;L_$c2wLC@sI^7$&;bznyoqVNCS&7Ki)9wHhtHg z+zxHTlI5F0esb6WuM2C!ugUB7$O{|9B`FgnNb?>^`g|n^k$L+3tAu~+Kw~$+)_cwr zDh_1iGCQYun;{-vCt^S>uN_qAU>AUhh5JiI7G-4+{hQ90purS0anjR-39^WU+sil= z{}qoK6HcP1H&iZ$dH_J+fJhj zxm|*HEe^u(hqh=-A1}H%;(ij8gt6chcp&sEm;f_;baZv(^K+(3wF8NBq1eVhzLn`s zyUdtSiI&hSq+i$n$w80F0c!SD#5|0%5_iQiyKF}6qm2=&S4`#V>h@&p>YlHnvEJ$h zlMvAcU)4YmCW*Po`R{vl`r8U_I$MK-s5IW^i+?OsGi%AqoEtdlOR=nl%58pA@k$q;qTuUo^kRh zo`^5Ia)=?cD{gk&>2;I$fHb(U#}4bwPOB&V5K9gkj(>43FC!jvy8UDIhr4)$4dLM4 zJ%av7(MpQK8*0Cr)-ajsO!Aq_zwytrK9B>DjNr6QF8CPax<3q1L)DBKtu@W=OFN0L z2VtzeQ(N)0un@E6PnJUZ(Pe0tl3C-?Vl3Bwg3_ah#9yx^hCm(fKDxN{W6QO=8VR)j&70?a=!3-<)m=7l); zE>J>}{?N50EiYS_ZV%?`4oZV@Rx7R^h%-t47QF1;SR);QZ7x~tkZgC82Y z9n5+zS$xF~gD8b4O|im0%6e#y?f{3B2Fg1tUn@ znw0Yp7zjFb))jS#&zeosQ;``+?~~BV{#HmJh{#CP6J#p;`&`*!eIr!AyNHG7fwCoJ zcbIXTi_$KP%0FdI0k%x)%*?bE^*WyOZ8grS(3Q5yvgSWZO@jR0EGUWDvzI&VMX)%{ zuvsmF?Z?eHYOIE*X-Pli(dkNu|12D@c09Xnuj9)&zcp*#1Novj!vwOY3)NWS`AoZ; zJtlg3Pss1=wA73TIO7aWEqA#fuP}_OvpGhEyr_Ua<+~b=xEYP%D?0NVOGhqO&K0U; z--by3gUm6|OmH@;ec$_gr`<>k?t6X^%jrfQCOa5?1FX0z;jRgB7*${NYBmNC%cXBs z&-yvTtnaGzUKOgX1@z&K?>U<88XHY}9dI)%d8I}_T9V6gRnAWfsIM|!BkJRs$K?Vy zq-wYXPIvUUfah83*qOEX>eyci#4Gpxk}Y3`$(FA9vZZ$X8>|ybF`=Z5r3v5nX!{Pr zq-K7vPs=SOkaBy9ke0++7O1_5P_C&`o_0CWDyMg3oGqfrqm3N7btu0BlIeEys82o$>~itsdq>o67RVYZwi;I6GME9`ARXKFLCj=S&fgr#IS)8OF^+r8q; zCOVW;Dth~vxm+6{jYtXx4fVq-m5+|tQsP7c~*ZPcF)_$wtk)` zA!1f_5=kNPnNNEfYAm+uF$!jrt9mBvHfohLI~p3aPgh?lz&>8- zI!kV75H=~Hf6O5aE{6nq8=RI8u$1tuYQx&JBEP)u936dv8?2%Zz>-G__p2V+vGdhN ziuPIlXd?WB`@O2#mDd)l5W5tu>xjXPgl z^&Xovm6K9TP|>on=XPalwuob;CPlLiK8F>)4AZnuBH;+aA1hv?Z^85hU#p<)#gfWW=kC=f4XJ9m7bu&_ zXNFwuE`UI>`W1)TQ)$XC@b_r$Frt2++45>mafEv$YNnWu{Ti2pP0jev{{JiNxV!A| zZ6gsWZa8dOo9V;U&qxBxs*Sgltv!&CLTtWL@ZHi{za?0DgE^5S;MrPKT%>U2oFGA~ zCXe6@KSvg`l4RUK)mk#zSP8{l2E(yE`#o}wPxpZcpPteYjadCy;jN4f98R@nobE^N z?yQWarhj~#==b4+b%CGjluxg7&(nbhf;gn!sILFT2{Ix0u>QymdkD$oa1SiwY6&)P z!rYi%syS47^xxXF9Vy;e{9V z*)7h=P_b7LZcyFw5#rtstNrCMD*eUYg#{Syj}l*-S%06kYF!TPhM-#Rpg(~%o@lne zxWDqlb3_?^KsVjQc@l#q5$rrLDcMmecUxW?-ua}F9$fsP)+L}SztBdLY1;b7HuME_ z^Qgm3wgMzjj-p{{?Z|}?jto^?XH&4xRxnsK&x%vZreb<-G-3UpP*K^0ibAGkl#}3> z14y!#Gv6ZCQpWy?zp@GH?6b=rO)+#$;d*5+o35&r6R9O`LI?51lG+VIcJ+x_`%Yu@ zOd#bQ0;*P%Cd`SIS;aEKK2OzO53K6P4p(E^lIljy-@wKTdcpKnNIQD_7UJ@>b4%-u z-=*cg63S6|uA9l@_SMEZVne#n`Q6u@fHGMUE}C-Q6#U7S>v zm)h2x8$^lbe{TJ%OO#ka>qI1Hy|FX1k^-^+t1z5Zm28naytx$LSReK}6bNR$skDm< z^h0bWL-NA$i8rX-X>ag#iOl0Sh8wP}X^;-=Rc%5(ez!QMA)7D_+VL*hD`d|@^y@6F2ry<{~Mh4qgUL!y_D28Ms!Zd{x=p^M7h}V z2|>TBd{$Dpi#csg{#s-2IuQJ*XW_2VME};#4ehmQ%Am6>A)L?ahSBa~UCg)fhc!sI z^&6(z+4s%0ukCx4sFc0!fOBmNZd-}}#7`QCkYkjF6HU+PgV~@G+Z|RFE zsr;C~04t|EoP+y&L}@Fu$7@WC?c0;n{2;jB?VorAaYY86bNb`1lrG^V z!h8R#?oMig`Q&2jyZVN?W9^o0ld67A2QT=bcAqmA{CKm?ItVEBu9|+_){(o5-_-#z z1ufCgl8C@qIYiT9SnhUg_v8TfN?qtFwyvBr?@Lg}wNI84KtBTN&N;};255JE3{K)d zo|uDE>cTcUC>n8v5aXp{eP&oClmDII0R8g7)ZfOia8onC8KGM|~%*$K&~#i^>5S9xo{dbXXvTUtF~cm0|}`|kW+ zT+L_JBPy0MD7K`#uQ^KJ!VXKdqtk!VDV_N@HA#t0X=5#fnzp1RaYgy(U)koQ_y0kTx>%#T6W{>fT^ zbvFZR1;1zSUUuGqMQSh*mP5gFSwYx958-cI=j1k~J~V;cz0*F@l8g8#!^$+u2@$tk zG-@$v+?%;_P2+$aPu`^m2sFc^3rr=?epRK}O5HOXpPO!Z76}9z#GP{P${|unN4Veq zz+icwPwDf{qW=NA(*O4ig&DznDt7-%@h!%a@DE}6(3IFieqZT`!NPEwv0s0D zab7$&KdBQ~#^~(YfjZ2(dgHguF*WL0eQ9uSf z+T;KGX-dvljOOhMT< zGrWKk8Fqo z5{R4Y-LkF2)r?-m-Mto;aOi?hgbQ;`ymh3&7xd0R@d=+gCw>NxyQu|T#O9b|5l78= z{d*m1tVm$>!`HC5Yz9Neh*cyR0hV;@P&73|{ixZ{;1EJOZx-yGCbr~=wI|VTrp6-( z?r=Gob^512`x-cKSo?FA8({uX2uN@rP)XkQ5D;2P#eGCx%jfm<8pAjs2^ck*A5!rH zu48Hz!4D`m@`9&Ad>scFj90t}i&Y@Rta+tru(l5f9D+j~2OnUtK!-=vNv+-qU25P= zdSu=*bAy83)A-_L3pcacfa#^3{a2&OR4ktszfMZotDh~+?@bEl!_SO{+V%2YmjR^` zD4AxJD<#V^gDYQ`KfK#OgdUJ^Qj8*a%*Fhr#;N^2Frs-T6;~?b{P5wRQo-tG_Qc5U z2XZn~bkEtw&#;*e4AOJ)U!` zu8T_M{ZZlGibcBVg<*GueGr0 zCD8mT*CA3=8y=OR^xl23VoX{hbK>h$$c|>xkuTRW;_@p@N&uc0A51L}-UAQ2- z10h2Hq;zOtyf3UuNFfpAMm}S3S%R`2zDA)K z4d7EH3Yhe_l!2;j{0Adfb5yjwhAnxA|08yMU2WKY*T!)7c<-==dN?moCnsX zaztjQjN3+9S8)+WFX8RdtY*{Ya2FZm%XM_Xcfgkj^P&DxK<7-HFz2^?4p=;3*ksD3 zjGZkoqnGApGgbxVop_Bh)|Tg}n@;qj3+lk~(5BP@ASR;f`3%#-fTBdHI{B*Na*x}? zSBA~&TBRHd6SzNx#Rt^sO1elc;WTc2_T@)VSb-lciw%V$u)1>CiWQ*LX3j-$jjSaB z4j}97u$Xs9POmHx$(V(F|hb=mrF~UvMc6-b>>TNG$@s1KeKZU5Jo9 zztFm|ME~^S_ZuiW|Cr&e!iP)Oi`d!P3Vc^c&N>5ZCv!LG)L7AG8B8(zEHV7esK8xh z4Zm*HsYt2&dcZrF@q=bjj_|yE_qL&<9XvVU7hqwWL_V^h`~bYIamm8Iz!*{l+tkHi zcN{A%BF}w0dj#}bi=S$YpO+Al?({Aqpi2Z`baWNaIfMw)MJ8f^%+kVF=;_+0SwVzU z_ZwA}mLuS|y9dZ8?dso{_4L7|^W4C(hFE4AWBdY-ad{`Tb@PY-Wn_Qus}tM>b6h|I zzLG#J9@9hksLSASwB7|KWl(sdN%;iOKyTD(c&~i|j(3xgP$gH!`cUk@dj9iUN4Z#T zmifC)GYl9#4N=w!3OSpG3|kO8SO<3X~@i3=zMoS z5qKQo7B`@mT@XRO`k`)Dn=snu^v}3;OCz!tZqQfa#CMJ~y)xjWoV3oYxGyz;2trPB$ zPmKKTX%XK~j1bNJv(Bfta(nO(vvS4e^fSTUG0MFM3_& zjZ7hIzy_&9k&@+Z8jY3C1CqUf6zgLD{-n2$d750t69 zHY+cn;p@HiUcXOlGVE65AS1(oU(WRe?imkI0Di!QK!ZO=TSB+-eY7UPQ3g109_^34 zvJaI(6c~;0wUNwW1zPH_z$IH}XSZ$=4;idiKd>|KaBY9EJiv;a0c?=xV_#g=?{An7 zDDk>{%%0$b8^8reXeP^v8xC=p#NRyyLDiVgfrA)@je z4k%kyQDw;#Z{3UF;SqblNN<==2}Lfqr!^o#;UCoWt_LrC?YY9K-KdYy*nTjniyR4KKe3&<2W8xuf~+`!YzOL!YA zppAnpGMm~t#O4KrZsrLjiLai%4!AirH)8FImi6Kzyqq}9_hSGv%AF<)8a!IHPpQ6^ z%OWg%?MC3TpvMGa+~T;MVMS|*R*mtovm^AWm{VwB1{U!?z^8PBq?v{DJ-H(2-x97b zVq{cD0vtpV#%oXe(jiy&Eg_GX=%#0ZO}R zo{E^q!gR`mz9E5yzcGX%d~j0i{zC=-K)d;Ykk8YOhx-cR*Lm%v;z54S*ouNxyGZ;1nPjH@cK3?oFJM zVPNZ8zh=uAT~{}r6A_e(F@ufwZ@f0*9tN7qDm z3jfC_n$!YP$xllEbuNo?`e!(ve*-?!|J~aS;Edho*W42;(Z8?mN%Rr_zS_cmN7(-N z<)8pY!wc-XJy`nD&%n?pQq7e)G_pj}99M*Z5z`^#bDDmLNu zI)ZE#%dRe9@l{8)_f&~p{p{3~6zSf1CGCR70xvGh7lA-j?@d16``10Tq<1b914e*_ z22Uhf>^r7*ymIsslDG6RKYxmdf!GJrF%oW^X?@)wHoa0%T$7AOpmuyZUxy(Z8yYUBJ2R6W z-BZ&3E0UjP_HtZ)=>)L7!%|`wCrwbP{!&Kb|7iNpl;%bjR4GdV!_w3lQqbgvLTH{L#W%XtT1q6Jp zKmRxdY3hceXUFOsaA{AHwcck)Z4lHwsQajKk(spgg}pplFJKg)TVOL69KLD5PaK3b! zlJ|)-7_5;Fev#D?cw%5YPBP?VBvAkrZF|U*Co1rerQQm!?R9nSavY%i|# zuyeQSjf*fsW*FM0nn|$sKv`EBhU`Cl_{>_&1cQN?8!T;#5<%P6n$M@6r3e-Ae7m!* z%9m(rWBU|_c!A^op|p1D*$+tgVzi)&n2s(2vnNcsH~xk-BzUPqwdwkV&d$Z&NqQwE zG}0=K@&bzf$`}aX*UUDqGmw=nk&JMxOY+=GLh$KP_@f!`C}H>#>e)z*mG$GbQ9-1I z_{GHzMt#{h+00rHxrjR@m=Y{0&!G$$EF7I`zGd{+zIvq5;H~g-8Q?@<-?8s8C$zoB z!v`gKGL@)k^+7A08JbQ0_UY#(5S-F7Zvb`b$K0FAonD6vg!+j&A{OvT+1N*F zp~x_TEPSIWH&}aW**5Jj&^4wkb;gIA(AF2nm`O@1OI9S*?s*UG%IRuVEE0Yx+Kq+5 z-l15|@^Wf3PBDb$C2)(>SUnlYhD+#>eKsb+KBpk~@Y1PGblTUsm3vTdLkXl~c)}{mNnGcC1N+P3 zGn!o>!RpTqUY^oYzwblm2i;R?H;-Wme$>XDi_e@Cspl8t^^ZAb_N%}$h8}Qv^&h`9 z=ul8n1ft!L-)9z9U_A(_>lr|bOomFeXL-nL2Q=|0djq`;?`o(2zn+je-U<>HNO{2k z-R7&)$29%sdX029R}+gT-7>ffsXcHo?rlcx<$CRAAnygQF7R($e*ttLU zzGCCvqMM2*VVULP+0~hSxA{?RP-wGGkYSKskW~#GwIHfJOC*OkdTQpYM0GXT+1VAD zqYmUZ-juKZqw|UPRHto?&&-d{&phzlRgfZASu`}B*(L+hS!C0`LIV}iI z3s|D2&q{KY+SPoaW+bzmZ23uWnPQE0zaxV zBBHg=%6ctxp(0v)dCAx=j{SKI$x{CkA{Q`+A@_e4Lbhpd1O_8l23dKSPfJWzgG(ns zuG9F5(;*w!DaT-12)rwJjyw~(Fzyq4rDHiK)fq)+PPEUmME%Y?prD+}W|wiUMN6NwU(Vastd?ULqpTFz)2<2T4&JxVAhbhRXRs% z6&-MAc%?GAMnYFIvkslVGScT!^F!53@2vb4rFXu|)`-Q%&ly-vUClAxqyKETQo`i? zJkD#P4P@4{!9IR;Vy+M5KxXoLq@6@xrgtw9@e!adDm1zPu2+SUnM z>o~)Hi{y+1bEtN}a;tq^np(}&7u3Uv);+OW7B_3pYN8Ee?uj|f6dKlg6dg2Nm`*BL zojiQLe zHJ}6R@pvQi;=7BW;vG}>x^fIL(RRr5bRBE9sLj+yKUUmq-lZn*4n(tj$VxGARo1{o zmLf!RM-|1`sh1M1yaQJ4?R#RV!K={*QhM8iSV&4yf|g$0M|U*p^ht<96p|g&v(?oG z^&kXAZyPy9aI_x^8tGy%M{+4xvU{VdJ;|rpFXv&<81Uq#>;ep313k&t8A3FupvvqE zCjqGZ!*N$F_OL3H4duaKuw%^RA%1lWPrNEt=CuV&0jB<+W__goJB zeBgG&MQDaAs)Ln5tZ!tEgd)gCD97z%56Oq4DUU3S#uS22YlxzcVGs3Pu(P6%(xoH} z8(8D@g0j6j+KX`eRqdg3@Zbl3(xxkU+cxf*ci~Eh%!SgiDagOb-w&UcQ}=P$onjh3 z567CLVKA6iuz6kyCW31_+1!j>eW?J-Qf%2#fhN6RM_Z@BKzOb3ue8Ez%Xmd!REJd7 zcXw3qin4RqZ>^W^+S@k&T8*8-{GNNjC3uiH%WSJ@Ud7=i>plwXzltSUN|YDW)MeF_ zR2QKkEQ|{6mN(rXdUCay%2A}96ok{G32YB{My1L=Y)Y1gA#)mq@r4q?%x{De!Vaf+ zloYwQIh|}yotYZFnJiZivJj1c0>rD&+M^!h+>u&jffm;e@|o$$17NlN6n4GE}u!34HXB-kA zxfq&1P+v8jCSP9*D+>57+g6V0M9a@R6!zN|0Z7CFO4E5S(GR z=6e&|{3_oq%^kArTKDlmeJ%UzQYDKZTI4t9YmYw0?aAvUT#8`Kpa}ks-QMVsDqqGt zswhEk(L4aDUgg+pOiQbteo;w)k|%L%3)^(jt@b#pN2T??Gy>WR%UaOtBQ~a#`!no3 z{R$dWBv(1>ExO1StF-e>l)3_zpt4cv3+PIm$#ivYSbd%~L`bi*Im)H7zHAz8XHynb zq~?kZb!U&r1_jar?TrLWH(t`MH<*#p)|K-gOR_Zb2$S?uYAqo<6COB}Cl@P#+15$SoGwOx5XS>-}qKQSS;g^K?hroLu*+ikJ)#)2kp z(2I+KS1r4F*t}i~hKuSe)9jG^Vhs6}%FwJieD6?fNe1pvZZTBj%)tGs9}@Y?BBB>W znud*Go~)-v-=7JLwmpMrCTHLRX!G3K_o;2EW&TvFG~eq2xk!JygWDYky{}NGuQQnN zkla;^4VW$GfpWwfZOoMqVq z&?14#y4k|$@;OV7w?I-px3su`EO);vMog1{vX+Wb_nUi*Mx)j2(yvipw%Hm)6=MvV z&9^QtRrpG=Cq*@#!p_Ae5{|yWRJ=Fe%k%Azh#PUiNex)m!nJE3Fb+}TtZVFVZ~wk6 zKq8c4B^(&oegq#k+q@)kODltO&8Rdv2|8TkOCtC(+ILpj?XNt9vM@ZRgBs~%eAA;j z;;M*5rH481mge4&C7Y7BP?RzQzkWtOO-8wAn+ob9o7+Vv&OJi1p@-_P%A+)0N&A1m z7i?)Us(wMN=mcLoE8U)Lt@?gjYFq~sf>xE zpd)%Rxb#edb59%sP4$S@a?kk-PbwIdiBWgTv@3yF;gY@9+91{E*%6AI_XuB|N)jtu z9ZZnQcgCq0pgOv|*F*`#q1X#TyIJXXT~IZlOTaHU_lCmqz?GSaKcamh3^dBRqp)JV z3jcN^3&;A2h8Y?Ylas3(Q<=I>o(3*$R@N4QPw~bHM*)CK$gv$NW~x|!zm=hymzJ26 zlbpOl%tlLUP4P2h0g?<;QBg^;EOOTUR~3PdtNU@-8|gjWD0AWUoZY;LMCMH6wpS@6 z=q)EGM;t@Qo6(T6%jgo=Xp9^zFz6N)A4Mq#qf0b+KmsH;&tht?69?2K|dE3{?F zpCePdL47nXG>yWo^vHPN7GKKBleU}c@ZX13qK(M`u%Xe2fkR@t(jfP_*jqB*n@bii z70~Zi&Y@K8HjpTb*T!e=K%iZ6cQmP%+t%$C25V==a&L|V3|YM`E%TK;dUhu`+M*Jg zuWD)E<8SdQ;ZsOgaiw{P9WkJ}YwCHA{Y*6iaWzogqi(S+iXc$ATHiB3)Qj{H!iVT? z5YE2HIr4WejD?a`=W7`_z_1yyr&iC|*7R*Q;MbTcMjoIyTeVig5>DS*g~C%qp#u3N zw1K}0D=<@g4(Hj_qiP@6x|(5%uLhq-MRkZpoE>Gshff ztvE;S!5`+hgU<{g{Fes>JvfD_~SQ zu6SI;xnOZ;qfQ+qTBYR?vgNbCN=IN6slIn-mQ-R;zhxI;EQ2o@@R<6$e9WyE3r#45MXK<^rWV{^xSIqpe8Y+4}uu!~&E2#(^|d4<4X|Nas_} z7oG1wmf-2+hqQJ=|GldBQ8~A z^hfRm`=-!WwfhVF^J}G_-p|VnYg%K0)~|Qpgk~sbodjAVE(5{uP^H)aIR|tE$#S-U zqoR2WVY;Ty-X{BY@7Yra=!jZei9Nn#E+q+MxL-nyiZO&VyODtJT-21_?lY3gPm?Pj zy8WgjE>m1zX*ZJd?G5%}_st?fq+0OgtJ8#uqb(My&2J|5KyCFVf}2%NGOAToq_?Tz zcWc`1Cjt9FYfT=b6N|7fU8{md_r zbC=!19k;O9-M|gBohpFvGc%b<+#i#kCvx%o*=cuaKhqdf=R(Gb?bAOolH~n=DFf zy5&4S`q8bN4i~5?=&+_G7b*S}xW%#6R;kRdl24z)C^*^9Bc3P8b%7@HsWD*ro<8Mt z5+ipjwmmAdN@GM|2vP<6d{(q!X?I}47!`=oS(@kq)4AjA&=&iy za*^V(KYy*$)~OJN>qVY3!Es)Ez(mAPNdf&3Fk9>`S1xO1vpo-H)ceo$oC*{vKMz!# zJ__MTKQTmJ!fx#)<_Bha!nf`2JxV;S*aLjTZhOS`^`OBKKCn(l!YuAGOi>+yVs_4` zt{C9enSJVh(wquJEg*mqnj3#u7#iu?W>q~3ON=kdNCvJfqx~~;dCU$z2?K)*6YUy^b3N6PS&A1zX?8lJ&d`(SV zP3N%k;6S>_eih@+@@0(b-GLKOcbe#2LHiED#BGX;HjTX5X1NWU(x*<(C@GZ*&$9WPkT|ZAE$Odl=xlDY$f>%mIsd6XV z+f|@L6|kt5#He^YXImkreq%BX^f%s_Z_?7z6j3Ct0b(8xt5ZtAPHW1`#8V4|>Sb9Y zW%VNZBeov7O4;-)W&_U;ou&==`NgA-vpH{8<_RyZ;L*cV*YdBbr><|Df>gq6@i4|l zDeZNTn7Q~({JsKXc=q2;MX!=OS|Nw}Y*8vR#0$vdPTn!!z-f-fS+1#5=`V@kWDO{T znQ=^;VAl$mN=1}pZ-u3W=)%g*)?)FqkFP&7*reA>v2763m+uOLW{nxP2iM$b^7%@h zDEjgYG zKa@M!)&+PrMIHh=^wPpY70@>TBM4>2XNL1xY<3g@DCwZfV*nvM{i>$_yeUl4wik^l z*zF_T?k^2ehP@>}J7{LC0sHj%k16huG`ZNK3x{nbicY(NMj=$hPae~6k>kSu%%WTe z=La;}HE8exq)CldM;18U+?tjsZjueU>Gua8b2@8_pf^PFuiNu3^$`hZdwD}y&!?@* z`%fSS@aOYWHpJq!eV&>+`x&N~+oCFM(PO3y` zcP9oWvk(D#cdlZ*q`Kc@rIHT75##+vtJ4Ip_r6IrN6?Y)-Zo8*c7Y}c z6wDCd8iDR-l1>Ne6;xLj4}NgRrE~+=$o_!%HVoJWZ`u(x0gG9Kh^0vbBcm?cT0bsm zM(seU{U&_k5ReSz?bN(^Pb*>E)}5>DzFz0plqm6Fe;B#Okulmkf*V1K zBm{o{O_#D0Ha!KO{BE~+Y{Fr}`?%w}Z$4-`DO83Ado=f}gXoBT(ghqdfn+%DbXx^A~$FehcdN1Jyu zi##+My0E^@LxPlHkL~=Sx;S+B$JC~L8iShG6hu~0A;AYpjUi?IYhPTbue>P1)2~*{ zaj8nTPZ+Axwo)2I@-7_` z29m7i-MFy?q!+FJTdPLn!Op$0!j`pX;dz#}i)S@l90-6>p2c8gt+B`6s(X@vAlRHfatRV8aePj*QQQ1*}~k;4uXx=60=?K$#dogt^+k1 zBnZS4Vlc{v(0c7dP;_oow;{kQF>l!vX&lWS*eAwUH3sERFqa_=$< zdg9x14s&7Qcc}<9sPibp??@WoyRej+hE0*DEck%CAACPKYp$*i#TpfPoTm-#``x*3G zsE$ONJ&~O<$xU1+4hoTlMzy`8Gdt zzVwd$A3MN#gqMr!T6=28{$o(n{>Rwf;vD_c&i?w^RN4Ed193of9Hn#S*)?upMO5K(llvvYYS~! z*EZ=R_7PLo8DKY{^hv8S7_CKnsHXw@SjF1kCn4@V>LaGVYJCs{yxBxz(kg8+qrI7t zl10et>pOVktiepv>C}ou<-{NhBKx<$#yYR&1~qI3LP5dPf`q53_27{7Zr>Ls6XK_f zF$Jn30@JB~Piaq-Rhp7QT1S+KygBXur5iUQ6>EAgVDZ+5hMj%E70Sv`ltGAWxO_s3 zF-{oe7AL2nVRhlG<{Bu(Z&r@{eGk3c5bx7&P6n{pS8JxyPFZF%GkJujX2#;-8DW1O zXJaQD6QSMawTt?sQQ-#4;I_vHO=I%k)7*kl`S#}jA?+*UqF$qJM>!?}2UJ2rMM4^h zp+!MNTDn7}VWe9^QIM8yknWHex(qs`25F>3Vn7g(zI%jo-+MpZ57$rnbLJmU?7j9{ zYd_Own5uki9q|Ip-x=l`Gc}V`BJEZDH=`ffzroFrn zRe!Aw2rrlW1zj1xfByzChE1t;@Vdmq6g@yk!vvhKsqYBNySf`vN-&TY` z`1FnqN9#>aWeZ&q}3iTWT90vx3y;7(`b;N^HWg|B`py!24_?mIB%}hIhEuV z(MO7O7OX5&zjHf9iM!fItxRqdK4xnNI^ldjwcZKS}WcnPQC#x z5kQK2#KJt!ue1%7;? z=%G!-%+%!aYGK~Jewh}9M$knd+mK#b@p-8L($2SLYdLVM>g*TPC2rlw0>80yj(X}= z>e^<&2S1~(NaLlqy>Xc5y8R?Qe;g|M^#rb`E$?7|t^E)Y^As+LRh7dHIe!`0p!Usa zR}}87ZD=V~*-E4{@HeQThv_2uk^`6ouIV{*7p$AnoR6T-xR%&Y1zZ~ut!Hv8gbppw?;3w9M8qQHiqg4$%|;eUc-XV=x`cf76refuE>)Zk zh?bYEcf6za;^z9|8;!Y`02_v#N3hiJbBj|Bx)hQ#pjOYmN7aHBX=6p#zL$zpI>~m-IE>Ww$j2;C+&V$nr3cr;!&ul_rW2B z1+m<|I;!CL%EUIOfJ4Gk36=WD_!@0y%jrtZpME z^U>#-YR-(&l2?1ywM>81v2N}@@GI1gZ5@tz>hgQd+8`60c6yFMmhpav_n~EBYQK7R z-MGr)Gh@hxJyEE3$1G*DSV31MY(1|!DuSV-O|Ge~g11vUm`nzehcQ!UNRmx1SySI$94jY8)Oyr|f zYl_wVdb`A@9? z$`#?p(!v7CST=b-1%Ho^{FTDysAdT;(Jj+grz_SakZ8KII5ct%UcAti=sq$df$dr& z$}Jc_C`XALcq{1nHgUCG)G>=>Bb$+h2YsHQ>hBirCizw<{U5S>Clf?1(w#TH&FN(Ec;2ryH7rxU%E@+`cJ-Ei74yPyOs@?= ze~NtNUiaYZ_xX%PpJ3-rc?G`?WM|7r&$DVi7EZe;n4dQ=Z}-2 z*RU=SIdJb^h|k>QRBvd05gFSMeH!8QX6Re*QtadE)hFGd@Ae;e^(BY*cIAFwe#X`{ zevp;wuQo1wRp7Gj*hJcOKE%v>jIj>ng+_|R0H$8ONPoHr-Zo_X?D~AiuMCs4fR($w z90&ww+()0_vi7L;DE2Cm3~Hwq)(e7(w%X#7Rw_2${7Q*vu@}EwG@2eB*>BfqmTKR$ zPkEbF;J(vxYgv?%BLTA3-_4~^l>TAHMsFppR%=Bt$!<|;f5G*=v=Z|}^|+AR*SL-R zD(Ay-S!X5!>EPNNe;1#vlH8=PV0oZlwDL#OLJ8iFB%V157rQLi;;>sccS=wrXIaIs zPs$EXNPSD_%0jwN>k3{;Xn=UsPRaD+sSHB`=MbFk6%0W*wqZ4qZqxw8%)kH$M$zj1 zBOAAikhe<(KUkJsGm>m_DIa0UjV-j|6uMv}H*)T3v<-D#+N~>hT@tcTSIrEA;LJtN z(5S+CqC!Rs4$Ag8$sY+<$&e!qp*iZZ%;pPUsT)?G1Y5?V$FvS;Q(A6aG#dRld>7r2 zWFnSh`IWrvl356`=3?aS|9OO=C_cyg+u@;GtIZ9)qPlzk=2>O5pLKi0Y~_)l9{(7_ zd-sRt0Lc5!_?eST>3jmAABxM8}iWSf1#|j?u%u9VpvsMGCpBj>LqXrme&CE0=^Jmk1$ zQ|Ky{PFM6?maI6dqMJj`?dbYWW~)z|Uk7GxDExC1jQHL5yhyhee_memRW-w1?#L_1 zGS3BWLGoEg*9^;;1oUl}+s@4!xv(f1BlQG~DISMfchO7Ucdseg7{tHRrFR(%|N3A?lIv+%t`Fe*CLkQlsg;(F?Mp z9kc+axVtMY*|coQ6WT;~JX%}4hZ4sj!x{yxc&ZhS9Y~?7c-?|J&j!Y;=;`LGy$m{o zOY)eQnyaz$ZL))deDAb+!!$5DW*+NHUAY*2Lj{vIPFSb0_4j4m-9r92uvSoyO38)% zQD|W^dZ#+>dZ)XL{`SV6N$SM!h&Ra4QUxu>`*~TOk9DG6lkv`eW2iS>!K$xH`c-u)cNLViqiG~vh&C2S#v}#vU0z=;+YXeE#Fu@m6>kIVJ}0!)9Zoj~GrJ9C&4XcN z{IVUVe*8Pl@x^F87oj??f)WXA+*mo?frFu8??2+4wEl|@z9LEK=f?W+yNmioFy-l7 z!w_$cTlvbx4kBHdJaQ)#g41dw1HMr>UGjg%KyWUqo*S$Z^r?Xcjw&wag z=B%MgSFd0?H}9bpTJf@+Q{OOOF?MTVVL+8nxl7l*q-)}-^l#l2(idu15Qqd7k3=f_ z9EQR&DYQV<)V`q2{nXm*02}Uwf%$MQtrsdvecw_hBEx2gC8pz0IYSFPl@?Z6aw1i1 zQ&T4aIy}c>Rk6q+VoW;k9ZG?%B>TJbgYSTWCI|exU0A;pX!&SW?~-m6g-XqJRr8_S zg@2`2L9*JmGcTl%9PcPJ!zSd3#owSYtuprDBepriItrF=*?)d4MPI87HLqZ~E%~)q zh_ipV|Fdc`Rzxbt)Q`$ALtJ$RKwYF5&Zbasj|_qFYmXV zv&(CR>Je9|XOi|d;$oW0qdb{~UxPG+*KVsLJ3qvmU0ro;nBx#MgG>HRD&jk|^E z53z3%Y56c~RWIL-W}mw8-@x>C*)!NORBNDvGT6^@lq|a{-LKo6HoKTCOjEiX@d%|I zVj0gZFrz1LyJPPgvGtqC^>s%>%k$p~$%h2gU0>I%-Q5%{_>^}}BRJK~wQ2?f2cf z50qRsnp#{a_xrYmTm52Y2$$)DsDC__CKPVJN@mbDr=XXX)r zq-=UYR>K$h{x4BH4imC@{}LT=RyZ!6OO%~_KljMA-j@CryV~pD-L3;qDkQZzuvTNFe^Q+fxD~P&C8_e5h9bMO_%I6Up zHaKTfkneV(qA&1n64Y2GL&HLA-@j3)Cx7$Bs;Go+Ie%cHY|gb>9p2_t7cf@7_wZq) zCXzKF-fZ^_=|V2iImzQ-y#Uk{UG+X zq2Sio(9lS3LIDPn+Okh;R+CE!u9nHt2=}1>wbV9Of+AVfrPN(eo&`WX%!z4hy+dCm zcZ#Cq$#*Kk(8Q5}Sq!=j*?3dYf}0)aqNF5A=a*a6jG2b7QZi?*BFlaZphqkWKH9%! zMDKZQ#f_Q?ts41~4R+M^TMN}G?VaWmY@C~yy~=BEs{iV($SU3^3SYZEppV^s3`(g^a5;q8iX zs&{vW*MChjD+)YptM}cieg1Qq8WtH}&;Dxg^y!B>&2IxJY^0R?_&XZhPjC1f$NEdH zTs&p;oXU01uB%#4BdcW4_tV}N%IRMH-v4f2Q-|0bRl~iT#G<+OfgFMqMIv=g=fKmR zKkxGwb7S{6%Tm(RA3T?xHh=o_;nDB%ihlWrq=OaPt#t}3aIBjCb%h7=wOn{p*N%t1 z(JQPyZcv5_LRY_TX#ZpMWLsao%(R#?va|iq2Xe<+OIXm&#A+HvHQAg(ZT<;gW*FWP zuo)=fSF#>&b&dHF}-OP>*#`7uYVbFr<8FzqM$Af;iuX z*35yj)JEMgLfhsRJ%*=XPz$cf!2M;`(j5S@uw`vVW6Y~N3sO@GZ1hHc&tSdzc0ZA_CNRgMmUWm(Dim`GM;4Pqea%ObZ z(0!esFSqhO_KXhkNmiYxJkx$=KGOL$S?gIzE>nsTPDf(zu@NLLg-@;72MGBMpg&Mu zE(X5wZ)v!Z=05h@B)E$Io@<5&mkj z;7USP-TFpg#U~{^NA-cPh3;XrFJpCBPa_f(?9}!3bhXWtv&Nd0&vzH?v6f9u&5Xg^ z$oE=xaHrSY4ADP&D9W2ldCpyqzCUrKKI$NS*O8ucdeBA>{L&Gjyhp zB9Qwad+Cbzf}H$JEQvLQQ8xX`pffSjpf3M#$eUVzlE`Fsx1@i6!%e5&lv8)sDamd2N_t z7yDI33h!($D1Y1Il-%|}+W&4xMu#hpqJfxl4qDZf0m)-b)HIYp!In`*-=apcfWYS@ zh+8{C{Y$z3P@Pa@jb8!!&^b9~gWb2&R^?MoUM*aaz5!07p2J!kP)kt(pM^l@M?{307%1X|nVwWqjaSI1(2X^JnuD$8EPJm96L0Wn^i{L{7k~EW?+9Y5+M@~~Wh}<;+%7_=Io%sqA&L2U zafaSv)YZPIBWB2skhmTl(_1^=@O9p9rd1hGo$`L3)e)3S+!ID?ZIVg%4qdU$r^6~Jn>UBW1H;OgXle)cvb;`-WTO4uC z?Huo%!bdc|sE&q`$DHK*YQ$wAGp#PPt4z>_tbJrxvyQ6*3b8!BWW}izG6ISIC5>#Y zk7kemVg|2NtHxA4R%T5nAvu@{U@=#g1Zlq0TJ+%oBNC=Pnps!LF= zwGtI3ExP6?Zf;YGzB*r-I+C5dJO2?X+0!!dQ9%(Im@(;&B8zAOd2C~v&gS9+L)gv3 zFr`zAwEowGKVBrf+g%r>f*BiT-0pt)>E_M|3wvn(qFP1cr4^dwh>I>fnW&)y%N4iE z?fb!&2r8Q6rDVEEq$M3EC=)L@hnBgWZ#8-4U7=25eoZ0+`<@|W4KEpdmV9*!9$LU+ z9XiOfs1m(LS5zJADlkDu^hFlnT~3+;ayRS8V0qjBjPCt`^6h~# zhYlR+gU3&jyK14<+ebgTTu_;Epxf2?H2Yuq>(m6T;a8EMGJiWHcYAY*om)3Fe6n0d)mMNuAuT;pcVMY%8*#6`XTW(l}1VKF-Z6FW>y# zfkebSgDc3wcfp9GrH_C9{My>u<9gCg<5E-AMT_YM7WG1&Scb%FUO+MNzk1!r;2^aJ zIfXly;ehf2lt-C9!4nYj2E?=l`K*oTJGztA%l!_xA@eV_@M&7>+4Gmj~W;sbfSTkPqKrw{> z1mA{AbCCZt`_ihPtf~5xR0;_>Qlm|hv#z#PmfjnWa!duTs{S^6R1dnzRnO*xzOQR* zN=3bq9S?wmj6}g5y3M`>U0In6dNlc70)6T%aHefBE!`hUIUVbfZ=iKO{a-1^g3T*Wl_kf`iCDSgM;Bfc$-2K9@+|&5p(%Rq@ zg{rUkddO?iv5vyf8r-cP-A{Bi`@nP~Z93;j@U4IYPwnFa55Hyim|K*HXQ0!*h-i;< zs4kZXh){}y<{$k45$SMFi4?hiacfy}I$WvnQ0*>_V)im1zp5ye`Pj$ilYQFxIcC5k zD;0eP-DKiX!8^C0A5b>#CI!^aME>Cs>9wybd+=0lqq_Nxq{hpwUIj_A4jed3ILjtJ z(tz)u;6J@xBM!eqB0@!5#JMfnnZZXJcnt8pKP@g$XPf>s$40O`d_#uG8&ahOvN+;E zAtxhG!L5RJ`lVrf(*maHN)C!r*TyIlYplM6El4*zEG&edJE@k`$A;th2`{@`vlYyN zhZBBh1j^a~ejDIaz<1wwjVBcqf4~8eorAi1!Inm)NL8(-Qw5aFaN*^uiE2LZehNOZhgf5hh#V072y*(V{9 zT0c7cq?6U4b82ejzZbCC+zuWxl~@KCZ|Q74&1{#};E-DaNWC_!eO9l=eDx<0OFmI& zK1qntlP~=)hFGlC3O1V3&fqJT$|$CP%*gk9Cj!yg0KsN3fF-owF^-4~apO2MTGO)W zy8p_MQ~W}ZDG+1S;Ay>O@m#*3s?=(;KxLEJ@rMWlsSR<{j>Dq4Da7sSmEK+wNa@O> zm^8iQ+cx-}?@$OYNbi5;CcBl1%Buq5?eRvG32JVuUf5CBTNz@27p5-732t(mRZez= z{a+sk2@@-ZFz^87>h?Mzm`@b_;C#kyfl&KWD2;vw9?r3V6rR~2S# zuws#6qgdh!+qu3FPCf4dw22e@EZ41 zj=%2m6~p~+nEsDs#jBbFoTg8x`zV&E$#tCEWS``vX2_t~sD9bZIX_6zHfS!~8-`kN zRu6%oYD<|CUg7u(OWFtzVGw*mUr_0bnT2oJy*hun9RM;lByEQV@txA^h)y`<0jE}Z z%>YIia+j}+(_n@z(>Ob^E#G%QSbhm`qSwx`aP%Yz_!U>i=wyH9`Xn9f`A>*M8Ohaq zzp8QTX_sIFql9xRrV8=*}k&3=Ff3 zuF-*@9l5#7viyWNKK8?ooF3Auuf;C?NPL*AQTIc*Hzfc^NjV-!Nx%?EA$!VIFGCnUYw z7aZ3%Y1Dh^QjWSqA4H*Qj8nI%lt3@SR(}~2QQ*BRYi#j2b4!Rse*}7WtOd#+{Nxx8PH=^_s5dXV{ zo*eoGWPL6%_SO*_4z08t2lXS(a~Bx1*uhRsh}Bd>bAS4rYV&y$2P^uZIGUS~QbF6B zb=;#Rdn#Abm9YYW(tYp^0Wi2PxC_MG->*28Xw6$hUTSPTsaGJaI+{>i!!A?4qf~CE z;rsZj|J{q>`Ret>5&NQDsIM&JDG8|S1j)NCmmsgBEAud2&RkAD!W-C!rR%2Wl) zwY?6mgwK|dO3&YbOer&Ka9@Rd1Qws6M^ax1e1E*7G_z4xf!wOsGYjAJLh5U+#A2{naP&O&Yn% z1Pscy4{VcXs~xK+@VpL=_dsI;v$<(co`uDV-XA7kU@opu*Bubq;^_QyMyfpyDQq>F zn;XTaD;hfwLTo?bFU{#8IKhbZSHgxspaTMo+qPEfh_5_dc`6_xue=lP0iLh(&15_3BS?ih)W<0O(?yo-$!*RdHqM#SudkNlkT?#oQObUc;L1P+8E=`k50(8vhDLZj z#_>)!-6*1Q@c2nNGY8s9SBxfWhDc(Sa9nL@_Oy>v?d)17Kq>siQ6ukLOcq!bj*5ua zv!z;B5NXFcv4O1mWf=!`4-iRl`MB|WL3M0yUDyur!$|&^QBYmNg(+0&pddYUJbav) zP>OAqC`je!C_>ner^c`qJ?#yR>9z80zW*A`=tNvBvNH?E9O=$iUVD9(H5Wz^Xisy1oQG zBV@l5(SK#}EsLd}MP@75pVuQG-Xi3me&w=fDOi7OJrVkK-?ysVmSbKQ9#H#tAlnly z5(LTd*up0frKP~$Yg^bo5HIw#zLEZPUH4jG9OU=YO6B+=L5}gcTJ?jXz?7@~vB_N@uScQa+Sd zpK$YDsA5s7;gc$J4QxoTSm3}yT-L#Pb4s1=X}=>GzVeQJG(rE-{qdg*PeVbXs=~){ zZ?PvvzK{4nRaEzwRz(JOBg-m-=fAUH$d(W3D;Ei5pHVppr8 z#T#(vAvG$(&-k=!S2K6%+PXdeO?YYXE?F`1w$~Z3omJ|X)uXAMN(c0_^PXoS`_-x7 z3!E_%rvi3U?g5HN;Nz%_Dy0HcBi9v0mDOlH3Z=(G?H|EpgYde!LMi0)+xeeok4~}T zcG#Tsv3Cw2uHYa3)s?&p5Y$ES*-Wv9wfJ6VPTU&S?C_G&({kAD5>Rz6bmoV-!J=)x zc8!E0j1s}Qdb~;z-4YcgG5P@3;7-JL*$Yuip>Ut#3eepaBYQ?h&91W9)x2Xt zxE*J51pl?kfnI#+&^$jQ+^?9`*GZ1jl`!29N1xhgg?#BoQ$3k6kB^AC4C>*?BtPws zXEKJAh?W!3X3djlm1)j#J6cyEi~tF=k%hK`#D@}c(njpwvu3V=0TcfTK(|NVDrejd}`{|p%q_euy0qouU`oY}`*!3bQY7xhkhghkOAk&hRRKFM0v zgy+sqrmkmML5~H4$QPn)Kmk=`Ua-^W4S_-cPC<}MWhkJ_kZYy%L-376 z!`C_fKqLrh@jB-6hGLRDhLM-&v4;cxQ9ui4cI#DjgsPO;&kdmEOgarZD&HtOf#D8i z?J>Qdk9xL{-GBMIzQd7xyx<-z1w^AIczU@Q!p-K|BcVs|^L#2)o_bc(tG;Q9I5upl+>7sH(%y;*$on8@D3iTnBTvo*I%*n-IS8i=&6jp|k{IG3kI%RN( zdtu{J7kFWFE8g)JsCM$cSj-40JnWyNbl&npjmzRjHQZ9qw0P!2Ydht$C?7;|F(}o5 z-OjP51^8A6YMVulT)#_;Q+`J20E-QH^X+Cu^E$PiMFigjbHjlovn?>*NW{ZbO4&M` zz66;8EWAI`Fhc{?+99Z>e?I6Rh?NCj7tc)_7iH5ub+NnVUkm1Zt7r&V*2a7-gmwZr&j6S>z)5YxbTEPrJP^k` z^kiIMP#eWuHZk{SGs`zyiK>B6iRkp#e>jNU699Qh*Pk!8W)JciZe?<_XJ9h5H91n> zK7We)Tromcj(W!dHP6nRG-b)hc_?W%x05T_*UEV<>^Ho0k zRwSbPMCW|p&u1{~AgW#WQRtf94cIw|c|9{_6VvysoSsOPuqCnk1r@$dfC8JUVMtUHh6w~?Iz5IR=U z0(4}U!%-XbwZ#*+@~42G9|~*N*6_b#ZF~Y$s2hGukE_n_6TOGmIBWRf65FQqfUYly z4Tc+Iz$gxg0D~27iRVReTtp)lA}Z|7IPMIM$uB`X2a09QeAHE5;wtLmqe&aS4vsn{ z?3pQpYl5y2(AmVrZQVXEYUhkBy#qF?-N!`{3^DHZp)NF^FE&OV!#_mxWwJPUEO|+? zN$I?Nt5wKzjTBIIW*j6?z0-u^pWmmsdt!Wh&OE-uJuJldTQOA2xzc z!nesx+%6GyNgzw;A+Ou{%4doLxCdD_e0f?(VJY}cO?MO7QAb8)_iNGsTmT8{z)!0D z^*ADQn!!E}`DVrBPk;@52|+NfGTB32eAcv7#pkh-)*P${j+1wWhx@y~d|OHG zOF9R?!x<;YkdK)1Kbd?)f|k9_r!SRZKx3q+uvkJYRG)aHc(-xYEoKyiAj&CDS-C{> zP>Hr5PtKGO*frnEzqbu%+Qu4g5QiZ!@dwpre=-UuSTx8u&lSu2oL)R*m0FS+C~Fg-+}f^S4A%blWpG^ zP0}(j#_e8hZ?2v%QN2f=_nAy zWCW+k-<6@AQI!`LAk3c&mX8sIUJ&hpNi7D}x$iLIe7A`Uu7AT9ch5i_3zsePS(H7E!! z>iw9yz4`>2=ZX4ST1EjlK-$O;FVIn3j)qPGt%k?zA3)&4qk8CK_X90df|toJ5#AAx z%LX+w#BUZkwBaWXS#m6Y)a8T!1t^17;0p|BDe<`M%h6jCr*K-o*9RQt54C_*XRr%J zuo*t;9L-!i{0}1Vm<|EO%WPeq9oXV;3&|b~)s-L8)UnizRkb@xwLk4uY#ysQ0N;f@ z!x;@lf~o~-~$=kFs1zn;%a-ia)(#^=oH{&L0Q=nGq2)Hg{_ zC4@BsM$!UWT6imz${QLunqzUoSEB|jOj8cZ2h!Js41w1vK9JAEUe}e7i3Tc;l?n!D z^D{Kax`kk)w{eaIxCtkwDu!e{QryBR8C2?XTOtEwm0!-({-2*0mn?$MqlIuiI*p$J zgQ$;Ftq^;1my010!O-3@IWV9&dH1L7bwcd@=LNeQ@`kJ8nDa@o5U$L9s_|m*{yyrn zM-@RU(b#YucA&@-a@siR);;9qGF6=^Emw)a)wL|@@$x*kvy|SA=k#QtHIcZ z(r;WN-RO8cO&?*M*n!3qC1?Xup@k(UzdXJwGApn0!!tXtgecd|f`KyWQdneexFV-N zryMv+f0mHQdM2>M=t{9hx{z3;sI#660DCh4vKLL)!aPB2Ykf>FoQw|6(;<>@{ z6_zuEt^{sPN(g+er-D-9C3>>AsZ8=+n>9q z`v;UO%Thk&@WYSd4);TzE%d z*U0v`J3Mz*k1*T`c9rS)3eO71XA7z3IFleC0m_SK< zLSCP975=-M|zn;j!A$HDQeZzrGgA$bT@uH6U`vJIB zbz)aC834Tj=YZGk$R?;61xt>*TO@dH+mVcnchAsA^GTBO&JNw-Bt@*LfZ92DP;Cj4 z4U7c&G0{99SV$MO$c_@)J8MX}+{Bn6wzuW65H4&=5r*o{M;Dl^tnh3)BnGiZ5ddyZ zD5U%Y!#_8qCBwP44-uauMIFPN)w|&hd;qcT+-C0tH7?_LqTsO$KIz; z6vOxZ&1TZCOvq!fNNvdsRDMRzI~CFAHYn5l7=%*hzadCd01&&RMSr!E0eNos92-04 z$(qK46l|wdLAnN_v+)f`s|`1N*6>zD@SueTF1EQMVhh$-JM~H6f`HI?o9f!}j>UfE z++X^J3C?9^ExB<1{JWZFuD>0YN%^Xf`Y8PJuCMsk0dH;SjdwYE>d6_0X*)AxhrF>j zE>27n=^}OyE-uEF6T}oIy}Uo(@SfT!ajJy_(fP>TZ575~k*FH-4NhZSJOWf(=klUHvVsN%Qp$Msx|LzFbQ`Si2UKV`cbzWV3S#mlsuBLl}E+9 zeqo?ZDz$9fZ_hCs^tk0{w|S}aft^Y6mj1g|AYgEqPU4<%B-TWiS$zJKfg0Q^7Vg5w z$5&oY3Pi>C?NfNo74gQ+b&>_QW8`4oQ+mvz!8FHOxsW|QrE7t zwC2g|eaD4iVQA_iM=q=#uUHU{Pq>0VMJ2IeVX41ul#yr3$$tP$%4mMzjXC>B5H&eMGD+fmZ85rk|isM|f!4Rn<4MC?OHf7yqYqGd#9h zKi<*q{%*NDt{=ui16qMBDQWbe>2hdfyyYH}ELy2I{~$OykQw;Kz*+kUD*3~Dr@p#` zYgJAYD{k4VX4+Uz0QX$l93|1VV=#M?tJKL_O7hH(+Cq0`ya+HgVO25LWc&^W;85!Mz7ZL22F{6#+ETV<-59+88G zMduO}I&l!9Q`0}(Dk`jteJKEW?7K#P%%JGxwmhiZ?@*1uof#r>v%a1^`dz*ChQj9( z+>;syPq4U5U^?EDGi<|Wk*GhCGF6*zKJVSqsZ!yX2emqcbzH6MHFHux!{0jcpAQa> z9Fv3yL@l?N58zSQlm{LHU# zJ*sQCw@%j5mQv0t#DE7K4VeJ<$C~ZrA_UaC9w^CA__#_RVQlo3>xzlFYm9dI;}JS1 z2-+>UN?{&Vj|R*=qNQ!?f&)>AMzA_)pvT*kI0~UzmgZWR9NfPN=#WB}yz&d7UkL6p zT?MxA4Z#YKm2g@5{P*%~WlVms#86(RUXx*x16c*H>5<21N+eQv;o-9Ah9)j^dex1| z7Yz)KU=2aaY8><{)pc9H9$@h58iEivf`7BC^~0tec;--OZY8j$fi(hZAdug-Zm#G_ zYU+Ch>EN*h0Sde-e;WkB4Wy{8a0Kv8cn1s1yJ%N(M zRh&L3u@1(O>c5U!#8f&oxj<|1pL7+7#3)$bZl@TDmHV>uqK#B5+R=;xBwFw5z5`5z zwMppx-{Z}EiG+IeUFp2z2uxeb83)_du>cNKb*PdDbQWb9S6{C>#m_W3a1m7}JByRS z-NI_C(UE*%gOqo>lN+upBRJ)b^FPR;yUh^Mke|I?9B{ruXZ%%HRIUP;WyDQIuVxzR;$= zDteC*}y)_;A<)@bb@8RVczgF7e`PY!e7xlWk$}SEYGv3!6toCh%jJBe=8qFS( z6bX(qP#Pm^Z1Fo=^(yb@RCf#EY{z&8&XB*MlB~g+1SH4e{|UK*m_IR-SEiR3AN=76 zDHa<(Ye4umFF{V8vyRH%j6!>WAkz%2+t6JF-rN1R% z=R1N8>`Z)G-W&fDyydlY4DSpifu}L*N?ghJo=044c9-{P56MSlLhj7llXMaRoFX`3`s!&@Ka_roAFT(2px# zLfrVVSi=X%s<;@SI&@BM$N?L2P=T0FX+?P8JU9Jah1^L(dUcZJBSi`?OhH+%U@zEn z*zgrGA2>SRIn1{}v-KD{4;M*SNOoHJGOQYR@9j9OfH&sJnN3w_yJ^)Nok}irKOed^ z@g}wswOMdSRrJ?qLp-lH|LSQR;W~sSXTX_TFutEi-k5MAnUYQ0h3*oINr9oo^3&-H zom7eVX4;R9#m{+Gotf8BHnD=<=^Vf7Ui~CsR-97AZq;ZqruolLSNMS6ZTHz@!_`kz zz!(AtFsJ_M)3&X7S5VE}PVBg{d0$c)PHD#^WSB-Ug1}BULhM%z+pI;}3%T z;dJFy8mfIF8u3q`aJ4}4$}p5>h{|k#(t};a>0~ch&NU~~L-teEc!jO%&D0?Xd|JX*p-nSE#{ z#a?KM;sH7cv3BL;(%lcqEQ+Z41bayKz>Pm*au{kQt)BeMp=*h<3@Qm+2PmrZYi@kb zh}EyNKLi9`W)1ZUS@YHG+P?VNRpwt}jKOM;j z=B({Fw*sq06pHZP3tML}BdmW$Pj#mseiELy~pB+YjJ>1tU@cQl$}PCL5<+=L^(!i6#R7A+au3 zroLb68;!+H{28DSc6FU6g>qgK`dB+ui`x5@Irj9w^<}nGzpv|tgCaf$f%=o)g&=7D zy>FS8wriv&^`ELA_q&x3Rol6EAj6c+t1U`TUI{6FC0*KoDFB+oshuP8^zP``rwiDB zHcH+79PxHF!t#@>p;|luk<(ncCFTicgM?E|bC^Y6_Or%nZOBiLig>`t(ly$6lp(9v~nrnWkYy(TfC`qVNl z9x32I8A-8?LCGu8nYJ9u54Kwzh+8NKPd85CW+iP9+QkAXHeG~MA0x??H0?|r}BSRz2MC=4kLVaT?IUh zaeG_^eJ|+B48XjaGPMs8wrc1b&}YyR;YuIHR+ID_b9D!$>vHRh-gpzlpKOzW*1^wQ z!<^CfCOMDvs4WghlshZ2efd*FjrVb!sBbRVp7-n>ATFh-lG_FpD&W(JiWa24b}Z_;N4_U?Qe2aL*n116gLSZ?Tob*LT{B=>@R8GZ$h&+0rlt0Me0Sj+zmDY57|r8l;-M%uQ&8 zo;W7}?ebiCUA7zy#6pfDMIbbmG+p)U`7}bd^qA$-X=~D%tlBY>n46=Vb|Wb+(zX_f zGgdcm?(Ejfzl?pjO6S3(=eV=qTNQ(AES#vklC@j~Rzf0MF<^Dt^B&(~PXG~kD24B8S{c}bvW^ky4TF8!M|}N(^*4%uo!%Z?;2Tocg#U_PfJM?EYf562%iTKZcb`t!CYs6|3JAHxx_vY zUs6mu{J4Fez3yvP$(CarmfCJ&xI9bkvFN;*rXkGe@Y%+4;qE*UQpE*gHG`HX7FyuY z7`e`H!AN$1*UcS|wA^A8ZVSwrq4%eb++Gfnj}a)nxIwxGC)$0Oxa4oU!gDlA^G z&;JQl5&CvfYv$R&IJ}v=S2nge_woFb#B$AGDj_HTMtvAdG=G z*`x<=YM9#{XnR6}JrCBf)LdbM+C3ZSDVIuf&e#v4wpL~N^L~LdPSEX{ToADY!L&&c zj^q&*Yv{AkEcHIjVJa;9sihSA)`CMXLKB5?mwcg2ZJOBtrzb?Q43jsGa3C(>yuos6 z76I%OrS<7=^{ZJp?&PRWPACt2Rh*n)fiup0K3FZ2h~RoM!B(St|D^*SX***`OMVku znEH>mo-a0~n1=33ktN~L8IRFdixb=# z0azk0H=Lt(A!UpHK^l`&LugYbFh!;Yv!&!>CoA==jf$wafXAtzidWF@dwDv={+ue` zp*_||(BHFkvQ4D)rXQw8#a}*sckZ`=3G(;u_E7J|I5=Z?{RdWAfz8-xmF6 zDbtvC_eV&h$?EAucG`BdPX3)C-usr zMDV;9xm8Nws1o%5BJDrJn%cUsVH9;Mdv6r>R<|g{Cqxfv)$sDMVj-*-%|6%3h<=k4qk^8)G}kIHC;J`j*O{`|EI8d!}1 z^vO#Z00y0i9s*Pbod?JX4nqJTJfMIBEsg*+ljodp{tC0f(RX7(84(Yd$6qGC>+vXu z_^?M>%G~>&0vz_Mi^U5-O*0_fnrlpiISc^lXP0ee+wj7Bvq}$9^hfyNG$rY!TQ|*Y z05S9L&5^)Q{lAhrk;@Ula3`YI z(4$OFHH3Vc&0BH|Iod2N(Al{R*e9P2I z?`bnkC-N#LEjpMe&uAwN*DUDWbp71XJSDY=u<~urajWV6uHj^MuKu`NNJ91F zRo6>_+m+>yTdl-8F+&;Esr&5V_eDi69Q_~se?bg=fb0$i_2GxNfh^K)ukorCv2*L* zoqQ<$9_XG4+&$h4b_K|6D+6Hwbxplf^qjDD%55=nA#%?N07U^*=s+R|xQa!^&v!y{ zWRL~#2peRJw0!sNjyg0z?glc-jxJFn>BV*{b&4kcCRtW zNHjaWj}8>-OzG)(Ox7VRyP}Pc0>zJ76PKLlWbD@B3$Y_|bLM|>oBv#8fxD)q5`uwp zA)fqw@wOwou^~e9CV+^Ki;LLrMwQ=2wS{{%3V<#j#XzGuAa*fx{FM8k3MefqAJlOH z8ad1~K$3^_E_}C;;sfaCe8Uxj$WLU5D5J7UqPU*g!>_9?y`k@&_;&v#Tb*hkS9JM( zCB-g($i9B4)w(jkZLA`xx`+1326*E=+xjYP2A5kr{d%l-nYPLZfJ#rdyyzM^<3cp? z3rJO@JM;U4h*v~jp7;;gGN~`7d|Xqd9l+`NVQN|$Kv9~LgWnw!>y3t}x!Od>e1zZM z8wmi&$KBP~a3#Ep>;G2$dd{~RSSWk8qP0#J{Acu8ZsFtuQ6Hii{L-P=CWfOTh0rLIdi5Vs(Bd07c9r#olv& zdhAh}*(WmoU#+w@KI*OHkK{~K`$A7UkGIISG~g94^LG4%W}T@X{gABuo6LiIM(u!6 zcj3w!C47I_htL|@gZ;ax)7_BOItFg!DZ5*6Q8*hG;WP+t-|Q?RzcYtWCJrhk)qYY5Dhnve4(x=|x_Y zr>?g|US9nFtZlrpTMfvVi%?IwqgWd#H+P)<&r&O(@~Dd#@ak1kkc_b}7J3T51b?~c z;O}Rz6(0@5?z^$zXh~^I9E2V=}7Q39;&2KYaZD>QmCxb zjkOy3f$bFf$l1e<9Sx<6yf{7GA+ln{g|$QSg^vN&2}rjASgn-&q!?@G5?rn_M%p9t z8OZkglun)c+1p!`mj|>B1=^=yR#3R9eNZC80B95X%>=H>jCfFL>@F4k2rz<j_TV{MRP&F){Fv5a)?sb7ART{3>7c6NR4aC}49 zygK-k*g;54eeP)uL*>&Z$U{FXWjCXPS(ZC-TeGW}o1C}3Got%*ArcUd7u5S%Jz*3I;Nwy zKL~)&HDhC+Ohw^u?doAa-^oo>u>qRRD~fZ41g<1lIf_dZj^V!Hu1Og9UBk6^2E&Wu z(`1xNWzj848z0P1zB=4(e6}j9MG_t>SJ8Gu`+$R7=XH(4zkbi&-uv|Lx=^*-PfsLu zn~JHloG&SnJQkDmPq*6jEv~hVxxc?Z>kfoPUF%s}Wq%j#8TMoOjrp;xan<$Y2q)e* z1HS6Op|r7gDHcvVYtrBL$)rZTF`fOQ{c}|y-DiP+TVh#oOz@swUrN^qB8*JZHw@rS zDFk!a-*DPQ{?j-gme^L+C=DDe;HooL2oFoQ__2_~g7pu~?d#O`-azEb(S~;q6!bbu z&1{^j-7|pdu+yHNnzntOt1Bx%xXr)+TUgZC0}r6J>@3W%YwOi~5L6o;9tkHj91uzD z`jO0SYPX*+dc-T{rUB)Q(IZp{FnKXh-9}>8vi-Fsu?_qydg}Pjn$NF%s-SN9Oiy7(oGo5 zdN#lzZY^1BI4o^6XrK3Lzoj&#W!}{(#>0B7eiU9$=I+z5DR$&;j2ba>KmoFk9cX{^MwL6B^1z_LJI&W7!7-Z=4xrDHDQ-R-4`3$7Bz-}BAVfyW zvYx#L9M5ob9+5|w?NZ~HM;~0hvi7-BjkqV);>cKZ(6x08q9n5$Kv8kM*0zQ zkJz?-ozKXcoge$!Sd(gF?1Dv?87PfE`VQf^*yA?VV_ovF5yhOR8TZ|0KMq17!!L=k z3=awg;bBv~hdOBafspYcN|V99T43(wlQsG?z@YCDrjk z+%!6_zh1ZyjPZHwH^&{2o<#+Ukt;I~9du}*7FSzpuYuhi_w~QWmV;n+@r|i@tD8M; z%m9_T27i5-Pg@frJqBe}tr3Mqk@|-l)3yj1*S4<5w?N|=1vb$sV|!tSGF(bkGl@_k zG@;Kd0n9?HT|(>u?)0B*ABf)g3uA z$?7bqfedk_()JyA1A2C~EjWw}-gY#AD-Id#*>lRAGW?eAeUV(q=e5e`slU^a#rY|0 zioGgprsxONZS}h&R7@Tx*>ibYffi{nN?18Psa=ftnAUtz=(Rz@7WEwy?fKSKtJma@ zSUpQF{;c$q_XQh5bDNAF$JD|c^*0HX*Mlb;_2dGt83d(dAMbbu-|PZ={jQ^+yf4dl z!6xlfUEBZ8;2>6M|O+f*SA^ z^ps5V)IOh<%0^CeV>tfwZF*w#OO4BSuL?Vq%9M-7*@7_G0Uv0b$c6TfiDT+zRl2_G z3}B=XGm61<5wH{o{rp= zc_<~1o_1VkUuDT)zSv}RTJYj>hb_6n51;^?{yU)B)5eG@u3Aok0hHQE>-eIFw!*D3 z@Y1l1)VJ{y2X4u~BJ$N6p^mp%T)q-*9ZU$=;Vo1I@A)}b&cD5&boAs@5z_t1D-K|R zRkGO1C!~C_*~s;~%?0f}!QLoVeIT}ENlO{UZ<(xf_3p-4L}UH!@jui6Q}c3sIOS?s zAFwtExV_r_h9Zwo##E|0I(tvNLxhp0eP*Iabb1gaj1>;PSlPSPNbc>$`Ny&})O!lz zB@GezsE1J&(sf}y3k)y+hvJv5(NL1c(}}Igfw#pVzH3ZtCv>Ck9)&p>J=_ z{md70)YB)Wk`?D7`jxCSNhn9Y_8Q5smbLp^&5JrYaTxV=hft-f`!w&GeH7LWWI;Fe z4knVt)5;FX85mfJ0mAar|9KbQ0R0RDt7Xpa3_Z*6MB6lQYfU?YLKmn6)MkSo7=p9W zR_{TFGY{63pUGjm{0PU}Gu}DzCoXPDy=E$LJJacC#LDy$;N1jwtlPw(R`r)@NBYdw z+R*kv^UW7Ave}1vJ-?IZ@`lPr4cL7jg#5{BY%TFOZ_Dhqg9C9mPB$N31lLDud<1hluA9)>~okN!Qm(t9LXFOI{XEZHLx} zf@FU99$3RT=`D#1ch_dIh@RMoEhV(|6I)Umus*gaXG}5#QqA$nrH{^ zwx_Xo?)ZC^r692^a=Jav2sNAf*Bm+)ZZrif%R8v@js0>7JCo|=rV z??yS>@E-#)_Fx65EglCuKWCD1 zG%mz%q2tRP9e?aP1wa=pih}v$^H2~vl5}(b1*f?&l)?JSy{$)eU+~3<3%t%*O-a0Z zSAnsED8wmfd%Od-xIrlxyYtVnI>0@rhg;B>^$Jjja~*@7g+wRNDJp)op3ddl2TGC;>&)Z?mqUvGql?ZSq=I3A&^cx=oEOIQSe}>;SpbxJ~rCOZI&RxRmUjDeWw>&4T}W_UNdivRt2dx6w-d>4LL$wTKiZe z{Wa2Ajx)7QWz0|rSEI|E7u8+cjbGS=!4svPTuW$ zlM{89@ncDQAEsr5u-;5Nb@l;>UD%v94a~+%vrG!QbbbYhFG&_Rg3`+be(X%RgJ`ekHg!2->hT&BJ*5KO==-n{U3)-AWa1d`nvSU1 zPA<13&Ob};bNGQW?j$8iEZkLzH7#QS=j&9|G5k1 zq%^;^SOQta?`Vb|ltI(&9#&NPmYy8uWQ*MUR3e z5uFaBWVf~Pa4_VZZa8_3Jsq7LCbVj?kXi&?voY7;6X0L`2H6TCO9 zrdL$1`fTE6mz?15KThdU@(4vsq$@CdF7Mm$$8`E+Q??hyz{Rm+rZaH3vw>tUT$3Da zU`h(N-=%lRpFpbqDY6?7AH$5|Cy1O59B*s=OT<#;QNZt&?o)>qTdzN;DbHpxZtBI? zHKZWd#w+nEK%`*raqDhPK;VLFzz3xvhsJWxN|Muuw9hiTbmijqj$Jzn zSbp(N`kQdNyHzUTEhH~zl^eNDual-U>H%PY$m^=>fVoy8M~?}`;7Ps;w-j^5zmq7! z9aAx(AcZR}&Z5JGE0qhj(;NTIP()!h>mY3mLJ$nBNCi%M%$bZ(DGJdcRh|{cP3~3L z+AEU1j0F3XpH`lXdZ}KLa$Jvks!aSB+PRRTwugi1WjA_K)A|IU~&AE7Q^xwPPaxdHdHy7F1p z5qe@f2_keTnT7B`uamQEw;qjz4oNPA#h`k9+lPDHH2Bl|vW)wNuhcJW;Z?X{kgdo5 za>Nf3cpabpH^kixvAm@XUnu;tc97u^y|imK{L8GZBY*JHm1c7#z7P8$Nm?JA>|Q1l z(=Atk?tW?EA8WLqed;jEQC^Sl-j&_6rF-$hl~Qi=0PqUN_uf6`fe+8J+#){a(_F9} z@Rbw5YFUx*BXhEDhf^90B&jaS&bCC(@>EAlLa=vn!?kTei9P%&d+f!>~o7JtZI>lO=y-^AMKRQVYqQ*mk5R7m$AVu7_o;l2leBP(-zm{{rLd?` zT~^wh6rXoP!{rOMA)+BUKLsHPPA9^i+CO+b+K|=}hvZ5(spC4~U3C-v2fHs~;D7n> zRE(Q)&wY>??L441NnN;vQV!iUxy9~@>||b6QMi}H%owI`&S}!{N?<28R&8)d1EabZ z@X0!*fCpc1p9gG>jhIF-6@sab6lLQH5-M{Hn-X9#wMZ%Osc{kIE_Q>KL)dXaRc?2? zyjbfELuUgIbLFv!F}m@4|3j@P;^Yt9*c*ta|T2p0Y|6vK>=2$$hJZ;rGVFaHWE2FminxV<^Zi zu4V;${T=Wwhc{o&PStm9eD)Sw5q&N!LK1`*`OWA6r%N$V2zl;t!cc zw_K{!qCS>uSJ)=|Zbkt}%# zU3$v;ik4{83nN3B)SZCs5HV%IUd$E`kj+-m8Pj8Pq22I}kZsiEqqVUSfiHF@LFon4 zc*vQdie@wAoxJ`}3-eXUGq;0XNne9ATdCg#H`k$PO9T#wyv}F7KWYo>{fn~j+(zR3 z&8UBe1Wy?|Kwa_UKySmBDI^Gxsy7XnK0P?Dgd;g}dAyT z=hA|`M{i4XVyA^6LD7tA0Wa17#on>ooMBdCCX*kL14(L*Ow@Q^WS`KpV+MOmOEts=5lE7W{`dO3Rb1DM6q;-kaC zLtpSKGM^Qs*v_VPrbo7yY@<}1OD6PQn29F}<#)H{VE7o($l2rRV*R z=w0#ApU37OwY8c5!cA(k!jUC1n2KdtcyQ^f%j3(6sewb^nzojn8+U=gHFm6Of!uPC z3EOo$YIv*KFh^iVHZiUz_% z-ojf*BW?kWP9qvzaD`M4y8wWl5+33zluA;@n?aiv1?TG2$^-juH)K^pOG;T+5F1u3 z3wY7h(TCHBIDBI!#ENsX?1#{dVNqsDP2AL|Jg@YiyBT*q!pl&#L>+O>{O-5EhNmwbk2$8X2e8d;kf}! z2Fcb%xAGi2azQ4Z2$@yQh#!B7w6e@@lGFTp2rw$ zFjK~&8;8MD%e2r@nilFry{9iFR>yD(x$ueFZJ4oW*iz7bOW+d0ZjOaTJ#+vvJ)TV; zyIIRZu}t#!+Y}&im*n;}`1obFZ7^~Ex3D4T$c#>&fDn!1uMD8*`a$$4LprC+Cf#aK zz=Dq0>Y}zMtA)(YMkgfIT=xfiGYi^P-66ECwsGVGKt|_0F4)olS;yJ_+Bi-o^)&>w z^#5ghi8Z|{a1Tt~(krja=2wyo9=yUddUq`C%VT`l*u)6>g?x$GgQ#cx`oSNA@62l- z(z{0Rj-ccG=FHQ!W-O%N3u6)iNMkIFeJil#vnF?(>{wOsLJnqbH!_{ShHo=K@H+!7 zmPTUF*{BM^U7)A(NTBCvFSavj&Cs5kc1ryv)T2V@7ki^38Fw*xs3h; z_96j}7`L()0*e#|R3K!f7KMlVSqhaTQi`rh((xT3XbfJiR5|w%9ai5h{NlH_wfg*$4v z7}&DwV(GF7v2z57_^14c4x}`EpgTl`Cd@G&X=hYJXnX*F5pEd|yOnzRDtCYA+^pOw znsJV#^N_--=B~PFAtRbU%9c|cP#~f#VGgFSYDK^Dz z)Q?!C!}*kZ3*&Z7iOp?q$lev*U}Au_vxVQBE97LtgF%wh=GC!|dLG57-o;HN+GV<6 z!_IQFO5Qb^QFMswEQESwO=%9{I5nI>_F$H4p7p%yLbrn}r0zGBg44-fm(}xxiLaP4 zhQ9Ztm@qu3pKoF(j^2Qt>Th{JOKnef*>Ji4g+_E|B9SjxYwztlPq!XI36(=kQy8mL zNUWNryb&`RE|>mc2PFR5&M}5zkDur0f-(Vl$w}@6?9PtJ*(8np4UBX z06eubnJ0%b|B|ZLR>$WF#|QH2dX0?-)g~L5!8fbS4NCmJIj?f#MVq%KZYd3mGaEN+ z;KtnPo`u*21K4HS zga|_8h$M(8?*QUIJXh`nIV~z3a$cE(7poJVkxh?HkYAXaODx%Op z#n@3ct08NN)1_2+Blz)z@15*rhuVY6(K)ZOqg@X897JijgpVz{ssEt2o;Sqm7x^0L zrp4>TWhFz4Q7n`}Vc9<2nON3{)0sg`qG(FoJ${6l9Kt5LFaGh z5rcU}^BUkmbM|z-5{+PA}Y-^X(l>G)@1{(3P=)U;xP-=-!$!${j!`c z2XVe2ToekiMYkHX5wbfi7`g? zTan`k=ar-cdi{0X3CW*fAoz(;a4tOUPLz?E;2_QXEGMqPKDO z@U(7?>>?^?sj-6VHhE#SpeZM77h)ZJ5z;)c&7z)V=mb+lS1IFh`~@d^vWb8~$mrHY z8$3*(1*2}Hquf|G!D54#2=2>yS1t~BMkP4#w_aXQbbhyea9NJaW=zA8uQ~lUfti zj}pS2Yjxti5Fwl@{dAwqkBviU>ivaj8qK}I_hcjYHyZD2A3{@=kVbo0HumSE9aTO9 z>_kbPE<@Z$ofe?|VcR-bfnLl}_lsYmD&Bd~H?Mh}OJ`WTj|l_m{q4XY{UfE|G+OtT z1QOh+x=WyRTIpVh$Lu4}s0R0hbOmE$x#V^Hpw`5u!FGLMw}uUXl?tDXoz@+Uzs~_& zB%e0fuCoUIG9J5L6F8W#8Sm{85yLMp9ISgAmWolLZ#7CY7d<^#&@*M>VD5$sOcNt4 zU-M=&riV-nk3UdpfJ3`BijE>Q?BF z(wLqP(}Ommr77G=j-`~rAw$A+nn{ zPo-vGDil2X0DJa8S)JJ_In2OaCaG^e^qAUrR+)%THeg#UbXyDE+YQhboEX>stGwY_ zDh}aQud>NkDR@)(jYCP%t(`BL#E+$;G56iB*3D`Bq(q>*1_4y9G^6hl4Rme$AgZ!X ze06&zb_KGJqOM%e?oLjSS?R=a@{bZu10nRGRsVtXKk0?|2lWKGrTw;(atfrTYB*UE zpuwD&+uAeZ0Xv`kx)=U>ByKyeV;nD=#NaKAB-R_o5X0cOE~E!#Nb&EOxoL+@T6AC0 z@>=}t;?-`hRp&hP3+@}wyaX5j6h_=EdUn90YF{bNY`8J&jltf5G3M&yo8TmaN|~ij zukLHz5`vfOBs~ei_th9i+QR+(YU9^cdUAR$n)kw!D?3BK$oy>*(RtEI7@1S$8^4>* za3bMo_b;l79TE8W> zW)PuXodXFyRp;~Ju+EPauY_L<^*6weLP*Y>sK?;F4;Mx;c8}^dEvtEcbOuarNv0v_~v8v)5d;2zn=!Zxn%w5Po}_Dh@T#OqJ`Oi z3)pPN?@Nb6s@d9oR{*1aSg$u2Xp^V~s{`GKzI_%Ecr0&q`TnUFx{MYX`s0vnsfrl0v0`{i80MT_XVO(8W~nRqGx+ z!8q^oAq1kcb++KNQkukdA?HmmCoq>6+*}XMI!ga!fiD<2Rt0+m(?;JhJrE;52@8;6 zx4W@A?N-$#5noCS?vkvp1S5SWGD?(TW`vhX-fEq7s_haQ`&kEF91cgHY)mlyNNpE9 z2@5V{9klerJAUNvOgVg`wof79)AOA>AUqwVe46zoU=5rDnXLf5Im)`~pzUU-uF&mb zTn4qpZkJG3om0yEI1ociFEJ9^zEkgGy!=Jm9vp{e=XmboMXmYt8T$aii)!Tn`oNe* z8gn@oqs>jV&Y=zZ} zu1ycHAb95T2wwb@Dv0C*JHSVOiDSoBZJ*mdfJAP7gb&xql4tJZjbT;)QtzHZ9UWhmUfgIX46`m zSKY06Ub;_{dtiEKV<7^9&0bJ(B9zz;=4VffN#rp zzw-rT3OSzH#`xPD?M<5eWIgSwDIgfgEEpRWIMYA8q8#k*vigy+UchD7W#wQF?re;9 zh@VDAF;m;|o!WAAIl2NQ$826)y|wYEQOFFjfB?oq^#W^SF;zJpiD$b#9y?~ZRH32u zy#Zu4z@v8^@WhM7%1y?eG{b)N2bqY=I6G8oQcp%v>_{t^KPVr&tI4b?nV6Fp8LjV8 zqnSf>D7nV{dLPvQ275Q1TFmm;mmGBii@X1L7T_H}xf*iqIZf4q9p(D4806OK0B%zi zR=hymah(@*knA2%;ZEZBr=*kzyDu6UOH}*45}x#g>7w{=R=(aYwVkZ{>Z>a~m#1vN ze2{J?h8lJWA#<`tlsEmqfo`KASAsWZ3V@{vS}0gF26EGf1a$y!7tPIEFGv7+@vm*C z+>rf)@b%2bxN)GSwza|F3#sHB4X8_%*Shk`BGBZsBy0bsHt+KD7J=(0~ubmJJJ zD?x`DgQ9M_+;Z z=VM+GC40eM<19zQof{7B0_n=(&0}@lPpW%ifecxF8Y|W(?N&k!zFNA5pUbUZXG}hU zRtL1xo9#?m@b>Y~Tql#uWmWYmjfp$!$?Dv|BQW_f@*wIqu5|aV5Ck1%xOuh4>GwL zw-KJ{?83a2FmJjwkybJ-LReVGI&tBCfRPh`j^{vdDkLM$ zUvh%*1j%$OFKX#`O1@B$YH-Of;x|f-8E#8yQXIUw6#hYSr)D9di5r?>02*a))igdO zDW2lQP*8>UQ3uDg2KQ)$U$kh+RZoa{TK}3OG5m@zkM59zdxl*R&Z(b7G!xZKO__Q# z6Xn+ztYUO3jXwcgbc_QI=@l`VnWj*Q3+pbGVS=4ZF5mrxXXE@8WyE@0)~3`Wb$O+1 zu|xyfP4QB{zm!Ea13D(ar(T|CW}(-#KH#aE2L4GeiN501)RoTzmnK6tNB`62g{8p=dtFr!e))9e1kAJlGJZf(dKfHd&vfg;$0q>ic zuH$ADL9qRnD8))UwgDGXf;s!YZ^aL-fvj_eE&g!OfvEm`LDx%4_4a(ck8TpYrKjy5c0Hj;?rTjO@^F5!P zkA&8i}WE?2`ai* zn<_2ihYY_V$)0KW%PJs@c}~|3$$AkawbOJOYy?J>&e{nkxy=)e71N6oIP7_qfUn2F zI-2vZ#t6~PxJ%3G%9MlSQmm=7veqWxYhZ->;u|S<1HF$405N0)yX%4bE2rSAuK}fc z{PeW1a50__Kwj`?e7!PNvpfqrEN6_hY7=c5y$a+wka{x;w-g}&fEwm+9@EA?Bx~m6 z#*vLFnC*CK0!1#qY)>^qfBVGQvP??KnCLCk>Qsewayi<*3N<`@Q?ZQo2EAUF><{BU zp_l2oA96q9euC0us$ybCc$X+;U91GgH+f};Qo7CHtqMmrqcqF!%4bY}EL((zb^-IqbOReI+MQ1M*Tnnh;gd!*< zzP_K$2mbPnk_36bDfGU0MM{QHXFCaKPU;i`T9aVS`9XP4;64+ARtg>zY!sr;lnB{W zJuLikoj&FZgx8iVIf8wh8itnM9oY7z2lqpfbSGfWa$)@|GqdLMWxvw-9Ek;Umsf(j zTVwD`u$Hqom$tg28`T5|I+*C|AZT{EPJt!N%u^xVd-v0U|lk57oDg&R^$J5n`umTe(avJI4R!9Xe!aWpZc3gtdSF8 zeV6mwF(kdKEd!6)6*nF?M?W~vjmZOU)1MKlDrym2ZBy~+4@XD2jZ}kw@`%6s%%Ho=22sj`rzWN3xGd?b;?PK>exqB{k;{pY9 zm+K6^I^ruX+Zjx6O|fjyOm|uVB>|hQyuD*=7-%*5p8SJ0BQUs=_r|ICmd&QB`@6o@ z#yZTc28aM?)zRi?mu6o4 zO06_UK{@M)ResdKXdkw5$Y?>#;Pa=A&fy*ot4laAtrR~^%p1J}W9cY|>`PWP(>7`x?R;@h823(% zbH{_?ufJ}JYsl{j>-muKqGX~wFvq&`|phnqiiZFW(#?t zY0Yb>Bl8VxehAf%i>1#3&x{7dB%mb=u&`2-~9asazBUu1W*2xM_ zt?W$x-q`W$7;E`geQYSz-mg*SR)FkDPJt3}RFVROlcC{RI(f-)0m4&k4H%%>qrkiO z7$u>-tLBvET=che_2`c-umck0uT18QCd=|kr2Kk6f*|RrE!?0^V4zOnIJ5N{0^|Q? zC43K9*gi7_K5OpKxa9Aoop`v<|1jPdQV!8;C)QgPvS5w@1_ODY`2O46%NxH&-T~04 zg2RerNH|sD8L-KO^p$!|8Qig3RhKC}1n|MGv06rGwh!dx{0dk`Do(p6?pQDxrR6sg z&8^R|Y{-p>aN3Dk{PsDpYu?9tYoc_Z;^*}m)Egd?4jV*{epRD9>x6ZlYwF|`{nUFx zqqISV2}ZoQi|UWc7>lk~UcWR7k1Peb=RX17b|}j41zEJY5*7UrOL5jYE4{N8dXF9l zqVv?*AM+7^xEU?fKV+UM%lpx&srwE2C)rwGWY0$B!S!J_Re$(tSD8%NWS;DV2APN0J0_9G`9DM~o9Db*vm= z16kk|B{M@&b}p>~(%6k<>A}4yVMVPlxiP&~CUW&OpdnE&2!-F9c>eHXPiEj7^_vHV zvRXQAKKrc%Y)eGDT#h#jFw5cK)YtVRs?y{#12YtHmxh^ar!zubYoaz zSHcHAJt?UAsOLH_Ph)&dqWv)RF>mGK_EuKe;jYuK@SR(L9Nc%x zDeE01*EL)IY(YyB(MqGhUGseVxvFTj$&_N=&SphVV$TyJlm+898aXexW_t@--g}+n z2&gQe%P0JFRxSbB({d%lj@XP(o{rBCP_#_-ZhPAIz;7u%LQ^GNXmS39ws|(rPw>b2 zd2Xzc+rPDN-M~ol8_u)@3{>g_XfD_2{{q;mC3?E5krS`3+Ltk*$h{={$3K343-OIg zZPO}#DFyn5wTnNM31+x{7>Dh+{dgO$qqP zz=4}p^6Z30Q(ZqD`J(|ZHa}9&W`A<7@3J&BG>{PPP_gI7&R$C9ucjp65I%I9lQ7?D zJ*8~K6imhwd~_Vp)J1Ib zoL54NW%ixHuJA3A_={NuV}>AfL)?4?`+PQ8IhZmu+zE4*?m<5JIa1H;; zwpy^*CmEuB-QWS^#9jqY_aXem=V$RY9yEp54^EL@Y|`ctO(Vysu@kV#G_y^9F^>B< z-_Vi>eR<;5H`ksOM;X-|<-j+$Q=hO7NLgNS3;`ocuV>k`>x>QGZwyV%^EG+Y>@CVV zcH-fg;@=9;)P23a=k3uJs9VvJH+Mz4I#Vyhg007a`I0b#`%FNj2~LY2>Rz;43tgdI z5M-W6{tf7AS&^#~9i2ZE!#dQ*gv!Y3ayO>cKdY1=*Tcg&!>Mk}w>qYFEQ=lPKM|1? z@32akqwYC`ns0kWN-pf)!@Osrq8#K@jL0N;9Y?2~XT}lKRh?t75yuc%tlMfxZHcj1bSPIqJ|u$wz@R7ma)u(kZZ_kLYv z1dJ-S66oCq9G4{jTZHkSFa7rat@!xQm#ewcz8G(#e1e}9av;r-qv6b z)B|yV*&S_kS)u)~K8Ki>Ce;LOd_yW*Xg}K8-5CX#>ANFJ7U%7%3fpGkhn&5OUKe^_ zd!=(by*|-Yfo~~eyW7G}M5O3lVbL@&xwAQzod&oHruHqM03A547HpJh^BEtMGGelV z5W~=D#$u`UpVIq>`}SPW*}XI28})!xunjcW_Q<=cSETXjd~?ta20J`9?ZDE~i`G)5-aHD|B}GjqMGa*5es>(eAhIYv^I;v4|JQi!hEmlc&fBKy^V@W= zPb7pchMg0S00G?fXZTZzMSU+mwyI_zoKzs@{eHke*z5oAK>j<=JF39-|96WNqMxmE z=fpxNPo-Sx%9SgZF-18s|1(OF-fRDTB7l90{_mlQ^vnDoTfFM~fB#`s5MUm+gw7^b z$gCC%T02;M8n^~YY4!!3Ml$b;A6_mqv zooe~@JGN&mR9PW$qc0+ne}(L{D7Q#nFnnnbm;c8xM=!oIPZ84Ya9<$rnHDYf;fu^M}jcmL5P_R)U|N=;5C|GIl8V{=0$1O7L9JkV)jpf%HRx z|7y9a7kO)H=PMEY0*G(C-+ThSSx>R3DRLv9nHLS+|Dn)3Hm=BlF3YgUY>QGB)6+UF zu}L#!2-L9cPE}sEGy{ikN*O`dqyKTb>L9-mn*YQ2)|i;W5U(D`)iZF(ABgX591bBD zD9!cd-RS}@@3(J-@G?(Ps9jgG5tux%h4`!P6(cQ(aYy?SR80@9VYB&awd-AqT4^HV z;HqmyV$+QO84Ex*kaxaePuWZ3ib%R)v6*^AL%xHY-IuD@mQGnZU!4+beWZ0u%i0b+ zH_7=lJ}@vVK-S(dmq@#eevxC0i@jqyUTtQtlRY^7ahg!YkZ%2d*n1DCCcAB2*oLSG zC@2UB2na|MrA0bQ?@E;xS`tbKy#@ghMUmcnQ6RL?3B8CY9i#?GD5CTdq<6S4>R0wY z``mw@JMMqa9sl?<9K%8K=FPjxoa>p-eCAq-YE+tEa`$X<$5cIPJ_S@lm{)cBAZi(s zvxDq9`T?4ePex+~Ag%76NXYXY;&-nrcyi|Du+e-uWg~&gN&4v&vznZnkE$5q=}RS* zBu~RqqKZoO!=8=4bW!sJltl7jJCt0R#C5Mxq`d4COje(7}kIjF>DZQI#*i*(GI zfra;~=6462hI`smTayzG5?B0sC|48IT9>9R@5d(uMVH&Q3S{2jERPAleAD;?w=t>U zT=CMtQWUg&n$pU0>m^9gjgdLB{pjkVTPSa!%I)pk#4Q3}mz?B6PlQ zY74cR@%@0|@MU!7gXNU{2b$(sbL$44x&uC%#g38P^Yn<`T+43jwU=Io5NkeNf^A2# zqwRQ#R*LOt<&!P{0M9SDT2v`yFZeD-MW#M%X<(E{eN=CV?QF-uORz@#3l&vflXT5U z;Q-#iy&H~RR{}KqFL_@nDO!CMk+4LmV#Dfo$%@hK{imEZb3GMNB9EkEnlX+G_@k|d z(xcn?#n0CwYN#^9C!ySR1^NNe`pcQFvn?#uk{<j~Yy!_TI!9l+_%i3d?$b)J*Q`s$!(7M1*;pXp>$&-c_4p!^IqenTWo~qa8%zqxx3~MQ` zze^)4w?Xx|xoi6&U>^NWchTu0wvB0Rk2Lr<$fuoC0nrKDR1Q{*@$|ikm4_J=Z6>bsVq3vezRCKy z8aTLLkHFp5AUM+!J*>1QFg_Cy?J(Y1({WvQ+b_&v40w7^p8lR+&f^ei^7z>weRH(;2POkFUeBX@$>G>Yy@=0I9vziMNYdiO2o)W+xP3qSSZ2g& zs0QD|!(93Y;g>0W7C$L5k!b9%xCh{)de&K-n8`=$lyE;1j4rK@GDVg+-Ra1F9j zHibK1(5CL_*{h?+*6KXtN_@2`G!+uXeBE?XDGMG~R!71bAzx`rX9dxnQqMY~dzY_m zoSRnN?8j|br_JVXJsONIKQjQnZyojo60`KiB~hG2JbZK?6sqzN_1)W8;FU`I82c>C zqTkU|*>I1%Vv$UQAI&uQzF1>*s>QUrIs2XdaOgm^usc5sImGR@psd6-nvMcG*S#vq z3pBc@uLw=PRh%)Y15(7bG~!}=MEh)>F=E4S3x(p^4AEs6R%a)v$D?vP>81Tw^;2i!!a{Xvxe!Wn0(j^X=V3 z!`f)bSNBAA9X7{AHFd+n8v&(Ek-6fYe9u)Lf|3uoRHs~ep@tqNSzpOQWnTbP_u7`< z=Za_XQA_WWt1Y<{Cb^}&lRKz6Zuq*%0u;xR$?ZI^_myk_k>yP zKC`th`ocn{aiz7w6h&1A3%k0VftQ`31oaE}YcBJsekU`=*`r&dnPJ4pO9@^aN4J7& z!U4ZQ(8y3UAck;@KlD&MU&IIpCX08=PWktIIzETPfHylI?iLCzWm$1Sokg#D41$@% z70x>uv`M%uQgTsdlBNw&0@eNG!&?Gh%t!sB8zCm5wLx4PXKTJ9Z>$)V6lr#}B&(~U z*ccyv>lP-ld*PB;cUQD=2R&ng7k2YwkMM{TtkTn@=&;kyFUnpa8^ zt{d+f@d@gQPFI8rF3X6Z$IojTUTF)kAr*ylU**H}Z{B4gqH~f~W7w(zAK_vs)Z*6^(-wAlw?&qDkhs!b#!Nc7zJ{ZZb&4l|VNgCR7dXyt&T8(*9!jA{McQ8-;OH zW+WWmaRRv~sc4p~#*44lDq0sFU8gkjPa#{&HATylOKDK(OYC19$}r)V%Jx<214OK zVjjsAn~yX{(T-gU=vq{|d8=3h6%U=gX?)2}Cf+H>Eo_s@SS7RD@9d&SFqP8!qKS z|7Ja*JA$?@eVs}S;oe2}bmn0L=I0#oFC+ODK?5|0^iC6G_tsS16#cZre)7MgoAg@Y{^3{;gVOnOxw`w0&$aPHl}+Xb06c|6o5zo%WqP_u9kOYc?z$*C16}OC#p6 zf$&4Wp1>utLbxM$8h+*xFS^Egbvu{I!5SI9jGR-eWvZruegb+Xh34=<{d3Q4LbOj8 z`x9;R_JEZ|?RHJOvnt;O!^Jj*xWprYB}!m*jK|L8aNusuOu0YkS(0c`hi%3qiEE;g zR!wk1XNL(YKQF_4`xB*l9J{t4(o-AKrpE093+@XqWbwT{6mVg=Ddv7}zgyUW<6ATz5_e6EFRtd= z>eV{+_T=LSD=d*&Rr&<= zpT!@#8!n4`8sb9NAW5kLglE-^FAtq*p%#iLbMm4wkM3_vBc*%3L1v-rKtS_|&8(qx zP@lr+ZoE4H$HD+p9(^*!vr!vA8_!xE0hSswBvq|y9t&6`MZ$InuHRg;mPo&LN3%w|COb=FWC#bXCM8@wp_zTjtl}zTIjr5G z3W;An`SRGE0+cqFTVuEi+rL+*qFBwV7+(f4OgK(k)sIC5WzT9JMSFBhm?eQyt9(?y zKx01}efU+3B2*<2TBTGYMj%@KUCK6RM<035T9gwI zv*Ge93#v(31Ctyqm>~racX7d*B30wpPz~f*t2oroy1Z&hj97Y*DZTY_>sfI+SBr>~ zu%=fv`2iiN*Oi3JD81IxUTedM&sC3rqpQ%WwsMmiG%#V--wNnX}` zK{djyezb``W0`6}=NKBM_S_&d3eEKRE>y;Top5fmpx+3>)AC|5V0bH* zxQacq%?wv~MO3i2N1j`=$J~QhO<3YWm)gC0Lx6Q)uJ<3Fhm+E;07D&gmol6df4%jN zgEgVO|8ajN#sFAE{mZ!gv+JIZe{fh0m8y&;FvEey7y(C?$G@RrH_5V!t=_7g=NN8Q zHvrjqjbT2+Nk!k|oe68W3bm+V=l8aeY-{JkvXBff#bRj3Xi=Px&0i3R-;KOdeHM#b zpK(acZf*~I1xh7Ejj87{*-Fo&;BVa{soq(Xd|j&I3ed5CF#^iOeN&FD%%AQ7n2B<* zG?x$UcIllpj!!^fthX{rxA%B-x3{(`cYp9}aj7Z$v~9kANS*JtFYLft;kzo&#NN`~ z*czE~BHDxmd-fZ~Alk!Q-{1=2LW%dU=Lv+r{-72;kg8GuIjaPUAN26{tyZ6;~9j}4$mRJ)DM zB3%N|Bl${~e^3D&O-mUSyYwbu?1~Ln)ryAac+sstIMe?UJ@u1W{C9Y)|Np`h4)#B# z`TpCw=V}}7zu&y!GVu z9F_eicd7cMEg9p*@nb#pcvOsh)N`e-y8Z#b?5_*cRR8{+sczg6%a396(D+&37DgY# zA!-ZMFZ%gZS%4A&jetjcFx=DbGWqM>cC%f?%V6^3DdT#t*@p23f`><66(QDb!lNZw zQm^z$L)^sr;?TjjBSCdrA@zReg5$wZ!ogMvqk`E>2-Rvv7dptl6 zr%Bgm$MW{^!hzA_<6|$+E))V^EmXK0D;e%vzt!(zyD_*sH)b4#gBTySQLe_JoyOD~ zP~d~W8peX;a`EF~@&?W(uT_G4+wb0>LIcmfEbsf80of`>F1FUna?%5zo1G=f4Watq zl#lm*%-q%Fg0aK#I3uRlfLKw0i+#1ijg0z#WoCVevao5 zGFz9P(7rh0bG)E?EV;WvGI8|fhpUZh8%_j-HrU>&-lPNBd7E_|ZjY~b$P2mJf*S|{ zEm(0x;jQJ-ovEgV+LaVfZ|^VS+l6`-P4!Q)*s94%SVB-~AyI-SgNfJG( zhmZ7~I6m5*@i6H}ss3#E640A^D2lSeqq)h~e)#Oe3ZI?nJ!>uOOLV@zN7J%#rQ)Gm zld8{g$3(&2mJbPo&60*MPQAYVwtMD6gU>pH*R<7b_@d!+qMBOYRez1_Px*M_Ha=e6?WS&*r*?-zfywFFXu^*ePxsMT2X5{GM#CXElKYK{-O3Xh``>ennLyq>~7 z)cHGqPY^xMLQbO!z4ucF7snWtfzy_Nmy|&schH2~+_P`&56h^wKd(q+d@N^!AqY=x zvDn?3{f5n!1s;}fdie70V7T`V<~Y@R*Z+9SP4bz$^qS$%TbxR(({cpTL6;5=W+g#i z&Tfx;78dY!tK1JP=psK}jMcK=oM_m<6uz!U*5vlPsU&Wq^ZO6@noh#8zdyJ_M*rj?;b`K&ML>NiDNd%eT_*(Be zk$$!NPCL|Yd8WVa-ZR5V^0nfs(9uFSFJSki$NUGF)8^~uZa#Y8r)ypNLv|^f>o}pK zHOA>lQjphXcj~C;v3mWss-QA+3@|&8+p)IC3l%>0Uk5?Jb5-MJAdx**ywOMa=36yRpa@iwO~{OVcz;_xz$)9p=Op{vTpWha8by1 zyz=P8v~vh!<@xaSJ^5);MyzhAt+!(r?~1nH*m}q7AxXxdUtak6mM-8=4&}cVw=nR3 zIU6c@RCzMqSAP!`B`{QpN0^?N9eRylZ>16a-MyC`+Ohn4|5X0F|Gi5LkkR~o=c+%f z^Z$GBr8C)SwmUdDIG#N_p#0Ik*|Kbh+4Q+EI?*eqT0_vJE;pYZug4AYrra;ow=Npw zB}=rppE+^(?C|vZaD)<#l|1Bje28wTiD9*~mHJoUsCg7;AU|)x(e8>FB1^&GumHlq zdrugDDM8xC?Lt3HlxNLa(Zk#T8csttqNYs(~|y* zKw`o!?NtKCs1E6}GG13mJdRw8W**^XURjdy0D@UN+-Ix8KY2 zH8rtOhxu(GX&RXg0G)wjyQ!<4>NyV{_AjxI2;kI6OeVst@6dqfK(Z&Hr*`*nJTi#-XgxUk+O2%yA&=HQiKjCtIUy0whY z61{^HU8w~!6e&jC>gwuXocG1W z#bLL~Ld1+O(Uhk_;!A~m_7>=UD(cmuCYuAc4bLA_SST zK=h62)qQ`iwXjI?A`40UUc}yiEGxqT(bP+3ys_UFuO-TOm6ahzA=9I(+)`H?*YecI zVRev-Sp$JBK1E3h>LdXFzV#Vm?Q;@iIZRkn@igvv)IZeT){X zuRA9=X)89W(kDcdLq6Uy@#$vc2jVH!F=URRk5rf9QySMZn?qszbk%I`yoYjpI`@bK z4R777tma{<5IS;I*58%g`E06NyMueL%kx={sk&Vjt5_$T-ISS|##W-=3>J*eGv*%A zP3pQt5`eyVRNp%BdGIL>MK$x}9!);lwU&DPp_wQ%Tv~2nv2o1O4Y$(i^?exrN@-sGd3@A%XU2)AZx8R-^r{Teo*&Pf#sa%Q`dBbuz^x7E_ICY4VbAl z7r%jnb0CAagS^X`?ire7#~!Al@BWEdrPI~$99qz*`Khk-dbrtsll>S~lPDNnP|>|d zqnFCkBwwFGHLI&Get38|^Bm6l?@<^eSF$!35t4H?Wq<(=Tb+o^eJBhWdFudT@iPxXi0^U@=-#{KCF0XGRY^gkDOLOxMnB zP-#@)Jv|T2kRA`qCTy>9VIim^x8~j}cz8@@pt2s#fy3CQ{DZuh-0f=VIQ0`FLNpUl zbjyV7tnSmbSIJlmybltaMjVC&wY$;$G`Urcsh8Umk&B}+rvVk07!_LnA zAPhx{=^P*~F?wx;w+)|J8>oG*qq(U35c^EMFJ#PyC?Q1)$HuZbxUGaV{!C^_|G`^y zxIPv6wRm%K=-{U{Hzjgtn-z;aT`cVu>5+xKr5U_ z-zy!@@qh~qX)igyfVAs!7W&!pMWR+T`u+^GQ{qsZ0u3QpbA&e4K`Vdufc4EoB!zYR zIBZa-v-*ZPxO>_x$m4WA3K(M>V%wLS-LPm0v&uFFug$t|D|y2BSewuW{8cj8zW0_d zyZ%aTY|+Gn;$>>0_(RzskE%>rGL_t=4pWR@|$>9QnS!=8iV$IMd-ngBZ6`#fIiYtR{ z)sc?%Um$4LeTu!QNcAQ1O!%4>XIBSCwxJdgNaTtC+F8#&*?};;rt$v!YAYS@kkWc30f$To`p)qXkGyH`f1DoRyaoNVH5wZ7a!*AETjLw^dyk&&O)TEJ^h zT-k|Vhaxv6iC*R&nTKN{>53TvhwlA!S3B&v88n$Yv5wUk1I<{R!J|2r)M%w95 zDHk8szie)4QQf|MOTCN4MYi5~Fw2CyXM*Ya$wF2{|Ee~>Q!h|w#l4q7RkmVo%2cK& zaUfZlh7C=Q%=GVfd1|Pac(Uljk_VDDyU>x1dyECC-6Q=U^-{-3Ej9y1bB)y}K?(hb z2z6Cs;WivjE}8dLtDM%DFVK+%>!uc+;>0{2kpZu-eq1~)SM5_=NFiDzil6)egT2@d zs@2_~YnkW$978Q!wp(FPNfxM}d;2Nkqw1|AR*LKp3Zv>}|kpmw{Y;XWYogBvBDQhgnn~r--2>! zWNf~{FEGQo+PNi9emPB>l$10$BqX6SkEpe?l{-GZ>1MT)W*bT9onR^}>HY+Thgh8` zJ@1oirSfQR+=$!e#~JeR^C`n-?!A7HlkXlbB#<9)4T6x3p9U1AfC4esyd@+)Di8YW zW@~0FO7&*?lpKGx)>0dS=&9{|6Hyq4mAUk{XTPpTC&0`9eu@hv7!K^m5A;WNdf7Lm zxol|8BUSUnm;@>(^y7-On<2F&&g*duOxfh;vuW{5mn)q$T^?LbcAsK3Vd8RmkQh|T z^dLG8)Z|I1w(VN39v!0A+RU#bJt=wkx?!sJ%kH$?ItfKJ*RIFSyH-e1*^%cx$vl{H_`Kn#9W#&qnFgSLUMQG zGo7g;iO;Xyg8R)tkVOk9v zstNb$W7SA^{JJ!R#Z1Tf9^XY&LA7n-%%FJp%xA-eXoJqnOrL>$SyS{}4~@Pgv^aHh zOZM$P2^nINHtHR>n95mi0cS~6!523kkDY$+<8z*>>_=P|{_3m5P#p8dMf;oGU92wP zMC!Z%T0H|ZT;}JNk`frCE!wm?*8Ex;PX>Wbu))vNHFx~!R*qyfRlxd^fM#`I+u5_b z*E(?i`+2*7b~>NlBmT)&iK{(|&l{JQwCU*no=>n|N0LyZmD9Q8!y_U!`3NgS_tPkV zO_vd$vu&X})JE@+1u^}ngI^K_-1iM091zHF{p3rO55_h>85QHJ&<#u?(qVxslMiUw z#JWzSXvJ$&6DX5db@m$d9!%d%KZRiOn6TUxZCg+qbiF6j)6zqE5v3F1od!etK@f2u zq7tFaw1gZ$kd9&DP1cEGZx9!Rp~l zJ34jUEJuLdy@kzV80UdTKF*&N)Xn&wCz8x2YIzS{YBcz=;uKYO^(^MqSrhQwc+5N#CNoh;mz`OYnv40uVwv3^nSHZAq-TJ)JhR(gZ#X4UBWBQ0y4SPPYCt&|68n)f_n z11P5tbu$RoRu$biIUVAv;RQE_VhrF7EG%hW&C!uaJf&%$xMG?jy$Ehs4E{hS$Bm> zCBp_LC}L|50+tXI%Wv!7Dtmyq%|Do~YMHmEXRwxIt;UO8&`yE)oCmCIX;==^6HB3Sr$ z%IJ&Ny*E{LP|XALR@=EUOXb9Bd3g_$MGJH8-L2FSaF1m&SOH7x2Y;!C2Qe6aTIlY( zFB)!rZ#Gyo4Hk#aAEA=L3Ke#)rBkuxN?kr zp7Qk-bA%z9I3EW#|Iz-~m*_61Bb6|Wup&?rF+gLXJ9tl%B~N>F<~3AEGqNq=Ik$dc zs?IDEVuO$v%Q*LBD3#U}OVwQkA{6A$w&D_gp@(c~m!UJ~5F^=Om|@RQQ2n*$)8S~< zCq^1veRO0I4+7Ij1O08TslA}Gy)Za8G9vIGDbc`Fv?-PL&G^^O1K5kZ#dAuTc3Xq3 zndzLnj^Ilxr88O!mfXtFkD2K1JUzM7IJsvNH%P0rcCNpHS^H1qTrhTYZP-(P?%Uce zR8u)AQx4N>|<{ zbLhg5;J(>P#rgWGjez=sQXOo$^}d~&if;3lbL^F@!SxGKz_ClI+7;HGQ?=#x-Oy1h zQ9?wBw0P2x5Xs+Rg)C6KP`L-B3hGXr?>8u-V!7TvM}s4_lPD3i6++x_B_RouFRq1c zu(LO}dSqd}AOP~x&f#1DQElW;M3e}v<1c^+H^SWp{8&Q^U{)v#`Nz8vd*LrL&^(oa zNr!c>zAlOVX(%UPCr$f$2kxav70-hjpgQ5_&%Xc0;}V^%N%INezl-tp?Th}pE!}jQ ztzv{k;rgal!-5uW;_2h)z1K>r7rkpfl=vws(v4{uRXrB5^Iq3dz0Ehv7YVzQGvO-1 zHxl$YDC8fIRdZ>%o;+5F_um6gClB~sM;3b?FtIzkZ~t81e?2(q<;yB+Y6($);l90e z-XK)hGVx?<<&=cUpC6=XF z$!Gj>aKFAv1srknCuqL04fk_(hJ5Q*WhD$@EyJlIT_dsl%Wr^%`7c<@;r;rWFHka< zVI%vtjKRUc=g%wFc7&;0jkdiLzub#J*u zWk3nm)_HU03OnXH??3m5j?2>U{YXd5hi%Ud41gxF@U#642*+BJhiTF z$t5AP0{O~EMvndIN;foenGfTOya51DF)1@A_x?tSkR=%Q_qIGSP{*vuuyZt|Q5&$E zl>&iSZp!s7`zM)$gTbvH=n%r_cahGz|2ibz+zQsHV#ZQC)ZAHca49s2H<+7B! ziLWga(Q`AIT`fXdR^RV_Ly)-H>ie@R2YI<_Yz^xhxj-&UYs86}6kgkjy3ObB7}^?z zTa^4cW3zJxt~y5m)jDsQ^+VC53hzTEHtrih=$^2v7P%$pdWxp^#_90Gl^JB8Sd_7* zYR0g#^iyzZmszkS0v#njFa`p0X~o496!))ZvL0wRx!Qd^EHyJ1^th4&o`u;ZWGFj7@&@#DRB+9EI6RyHlPa)L&PrKH?r62SAy6B#u9!2YApC5O4A zn63EmZT+LW@@{XLS5wp)Bzo!&V&Z>`z}3{%Xiq8qsHH zYNzdX_dCb)WoKmalYId+`Ns#d3zsEGxJ9~&l-gP%Z+`A#aq`5p>X`_Zly69>es;Ce zwax8q+RqVg)HBOuOnRl+4Xnsi3ot}3iW3*!<3oQf!1KxAMa4Py?2urF6f~(*niLkr zpv8~5P*UzX1(h37*1%%DN_|{r3k(QjjvejGp!mHX0%ZoeaZJmbS;`{ibF_tPs1Sky zAwOghf>0J|pKk9w8iTzENS`Qguix~i({)a4k2YF+`sI0wx+uSfIso-?B5+UF_+2$} z9?#}lA&cL`Ad{f%a<{1;JH@)a+NYX$P&)pxK4-(r51gZ7I*;mFFcjW|toQBcIevIS zWh1jC)s3gu4rQlQzx8>vmnMd^7sd)-|6a5d-HXm|JQ<4;JC%%&g8W6eMjf{lf;r0$ z-1wOYr)8;h1jdvM5K)+AmAxtk!Wz*vzVszlAW=C{d*D8zG6){?usI%ZR$tj+)f69F zFS%43<7_ie3)0@()6CH`O1ZDC;qmRcTH}-vn_ASiad>rJ=9mbaPLF=dEKj{ttH99x zp8IxLZ)~mEg#K1Si|Uy>lr*CCf^oi$^(L@xqO)&SBaO@B43r#l+k!2!9+!8=b)OQ@E##;&MFKFOuO&cg)nuZwLpaW;9Z zP>)t!1tb&YTR;>%5*UjivWU-_<8()&4C4tNP~9+$wheRna_v&J+W6iFF7lM5oFq|9 zh6n*c?p)~bqSRzVsmiV9a@u$%U%H0Sp~jRqBDOq%vR^~q=f}V+gzfaZug@w>n4$c6 zy$*ggz2O)^`adS|b!h}D)=EoVy*~-fGe>Oqww88zW}#&;)$B4Vof2f?@aE>Gwk+47 zxtNQy{HT!KK$VFIcVL#TX$XqBD(VK;A@xN*3&_Q2Th$X=du%Z=my?JQ9=on<_WGW_ zo_NOtkyoD%g~Rl^*KvE_LDs-&e0E@1RGqtCB2b_(Y8X)UOnT@k)U3$Z0x``pSPZ61 z%~r|&k!M%JCx}v0uhC^Ss}Q%>HzHja^-z7~(1>~8SaW#`)XIz{>vo~!_vje z+;;}g3Z;rL4cJ`Z)FTO*ZdMY9wU!m%Q{EyJTfDDgN^lBEq#*6x!}@P4_3t5FiZc7E zEk}h$hw}V8;=(T$^0^nX<;3b{0oXbW}@v|3-U*fovs z8i16r-3r7mW(|5M(ADkFOcNsqHnZg7Ft3~l!8PzjV3+)vUx1-Rf#AsWN+5RVoz|GD zs+&kM0WCIyz8m4GeYj|>kqa&n%soyRZXu##bFrb)HahkL>T3O)s)Wlc_z!Y?=SaId z?bzlh0t>YEV8+3QBDoQ~vzb36;A)v6%_UlFhV2Wr2~c1K{REtT)Oy`jw)QaNE&j5> z3K=>lHc33+l$QiUSuCj3({!=OLhgQ5snGq=2B+Dh60$+yjJ)Jn8YnLqi&A4P1<6E~ zIC^e+BQEOUBcjLl&h#O^N8h?8s#(yvQJe9_A+pcQX`a%{$RZz&7~GmjiYo|8y{Kld zOzSns;qom}BF}bktJMQBnbc9)?>fp#{~GzA5JB||L7ZTwp4_((#Gb?E#oxXAxdUg5 z_nOqm)VLc@B4oEjPwvemAPhI~%trf6d~NP~**!2|WxJQFp*>*7J!jCs3PsFRT(up& z&%BaNtju84)u-|$ByEj#ljWkKo`F5J@V+NW*}e@U#;($dn?3qJhoV&|4-FR-JGRha@^!auU4e=)qZ zsbg&Xw@R7#SxO-=GN-wow)<*`6N>krF*%P7fXOW_Elo_m4%eP2_-|Pz^7i-lzg7zw zD|TQEFi4lxSHY?3tK)hA&?vwIr~BEqQN}B6*FXGp-#bwp}WLEOWXpH0Ltgje1>R$r5^EF_B$OGqZx?Jj3sG z-mSIuDIaEMd~g^3Ui9i9{(g<+tkGyeI=`J1!_TZhwzuAh%l9=>a8-_Z>c^T{IPFtQ??<&xiBZC;pe$e5iK z^uA-%lV{d+jSJt*HQnS59W#Sn-~d>vtwhfBy?BSkXxv6GaUmC&L5Pw=Bk_VE{um{X1?@8=%9SpkhI~pN=19wzb`@nMNH5e1 z@#;_lIQUbUa$qPF+SMAt)#S_z%o78JF_86Zm4irI6R$W(&Dj^Vwh zF9CaMj7a_T)R3k&7Sb>!Wj;qoVe6a3O_rn-Z0sd=}BRHZji z1fS)wwkn~6Q%#M%iFd4)<7VF?sD9FQdB_eYJ=~)ObWZrP3W!hOmqcPyPTg z0CpPaFaAEG)HzL8-ONepcPIkqV$2EI#O=sHAH6d6ij2;=?}EhDabB%i_U&J=emvU^ z=L{k#xK26_ZN=6Mh3R}RCD5i5Qx{j4I(MpN&~|!!C(EW`gTu>-!ZBSymO0yZhb?sg z&Eu}9*ou2$n?3(gNpcXIM<}U_eT&!D4o%i1+bt?es{#n`vlsoW>Rf`Nkso#2a5H`5 z;#(>LAQ`7_2hI0P`V+VxU@Lv&Lb7r#ed=Jm|2}fio`#=qQv3YMb+vndZ%I_ZfkdL! zK+-NeW?uf5)5CFNQrbhGH^c`9m=7t93X!6)mc`mY$@j~}r-D1;F{F7?JhT-68vr`V zK>@qneA(rHh@H8uCj{5DNHWrHQVB-uI3zO0jHsxx!OxUf)_LnEzb@;ou>*Uj$s74t zztl5$FgspZQ=S4uI}$%>y!7*wmxbrpp-js#TFy!JPq{VmfZs;Gx0X>ADbz>}!w@yS zrVLfP^wb1`aHA-*KbvEF#+0-s=YIjC_l9+BEhee(jC#l+uX5(+T@qz@q}pS@xcno$ ze|lqrAwV!OIvSIYJ4&SNk6z^mY)dh{P$X0BS--_#K8``SkSEEB z#tj!zlkxpA`7EaE%r7pJhc_bU1h@q%0<^zmfdp_~{O@28kEr1_%++dVb!wamuKV7| z`;yH90Vj{%1kR0nn$Q!UAkw93teyLIFPO+{u_6QA1&HN?MdhaGH%;2o^YjwtN3Lqs zXL#Rc;((J7m@Rzlm>!4%Ifvi)txW8v5`tU*bBWM9HCvKy+dsn4Y&2J_6Z3IKrC>Bo<4cI6c0HM z5rV)VF`b>JWb`7!%{d5wOiuY{zWtS|sw$w%04VyKiMo7e`RL9e)}ct`UQb)Gs1Sk0 z0bce?`=NLe8@vT{CBMbfJWD`zq~9Gm020rffjSnP0a(i4s*+P_(?&I}2;e4swCuoE zdH;yMfzJH90Hyg5mqt$?U+JV7u#XYc&-k1%ma(ZK%KVGf_)YV_onVsvI@fxR!yueF zUw%}F`tLaaAlPtr9{6O$BlVl*?g6kr*!^F|Gk{#BHnn#q;&+HZzw`((g-a{q-^1JIIyjWN#sMLDwc;#>tQ*`6JW6$sg}8SSRRx%=w5 zN?bdJMGpY3+_>7KQ!HGS`xD!}WB=_@m$3xAOI0Cn_JV=un5I#t;?q%=ZE}i7$Ltu zc$Zs{ixNezqIopF3%O$|77p6|go)XWU$Hxfnwl zl;;U^^-y5=QZ=(+H;WTkbtGNnK(Vb`2g#?#{)z4b#K~K-Wi0q?Fu-t-ZtJcK0`~Kh zm4z;URe>Iq=?X7S|B!)NKg;(Xb<5F+A34@{e*WByhiMOlK^31J> zc<6~yYkKvB9aEbm)5b}%bT~WPX_K1NlzLB4KW!cL6Tm>VwaKTxO$yEgRn_TFaTfs# z6EY2DR#V0W8l0Ov97y`gUED|B{gGo9kQ5OILlEJTW304D+I9pOsXGw@44wS3D7i`pX(XX3F4)t@F`I_LuOH%^>xSSry>o}d#t zE&PN|D@Nx7bYM#dEO%?6+k8I@<%w+JjbE5giPip!$uL(Qs?6ydN>%DwSPRODXs0B0 zzQne|=kUJv`0aoZ&oZEYX14miR`yHG%Z(79Ni zXDw3l!7SW0Z008Te9OzEm!hfv2`T=AqNLnCEhY>lE5k;?_@Hk)J075F0q!oi;=Fao zzo{)5`}V(ATT;Rd@8F*Mno9;3BO~!FXj`T^cPUd<+3%{~xOH1ixKdAgbo)yQfg*co zD^B3LHDyH?_5WOBB6GIzr5EfrhcXr6N#yw$E4Hx7^t1Q?nc2p+ndi;ZVuksV-swVr z@%}kk<}F>(aUCG%U~RVZ`z}}=2@U#1%xXaU%S#P=Y+Rb=3mavg+RU!_vsr_KY2C>~ zS~sW-xoB%U!t&h;nev-0#suZa@0z(-%*Q1w2*#~9(?8}{!D4NIQ_2%{VY^SHzo3eA zZ+lfDjRbBy#IhZWIvC_Y%mnF*Ga<3Lg|*H(ZDf!etT@nScj#FvqS-ivO{eYEg;VNw zx6CscoMd8S+D&7Y#>~ISI7ti4-UPAIzTeCzU5Q3*ZZ4Q8XS(!OA}R}YNn`J`P=cX9 zz?0{kg3go?4;J3@Y_OlWaSn2^EjGGRzN>^K7-F$y^kUDN`g45R!quwT`qQNC|8GI> zLB)~_IKDg>;?bsrc2@s6$j2F?zDh-p_5_zN=)Mc@0 zbQn)_G$6Hc-eLws=^P-d%js2GD0i1$yDfHI!#!0nOGDmVkCXB))CJtd2S_q)ELfO` z`spcjdqxyS(@~^L02fVgW|q!v7&w0c_gIC1R=vEvGFsJumIn9_*V$ibo*d1#CDPsu z^eDK_*Z??%8ra{c{<$;Wo%O=!?kFyPU{h?T(G2Ga!#x?}Aw4d*0p<|Ij^g@m0oYW8 zoUw~i@($`tt^r2e5e!5ee1tN3H^r8B4BhZVqQ8-wxy*Wr-iBU}{!(h;U5zWXa-x)H zUUboUw)h!eQ0>NH88{awK$XP;@Aw5>5)$ikwXSc{k?djZ6!j8;I%PVypjOd^#t3=c zQi1+bmh5MWhYF80uvDY6-ACh(>|Gi34En==Ci8!RnzvBIqvTPlq_IB)Voz3Ms+9(E zE`JkhI>3F9npgU<|8DYBBz}n~<1I4R*oAZ1jyqfFP&yNJuEEG;q%k8S*fzJo@J=$Q z!6TQA0@w>ikw0qSf3$braZP1;|7S!%ML(y=p6yeSdiX3 z(n|;g0)!HZh|&qY1p*>S2?QLf^xwrY4IYEDeZen(oVow!^7rp4gs&$Kh_hF&UR7-$Jodc|-tR@2ZUB_< zA1Jxco;{OSP*CmpZDT;LeihH8$-whFU;<#Kh57mUfgsHlo64`$^j88I^H2#DhSm0KC?>FJrD&ksTyKKv$jXGn;~ z)_!`?XZw3B`_ZFEJ~CNA=FZpIf)~-)mlyuNMG8TlO9_hAhR?n#=X@eR!q`Wb{zvln z(f|L!dsVnfvj|V!!49Qk*2s%An&Ibq?3Jku)__XxbH2QU&+58rvvG}GCjg;TX|(|K ziT?0bYjaNJrOv!5DKF#7Sx@8TMRM5Akja*g{!BDIVW&N*!mo?k$|;YYvObtqs`q_*h*K)0TxBnrwpq+PE8%HdGqp38aTaLpOD~mZ- z5tF%I{yifz&wCzhWPR)E;DRG5MO9{tWMQAb1|MgHi4$t+A)F%kiPTKlb9>jAR&%4p z6Mt3(_sjq>=B{LHrWD{rQV|^cQtG)8{BfrdWS)nsu#3sY0F084=H+@<=&6?Cqp?D_ zNb(cKpJKN0(aQsUG|b9vSfncmodLMvdy8LiKrEpT3(HwY)>>}>$`b@TMjzT-o&+$R z*It6Mc(zlJ*Xa}EGzv1M1V@kP;Ws$-n(cT6!fgq?>#9Jx704(3vaBQ2T~h~6yY!0i zOC3u7FdPPy-bK zOQ=0HIXe^g{mpz}l^6rnfmZCfeqJ8wxL9E}<>J%*b-*uRl_OAgSTRrZlpH+f@Qs)++zf5S3Men&NH;_-<&%;HAZZbrJS@-L zF|w`Ll7uR7GH9gGRWvl4K8$Nq)I{UazL6Ku0>Q7kPWKv0Op7g|!7)yK#Pn(;#40ILx(Lpe(R5(d@%~Wf9V;ZmO9E zm+NX3FF7QbKG%;48HldvdWOPa(~Pa_bMJHjcHu61KuLUe&>IEkL6=(u=pveq4JPCg zC-Fesj3zuy+P++z(Ou@+#4a8mqE7l$^U*UXWrqoU7nXsE#FlEKOoS$S;i8=6 zc2v^OYEM<(zOwdEhp_BA$qqdmjgWu@r}oh{18C9LDF+}j!hdab+DcH@&ttB1U%Owb zZaQ9N!@awM>yu$$X%1vuXJJu2$J)cESx50>5HW}(+AC2^b0Saz6lOed!Mwt-dIFGF`=T>GO~oDe3OxMDYu!FEy)sh61bx%iNcNbz$5> zABkGh3fnGhw8};&azcVty28|kp1ot|QF8NC#e1u>Q$7BeR-27Jo6eaclzW|E7N5+R* zvlEKhf%J#d(29Oe|DNOKVTlnHE+&i-03f52uR1Pb`cI*g%`;uKdqQ1%!f&*JrFjll z^FB*Vct4=6m2)q_XJ-n&e&wL4@z>KQqdkiDchBUD``?SLmpi~4(X8OESV7H0+s}5o zAN}OST3jtGJc%`1TzwbmxHl4tF7w1TT^~iaqy^1Bv&D!zDhbIh8Zl0At1d1MHpVF} zX1a_yn<5x^E#$A%w!g1?b8;3KQZB&C%y%xrSTfO2HLF(T4|`^6Yw8C5sb|pKar#|G zKchdS_iGVS09j(wDzO#skq=av%U^8> zA|70cb(fQ3V#f-%Aix722VWYx5aGy(IG!<*=xUWa$KfBA9J8FP{Azv?1hIk^q7G-@ zx?An3I6pS(n=e!=pq^X@dlaG+Fc9*&d(Ek+Y2F2~fhHel8DOmhw91)@U9@?`1Qr-Why1%~@6#XNd==bka!l6(TUw>PYEzM3= zTOpjDMe@v4pQ^>JI&Qk7B71E>7heUC*S_yn^0XGf=F-OtPMMIg~Im_4-T;_@J$y_1`WgUO#Z|B{ljZyXm*{|P= z^^7Y&DiyOP>TfJ5S4q`G6?wEME&c@BXrp%V<6^FeP()s{Djz(Q#i z#@AOSM`aw+9{6UAm$}(=zn9y;Ic&N=DV~9|p1Qh2 zsLZQ<`xIOs?XtBzR4T%>MrPFj&@s<0jVSo3)TQ;X(`*0$J~jT&MDE-8dd)Qnsw*ef znqAYbY!O*K#9QhPbIj++YD-E)de1$dAYbMFH%0FJFio20h(tv`!Key3bVjMP?M!$# z?1B*?WS1Ktn-^FiFjCadn&bKKR>&Xb!04<1m0oQp!(wlu*uiK3^=euk?`g;Fss z5Qr%Lw+xg5g`4FX>La=yHKNk7ypuh`dWm#P!(gNByB_f2=Br%PTzmLrxJqb2fB&*> z&?I+$lsEN8~(tc*z#*f`PGC$`8jR;>rWzc5k+P91%N_0a(B3}sVsNp(6jRx>$HY69-cH5{1q>W& zKw{rp_1$_G6;a`Xd36#ga zCb1NLN1Lq^`$l}L8CS8v1Xz2&Ds>h4^@cQHb?Y{8vJv074CNvnZ^UPbY{2PDv&c$J z9u5)-hB>NEU7FZn(ZTuVM#^EQ(^wtiHfEj|o3)8WHe+nuCckX3p; z_GCN~gs`S3v1R)3J_uLh6^UJrYgx?vVRHa^C%_ zz&Xsm6*J%(u8=t5WNP86sY=#PFRlQ98-5=P%aT}`5hB-sOOAKRBUCAaC^wu<#;$)A zF}})pG;P@RX*~6BQzkgn?wcH?oO=Qn941C2F7Dm7bsa)&YJd;x8$)wWrWO?RkFV?I z!15;zdMX2y0oSt=+jy0Q?1Uy&oMcT>PGTDKt&hrhg>!(}{5`Mh<`(VavNgc58unY> zg`Vzp2sM5N^?vEsnVOfC1G<@NR%a^dXNO5imGmD^Qc;j4j9c?v(jCy=hiTgdTHMmb zvv3J>d?p<0puEBX1tK6m-d?EP?$Q>HY)$DddeY3$GU0@Fka93F~ ze}Oaq00Q}!gDH;o^-%9fa26N0(<-LD^qs*D57>tRbiyAA)Ig*M2xR~GhmFHRcWY<< zP^>K|C;;@@-rimx8MNw`43Dp7!5%=HPQmJB-(CE|e*7rYj{wOZfF2Cc6s0~K02Y3$ zN5nKYFOMpf2@QBP&s74p&V(Z)v@AolahFG|A>(0)wnXp^>FQ1 zD4WP|q5?7u?1V4NrO&a?HmxV7Wm4 z-|?_8l?ddK4fHM4<2P-*2lh?vAOAt^uP&H*s_=(~)YGRscj=+L-`$oe1A4W;C*?~m zT2$Hx1-{}oKBYefcKlhWe?Yj_Zeau4r`nWD8A?~iGjE`Y2WK1zH(j$xj#pv~U%0wz zzu{6ay_1uyDqJEahdNe4Fj$J8o&1!BE;e#Q^KNaB==wttelYIUwh&K$t1fKaY!I@t zKjhr`t(++eb#cChh5TMOT`aiosGLnK8IHvIIPcKC#4qSdu$v>)38qcvT3)pryKi1z z)aKBMmv_5*Z07gwUVCk0Zc3|Uxt%OW3)nZt~on`Vr*s%+hOV_B3`u@M6cBsnc0Ay`n(jOdTnjD~r-4xkfGg4T#< z07wf!TJZ6)#-hBF?_-lep4&iVM^OE47q%+7RfvzLDXxZzf-*w~S@&s0pAfIwOG3~F6Afj7Ba++e zx2tXDFlmj!JCBMR#7460W2ORZMnYP#vrpsc2l@P?tyNlbw22SQ%5*5z6Dm)~C>uF~ zX&7@2Mnz0GSvI*BX$9}xEd>lwHgU#*!)3F-qzHC|GidFYEP3g_8-;;eNV zXbT-+PJ4i!=_gA3Yzzp|6+9>lD8M%eeIG2qU_sHW4 zf`1@Mvvsv%VUG_K_g3JTuy}w00f5cFgaKKR{GS*Q`%g9ZC$!lMd-GH}v04m61?;j! zeW+t|chy^l9Imfj6KhnR)BcM1D~C@ZZ7hRg@7;O%?#-g+X(z*^5w~EfIJ&l+fiY&M z+e5i&fV7m2q3U_@0G#~6#`d?g4RVZtcCYTIb(LxX+**6_B}n0jtizbk=%duyjYs+y zCB?PHz3de|#>Xzsn@k_KX`GLBUGb#9S*L6zpX0ET)4Gr4g$iHI%?UerUqC)K-hQWX z+p$r$-C8een$#-`AX>ggQe}}Mg5&5;HV&u2y9fF3fI6Y3}RTh+Lg^$XQn9Pp+NpjjK(%($jR6EeG z$NyxWKtx(atcU`#3~vx5VKU`TiSr#i3sdXygItRL4;dTr8g(DFrsFsu zf)vXrk zA>R3aiPCV-30sr`+=+?98cm;abA}NmTPZ+DhK`|Qe~Ax6E&kN=ka_TBHo2s+RCq1^ zy<6ikVOmF?$gaz9n~zQ;zw<5fqQ|u5(e+4cg2|ff=$M`S$(Or*pPuEV#IL&#%vW;} zuG<}fu`17`EVIKSr61%rDxnm<_!ZOFs6T-OZ}R@`9gK~8K{+S;_NUJo2ENO=_F4fa za~+4QO)1_;R6ZfUenyIW>1^uD1Bp)jilknPH+*l6`vlfOOGHwVVbAm`WU;9DxM0&n8Ewqm(L@jgOOMEt#1Tq@+FWY^_k_%Qkp1 ztbf~OYvQKkpMsx7fER+?1CR3;8DCcKt4&E2@%RnVx?66$m%M(u*uXUVbS$zRQO84a zG+!sg&~I-IZOgib4?)eiwIeMp4R7bX-0ZYGf&ijHeyv&xC2SOaXWN==n6CE;YFZ>3 z@bvN6<*yNE+y1A^Se5K>n#~-I=L^07nstzN@9J4?3p*3C%63985GGMtx>#Fj_w(3O z?1y7a16`c|I500Xd--w}enpdbgH$^s*$W(POr9=}+!3zJk^QY0pS?v|*vdYPrgb*=SZfGr|tq%1?2;hUc}NZBAw zDV%>9WI@Y*w%DpWVR$wK958S-l^sKEC)-12JT;lljvdx%vaNwyNNFOzTv;uH5?&s- zFf8az5$DH<@G^;Vx+RWDfRq5`#y=RFvt8=fgh>= zW8jCe2^qOZqO`5hrMsA8;|KYYlu?2>mQYdj7%>U~Q;O2Ke$So)L4T)%Xx6Ueow51{ zk??;2Hec7;iqP~d!8Q#uUcU^)#!Z76nQ6|)0ts?^r@sq6R9YIRey*R% zD2*kQCiw+af={9(x>EX6`;)6STyttX1z~<;#5f2*zSGrdE#r8J^Suf>^J7#S&R3g` zk2wDns! znG4(|fjZ%g?Br9ju<^9wwFK@5rDpFckDVb!TIi%Ad0f;fg|5x{K=*%PtoZJn0~A3i zW(mjQxA*EZAaH>jBZxB8Y9!tO5vs0pMd$ONC^(TpJ1-Acc&>EpqF7NesmF3{?whLj zhQ05NpE=a|QP>GfFBaeMbv|1tq1>`03u{afU4EEkjzn1-0n<_-nG?6cpfG+sd~YAR>mLUrwMrneMm$)gNQv&OT~!z=w!jdmp&?H2%I4^s)VWi0n2{-iVK1@4 zCi9AZ{gddYk&jY+D=h?3qnMs6pvY^Fe;?zK>8m!loaB3tjqWjb>zkA?haPkhYQmtP zCG<4@3JHvQ300fqJz~SmSSSeUnQ%ZlP%(deA3ERQas1CZ1(P-Wl%oSVHb!+kt!tQo z7!T&4OSXa*1ufPq_|r?Fwi1FyN+#i!A^^sp-`Xa~9rjNEirK+f$Z`XG@Vp8GgCDaY)|`M)AqFDouaMkg~jMnhmK zyi-ko#9vn!-QTj&Bs>;OLK}V>oQ!<|#7i#~%trlV0hrcdHAij@@wWcwiAcZ-R>FO* z8~cHo%4ng%ewIDz!#f)y+qwpM?!2hf{_PFjN!jaIJ-$ymqIVPmy~bj`pzSuFv+*J2P~ssiQa6$PiK9I#~4?Rqd&&Q zjyVZzOxf917W3c1E~>}7JM;>hd{kw|RgN1m1EDf;?lB!e8X&ssIJH6pG}eESLbP~Z zB$gXJQ=0aZ)GJTx>@>gwS?)2kxg@Y3yKJx-;seDb029>a3S2vM!r2>Fbn5~I!qyd1 z(`Y;en@BM+$%Qi!^o@$xQG`KDeJ%`n9 zh_?T233f2!?9F93kEfCmUE%i-!~0;Pt*(yn_%0p7U~0>zy6VEzZ75LYlvb? zT(OIG4nih2Y49VxHb?AL%K7su6ILH&eGX{~(1zHeGF0T?End{lTa}OPPsyHmsWbYw zac>q`A$-Q!9|}a4P8&U;r&}Vop1sHakWOY)7~n4-qzoSg@n*D{F1~ZONesh>@bc>P|n9Z_YZ*B+=T})`JuQ3PrHR1_clYWmqtPEmVSCyhPwNz zYel(LO;@TYx`!T_N8we(^(1&tlRpEU52(c=E9yZviC3+lFJEQ+R%h~vb*RYcH}(sD zYJXWU&!-uckK+X#gDy^f>3*TqDI{6??R8^TL>s)Z^s&f= zc-Aclx_mGtAr7?jB#+m@jhl*O4oyPMnG6mMV;m0!W)#2X2pr|0ix)WB!V8lO=vB`= zu3yTfIWVg@IDb7$L7L6%QF}y%-SM6^#eZ5pllLZEM>(x;W)5EJT*PwNK-KKyMrcCx z^d_%i{S*~{c^LA)5XEuJBg8=_h;4*4|3oK28-ZM^)qVh%*pD<4SSrCZv82aidBbuhm~H>8=#C^ zEG@e>OXh0|$5oRhN22$M{e~3ewA1Ct;k#s~&f8j7$@g?ZR!eNR%#6*-l_SLR`wwc0 zadw#mv*`ITTX#x`sV`t`NR-eFoR=C-jH^hk+su<7U@*_nuX&a~m3eKv z5p~kVjY2X!ptrgQOQDA&(b3AnLqHHR*htTH|Fvy3wRUa-FrEKe18E7JSX?Frk9h}M z%5QQ+Riy6BHfE{iX~vU@g!3&|O`c(RRgr3H?>*_{TwA|lW$&AqyromXyCXqc8y*nc zft^904GS#I!ORnA1FM$%%n9U`tIGQvCtbkFyPU2ETRc^T0Kws^FccSiPln%hV)D^; z!a3m3W@e*E5jj3bH+>-8CA9LcwWX>f?Or1Ma5%#|Q zy9JsHfh~`V*X#3jUhd*Zqyt5DqbTEHEmU~)YHD6hq(-;yRVzMS88oB)5VCdZ?#(Yp zJc1U|VWizyd7$SwAKCdr;9g{}ED(VLpV|3h!P5mM#nssbGf(SV3PnDI^Ke&xUA_c} z{%E9b3%S-rL$Aty3DTid%yP6Z4c)M5CMKr4?Ycj~1Yyd3;^*gw1NZ#cMKVtt4$!sR zvi|g?iH|mY2s1P_brMNF=dSw@AA*l^rzG)R{6G~s^FqK@)8blI&~ZyBxNYOhN-Qwg zpuKolzk`UfDJ~b3UXuaJs$oyP^C)fz1;)nZ6W!p{Vf)H&O#1$(ws(dneu=ak?)5OE9&bf97H&lVMK%UgB%M? zr`FMlzU-2J)QGN3dFwRLE8n(zn~7SI3(W|*axS96ievc8f;joG*jO6HYOXsTilFDm zMS1ja#0xE;AoSb4SkNz`P!329XE;GkN@^yGer z5Mpn$X-(Af4%!7w=@Pu1)un#uu-6JvV3F3zndIm`^PI>c%Zt{W-`X7?TDBViJFY>k0QW!d%zq3-fSsQuAGYkS(Hhw@cx z*tE7%>2?HM{fdguqrCWo?un0wJNc%C<)$3xJ1DSw*$!@H3kOcG;Lu;FSPo{ZJA#op zLZVhSqMJK}%I1uT@Y~P5Ms;c^Naq+noH3K6>kkn;*f%b3jfV-%{%n5ayAeF-pRc(W#I9twDT{4DWGzMVYURL+Z0^W>}jw>sUFi5<$+ zO+wt?pMAE(G&=e+?qw$^J=o|jl+`Me-VjB7!U`J1L#$r3^YbpR<-y}mCOVv=yw9_4 zsM`;#xhi0^P7#aWaKZCWTDuN#fm|xm8bd*m4^Mo*jcEBsj?+B z=Y^&Ge#hz~COdEU;h<%a%+>z-l)l0Iz=IE?Y5vIA(NwkRJX@Rp5kuxDKq%I6B36&%_l_N#8aY~zIVb6@FKFqI5 ztyo6i05hJ71*~FxHHn5Nz++-Bk46<b#CBid)SG?j6H;4PrJfLy+ks?y@6sk9HK?@-=D+AAuYv!iC zZ-;n&7<hb)zm9{eGz*5c@p}xh6L;f z3|oQY@PRs+$-Q9$KzpNyaSUAv;L7aW$bS_Muh)mKg%CRqGO!;K4Pcm0H`gK=F9&jf|$~&T& znnrCbOJgPPyv#FE8Hy9IdC>`aP^z#k@jOha3%hQuGGy&|jF_Gm(w|As@LN?-UD)aF z{?XA<2t>dRn^uF3TGZcKdky+6VwG7Q_?r_-+zyx9mP_-b6Lxz}V8)vyLf=8`$^7Fm z8ET`oEKj8ogkD{6LY(*Kr)Vncu67Quy5zCDcWM}oPBDcv(47> z7~ah$Q?RjCn*woTk;0Ha54K1Be$*&Y8>tD@%& zY%FiYT6Z1wrI#fq@A`J1&lu>upxPqqWwS5ZV1j2B8&5h!F)b6j(OC-2)S$-dSO(;W zL?&1hBmILcp}uar7ktjGrK%$wyf*cn{J=)jbIY2CBcm%zi=QCd>HXNDj{b@MppgQq zgREDi!qPsf&s~SewH=@`?FtcV3_ z2ha86+#jj3`QKf&%3TiWPe@B*bEu`Pc-?R;4csg>wuuU?%nf`}n_NloRb8GBk<$E` zadL;dxARPw!F2A^JLMnO8f|iX;x5#gDd%}iRYBc+G*@gABRM0Lw(i|}a);?y2$__5 zgjd7+x*G}N12W_sE_MAUQzJe4Yw9Hm?FA(SH+us=Mfe2wQk1!vow#ESO$KR@w*X7Z zO!FM|A_;Jw`(905*bw%PZtVKYva7zYhK9<+#xl(lUlkNsb6g@H_DjY|volM3eMmJD z-rp+#;_uVvA}tzfd|$zNfc5i$XOb;6jsGO;MZYOHkBTY?*S_qHAI+n$^m*J%ndi}5 zPUD@MKS?PA5ez8WGbPK45-q%st73XEc=IzcW=4X#wvXC)VZH0nZoXGD^#Q%iDQTOo z{PoNm$?XXW;LulC;1VeUv9!^TtJgw{KMCET0~@@-#urB<>#L>%?$|yU@(d`L@^5JTWv4#AV8P09 zLOZ8se#PLE^bQX%Bzi?&?BHD-D67(FZ>mQ5c?I8iJKsh;`&%pMa$f89Waax}3>%~a zNLBk*u>r@7tKjr?Nk-R%!lAWt0&KgP(>(hz`I-yO(A)LU*99`34KhL_Q)WYf4|V#J zC)7ig4kc*abGGDiw8mF>KW(E6qTH)=qyjW1V^<^xLx1)y266fo?2O_x%HrfG6@ILe zg}sMFT)&QuF;g%9w)_IZu7M%{tW_23_i_DeO$)fw((YQz(igY>ZCUKfH241fO|9Zn z8mXGbQJ9RI4F}VcY^7(ddNP|e{r#6QAvNt;gs>;0tzzm|MYL zO4}a`^CG0g(DeDH0_NFt)`Ul)X2 z1%%PB8_qoWzJ_Eg+5guaY8V3zU}4b&G(bvzuFew}Sp3%G9P7E*!qhoF_WwEBuoPvP| zy`zxD@oTdj`+u|fwH6oGduJ`aZM=42^ zYvI|uc6<8$tM|`qG4L(=iaUkLV?R67%{~6Mt~(bD?gs??GPz9j-N2BreO-uCM+dxx z2Xv(mwK*0)oGWs9unp__)_W)*2C%{v0;BPZwYV@BUb?S0COxygM*k|Lw!=kietkVftss|Xo)29TFE$>ywzpGx^%0|A5 zX)bCRt-hY;zrEU!14Bq+xHs!%wpQ0`Ka$KjPXq#G0hn?l{emu0GOt{-p3_UWHMABz z_j8wvN+d0#U-B-Ai1PC?8x%hcg_)3&ov(_6PfEHip+E>3FeYL~9sw^G0B2!*Pmv~z?U6DtOJ7o^lp@hQCgkYI42J157< zli5O!!kCOsE2jX^a}N`}IU0P(9Iq*tt8ub)mQ|W9!%XI>K7?{)Y3SZGzAL8l#+sN{ zu}R$y7J|Ul`e>sFI?gHn-DhWQM+EY}1c9-vq1C4_}5(2xz5 zb+hSv*S|l#;0d+KDi@0vj4LsBn%N+3P3iXq5jP_j7xubUxrHFX^IN4>^|u(DoOsYD zlaMhOXFZuQJbt%Nziq zeqWwk&C-TcJwIMvUg-dbE42RELM9t<)wz3iEEzQ1IWEa-@?{B`NRhgSys#H*&G!(- zoi_d6jZrl*0;uKiQ*BykPcJXv30gbYU0FNL`K61?66hhU&(6;7?bUt^t%>UM&M8Cn z%)Owvl;eVS5s_h&dDYEVCgGIc;{la=HEb&9Txr2UWD3kl78JiYY2j~F;p*{_}^3BGqPCRB$r zlnOAbUR$g|ndb;$eB6ZknxAX`;v(%f+c^~Hp@;kNHv)r)00NUjN~L>JwBgCf;68I4v8#__5YUQN{`U!%5g% zSXekYsf)PgB Date: Tue, 8 Jan 2019 09:49:08 +0800 Subject: [PATCH 0281/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/assessors/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/examples/assessors/README.md b/zh_CN/examples/assessors/README.md index 32d46effe6..a05f6b2709 100644 --- a/zh_CN/examples/assessors/README.md +++ b/zh_CN/examples/assessors/README.md @@ -38,7 +38,7 @@ class CustomizedAssessor(Assessor): ```python import argparse -import CustomizedAssessor +import CustomizedAssesor def main(): parser = argparse.ArgumentParser(description='parse command line parameters.') @@ -52,9 +52,9 @@ def main(): main() ``` -注意 2) 中, 对象 `trial_history` 和 `report_intermediate_result` 函数返回给评估器的完全一致。 +Please noted in 2). The object ```trial_history``` are exact the object that Trial send to Assesor by using SDK ```report_intermediate_result``` function. -也可以重载评估器的 `run` 函数来控制过程逻辑。 +Also, user could override the ```run``` function in Assessor to control the process logic. 更多样例,可参考: From 1b1545de7cd5a10779949c4c741af3126ddda759 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:10 +0800 Subject: [PATCH 0282/1573] New translations AnnotationSpec.md (Chinese Simplified) --- zh_CN/docs/AnnotationSpec.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh_CN/docs/AnnotationSpec.md b/zh_CN/docs/AnnotationSpec.md index b72e6deed0..9863d6dffc 100644 --- a/zh_CN/docs/AnnotationSpec.md +++ b/zh_CN/docs/AnnotationSpec.md @@ -52,6 +52,6 @@ 9. `@nni.variable(nni.lognormal(label, mu, sigma),name=variable)` 变量值分布的公式为: exp(normal(mu, sigma)) - -10. `@nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)` - 变量值分布的公式为: round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file + + 10. `@nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)` + Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q \ No newline at end of file From 5f859a9890838442286bcdb56b13f66b3291f3b0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:12 +0800 Subject: [PATCH 0283/1573] New translations RemoteMachineMode.md (Chinese Simplified) --- zh_CN/docs/RemoteMachineMode.md | 97 ++++++++++++++++----------------- 1 file changed, 46 insertions(+), 51 deletions(-) diff --git a/zh_CN/docs/RemoteMachineMode.md b/zh_CN/docs/RemoteMachineMode.md index b2fa4508bc..eee97afce3 100644 --- a/zh_CN/docs/RemoteMachineMode.md +++ b/zh_CN/docs/RemoteMachineMode.md @@ -1,10 +1,8 @@ -**在多机上运行实验** +# **Run an Experiment on Multiple Machines** -=== +NNI supports running an experiment on multiple machines through SSH channel, called `remote` mode. NNI assumes that you have access to those machines, and already setup the environment for running deep learning training code. -NNI 支持通过 SSH 通道在多台计算机上运行实验,称为 `remote` 模式。 NNI 需要这些计算机的访问权限,并提前配置好深度学习训练环境。 - -例如:有三台服务器,登录账户为 `bob`(注意:账户不必在各台计算机上一致): +e.g. Three machines and you login in with account `bob` (Note: the account is not necessarily the same on different machine): | IP | 用户名 | 密码 | | -------- | --- | ------ | @@ -14,62 +12,59 @@ NNI 支持通过 SSH 通道在多台计算机上运行实验,称为 `remote` ## 设置 NNI 环境 -按照[指南](GetStarted.md)在每台计算机上安装 NNI。 +Install NNI on each of your machines following the install guide [here](GetStarted.md). -对于只需要运行尝试,不需要使用 nnictl 命令的计算机,可只安装 SDK: +For remote machines that are used only to run trials but not the nnictl, you can just install python SDK: * **通过 pip 安装 SDK** - ```bash python3 -m pip install --user --upgrade nni-sdk - ``` ## 运行实验 -在另一台计算机,或在其中任何一台上安装 NNI,并运行 nnictl 工具。 +Install NNI on another machine which has network accessibility to those three machines above, or you can just use any machine above to run nnictl command line tool. -以 `examples/trials/mnist-annotation` 为例。 `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` 来查看详细配置: +We use `examples/trials/mnist-annotation` as an example here. `cat ~/nni/examples/trials/mnist-annotation/config_remote.yml` to see the detailed configuration file: -```yaml -authorName: default -experimentName: example_mnist -trialConcurrency: 1 -maxExecDuration: 1h -maxTrialNum: 10 -#可选项: local, remote, pai -trainingServicePlatform: remote -#可选项: true, false -useAnnotation: true -tuner: - #可选项: TPE, Random, Anneal, Evolution, BatchTuner - #SMAC (SMAC 需要通过 nnictl 安装) - builtinTunerName: TPE - classArgs: - #可选项: maximize, minimize - optimize_mode: maximize -trial: - command: python3 mnist.py - codeDir: . - gpuNum: 0 -#local 模式下 machineList 可为空 -machineList: - - ip: 10.1.1.1 - username: bob - passwd: bob123 - #使用默认端口 22 时,该配置可跳过 - #port: 22 - - ip: 10.1.1.2 - username: bob - passwd: bob123 - - ip: 10.1.1.3 - username: bob - passwd: bob123 -``` + authorName: default + experimentName: example_mnist + trialConcurrency: 1 + maxExecDuration: 1h + maxTrialNum: 10 + #可选项: local, remote, pai + trainingServicePlatform: remote + #可选项: true, false + useAnnotation: true + tuner: + #可选项: TPE, Random, Anneal, Evolution, BatchTuner + #SMAC (SMAC 需要通过 nnictl 安装) + builtinTunerName: TPE + classArgs: + #可选项: maximize, minimize + optimize_mode: maximize + trial: + command: python3 mnist.py + codeDir: . + gpuNum: 0 + #machineList can be empty if the platform is local + machineList: + + - ip: 10.1.1.1 + username: bob + passwd: bob123 + #port can be skip if using default ssh port 22 + #port: 22 + - ip: 10.1.1.2 + username: bob + passwd: bob123 + - ip: 10.1.1.3 + username: bob + passwd: bob123 + -简单填写 `machineList` 部分,然后运行: +Simply filling the `machineList` section and then run: -```bash -nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml -``` + nnictl create --config ~/nni/examples/trials/mnist-annotation/config_remote.yml + -来启动实验。 \ No newline at end of file +to start the experiment. \ No newline at end of file From 7b56bf35f3dac437b71320a4a838cb8b35cc5a26 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:14 +0800 Subject: [PATCH 0284/1573] New translations howto_2_CustomizedTuner.md (Chinese Simplified) --- zh_CN/docs/howto_2_CustomizedTuner.md | 46 ++++++++++++--------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/zh_CN/docs/howto_2_CustomizedTuner.md b/zh_CN/docs/howto_2_CustomizedTuner.md index fd98f6b770..a4f83c7dee 100644 --- a/zh_CN/docs/howto_2_CustomizedTuner.md +++ b/zh_CN/docs/howto_2_CustomizedTuner.md @@ -4,13 +4,11 @@ 因此,如果要自定义调参器,需要: -1. 从基类 Tuner 继承,创建新的调参器类 -2. 实现 receive_trial_result 和 generate_parameter 函数 -3. 在实验的 yaml 文件中配置好自定义的调参器 +1) Inherit a tuner of a base Tuner class 2) Implement receive_trial_result and generate_parameter function 3) Configure your customized tuner in experiment yaml config file -样例如下: +Here ia an example: -**1) 从基类 Tuner 继承,创建新的调参器类** +**1) Inherit a tuner of a base Tuner class** ```python from nni.tuner import Tuner @@ -20,7 +18,7 @@ class CustomizedTuner(Tuner): ... ``` -**2) 实现 receive_trial_result 和 generate_parameter 函数** +**2) Implement receive_trial_result and generate_parameter function** ```python from nni.tuner import Tuner @@ -49,11 +47,11 @@ class CustomizedTuner(Tuner): ... ``` -`receive_trial_result` 从输入中会接收 `parameter_id, parameters, value` 参数。 调参器会收到尝试进程发送的完全一样的 `value` 值。 + receive_trial_result will receive ```the parameter_id, parameters, value``` as parameters input. Also, Tuner will receive the ```value``` object are exactly same value that Trial send. -`generate_parameters` 函数返回的 `your_parameters`,会被 NNI SDK 打包为 json。 然后 NNI SDK 会将 json 对象解包给尝试进程。因此,尝试进程会收到来自调参器的完全相同的 `your_parameters`。 +The ```your_parameters``` return from ```generate_parameters``` function, will be package as json object by NNI SDK. NNI SDK will unpack json object so the Trial will receive the exact same ```your_parameters``` from Tuner. -例如, 如下实现了 `generate_parameters`: +For example: If the you implement the ```generate_parameters``` like this: ```python def generate_parameters(self, parameter_id): @@ -65,26 +63,24 @@ class CustomizedTuner(Tuner): return {"dropout": 0.3, "learning_rate": 0.4} ``` -这表示调参器会一直生成参数 `{"dropout": 0.3, "learning_rate": 0.4}`。 而尝试进程也会在调用 API `nni.get_next_parameter()` 时得到 `{"dropout": 0.3, "learning_rate": 0.4}`。 尝试结束后的返回值(通常是某个指标),通过调用 API `nni.report_final_result()` 返回给调参器。如: `nni.report_final_result(0.93)`。 而调参器的 `receive_trial_result` 函数会收到如下结果: +It means your Tuner will always generate parameters ```{"dropout": 0.3, "learning_rate": 0.4}```. Then Trial will receive ```{"dropout": 0.3, "learning_rate": 0.4}``` by calling API ```nni.get_next_parameter()```. Once the trial ends with a result (normally some kind of metrics), it can send the result to Tuner by calling API ```nni.report_final_result()```, for example ```nni.report_final_result(0.93)```. Then your Tuner's ```receive_trial_result``` function will receied the result like: -```python -parameter_id = 82347 -parameters = {"dropout": 0.3, "learning_rate": 0.4} -value = 0.93 -``` + parameter_id = 82347 + parameters = {"dropout": 0.3, "learning_rate": 0.4} + value = 0.93 + -**注意** 如果需要存取自定义的调参器目录里的文件 (如, `data.txt`),不能使用 `open('data.txt', 'r')`。 要使用: +**Note that** if you want to access a file (e.g., ```data.txt```) in the directory of your own tuner, you cannot use ```open('data.txt', 'r')```. Instead, you should use the following: -```python -_pwd = os.path.dirname(__file__) -_fd = open(os.path.join(_pwd, 'data.txt'), 'r') -``` + _pwd = os.path.dirname(__file__) + _fd = open(os.path.join(_pwd, 'data.txt'), 'r') + -这是因为自定义的调参器不是在自己的目录里执行的。(即,`pwd` 返回的目录不是调参器的目录)。 +This is because your tuner is not executed in the directory of your tuner (i.e., ```pwd``` is not the directory of your own tuner). -**3) 在实验的 yaml 文件中配置好自定义的调参器** +**3) Configure your customized tuner in experiment yaml config file** -NNI 需要定位到自定义的调参器类,并实例化它,因此需要指定自定义调参器类的文件位置,并将参数值传给 \_\_init__ 构造函数。 +NNI needs to locate your customized tuner class and instantiate the class, so you need to specify the location of the customized tuner class and pass literal values as parameters to the \_\_init__ constructor. ```yaml tuner: @@ -97,7 +93,7 @@ tuner: arg1: value1 ``` -更多样例,可参考: +More detail example you could see: > - [evolution-tuner](../../src/sdk/pynni/nni/evolution_tuner) > - [hyperopt-tuner](../../src/sdk/pynni/nni/hyperopt_tuner) @@ -105,4 +101,4 @@ tuner: ## 实现更高级的自动机器学习算法 -上述内容足够写出通用的调参器。 但有时可能需要更多的信息,例如,中间结果,尝试的状态等等,从而能够实现更强大的自动机器学习算法。 因此,有另一个叫做 `advisor` 的类,直接继承于 `MsgDispatcherBase`,它位于 [`src/sdk/pynni/nni/msg_dispatcher_base.py`](../../src/sdk/pynni/nni/msg_dispatcher_base.py)。 参考[这里](./howto_3_CustomizedAdvisor.md)来了解如何实现自定义的 advisor。 \ No newline at end of file +The methods above are usually enough to write a general tuner. However, users may also want more methods, for example, intermediate results, trials' state (e.g., the methods in assessor), in order to have a more powerful automl algorithm. Therefore, we have another concept called `advisor` which directly inherits from `MsgDispatcherBase` in [`src/sdk/pynni/nni/msg_dispatcher_base.py`](../src/sdk/pynni/nni/msg_dispatcher_base.py). Please refer to [here](./howto_3_CustomizedAdvisor.md) for how to write a customized advisor. \ No newline at end of file From 23d1106eacfea43566a9c1bc6fdb899dd622f652 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:15 +0800 Subject: [PATCH 0285/1573] New translations SearchSpaceSpec.md (Chinese Simplified) --- zh_CN/docs/SearchSpaceSpec.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh_CN/docs/SearchSpaceSpec.md b/zh_CN/docs/SearchSpaceSpec.md index 99ce44a9bd..d6050680fe 100644 --- a/zh_CN/docs/SearchSpaceSpec.md +++ b/zh_CN/docs/SearchSpaceSpec.md @@ -15,7 +15,7 @@ ``` -此样例定义了 `dropout_rate` 变量,它的先验分布为均匀分布,值在 `0.1` 与 `0.5` 之间。 调参器会首先了解搜索空间,然后从中采样。 +The example define ```dropout_rate``` as variable which priori distribution is uniform distribution, and its value from ```0.1``` and ```0.5```. The tuner will sample parameters/architecture by understanding the search space first. 用户需要定义变量名、类型和取值范围。 变量类型和取值范围包括: @@ -77,7 +77,7 @@ 注意:SMAC 仅支持部分类型,包括 `choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`。 当前版本中,SMAC 不支持级联搜索空间(即,SMAC中的条件变量)。 -注意,网格搜索调参器仅支持部分类型,包括 `choice`, `quniform` and `qloguniform`, 这里的 q 指定了采样的数量。 最后两种类型的细节如下: +Note that GridSearch Tuner only supports a subset of the types above, including `choic`, `quniform` and `qloguniform`, where q here specifies the number of values that will be sampled. 最后两种类型的细节如下: * 类型 'quniform' 接收三个值 [low, high, q], 其中 [low, high] 指定了范围,而 'q' 指定了会被均匀采样的值的数量。 注意 q 至少为 2。 它的第一个采样值为 'low',每个采样值都会比前一个大 (high-low)/q 。 * 类型 'qloguniform' 的行为与 'quniform' 类似,不同处在于首先将范围改为 [log(low), log(high)] 采样后,再将数值还原。 \ No newline at end of file From 98d064ab94eac4ad8a925916a7b9afaaf88a915b Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:17 +0800 Subject: [PATCH 0286/1573] New translations NNICTLDOC.md (Chinese Simplified) --- zh_CN/docs/NNICTLDOC.md | 671 +++++++++++++++++++--------------------- 1 file changed, 312 insertions(+), 359 deletions(-) diff --git a/zh_CN/docs/NNICTLDOC.md b/zh_CN/docs/NNICTLDOC.md index ed25e80bc2..585327b52b 100644 --- a/zh_CN/docs/NNICTLDOC.md +++ b/zh_CN/docs/NNICTLDOC.md @@ -1,426 +1,379 @@ -nnictl - -=== +# nnictl ## 介绍 -**nnictl** 是一个命令行工具,用来控制 NNI 实验,如启动、停止、继续实验,启动、停止 NNIBoard 等等。 +**nnictl** is a command line tool, which can be used to control experiments, such as start/stop/resume an experiment, start/stop NNIBoard, etc. ## 命令 -nnictl 支持的命令: +nnictl support commands: -```bash -nnictl create -nnictl stop -nnictl update -nnictl resume -nnictl trial -nnictl experiment -nnictl config -nnictl log -nnictl webui -nnictl tensorboard -nnictl top -``` + nnictl create + nnictl stop + nnictl update + nnictl resume + nnictl trial + nnictl experiment + nnictl config + nnictl log + nnictl webui + nnictl tensorboard + nnictl top + ### 管理实验 * **nnictl create** - - * 说明 - - 此命令使用参数中的配置文件,来创建新的实验。 此命令成功完成后,上下文会被设置为此实验。这意味着如果不显式改变上下文(暂不支持),输入的以下命令,都作用于此实验。 - - * 用法 - - ```bash - nnictl create [OPTIONS] - ``` - - 选项: - - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ------------ | ----- | --- | ------------- | - | --config, -c | True | | 实验的 yaml 配置文件 | - | --port, -p | False | | RESTful 服务的端口 | + + * 说明 + + 此命令使用参数中的配置文件,来创建新的实验。 After this command is successfully done, the context will be set as this experiment, which means the following command you issued is associated with this experiment, unless you explicitly changes the context(not supported yet). + + * 用法 + + nnictl create [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------- | + | --config, -c | True | | yaml configure file of the experiment | + | --port, -p | False | | the port of restful server | * **nnictl resume** - - * 说明 - - 使用此命令恢复已停止的实验。 - - * 用法 - - ```bash - nnictl resume [OPTIONS] - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ---------- | ----- | --- | ---------------------- | - | id | False | | 要恢复的实验标识 | - | --port, -p | False | | 要恢复的实验使用的 RESTful 服务端口 | + + * 说明 + + 使用此命令恢复已停止的实验。 + + * 用法 + + nnictl resume [OPTIONS] + Options: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | ---------------------- | + | id | False | | 要恢复的实验标识 | + | --port, -p | False | | 要恢复的实验使用的 RESTful 服务端口 | * **nnictl stop** - - * 说明 - - 使用此命令来停止正在运行的单个或多个实验。 - - * 用法 - - ```bash - nnictl stop [id] - ``` - - * 详细说明 - - 1. 如果指定了 id,并且此 id 匹配正在运行的实验,nnictl 会停止相应的实验,否则会输出错误信息。 - - 2. 如果没有指定 id,并且当前有运行的实验,则会停止该实验,否则会输出错误信息。 - - 3. 如果 id 以 * 结尾,nnictl 会停止所有匹配此通配符的实验。 - - 4. 如果 id 不存在,但匹配了某个实验的 id 前缀,nnictl 会停止匹配的实验。 - - 5. 如果 id 不存在,但匹配多个实验 id 的前缀,nnictl 会输出这些 id 的信息。 - - 6. 可使用 'nnictl stop all' 来停止所有的实验。 - -* **nnictl update** - - * **nnictl update searchspace** - - * 说明 + + * 说明 - 可以用此命令来更新实验的搜索空间。 - - * 用法 + 使用此命令来停止正在运行的单个或多个实验。 + + * 用法 - ```bash - nnictl update searchspace [OPTIONS] - ``` + nnictl stop [id] + + * 详细说明 - 选项: + 1.If there is an id specified, and the id matches the running experiment, nnictl will stop the corresponding experiment, or will print error message. 2.If there is no id specified, and there is an experiment running, stop the running experiment, or print error message. 3.If the id ends with *, nnictl will stop all experiments whose ids matchs the regular. 4.If the id does not exist but match the prefix of an experiment id, nnictl will stop the matched experiment. 5.If the id does not exist but match multiple prefix of the experiment ids, nnictl will give id information. 6.Users could use 'nnictl stop all' to stop all experiments + +* **nnictl update** + + * **nnictl update searchspace** - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | -------------- | ----- | --- | ----------- | - | id | False | | 需要设置的实验的 id | - | --filename, -f | True | | 新的搜索空间文件名 | - - * **nnictl update concurrency** - - * 说明 + * 说明 + + 可以用此命令来更新实验的搜索空间。 - 可以用此命令来更新实验的并发设置。 - - * 用法 + * 用法 + + nnictl update searchspace [OPTIONS] + + Options: + + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | -------------- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | + | --filename, -f | True | | 新的搜索空间文件名 | + + * **nnictl update concurrency** + * Description + + You can use this command to update an experiment's concurrency. + + * Usage + + nnictl update concurrency [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the number of allowed concurrent trials | + + * **nnictl update duration** + + * Description + + You can use this command to update an experiment's concurrency. + + + * Usage + + nnictl update duration [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the experiment duration will be NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. | + + * **nnictl update trialnum** + * Description + + You can use this command to update an experiment's maxtrialnum. + + * Usage + + nnictl update trialnum [OPTIONS] + + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | --------------------------------------------- | + | id | False | | ID of the experiment you want to set | + | --value, -v | True | | the new number of maxtrialnum you want to set | + +* **nnictl trial** + + * **nnictl trial ls** - ```bash - nnictl update concurrency [OPTIONS] - ``` + * 说明 + + 使用此命令来查看尝试的信息。 - 选项: + * 用法 + + nnictl trial ls - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----------- | ----- | --- | ------------ | - | id | False | | 需要设置的实验的 id | - | --value, -v | True | | 允许同时运行的尝试的数量 | - - * **nnictl update duration** + Options: + + | Name, shorthand | Required | Default | Description | + | --------------- | -------- | ------- | ------------------------------------ | + | id | False | | ID of the experiment you want to set | + + * **nnictl trial kill** * 说明 - - 可以用此命令来更新实验的运行时间。 + + 此命令用于终止尝试。 * 用法 - - ```bash - nnictl update duration [OPTIONS] - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----------- | ----- | --- | -------------------------------------------------------------- | - | id | False | | 需要设置的实验的 id | - | --value, -v | True | | 实验持续时间如没有单位,则为秒。 后缀可以为 's' 即秒 (默认值), 'm' 即分钟, 'h' 即小时或 'd' 即天。 | - - * **nnictl update trialnum** + + nnictl trial kill [OPTIONS] + + + 选项: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ------------- | ----- | --- | ------------ | + | id | False | | 需要设置的实验的 id | + | --trialid, -t | True | | 需要终止的尝试的 id。 | + + * **nnictl top** * 说明 - - 可以用此命令来更新实验的最大尝试数量。 + + 查看正在运行的实验。 * 用法 - - ```bash - nnictl update trialnum [OPTIONS] - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----------- | ----- | --- | --------------------- | - | id | False | | 需要设置的实验的 id | - | --value, -v | True | | 需要设置的 maxtrialnum 的数量 | + + nnictl top + + + 选项: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | -------------------------- | + | id | False | | 需要设置的实验的 id | + | --time, -t | False | | 刷新实验状态的时间间隔,单位为秒,默认值为 3 秒。 | -* **nnictl trial** - - * **nnictl trial ls** - - * 说明 +### 管理实验信息 + +* **nnictl experiment show** + + * 说明 - 使用此命令来查看尝试的信息。 - - * 用法 + 显示实验的信息。 + + * 用法 - ```bash - nnictl trial ls - ``` + nnictl experiment show - 选项: + Options: | 参数及缩写 | 是否必需 | 默认值 | 说明 | | ----- | ----- | --- | ----------- | | id | False | | 需要设置的实验的 id | - - * **nnictl trial kill** - - * 说明 + +* **nnictl experiment status** + + * 说明 - 此命令用于终止尝试。 - - * 用法 + 显示实验的状态。 + + * 用法 - ```bash - nnictl trial kill [OPTIONS] - ``` + nnictl experiment status - 选项: + Options: - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ------------- | ----- | --- | ------------ | - | id | False | | 需要设置的实验的 id | - | --trialid, -t | True | | 需要终止的尝试的 id。 | - - * **nnictl top** - - * 说明 + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | + +* **nnictl experiment list** + + * 说明 - 查看正在运行的实验。 - - * 用法 + 显示正在运行的实验的信息 + + * 用法 - ```bash - nnictl top - ``` + nnictl experiment list - 选项: + Options: - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ---------- | ----- | --- | -------------------------- | - | id | False | | 需要设置的实验的 id | - | --time, -t | False | | 刷新实验状态的时间间隔,单位为秒,默认值为 3 秒。 | - -### 管理实验信息 - -* **nnictl experiment show** - - * 说明 - - 显示实验的信息。 - - * 用法 - - ```bash - nnictl experiment show - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----- | ----- | --- | ----------- | - | id | False | | 需要设置的实验的 id | - -* **nnictl experiment status** - - * 说明 - - 显示实验的状态。 - - * 用法 - - ```bash - nnictl experiment status - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----- | ----- | --- | ----------- | - | id | False | | 需要设置的实验的 id | - -* **nnictl experiment list** - - * 说明 - - 显示正在运行的实验的信息 - - * 用法 - - ```bash - nnictl experiment list - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----- | ----- | ----- | ---------------- | - | all | False | False | 显示所有实验,包括已停止的实验。 | + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | ----- | ---------------- | + | all | False | False | 显示所有实验,包括已停止的实验。 | * **nnictl config show** - - * 说明 - - 显示当前上下文信息。 - - * 用法 - - ```bash - nnictl config show - ``` + + * 说明 + + Display the current context information. + + + * 用法 + + nnictl config show + ### 管理日志 * **nnictl log stdout** - - * 说明 - - 显示 stdout 日志内容。 - - * 用法 - - ```bash - nnictl log stdout [options] - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ---------- | ----- | --- | ---------------- | - | id | False | | 需要设置的实验的 id | - | --head, -h | False | | 显示 stdout 开始的若干行 | - | --tail, -t | False | | 显示 stdout 结尾的若干行 | - | --path, -p | False | | 显示 stdout 文件的路径 | + + * 说明 + + 显示 stdout 日志内容。 + + * 用法 + + nnictl log stdout [options] + + + 选项: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | ---------------- | + | id | False | | 需要设置的实验的 id | + | --head, -h | False | | 显示 stdout 开始的若干行 | + | --tail, -t | False | | 显示 stdout 结尾的若干行 | + | --path, -p | False | | 显示 stdout 文件的路径 | * **nnictl log stderr** - - * 说明 - - 显示 stderr 日志内容。 - - * 用法 - - ```bash - nnictl log stderr [options] - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ---------- | ----- | --- | ---------------- | - | id | False | | 需要设置的实验的 id | - | --head, -h | False | | 显示 stderr 开始的若干行 | - | --tail, -t | False | | 显示 stderr 结尾的若干行 | - | --path, -p | False | | 显示 stderr 文件的路径 | + + * 说明 + + 显示 stderr 日志内容。 + + * 用法 + + nnictl log stderr [options] + + Options: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ---------- | ----- | --- | ---------------- | + | id | False | | 需要设置的实验的 id | + | --head, -h | False | | 显示 stderr 开始的若干行 | + | --tail, -t | False | | 显示 stderr 结尾的若干行 | + | --path, -p | False | | 显示 stderr 文件的路径 | * **nnictl log trial** - - * 说明 - - 显示尝试日志的路径。 - - * 用法 - - ```bash - nnictl log trial [options] - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----- | ----- | --- | ------ | - | id | False | | 尝试的 id | + + * 说明 + + 显示尝试日志的路径。 + + * 用法 + + nnictl log trial [options] + + Options: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ------ | + | id | False | | 尝试的 id | ### 管理网页 * **nnictl webui url** - - * 说明 - - 显示实验的 URL。 - - * 用法 - - ```bash - nnictl webui url - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----- | ----- | --- | ----------- | - | id | False | | 需要设置的实验的 id | + + * 说明 + + 显示实验的 URL。 + + * 用法 + + nnictl webui url + + + 选项: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | ### 管理 tensorboard * **nnictl tensorboard start** - - * 说明 - - 启动 tensorboard 进程。 - - * 用法 - - ```bash - nnictl tensorboard start - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | --------- | ----- | ---- | ----------------- | - | id | False | | 需要设置的实验的 id | - | --trialid | False | | 尝试的 id | - | --port | False | 6006 | tensorboard 进程的端口 | - - * 详细说明 - - 1. NNICTL 当前仅支持本机和远程平台的 tensorboard,其它平台暂不支持。 - 2. 如果要使用 tensorboard,需要将 tensorboard 日志输出到环境变量 [NNI_OUTPUT_DIR] 路径下。 - 3. 在 local 模式中,nnictl 会直接设置 --logdir=[NNI_OUTPUT_DIR] 并启动 tensorboard 进程。 - 4. 在 remote 模式中,nnictl 会创建一个 ssh 客户端来将日志数据从远程计算机复制到本机临时目录中,然后在本机开始 tensorboard 进程。 需要注意的是,nnictl 只在使用此命令时复制日志数据,如果要查看最新的 tensorboard 结果,需要再次执行 nnictl tensorboard 命令。 - 5. 如果只有一个尝试任务,不需要设置 trialid。 如果有多个运行的尝试作业,需要设置 trialid,或使用 [nnictl tensorboard start --trialid all] 来将 --logdir 映射到所有尝试的路径。 + + * 说明 + + 启动 tensorboard 进程。 + + * 用法 + + nnictl tensorboard start + + + 选项: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | --------- | ----- | ---- | ----------------- | + | id | False | | 需要设置的实验的 id | + | --trialid | False | | 尝试的 id | + | --port | False | 6006 | tensorboard 进程的端口 | + + * 详细说明 + + 1. NNICTL support tensorboard function in local and remote platform for the moment, other platforms will be supported later. + 2. If you want to use tensorboard, you need to write your tensorboard log data to environment variable [NNI_OUTPUT_DIR] path. + 3. In local mode, nnictl will set --logdir=[NNI_OUTPUT_DIR] directly and start a tensorboard process. + 4. In remote mode, nnictl will create a ssh client to copy log data from remote machine to local temp directory firstly, and then start a tensorboard process in your local machine. You need to notice that nnictl only copy the log data one time when you use the command, if you want to see the later result of tensorboard, you should execute nnictl tensorboard command again. + 5. If there is only one trial job, you don't need to set trialid. If there are multiple trial jobs running, you should set the trialid, or you could use [nnictl tensorboard start --trialid all] to map --logdir to all trial log paths. * **nnictl tensorboard stop** - - * 说明 - - 停止所有 tensorboard 进程。 - - * 用法 - - ```bash - nnictl tensorboard stop - ``` - - 选项: - - | 参数及缩写 | 是否必需 | 默认值 | 说明 | - | ----- | ----- | --- | ----------- | - | id | False | | 需要设置的实验的 id | \ No newline at end of file + + * 说明 + + 停止所有 tensorboard 进程。 + + * 用法 + + nnictl tensorboard stop + + + 选项: + + | 参数及缩写 | 是否必需 | 默认值 | 说明 | + | ----- | ----- | --- | ----------- | + | id | False | | 需要设置的实验的 id | \ No newline at end of file From d8012a35de9ed5825f86854b597fc4117bd98c9d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:19 +0800 Subject: [PATCH 0287/1573] New translations howto_3_CustomizedAdvisor.md (Chinese Simplified) --- zh_CN/docs/howto_3_CustomizedAdvisor.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/zh_CN/docs/howto_3_CustomizedAdvisor.md b/zh_CN/docs/howto_3_CustomizedAdvisor.md index a3b5a9fa0b..25f6465440 100644 --- a/zh_CN/docs/howto_3_CustomizedAdvisor.md +++ b/zh_CN/docs/howto_3_CustomizedAdvisor.md @@ -1,16 +1,14 @@ # **指南** - 自定义 advisor -*Advisor 用于同时需要调参器和评估器方法的自动机器学习算法。 Advisor 与调参器类似,它接收尝试的参数请求,最终结果,并生成尝试的参数。 另外,它也能像评估器一样接收中间结果,尝试的最终状态,并可以发送终止尝试的命令。 注意,在使用 Advisor 时,不能同时使用调参器和评估器。* +*Advisor 用于同时需要调参器和评估器方法的自动机器学习算法。 Advisor is similar to tuner on that it receives trial configuration request, final results, and generate trial configurations. 另外,它也能像评估器一样接收中间结果,尝试的最终状态,并可以发送终止尝试的命令。 注意,在使用 Advisor 时,不能同时使用调参器和评估器。* 如果要自定义 Advisor,需要: -1. 从 MsgDispatcherBase 类继承并创建新的 Advisor 类 -2. 实现所有除了 `handle_request` 外的,以 `handle_` 前缀开始的方法 -3. 在实验的 yaml 文件中配置好自定义的 Advisor +1) Define an Advisor inheriting from the MsgDispatcherBase class 2) Implement the methods with prefix `handle_` except `handle_request` 3) Configure your customized Advisor in experiment yaml config file -样例如下: +Here ia an example: -**1) 从 MsgDispatcherBase 类继承并创建新的 Advisor 类** +**1) Define an Advisor inheriting from the MsgDispatcherBase class** ```python from nni.msg_dispatcher_base import MsgDispatcherBase @@ -20,13 +18,13 @@ class CustomizedAdvisor(MsgDispatcherBase): ... ``` -**2) 实现所有除了 `handle_request` 外的,以 `handle_` 前缀开始的方法** +**2) Implement the methods with prefix `handle_` except `handle_request`** -参考 Hyperband 的实现 ([src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py](../../src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py)) 来学习如何实现这些方法。 +Please refer to the implementation of Hyperband ([src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py](../src/sdk/pynni/nni/hyperband_advisor/hyperband_advisor.py)) for how to implement the methods. -**3) 在实验的 yaml 文件中配置好自定义的 Advisor** +**3) Configure your customized Advisor in experiment yaml config file** -与调参器和评估器类似。 NNI 需要定位到自定义的 Advisor 类,并实例化它,因此需要指定自定义 Advisor 类的文件位置,并将参数值传给 \_\_init__ 构造函数。 +Similar to tuner and assessor. NNI needs to locate your customized Advisor class and instantiate the class, so you need to specify the location of the customized Advisor class and pass literal values as parameters to the \_\_init__ constructor. ```yaml advisor: From 33c946c06570cbc75f7f1ef76954c2f7f00f5737 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:20 +0800 Subject: [PATCH 0288/1573] New translations GetStarted.md (Chinese Simplified) --- zh_CN/docs/GetStarted.md | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/zh_CN/docs/GetStarted.md b/zh_CN/docs/GetStarted.md index d6644e03b0..806bbad5e3 100644 --- a/zh_CN/docs/GetStarted.md +++ b/zh_CN/docs/GetStarted.md @@ -4,26 +4,19 @@ * **依赖项** - python >= 3.5 - git - wget - + python >= 3.5 git wget - 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 版本。 + python pip should also be correctly installed. You could use "python3 -m pip -v" to check in Linux. * 注意:当前版本不支持虚拟环境。 * **通过 pip 命令安装 NNI** - python3 -m pip install --user --upgrade nni - + python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** - git clone -b v0.4.1 https://github.com/Microsoft/nni.git - cd nni - source install.sh - + git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh ## **快速入门:运行自定义的实验** @@ -36,20 +29,22 @@ **准备尝试**: 先从简单样例开始,如:NNI 样例中的 mnist。 NNI 样例在代码目录的 examples 中,运行 `ls ~/nni/examples/trials` 可以看到所有实验的样例。 执行下面的命令可轻松运行 NNI 的 mnist 样例: - python3 ~/nni/examples/trials/mnist-annotation/mnist.py + python3 ~/nni/examples/trials/mnist-annotation/mnist.py + -上面的命令会写在 yaml 文件中。 参考[这里](howto_1_WriteTrial.md)来写出自己的实验代码。 +This command will be filled in the yaml configure file below. Please refer to [here](howto_1_WriteTrial.md) for how to write your own trial. -**准备调参器**: NNI 支持多种流行的自动机器学习算法,包括:Random Search(随机搜索),Tree of Parzen Estimators (TPE),Evolution(进化算法)等等。 也可以实现自己的调参器(参考[这里](howto_2_CustomizedTuner.md))。下面使用了 NNI 内置的调参器: +**Prepare tuner**: NNI supports several popular automl algorithms, including Random Search, Tree of Parzen Estimators (TPE), Evolution algorithm etc. Users can write their own tuner (refer to [here](howto_2_CustomizedTuner.md), but for simplicity, here we choose a tuner provided by NNI as below: - tuner: + tuner: builtinTunerName: TPE classArgs: optimize_mode: maximize + -*builtinTunerName* 用来指定 NNI 中的调参器,*classArgs* 是传入到调参器的参数,*optimization_mode* 表明需要最大化还是最小化尝试的结果。 +*builtinTunerName* is used to specify a tuner in NNI, *classArgs* are the arguments pass to the tuner, *optimization_mode* is to indicate whether you want to maximize or minimize your trial's result. -**准备配置文件**:实现尝试的代码,并选择或实现自定义的调参器后,就要准备 yaml 配置文件了。 NNI 为每个尝试样例都提供了演示的配置文件,用命令`cat ~/nni/examples/trials/mnist-annotation/config.yml` 来查看其内容。 大致内容如下: +**Prepare configure file**: Since you have already known which trial code you are going to run and which tuner you are going to use, it is time to prepare the yaml configure file. NNI provides a demo configure file for each trial example, `cat ~/nni/examples/trials/mnist-annotation/config.yml` to see it. Its content is basically shown below: authorName: your_name experimentName: auto_mnist @@ -78,18 +73,18 @@ gpuNum: 0 -因为这个尝试代码使用了 NNI 标记的方法(参考[这里](../tools/annotation/README.md) ),所以*useAnnotation* 为 true。 *command* 是运行尝试代码所需要的命令,*codeDir* 是尝试代码的相对位置。 命令会在此目录中执行。 同时,也需要提供每个尝试进程所需的 GPU 数量。 +Here *useAnnotation* is true because this trial example uses our python annotation (refer to [here](../tools/annotation/README.md) for details). For trial, we should provide *trialCommand* which is the command to run the trial, provide *trialCodeDir* where the trial code is. The command will be executed in this directory. We should also provide how many GPUs a trial requires. -完成上述步骤后,可通过下列命令来启动实验: +With all these steps done, we can run the experiment with the following command: nnictl create --config ~/nni/examples/trials/mnist-annotation/config.yml -参考[这里](NNICTLDOC.md)来了解 *nnictl* 命令行工具的更多用法。 +You can refer to [here](NNICTLDOC.md) for more usage guide of *nnictl* command line tool. ## 查看实验结果 -实验开始运行后,可以通过 NNI 的网页来查看实验进程,并进行控制等。 网页界面默认会通过 `nnictl create` 命令打开。 +The experiment has been running now, NNI provides WebUI for you to view experiment progress, to control your experiment, and some other appealing features. The WebUI is opened by default by `nnictl create`. ## 更多内容 From b13f6732ecc84f4baeb23740a58a57c1a1d409e4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:21 +0800 Subject: [PATCH 0289/1573] New translations Overview.md (Chinese Simplified) --- zh_CN/docs/Overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/Overview.md b/zh_CN/docs/Overview.md index 345a9cde6e..2e64679a05 100644 --- a/zh_CN/docs/Overview.md +++ b/zh_CN/docs/Overview.md @@ -22,7 +22,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)实验的工 用户可以用 nnictl 或可视化的 WEB 界面 NNIBoard 来查看并调试指定的实验。 -NNI 提供了一组样例来帮助熟悉以上过程。 +NNI provides a set of examples in the package to get you familiar with the above process. In the following example [/examples/trials/mnist], we had already set up the configuration and updated the training codes for you. You can directly run the following command to start an experiment. ## 主要概念 From af974d77190af2652c31d95952c39be5d7963ce0 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:23 +0800 Subject: [PATCH 0290/1573] New translations Installation.md (Chinese Simplified) --- zh_CN/docs/Installation.md | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/zh_CN/docs/Installation.md b/zh_CN/docs/Installation.md index 09f70f6aa7..6fc994de7a 100644 --- a/zh_CN/docs/Installation.md +++ b/zh_CN/docs/Installation.md @@ -6,24 +6,17 @@ * **依赖项** - python >= 3.5 - git - wget - + python >= 3.5 git wget - 需要正确安装 Python 的 pip。 可以用 "python3 -m pip -v" 来检查 pip 的版本。 + python pip should also be correctly installed. You could use "python3 -m pip -v" to check pip version. * **通过 pip 命令安装 NNI** - python3 -m pip install --user --upgrade nni - + python3 -m pip install --user --upgrade nni * **通过源代码安装 NNI** - git clone -b v0.4.1 https://github.com/Microsoft/nni.git - cd nni - source install.sh - + git clone -b v0.4.1 https://github.com/Microsoft/nni.git cd nni source install.sh * **在 docker 映像中安装 NNI** From 65e16575bf85bd1cd7345387ca8e050a5856c5c4 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:24 +0800 Subject: [PATCH 0291/1573] New translations 4.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/4.png | Bin 0 -> 400 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/4.png diff --git a/zh_CN/src/webui/src/static/img/icon/4.png b/zh_CN/src/webui/src/static/img/icon/4.png new file mode 100644 index 0000000000000000000000000000000000000000..daa7101860a43cafee9702944a8841de6615e699 GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^9zbl*!3HFqPxaXWDb50q$YKTtJ!KGPtXOJa1{9Pm zag8Vm&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN!@$5O>*?YcQgQ3et&6-(1|qGA zhWk!)nm5(Zv!&&&!*B z{wZdp#X9wi0EJdnFCUqx$Ly^b*JoDH>3A|q#a)WUT}m1BoQF7 clhc49-$Q4Cs=Bi(Ff Date: Tue, 8 Jan 2019 09:49:25 +0800 Subject: [PATCH 0292/1573] New translations 5.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/5.png | Bin 0 -> 647 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/5.png diff --git a/zh_CN/src/webui/src/static/img/icon/5.png b/zh_CN/src/webui/src/static/img/icon/5.png new file mode 100644 index 0000000000000000000000000000000000000000..7026fc4905cfce2aaf60ddb653d560e6a2171684 GIT binary patch literal 647 zcmV;20(kw2P)1J+aS+@G4jfTJep&k&}2M_z-{) z(v*DXuAZl>xQR-WXg&f*iZd~z!t+z5o5`J?~FJ!RkIg7Az(}1^Usp+5b-cq%hdOrR3S{v zN%DY_ppI+Ws(Uvj0}0$!vF>vQ2s;T(=QYNzCx{2ibr8FBqQ`%&Nh<86t@FWSYvMvy z%${ZHE(EtS!M;6XY=~Ou5>?3?1#PQMDs+ z!-PKyZaEGbN4AI~K;Ogew25jGM$~g)YhQ?2)4mA`{|9VN9wa^sOm!e(g^-m0B+f~^ zW%JLtSOk#h@S)K`I7jcqEMnnJr002ovPDHLkV1mGP6lwqf literal 0 HcmV?d00001 From 8cc88523831db752452aa69d67c3c5ac61eeb732 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:26 +0800 Subject: [PATCH 0293/1573] New translations 6.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/6.png | Bin 0 -> 326 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/6.png diff --git a/zh_CN/src/webui/src/static/img/icon/6.png b/zh_CN/src/webui/src/static/img/icon/6.png new file mode 100644 index 0000000000000000000000000000000000000000..0cfaef4ba67251e316619acc938ea757a63cd1c8 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^fk14*!3HE-OGK6cDb50q$YKTtJ!KGPtXOJa1{9Pm zag8Vm&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN15|X`)5S5Q;?|p62YH(eBpNOz z$+QH@H0C`}d*mYP=w3KE>Rpqn)1?!?^<+G%Di$i%U(SLS~NPO%jW$%Wc+@f_Vp^=HD9lnTBgsR^p;0(5m1sNP~iKFh@_s!caBU7S~V}~ zlvQnIOuyB)yJGj&OaA?(pMCRO6NjLZ%he|~7pHT;v?y-7U83=N(sF&EjAP4uB0>{m7$9&&`tOd(Ycu4CHfcTzZd*he1C@*V4H-cOuYx44$rj JF6*2UngI2VeZ>F( literal 0 HcmV?d00001 From 31dfadeb5b646348253d46c89197f7db6f6dbb5f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:27 +0800 Subject: [PATCH 0294/1573] New translations 7.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/7.png | Bin 0 -> 538 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/7.png diff --git a/zh_CN/src/webui/src/static/img/icon/7.png b/zh_CN/src/webui/src/static/img/icon/7.png new file mode 100644 index 0000000000000000000000000000000000000000..43b2a8594337f4d0d5fabfcdca8fa26e4798a414 GIT binary patch literal 538 zcmV+#0_FXQP)l*_k(Ex7O=*u(|sE{xKdAa3IqwP|jwvmGx^`GDsJAWWZ&x zy*_l7AxK4oGsGSq1;7AfpbMuK!DC(9T_k}5ZXt;IWVu& zh69}kyiGSVy$UqD(ayH^2i39Q=32H`&x{lU(YyQ;p(SxPm20ZoBmXIF_V>knqFt#TsK@25o7s|;2H?s6r}UmHqgdlwZ2bWL cyS@Y%0N@L$lmUguz5oCK07*qoM6N<$f@yo>?EnA( literal 0 HcmV?d00001 From 8a901e783aaf1fb8a66568e34dc5bdc8a7fe6c74 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:28 +0800 Subject: [PATCH 0295/1573] New translations 8.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/8.png | Bin 0 -> 313 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/8.png diff --git a/zh_CN/src/webui/src/static/img/icon/8.png b/zh_CN/src/webui/src/static/img/icon/8.png new file mode 100644 index 0000000000000000000000000000000000000000..db0140f6148fd5624e417fb5140bfc7c7ee9cb9e GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6qGD+ zjVKAuPb(=;EJ|f?Ovz75Rq)JBOiv9;O-!jQJeg_(RCLVK#WAGf)}1M_yhjuSS{{mo zFbRd7@^o-g4FRGRT-w9z8<}BN&ySp_>O6RrYfeNK zOF^3Cwdtjsbh16?eKFR_DBW+gM)KCf+>bwndI~;Hev$j)rPzZeZ>`JQKOWCY&oKJe zxL}s^NmXx-6;@N0ORlpuRylL>dSgrJgirS-ed68B@tke<0pYC&1l%V2`>*$!`JQKu z*T#j->ZXT-9J(K_mYXrX=bPd~^=*4!d;h!Jq Date: Tue, 8 Jan 2019 09:49:29 +0800 Subject: [PATCH 0296/1573] New translations 9.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/9.png | Bin 0 -> 712 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/9.png diff --git a/zh_CN/src/webui/src/static/img/icon/9.png b/zh_CN/src/webui/src/static/img/icon/9.png new file mode 100644 index 0000000000000000000000000000000000000000..8072740a9ee3f4e539e8a26b9de6b303978d7efa GIT binary patch literal 712 zcmV;(0yq7MP)j{00009a7bBm001r{ z001r{0eGc9b^rhX8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0#!*w zK~#9!?3(>?f-n@o(er=Zpl(n*fpi0yK%Ag-0^13S6NnRFCn!!(oS=3CouGZWdt7tZ zB$Su}KHj@~hb9X5BkwaX2!i0t`z`lbmgOFC8G1byhG%$&XLyEZc!sAdqc$!YhM|ui zPf$q~y?_Vk2^>V(d@GIZ;Sj)0I9Z%;D*lUK^SU>(X|vzS;3#v@!~#5m!w2XK>N|`j zU51})#upYVzEMm)NG?S-;6;{mt-_x*+T6^t)2!jm@pSW&YJ*0(FK@;$~ zi*oYb_urDb2^oKWPg3;+2 Date: Tue, 8 Jan 2019 09:49:30 +0800 Subject: [PATCH 0297/1573] New translations download.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/download.png | Bin 0 -> 376 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/download.png diff --git a/zh_CN/src/webui/src/static/img/icon/download.png b/zh_CN/src/webui/src/static/img/icon/download.png new file mode 100644 index 0000000000000000000000000000000000000000..4182f1a70e10e087950b09321fba2d1add3b95f0 GIT binary patch literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^l0dA^!3HFM&3wEMNO2Z;L>4nJ=qZCRW5rVYGLWhg z*NBqf{Irtt#G+IN$CUh}R0Yr6#Prml)Wnp^!jq{s3=E8{o-U3d6}R3@`^$SsLEz}d zkN=IDq(#&>EG}v3yWm?QT*_3)?7l+y!9_bC)h$l@g_Ni75y`0B&){C=qj{7mWTn}v z36-4Dib^U@5LCyd1?Yt#6xBF>#_wn3?LCb15&TFI%MHVX7tg zS44TW=*5qLA8O_QbWWK(Z^@N6Pfv(0`Ec{_cjetrSSIkEc=+5WQCwp_(~I5eW-olS zsu-&Nn6XIg>QOuW?uESU0;b12_bnNHYgQ&(dX{Z+jq< Date: Tue, 8 Jan 2019 09:49:31 +0800 Subject: [PATCH 0298/1573] New translations logo.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/logo.png | Bin 0 -> 4102 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/logo.png diff --git a/zh_CN/src/webui/src/static/img/logo.png b/zh_CN/src/webui/src/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..20dd992b661eb74409e07b5a762bf2ad1e42d4c5 GIT binary patch literal 4102 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 Date: Tue, 8 Jan 2019 09:49:31 +0800 Subject: [PATCH 0299/1573] New translations issue.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/issue.png | Bin 0 -> 1026 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/issue.png diff --git a/zh_CN/src/webui/src/static/img/icon/issue.png b/zh_CN/src/webui/src/static/img/icon/issue.png new file mode 100644 index 0000000000000000000000000000000000000000..0966645fc780019a20d47182787d92cf052c3cc8 GIT binary patch literal 1026 zcmeAS@N?(olHy`uVBq!ia0vp^OMtkQgAGVtbq&4*q&N#aB8wRq^pruEv0|xx83P0J z7Ec$)kcv5P?_MmN?I7azaCOhUw|tZMp71RKl5av1N+;}KUdnV@b_vT)<~xmE8?+P- z^Vn$c=`7fNdVj$_$$4i^aND&_JaTB2&S`7o+tNkhGj8gA?~Ry!bM4GpQ3>vZ`8QYt zoF+_wBO$I&C(nfG1f708=YOk(lM|OCvFOw+`{OwwmuL3R%=dAe@VU^q{pFcCn-p6W zV94C`bK$yti>b}m%;Q-sm(IY(CMxYv6XzxlzDWcp!i-s|hPS+4!Q_;KCs zVw;ZDy1T+#gSWZ&%;;R%tl}0k!^k7)2zxN=P4i>oNiow_HocL4?7Zls!x0fjxemeH zAoj?k74i}765=|k6OME&2yqlruJRO2nJ;nwOwRNK9RYFc6Se0hw(H*aPfko?i=100 z&-_|IS?>tfrml~c8~6+#HAeuoxXpajT$tpt`ikSc*Ox0_NldpZ-4@yP%Zf>V|DNTZ z%XvP<$V+y&>=&MH_O+B{Uf?b-Q5C~i6Z(u?CmdO^yfet}jY4POb+?aEmuEN%E#6nX zRpYu~eD!pTW6iHJGm@^xe9xD4&e(VB>%I+7Q;%G^6TC)Y`3&~MA?;&E2nHg;{Q*4&A1qBMJR&tKU6-#@K&5FY5THewN1h#=XM3);>yL=`^cdT;e+6MbMJI zNeY6KOuU+0 Date: Tue, 8 Jan 2019 09:49:32 +0800 Subject: [PATCH 0300/1573] New translations max.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/max.png | Bin 0 -> 834 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/max.png diff --git a/zh_CN/src/webui/src/static/img/icon/max.png b/zh_CN/src/webui/src/static/img/icon/max.png new file mode 100644 index 0000000000000000000000000000000000000000..f32d9d55f47b0e06dfa4d45ba43e02d69475be16 GIT binary patch literal 834 zcmV-I1HJr-P)}(GK@dhixhSWWPhcXa!bRu!2F5qQCong#96Ey= zpc~*DK;D5#9l;Hx)QMe#dnnxMS(g1VyUo5T3NgD#tEZW-XGY7-a5(G(2#?4kGylMq z(*rO8@a0Iu8o>K&7xSV4*U(5hF$p>`2|6(Vi0E0S_AYZNmqkR30So|)@VD(XGe2IH z7!eU4qr_?9*fPFwDJG`~jZZN|bSuADUJ;sqa>h;gN%{Rx zukkKs17Hr|BYaWL5#QXU5SYByo%+Qh{7UyVVwUHz}utOKE=qcz|=T21Mo_< z&E@%6%w7D#{mfTN_XpMd1mNDvq&N${h9!YDgr+jgtg!YkhKNG1c%z!v%)FN+ayII? zZ!r?MR^I3~-D~y}M9)3O3|wQ|*321~Von6E#>$z#yG3NioMn2vtq=)qMDze)D|4T{ zC~u3%soL0&90J#ZnJ2p0g%~0lOQz@w6tO}$lU9o%qJap>+G?-@_avF12o zcHw_!F*DAkbz+EUk|@QIP<>|1Y*nD#v_?$MVH2v$Ju`31{=CME$vJE`QjQA^8;eGX zkzUc4Ez0n?J<&s+q=(F^zLtxKF$DCF_d;?q7b(vsZB~5ujPiu&MP{m0HEf zvfrAC7GWnnBsqhvlG?;bPbnj17uPTHysT^3Skxj$G9>R`RtwlxSzU@!xfm(03u6M- zNC7G8=rIc;U_)6Qx9Q%#N;j$`Z1n~aWX;m58y+hYlM%LGnR#inH=0VsWQ6VavWvM( zQCdt!*ly%j*;Z0Tk4c5?)B=;ioS*!2P64`zG@=15Sv?f?J) M07*qoM6N<$f?LOZ!vFvP literal 0 HcmV?d00001 From 7fd28fbc35af69ac096a1fa0e5f2ac8838af3093 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:33 +0800 Subject: [PATCH 0301/1573] New translations min.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/min.png | Bin 0 -> 898 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/min.png diff --git a/zh_CN/src/webui/src/static/img/icon/min.png b/zh_CN/src/webui/src/static/img/icon/min.png new file mode 100644 index 0000000000000000000000000000000000000000..4a19000c25a0f5730ab440bab26003e4b79a0534 GIT binary patch literal 898 zcmV-|1AY97P)XrGDh@8=fZdLWyF&^~TDhx(MMgSH7h5!Zt zW{sy1P@$zHA`ZfmP@JYBVlsji^%yr>`rgS zKH;3T77U}1gY(<_Xh>5wp;G%8RZR%Tml-oIy}?t}&&;cQnK0vncD|O)xQdj(q!}L! z#;O@tl0;fGLD@Y+g5z{s{Cw1mKtx?Vg_bJ0ZafVTv7&sk6gn1l3PMCNrHxof!n z@y6~LU1}F!Zp3Sl`8(uIz8u)=x|Y|of{DokHp?1yKq~^O)TmDqj4y5w=K#*1xb42m zu0muSyCV|j?$>p~r5t;Dt z)S8L!_A+-2g!`C~uf&WvJ!&_kCv6j7ljmbNGkniEj{x(}Ag&!;%Lj)-8@-Sb`{~BE zXl51+Po9QC`J)ljUwqjHL(KzG>LOE|Zzq^Nj5z2oum&a+b#jb2=r5?N=KG9V&^I3U zBbjF45AU&V0*`4H%!C>CG%c#LUE^N(D}Z-7-?s;bWrkS0W*Qjxwayl~EO|^Q!W7X? z)6ddUO7oyeW=R#1O)%Wh&3UCuYf=D|*%`AVMx!JG%9-%1%>8S>h;9~)uN+YS9V%!I z7+*dpU){guMAU(ar~?yG2PUEpOhg@+h(hg?wrk~jRNah;r~?yG2PUFk&S`-*Y6Ad& Y0X}F!3f|@Ak^lez07*qoM6N<$f~EV!Z literal 0 HcmV?d00001 From 4fe40c6b649ec510b45db1b97b04aa5de622101f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:34 +0800 Subject: [PATCH 0302/1573] New translations logo2.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/logo2.png | Bin 0 -> 2372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/logo2.png diff --git a/zh_CN/src/webui/src/static/img/logo2.png b/zh_CN/src/webui/src/static/img/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..4015dbc8aeea199b02b38b7812e88101fa7b4883 GIT binary patch literal 2372 zcmb7GdpOg58(*(z7Se$to{FcJ98x*Up@y*KyoN1GVr?_eGKZol8H&ovp_f@s%N%|Q z`_1F9lywl9VjKM&YDs#?A#%Qva<)(_z zM!;Y&RS$O;Ke-;4%O$vy{G3%xYL_czs(TO(2HUIuOV*rYJH^3Z@I?=o!v)`W& zfHEPaO}n4Y6n=}DPB90u2 zh*P&NI}PpA=5-Z5u@F@bxVli=Gea~`YmjNn_-*Dq}+%c-Q? zxHg?zf|dEt16^kN4)HfMy~?BAcVGsU(`0TOUeg8N>5F%0)+iewC$7!@mS8$~?Dnai zwml;>=ly;*j4u7jfmX;Wjiy;e*$YwC&Q2eJSAe|;=h&{TVKQl?0=@4_C@c6{bQx#y z4ZMuLP1suh;y~e!Y##?^2&(0Ti-!!DADt)s z8rlO?2xiNsAE)2mwd;KG864JKZYvrbS#tpiZUg&l_XK$Wb+bU+uDH`!^g>v0K;X`!t#zytMk<@O1)Kd7R+P z*06|w*Wu0Jq6!_VUicBcS60LJG1Jb0I(#{9Y0Kd{)hmO5x|e6y{t7Nq5oGsH{ESlj zDrrF4SUSD0n?2@(H<}9F<^^lTtDOdi3wj*^jx1oTz-Sh2Rh-`EPgFcD_kn({IL@M@ z{szQ4t3!d1tXP=+8~eHnAkl{+fzD7H??;pG?Q@TU4&^NJot8u6$gts4rwxI9OsJIZU&h5M@Xf{8zV9O@ zFO3>4ItJ%TU;5!P=iZ4lO_^{7z9nfnJ^JlNJ~wZ9$iQDtc;&lacsUi9)G~mV&`%`= znz1Qvksn@uDt(E;g&Kmc2!oVfL_y}g08f6-V$OQu`_kk1w0;9hLDIVJZm~`|RqtX8 z$9HgKw8ICNd9m@YXWu6~DXs05rqBWX~EIJE=lMet3PZpoXSV~Vudn2XKu!FSV(br)C;>do$!kxf=rlzX>xuZaau2{zSanaQ}@BM=-dORwyEUa}ZI{ z8(hFbtR{v;r0h$i&yfmsg^1h#CVS1*jmj{%$7l*8S3*jzB;jqDjLA#$tPkv#+Qwc) z2r09MizI^GDg;HghP}wDDqr%;7HbIb{v)m7s%4}@q=#$2gz(-44jUN);-o%D{c3Gt z7JJG>jBUX!K+QEP{2QKj!SYnq_Y?(5Ys$GPZ0LyD6anCA*A2e~mhxSzGX`e_VX^UQVQJGE+3@czU6Lk4#kI_b~!>S4TU+K*#CefqvsZ z_FA7bhlY*Z!dD`HTpiJSZAu82j|bAErFS;LHd<)3*!%Ea4ut*RPt%I6ONg6P{bhlw zq?Ai;6myqr#LlYT&$^y0ai*a0a0|9ZCx>#n%QmHVdUH_4=kWCjcJ=B#LDl8FW9?VV zx$SxFZ~6pT+QI{*?QF1Y51?Mclc0>xNpz196#?iW{*LiL7AKD;=h2%;volY?zR}F_ z8AM23Fu2RoEVIFsO$t(dZX8Bly@gk3qT4HyMbLGF zL47ZRwY6-i_={=!<`4=WjEiAww2G`s176inAIrgB!s2K0XmZScqM6IRyE`woHb$u3 z4C$pe$h#_cf!ZY%Ia>Xh*5^-dEaj$vP+IFJ)&owWC0k=U_r&_9B7>ehnlZ{aP-2TB zDrPnZ*b`Kn!r+$7+#KwK8X6eBzNWJSw%F8%CO6*WreGPV@~LD&!pkFd2Ny`Tzd+aF zvRv#d5r58>%pqlN6JC?ki5$qhX8Du-C~p(C*zt#^icVP4LU5)n&8ut^eVQkO)%?}~ zoX>W|+?MhADNT8o`9Ity{(k|{1He_7?d&1Z!=1TR^0f%&;p*jbA9*t6 Eza7q(kpKVy literal 0 HcmV?d00001 From 9999d07efece2cc9811fd7b62879dd12b99864ff Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:36 +0800 Subject: [PATCH 0303/1573] New translations 2.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/2.png | Bin 0 -> 323 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/2.png diff --git a/zh_CN/src/webui/src/static/img/icon/2.png b/zh_CN/src/webui/src/static/img/icon/2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a830558aa9481e5031ae0eceef75245470a46b2 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6qGD+ zjVKAuPb(=;EJ|f?Ovz75Rq)JBOiv9;O-!jQJeg_(RCK}9#WAGfRuT^f$AiR#1cAu? zb$^-Jv>4PB_!uAk<_TfaIWgzJfdgzpU+fruWiiGvH!hgR!pzTP=*aB2Krq8NZaPzK zQG@i^ zS?a7&z>vhM^N2}BJtxMHomGCpCwULU2{Yy>G5Cb>?NI8P<8e?raES{Sv!S4?*AfE( zVGt)!@F<5)f^fr^nhc8oF24-{icS+6l};Qmb$OPUbU?U)ftlgoa+7J7FGn2(`i;TU L)z4*}Q$iB}&#+=l literal 0 HcmV?d00001 From e116f2c12ba611a31bc71ba8506a25ad3cec432c Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:37 +0800 Subject: [PATCH 0304/1573] New translations 3.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/3.png | Bin 0 -> 324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/3.png diff --git a/zh_CN/src/webui/src/static/img/icon/3.png b/zh_CN/src/webui/src/static/img/icon/3.png new file mode 100644 index 0000000000000000000000000000000000000000..9a70d1622df8688bc3b388a3a8ad9645c9f46a47 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6qGD+ zjVKAuPb(=;EJ|f?Ovz75Rq)JBOiv9;O-!jQJeg_(RCLkP#WAGfRuTsX#|MT-%>V!Y zPhY^6mXwe%fg!1yO^Z>DO^bOE4-ohqP*P(!q$15>nqw#C%qtm(S&}*O;;U^amy}uOyKS!xKi#3S|sYe;AiH26!?nov~?H zGOtM7sX3W3l2iJ{UbdWkGAw!3xT8Ubc_EuZHLplmo5QZg6y}9(Z`m)gX0*jA zXzM%2Uha^)A+pptX^-0lhX9?Rg Date: Tue, 8 Jan 2019 09:49:38 +0800 Subject: [PATCH 0305/1573] New translations 11.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/11.png | Bin 0 -> 1039 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/11.png diff --git a/zh_CN/src/webui/src/static/img/icon/11.png b/zh_CN/src/webui/src/static/img/icon/11.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2da0c7649bcc2ac53fc6c0ac8d6537e02edc07 GIT binary patch literal 1039 zcmV+q1n~QbP)3900009a7bBm001r{ z001r{0eGc9b^rhX8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?1Dr`j zK~#9!>{{V*voH)L9RJA%VS}(+{kWNs#0o{OXkWP@#>WQAJ zn%Kq(p*`!)m*QgM=O;bOhSBkO^t#w`xh%!cwC(>zQH&JrQ}MGoam!rvQFa-d@BKmh zlb`~NwuvZXavh8EVA0>4U01z>68>JX7_pk&uJPky%7JpA94H6MfpVZ6CHSXWB^-hQbsKB&0JgSkR4^jIou7Ns6ut3I{-sj`sqPE=wMQPf1nCuCKyWenKpCfk7W{ zq-rH5Yjzb-_+a{i;LYMdlE+edEvBqlB5c8F?=z{I+DQDU%c~smK$uy2ZvH3+mKZQR zV~a3=s_{1@DjFGx&X)xp0F9Y@eCW7~XtzMMn`k~NM7K=)aKF@4!UZ4zQy2hhY|};J zeM6Su0r#vrYEvs+Fg7gMTNqBu}s4epCDb~rm*7${{|^c&;7O$k{W zqgSQcpfDy1%XRGz*CkcV!n2;}WQlh1CESm@!9P)6G~4cRwsjKS1K#&Ys&7mrUW+No zoAj-Ca4M1M2n&^K*kbHVr5PEkyGXneluhSn*a37}4}DFyqk)_B0SH}@XYuzs5+5jL z3W9UR0yb|^!f!6AnORV)S|$r(>6N8tGaIHdMdE2=udKu^Y?UmFpQ^HWUm@X?iRW{E z7GQDyp*$||HCdA7cfi`5l>CCRRWpg7por+l6iPVF1TyTHZx>YYNDoqK)`#gAE-5k= zl7pID7KcGgewVO?GwU$H85a`Dwy7(_;E|mtw)IbR+|M`*@5@km-&GRtOJsJ%w&=Mx zEK5|P@hzi}tUdE9D&DDhh1BboR*7-$elUdz<4`2rl&$OsQ<&dXMDakvW3G6T-7H-& z^K-f?dX2}@vq~q)_6hQn5-zbAnQcmRW;Uj*j3w;QopaKh#RoD8H_71)W}Y*fsMfj; z5)aQ<2NDU_&F^yDwl`L4GTWHy4ab&U*D{G`S^%fJX@Fa2D&aeWHRF&bdt#18=~NW<0!QD;L*jWjlz+)b;|VzJkV#SPuBc;-jMgUB?%!+dlzpz+1~y#@?@9hCkTU;vqOo%~h~Y%2f&002ov JPDHLkV1idO;mrU5 literal 0 HcmV?d00001 From 5a4866972a8013384cf143ddc5cc8df7c6eca761 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:39 +0800 Subject: [PATCH 0306/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/README.md | 40 +++++++++++------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/zh_CN/examples/trials/ga_squad/README.md b/zh_CN/examples/trials/ga_squad/README.md index 9bf0859cd3..dc82823636 100644 --- a/zh_CN/examples/trials/ga_squad/README.md +++ b/zh_CN/examples/trials/ga_squad/README.md @@ -34,19 +34,17 @@ ### 手动下载 -1. 在 https://rajpurkar.github.io/SQuAD-explorer/ 下载 "dev-v1.1.json" 和 "train-v1.1.json"。 - - ```bash +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. 在 https://nlp.stanford.edu/projects/glove/ 下载 "glove.840B.300d.txt"。 - ```bash + +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 - ``` + ### 更新配置 @@ -57,9 +55,9 @@ trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 1 - #可选项: local, remote + #choice: local, remote trainingServicePlatform: local - #可选项: true, false + #choice: true, false useAnnotation: false tuner: codeDir: ~/nni/examples/tuners/ga_customer_tuner @@ -95,11 +93,11 @@ trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 - #可选项: local, remote, pai + #choice: local, remote, pai trainingServicePlatform: pai - #可选项: true, false + #choice: true, false useAnnotation: false - # nni_manager 的 ip + #Your nni_manager ip nniManagerIp: 10.10.10.10 tuner: codeDir: ../../tuners/ga_customer_tuner @@ -113,18 +111,18 @@ gpuNum: 0 cpuNum: 1 memoryMB: 32869 - #在 OpenPAI 上运行 NNI 任务的 Docker 映像 + #The docker image to run nni job on pai image: msranni/nni:latest - #在 OpenPAI 的 hdfs 目录上存储数据的目录,如:'hdfs://host:port/directory' + #The hdfs directory to store data on pai, format 'hdfs://host:port/directory' dataDir: hdfs://10.10.10.10:9000/username/nni - #在 OpenPAI 的 hdfs 目录上存储输出的目录,如:'hdfs://host:port/directory' + #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' outputDir: hdfs://10.10.10.10:9000/username/nni paiConfig: - #登录 OpenPAI 的用户名 + #The username to login pai userName: username - #登录 OpenPAI 的密码 + #The password to login pai passWord: password - # OpenPAI 的 RESTful 服务器地址 + #The host of restful server of pai host: 10.10.10.10 @@ -187,7 +185,7 @@ # ...... elif graph.layers[topo_i].graph_type == LayerType.attention.value: # ...... - # 处理更多层 + # More layers to handle 正如我们看到的,这个函数实际上是个编译器。它将内部模型的 DAG 配置`图`(在`模型配置格式`章节介绍)转换为 Tensorflow 的计算图。 @@ -210,7 +208,7 @@ # ...... 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: From c5a6011121ca4634a29167db4ae7950665cd1b21 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:40 +0800 Subject: [PATCH 0307/1573] New translations ga_squad.png (Chinese Simplified) --- zh_CN/examples/trials/ga_squad/ga_squad.png | Bin 0 -> 30340 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/examples/trials/ga_squad/ga_squad.png diff --git a/zh_CN/examples/trials/ga_squad/ga_squad.png b/zh_CN/examples/trials/ga_squad/ga_squad.png new file mode 100644 index 0000000000000000000000000000000000000000..4c82cd4654b935778bb74da6e4d051fae67eaf38 GIT binary patch literal 30340 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 Date: Tue, 8 Jan 2019 09:49:42 +0800 Subject: [PATCH 0308/1573] New translations README.md (Chinese Simplified) --- zh_CN/examples/trials/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh_CN/examples/trials/README.md b/zh_CN/examples/trials/README.md index 5aa6c7c671..ede4b07228 100644 --- a/zh_CN/examples/trials/README.md +++ b/zh_CN/examples/trials/README.md @@ -6,7 +6,7 @@ **1) 写好原始的训练代码**。 -尝试的代码可以是任何能在本机运行的机器学习代码。 这里使用 `mnist-kraas. py` 作为样例: +Trial's code could be any machine learning code that could run in local. Here we use ```mnist-keras.py``` as example: ```python import argparse @@ -86,7 +86,7 @@ if __name__ == '__main__': **2) 从调参器获取配置** -导入 `NNI` 并用 `nni.get_next_parameter()` 来接收参数。 注意代码中的 **10**, **24** 和 **25** 行。 +User import ```nni``` and use ```nni.get_next_parameter()``` to receive configure. Please noted **10**, **24** and **25** line in the following code. ```python import argparse @@ -119,7 +119,7 @@ if __name__ == '__main__': **3) 发送中间结果** -用 `nni.report_intermediate_result` 将中间结果发送给评估器。 注意第 **5** 行。 +Use ```nni.report_intermediate_result``` to send intermediate result to Assessor. Please noted **5** line in the following code. ```python ... @@ -142,7 +142,7 @@ def train(args, params): **4) 发送最终结果** -用 `nni.report_final_result` 将最终结果发送给调参器。 注意第 **15** 行。 +Use ```nni.report_final_result``` to send final result to Trial. Please noted **15** line in the following code. ```python ... From ecd5fa43bd837013af9817ed5488db4746cfd021 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:43 +0800 Subject: [PATCH 0309/1573] New translations 10.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/10.png | Bin 0 -> 2634 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/10.png diff --git a/zh_CN/src/webui/src/static/img/icon/10.png b/zh_CN/src/webui/src/static/img/icon/10.png new file mode 100644 index 0000000000000000000000000000000000000000..73d482d77d398da327d263107e29b73508c7bbec GIT binary patch literal 2634 zcmV-Q3bpl#P)|9N397Pr`1`}c@&Nv}peiR&jA|Zj~LE7uCXAis5YJrR|NSrbt_Ou6_BXD4R z;qQPZ7r1T4+Lcz?J=l>z%Vm{`I3mOtas*|Jl@Nmy&*TR?kX=(R`O5Rnb5+m8?)J1L zmsDy`cTIQKSFgVJ-d8ogYjt(iq@j$Dj~DHsVCzwJ>6EQA)6>%xvkl5!y#~|*IV6DD zI@Y1-83Eh^+t>j#8qBJ#qd3*H_5Zf+$LA$mGqz^&dDhl^nnBI<`1vIQ^D=tPD7#%$-0OJEOc^p$?x z|2jD_caKMKt%=WB(9ZU=Pz$DT*0I3lzuNi$EKg6$Fb9j4CH?>DS*31?zoLmPL zj46td@^W09nmC{y0Yr1-6k^aCI?Wc^Kpff)jl3<90u4eIR-NO4K--h5-6`9qka|Gj zd@2BQnY?*_!1=HzuGmh_+`+S+vxk4!x{Ek@+;XyY->{ z+0=P?yr^)~AITz}<5@)=fD@9bSmXE)VC77^2I}M2yw6b~Br9RSw7x1?l+Z`Pw2RuV zd}HfhIMeDWpybJq05lHRU3hXrI@8Va1*Uf;0Bjqms%?{IfOC2)$glIH>h2<1Xy9QZ9K3t_VGD|PHOrE?C0eNkMT(iA=#(dV;}-S(-`cb$=!|J`O%J2hY$)X~7#F5;aA=-dTcA6CHa zQebLb;5E#wqupu(UO+v;xQih(u()BG%1zbT280X~;=2uoV5hrmehSt!5y-q82qnC0 zC1PNHv~`d&s(H{yhT`cq8VUhgCI0eFo2xhus*K|oJWxFB8}Pi-@6fz4%wJ)Wo7FC4WwpshzVygl^*jvRFt6qncGXhXY5Po6G&le zrX?~n|7}`|Q_hWf)ftpHuXE`0kea=&?W8XbEqc)Zr@6g!D|zwbA|_CrxrB%8Hmx=F z*u`6TUVUG&hL2?MHY>r&_hAIbDd1nC+4-iu{tTX#BMkaYYdvft69}RWrmlgtz0NNT zW#&D6yc@u-sOw3Tikgz*bbg3=;L31bi_FV7Z&V*A@zE_BW}`ACXKkVN?@ypN-o)n{ zIDV0oK7c{}4j?+J$t6H7hMbP{>)(OqGaE@gLn@3oroFIG1CEjMal+E-l4&hHN4;Mh z#W~n)x7cJlyf|}eh-)*L9>Zp9N;OV(D8g8l34<3qV6ayD0&(0?0(%Vl;aW;&KfjKk zmpSwj#cN3xtvcl-GV$>?Ja+-#aS1{l8BQaRnYsA%5IH0t1{0>W0^xMkIbYbsK{Usp zO@u9D6fU`J=nw!EC-GnV(B~7>S*w8@e{CtbgBIZWQgV)lfE@9(T_mR~6!19)Crjdw zGo;B-U_V3Y)?z@vbYRaDdCMZ$EW(PU0Bv-b@?XOu2kD&KKef-aZ(hbz z9E7a5o4|A!%qeV~SmSp}!V|EvNjg1@mtyDhFI(UBC^p4}47Afi+5%0#J+Qu}veE?@ z!95BTE>lQkjs!3mQEk_DRd*xb4WT1W0IrjCRY#i(c=;>fQ|ZLvIJa&?b^0Gt{u_V9|Lgh_k7MS)zr%AnPdXa$xOG4LQl6W=JFmLVLbJ>f zn4AUvJ}wU36rdfz)N4&Yg0n&ymkwio2H+g;O(-x60F$5NQ`@65oY*#sZEDJQ0CNhP zuQ({aAH2GRaAk=c#1#O(2tbAjOj)P;%+Q*?JR9lpv?p`w$6&6I^O;9rKkvzKVogFe zWT6PMX98kE+g?kgp(RY`Y`|(R6S%HihZw;Nfq78FOhgJQbn?Ery}dDtKDyp`ktm=M z>*VXe3}hR!Rp(h-pTeaZ5OKvyS0M-P^<*&yJosQY3KCI5K}mk{?v2lI_2n~Y5&CrZ&Z*tv`9KZR*4@M(Y|I# Date: Tue, 8 Jan 2019 09:49:45 +0800 Subject: [PATCH 0310/1573] New translations README.md (Chinese Simplified) --- zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md index f54f9cd3bc..9f98bc8a3a 100644 --- a/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md +++ b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md @@ -7,7 +7,7 @@ Curve Fitting 评估器是一个 LPA (learning, predicting, assessing,即学 此算法中,使用了 12 条曲线来拟合学习曲线,从[参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf)中选择了大量的参数曲线模型。 学习曲线的形状与先验知识是一致的:都是典型的递增的、饱和的函数。

-drawing +drawing

We combine all learning curve models into a single, more powerful model. This combined model is given by a weighted linear combination: From d5a26d5455fc9c6acea76cbd98f1370ddd541238 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:47 +0800 Subject: [PATCH 0311/1573] New translations icon.png (Chinese Simplified) --- zh_CN/src/webui/public/icon.png | Bin 0 -> 30656 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/public/icon.png diff --git a/zh_CN/src/webui/public/icon.png b/zh_CN/src/webui/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..98c8666eb76b766851c6c456dc845644efa8ffb3 GIT binary patch literal 30656 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 literal 0 HcmV?d00001 From 07758731b937afbb686f9b0d022f0f85aea15c0f Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:49:48 +0800 Subject: [PATCH 0312/1573] New translations 1.png (Chinese Simplified) --- zh_CN/src/webui/src/static/img/icon/1.png | Bin 0 -> 626 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/webui/src/static/img/icon/1.png diff --git a/zh_CN/src/webui/src/static/img/icon/1.png b/zh_CN/src/webui/src/static/img/icon/1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb16591ccf0bd0f96a4b28d5c7139bf2848f3330 GIT binary patch literal 626 zcmV-&0*(ENP)mQ7z=-~$F=gsFgqp4c61 z?K|Mw1DaxbhD~6Pup0mbV)(u#=n__8@BCjGGgAS5hef`OurFpswQHX%W7*vHfy#hy zFI2#0oc&ZV+pv$j4tT-J(q1Y6oMGB9>a zWMZX}nKtj9<;Ug#?edzxQ&v(jFchs*!w(Y2MhYD(tPceEP8tBmk^D&M3pfiC)EJs_ z9u^yEW_0Juy~?dNff-L;a;b7Ct>U3GO0zcFmN6Q5^cgW@0pF7IiYid8UnnwQ&I>Ye zfUD?R`d2Jpt2=f<&AV|D;8!V$3g`}zPXmBCAEAli(Uqw-y%FFyW|ccO=2Sq&j1;)- z0yA5oZifU;dO=j=2lCdK0J&ug*b}Lch9#B;R;$0Iy4qf8`%V;Qqhwiju5@O6DHYP% z8`*t?A_gryd`}$zC`!xP`3QCR8e$rnr7r}1(_lrX{Qv*} M07*qoM6N<$f^Yi?6#xJL literal 0 HcmV?d00001 From 02f570c27da54f325c2b2e44c251d07692ef6a7a Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:50:45 +0800 Subject: [PATCH 0313/1573] New translations f_comb.gif (Chinese Simplified) --- .../pynni/nni/curvefitting_assessor/f_comb.gif | Bin 0 -> 1201 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/sdk/pynni/nni/curvefitting_assessor/f_comb.gif diff --git a/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/f_comb.gif b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/f_comb.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2da808855ad551f60988bc360b1834410b768b6 GIT binary patch literal 1201 zcmV;i1Wx-$Nk%w1Vb}mT0J8u9|Ns90008dp?q+6Yh=_M)j$~<` zXj(lELr4NMJZf#4SWo$a1P)*>`@I|lKtggW@5E$C9cpO?J z1b{=5%xuKQkvVXcI#aFZ44VGnuq zFep3*<#KnQh)aQd1qHFuV~D5${tj0GWd5YVV)hi{Kx#_JcOVA#Ih5aD2~Ge`G7D-| zjsoSKK!9H{RDi%&mszlm1`pam%VHc{^uTJ!NsysK8NN6{hdh8tTv`$|H-U`nwPfRl z1p%<3T}#+Ci!2LRQNRF6Qn1-d_=MOJiWWTB9CTPphmv?3d^G@9BfMcY|^Wa48?YTq@!2uNLNOK}cvQV2`9QG@yWzc@&U` zt)?olfEUSX$xsLX&htw)67PWDc_~0lW&=SKY>&tcfqXFs8KX?HJ{K{tK$$#jSWLbv zZ)2Q7#|%*J1&9$hAT%T9@Bjk{-ea8wRVcxv9y8z7bT_Z%h%sE-Jq<%P2xQxYG#g|* zF#;c1ql2wgXArapUH8iY*xHO>b{~ymQCAstyOFmrMm+if3xV-1xCpo{tppWhjugt^ zjC)`JDv(DWxt5Jr-qLMim}jo}=HyuJ`RAaAF8b)Cmu@;M?s@P)#;4zM>IO6O*g7t< zU(n#}gUd;?2DjtRx2N%RgQatE*6#Zz(f)1x@tN?e`tr PZ~z2=to`_vL;wIgm{ Date: Tue, 8 Jan 2019 09:50:46 +0800 Subject: [PATCH 0314/1573] New translations expression_xi.gif (Chinese Simplified) --- .../nni/curvefitting_assessor/expression_xi.gif | Bin 0 -> 804 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/src/sdk/pynni/nni/curvefitting_assessor/expression_xi.gif diff --git a/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/expression_xi.gif b/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/expression_xi.gif new file mode 100644 index 0000000000000000000000000000000000000000..ff8d217c967a087be74255601fb01baf5bf7a4fb GIT binary patch literal 804 zcmV+<1Ka#ZNk%w1Vcq~30J8u9|Ns90008dp?z+0Vs;a8o+}zB}%pxKpc6N3|L_}t0 zW{8N0n3$MUR8%rDG7u0DA^8LW00000EC2ui0Nwx?000F35XecZy*TU5yZ>M)jw7)k z3aMU&vA%FD&!n(O4I&8x?G+85a7Zk61`Y`$DM1j7mxKUHty*7&W@;j}@P-WCb$nr* zTx5V5fi51hlR=OoAPflb**nb#ES?2SV}AgFMh!g`dlCi*Q$k36X>t<*WRwz?L<=r? zO=18Cpgsztl2r$21)5i>601Z61Of#&6ax=C0f|BfPZI{e6ewfC7Q`fxO1W3cYRoGP z2LaRp53ALt0s)T+!af0Q0HzWIf>q=I<|+ve2=52yRPFBw@h=Su0s;x?7Y~UBAh`3$ zf`SGJ6Dst#El&Ynp0*T70OjF?h_4zvuqEJu0#E)G9<+HNW+D}l6G&#(x^uMGKKF=na4k4hEndym+=q+zE5JJbBBZ05kxlJa8q%;h@69{&r5716Yh# zx=emJi486 zw{8lhYhee)$#_|sBBT=S`8Msv;$D4&A()t8@r3sOM9fiO7` zV0Z)$h(H+UZE%@=2?Su15DD1w!*k`V5Z(q26t%rYOZt!K8W8wxvo0_4?$N_7zDdz|d{6_!+R;{3blo=2TqY#E3szRb0Fe>8}{G1}` iq*f?^pim}Ks_CXMl$Hi3oQ5hY2#<|w>Zzwj002Af_CJCE literal 0 HcmV?d00001 From fb80ca4ca2d1717a8a88b8720c8254ef59c6bde5 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:50:56 +0800 Subject: [PATCH 0315/1573] New translations nni_webui_joblist.jpg (Chinese Simplified) --- zh_CN/docs/img/nni_webui_joblist.jpg | Bin 0 -> 133522 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/nni_webui_joblist.jpg diff --git a/zh_CN/docs/img/nni_webui_joblist.jpg b/zh_CN/docs/img/nni_webui_joblist.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7789d7f8d415084265ce396ca47560a7a75b986f GIT binary patch literal 133522 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 literal 0 HcmV?d00001 From f285cf3fca2c5407d390832797bb2dac8cef0b6d Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:51:03 +0800 Subject: [PATCH 0316/1573] New translations WebUI.md (Chinese Simplified) --- zh_CN/docs/WebUI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/WebUI.md b/zh_CN/docs/WebUI.md index 087d64b5dc..deaa002057 100644 --- a/zh_CN/docs/WebUI.md +++ b/zh_CN/docs/WebUI.md @@ -7,7 +7,7 @@ * 查看实验的配置和搜索空间内容。 * 支持下载实验结果。 -![](../../docs/img/over1.png) +![](./img/over1.png) * 查看最好结果的尝试。 From e7caa6297817d7a08b4f45e21b1e9036eb2fd5cb Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:51:04 +0800 Subject: [PATCH 0317/1573] New translations StartExperiment.md (Chinese Simplified) --- zh_CN/docs/StartExperiment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh_CN/docs/StartExperiment.md b/zh_CN/docs/StartExperiment.md index e5cf07b87f..5ea6dce817 100644 --- a/zh_CN/docs/StartExperiment.md +++ b/zh_CN/docs/StartExperiment.md @@ -2,7 +2,7 @@ ## 1. 简介 -NNI 实验的启动分为几步,流程如下。 +NNI 实验的启动分为几步,流程如下。 ## 2. 详细说明 From cefa7b8c7ff461948438f126bd380f877baa8851 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:51:08 +0800 Subject: [PATCH 0318/1573] New translations nni_trial_hdfs_output.jpg (Chinese Simplified) --- zh_CN/docs/img/nni_trial_hdfs_output.jpg | Bin 0 -> 74687 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/nni_trial_hdfs_output.jpg diff --git a/zh_CN/docs/img/nni_trial_hdfs_output.jpg b/zh_CN/docs/img/nni_trial_hdfs_output.jpg new file mode 100644 index 0000000000000000000000000000000000000000..decbf3bde276af98e279e3cdd4764228a2474c38 GIT binary patch literal 74687 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�|Co`FTj{nm8_|JP59>xZP(qilCRGHp~%27&v z^jeQqSh{mE5-tUE#_MGW+nv$kh^FbD`}uZrj)}{~{70kvkMu_6`aees%_cp&@A)kq zffwti;hLNqDUu$BB}c)-?oW!4Q`ny~aLyD%IkW9~VPdH{l?A{o19L1LGX=k;!f7^o zASmg1nG+`31b6VKb=tT9)$SL?ngT8bN0>c9#F`o%jlj(dY9Zg zp-Q2w@-G!|$9z0!xy)A`N`4q*kVUq3iG7;wP@tALiN^dxULShP6!$@k+PssKY?3(7+-)0YoYt(s@!qImVYSJy_tB z_pn!PM5bn3T_ouH*VRCRGY^B2~bJM*1&Kn@z{0~k<`XlN;(0)1Ls!;=) zT1%2vP32)CTIPbo7KX1pp4PR#4G@x~Fa2R#l1#Hm3x|y^^k>W4F~W>RFVkhS$+e)yi_*!ahUz^u zmc=Fns^3^U0ez8ZM15p>yHQXiR4n;wN!`usouzG(BzsQ_zV}vG|5QtvxC859pf~6+ z_>b2Q;L{Cz3+rjY_$jqG0YFeb|Dg@X`D1YR0iyH=PgG4du-CM6oAoQ%ZtW-Fe`j^H z4&ckI-cd}r-wXT|aGOR1Wls^omvMZ&U0hu69WTZ2>e_sEVaSo|Fc0D*e~h+lW(4|O z#YpSJuNBxH2HnrYDK)#zHc4X8rgVX6C+Nnv>5?hBU??X`pqHO7{}1oNZT$d|ST7hD zvE7By*Xn${d&!8C^bau7O6KSDugB$B(E2YY_`a#*FXn`Tsmmlb`?ufcvwWX+F;Y4j z{Uor~vPpSf@Det-4}1&Nzrid1N}%EYn!jsvB;AW>j4J!SJ?PAZd!j497fybG{nODX z#EQV)8NfzPYp$s92Xk5cY(Reoa4WXa+e zsbj(2pk$JyreyZAM?ncd&s8^){>D*E2WG~h9pP^rIu#6GDIVfj_>#J0KUlj)! zbp+i#%TE^Fsv8Sh?)FNifcBHFUEi#l--d#cHg@JuYjVfw>at};<*X|hXi6Ew;D9O$ zL+3=@zZ=H+e;XAwwS3jD$h~^Ul~n5eKiC(4V?$+q$IocC9mVoG#Gu2URZhz|c_Uzq zaL`wH8Wsn%dEsQ-BPM~+`qF%@5D%1ntqiLMW+_=-x{iJwiUn|-oqb1uRd zL{}0Z%34#TueZb7L9M_y#a#ZNaiA_)*WZ|EURm{OPYFQk4fBqB3v_bqA1uKGVL$dy z^y6~7ceXf8-$KQLTO$hrhbjJwv*WW0@j1DEjw{aiXtt3HaqkAy@w+bmbksIulXlyj z`M={)7YJSX`qw(^m|E@Q_a1>L8si(Olz*^=)k4Sw>aqiLl|5RHvJ3eiv$ zLAgkHVX@rElbXrBcbSdh19d^hJ0TBZZhsVNjOmVrj?r}REZ;G$+Lx1XFkaK_#(ngCe?jm) zeL3_s@_>E|PT$Cw6;ioFe#@RtpLT6bTXYd+%=v{D|3+)rP6UCqD{en-Rcck4_-J!a z!D};bRC*_Xn`%x$^g#vjzl<;LRO@-&INNL`(Rxmu_kiC2{HZfhU`$+>l_?ZF!B*Qm z3C0K|vJj4+YG*F)u+A|$b{294s997Ug+R0{D$C+Qw|4Vd`A=EBO}zkXBCHzT=*}Eq zsRkHCd!&^qxq>L~qew1gYk!^U{n{I|;Lpu7n!7Hzl-7xy30HlgRTL*2GEEYBRDn&y79ec?bIxl1YiAs8-LA{SAvy zZyh)mgF7W-g>)i!Fq#f`TuJav)jDF7=Jox$R#O$l7-~NA34GsK=<8r4_nRMp=35|; z$VxR$JvkcW^jk1;&B-ix7?*HKNxx6r)b^EEg#pRw1Xh9KF+QNRP%evbJn;LXjK*3V5QdkEO~ zoLE&Z$qnS8y-YNW+PAz(%boZil0_61<;ajd9y-R~v$gA*4VB&nGUxq&!3O?U%#>QS zuOH^y7K!upu)T*h65+re%BPwZ00p~Vvw3VS@GO3)JfY*ts0FquPJj<0`}DhAC-(+M z4N;`hm2N~_gHxzUY`Z&N+?Fa?dl;fo9wlP`%g#kE$wl;fGQU1<7fc@@F{Q|;)~o_b zy!Uw9xr2Vaqyxn;Wfi2IWB+>2ls($Y9o0>FY@a|B=)Y{Jz{AAlDDA-QvqImSIBb#*`S*U59zIpuy&CE~vuezE%Ue(4Pksy1igyhnu3^Usz*gir-U zT9gt4*4%p`<0QBjNLCXpB^u(L+YWu_{_}g!sdU+k_l@iS+ z0FZRb-iDE2l#pswS&3RdYoZ{P125w4*kOu>yPR)#+$jLC3vBmT$9Qxjx$@QPLEeXz zTm40K_v<#|Pv~}mC&Hnx`y1!yqn1lKqKmWUfa_4$YQc8P89uNDR%tWycfhXc|JogB zS=zcxe>bY+LW#yAJCKj&IMy2NvdTNC#luqvTpm>L$V+tK-&bW;mJY+j6-STNo9u0t z@IFU>Vjmr0n$j}cCe1gUGdA4X{;?zh!taY|k07y3z+=aeyio*e9~`@{ZYV&zq8VTz zBs2ZI;HSnN4n!P@D)ff3&@Cpa?w5(=Y{eP1d*nTI$W)hA$C$TeiGIZ}DT5Ua~f@cJ$`E4{m9QkoTgIU&CT1mCEd zKKH+H3AoGe#fm*uC3)-_OTMh~+=JTbJIibFc6q98pJ!%wr)0pi#mk#ZvVAVubyE++ z#3_|yL5u+rUOYi@y=495_eYZSoSKRKY53ns7VVB9p?jP^ZHqqxy~!csqDXcq25XrY z)w;63l6=O%Wdt)zUj;UBWZs$)a(D_zyQ-E7`@$S!dj|Z3Pt?Q?>%<<_wXtuO4;ahY ziEARj!!KQQu>2Tl`FGQeZ<(iZrnTm`Ud^jy*`R{`_Y!JDF?qufT>h!#h>}@fxv$@Esp`rY`5H*qyt&l0z0q!;? zsWi8=$zD?^8b@&4?y1Yz<(2akyoW0|rIL_GmBHarrrV^O$a3 zwuK%yOO(-)@F7ca0VMMUN<7G;L4(+=vO1w%Z$jj(xw@{}Q-5Z(=+{pxcRf8a!GxP) zz^v!my@G)bWeKlgAXz_;1*AxNaLrWn<1vg%zQbMtd~SO^} zjdlFAkiGF?y#;7BsA82w{E_5JDwwTZPR>+rpBaS2FFKchD^{(&<#WUM-Pe`thgJ!O zjnju+PNGO-Wm8eVPYJh{s=l}AjW9>xj(=+&KJLsB7 zs!pfmu1bNCFmu6Z@B8!v%8%rInrlz!96oCX`+(0wtA;cU#!iMboLHzF9l=xjk$N0j zWNRy*H3{l3x$wT$9)_lLMf%8mt?V9S)Ht%}uU~%xx!Y>m=z-y-YHK0qI9%*bWlClZ zS}~^KzAkhkaNNhie_gg#ny~t&!pVPyY1M~@8U{+aR@k|QwkQtr$ z`+_+VVsF3UTeglltDEl`;(T|QQEUPsHVW66s#KROf|XY#9&^?uEoi(m)wRC$;d$TZ zIxRzI`U1zu@A{7_S_+>m44)=!JP@oC7EaRmVTn|N*QjOm_PG;vzaYPT5Cxu_8X_l6ilt% za*7VWye9ILN1f)urd@vHWW<)}@=1P-g{$Veiu}gmB@4b4279G~(6{@ST>qa7%l|jL z=8kQT>(+W^c;{4)p8E3tFm`@m5~wE{o75VfvXa_fe%x-LRWH1i^`?#!r#wwalV!c0 zh$oXHnEAXkbYjIIz^Q_@AhLa zXzRDH`{(|BbNgr3z0Z9cVboA3AGTL1EMr#CLy zx}nQVdqRQNipL6tZ?qRIn!Gm1>zx04sil5;ue9IcThq1C6rU{qII$vSCq%pp9ijmc@K2>B!*wp;Trny;8XBW%V>B;}mJFjM z;b=)XS`yN_BwV)a(c%iOyNBjSe zecr$EMf zjjUJZ%Cge5DbG1MUoK|mVk7sd6K4kV`MTfRKI7@T)xZ9=->_5ps5bYZEZg_UtLyAe zF1zWLHm|nlw@9gVh)_Lal*2oQzNsIdAA9m4W?H>i{IO%_;$=LQJReRjIJkb_;cpo= zi&OjOI6muc);mAlu5j|xvspE6{|@{PKQjOAdi8%|-)|lNqj-Dc-<3~)8vgD6ZEbHp z{n^iX>C-=@pZi>K*H3%q(em&=TYzh)cUKzbz1hFs{=>`tvn~g}=F)!hUZ_6t@9LxT zZ{2hMqc8vV*}nrX|E~R3Z&`Qpo6n#7sh^6U<@~+=r>1iLr%NkeU8=Cl4L)udaXRb1 zc=$1ujE+zBM@|~+$bWoeyeC@Zv(4T4YBq2Gqn-s$Dbi6ryx~6~P z#`VCF(`ns6qWq82{9z&)U!8m0dL-P;Jjyi=SD@i`-kIiRkLon zP0w6zw(#Lwr*9wME)2=;y!YwGmPrCeXKMZY7-Sii^H)#%75AUP+I`mRlY6b+{PW76 zKI^XTkJD4vhwL@C;Ub46iSbH`3?p_+z`gUB>OKNV#~B{_dFyPW3O_Y_l(Jx$Ad6 za%0zb|J_Z$&Lz%xr@JIlxo}R3fr^~tOZS`p`}V7EzqeKT$E@i3@c#_@6VuQ)w~z7{ zFd>J*hCR9ue%o{G+j6bwyyDfZlBJe^z6EcKWNPDXFxanfz|yvI?JbR)_n-c>zsP*u z{WWl@)zlo|$%^K0<
    ?wGlJ>dbDjvSWUpwhas=3=9UWQRp4pQ9k@$*Z(&GzSvM1 literal 0 HcmV?d00001 From 24243b51a2a84acaecbd1e60be8fe5022e666285 Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:51:09 +0800 Subject: [PATCH 0319/1573] New translations nni_pai_joblist.jpg (Chinese Simplified) --- zh_CN/docs/img/nni_pai_joblist.jpg | Bin 0 -> 85854 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/nni_pai_joblist.jpg diff --git a/zh_CN/docs/img/nni_pai_joblist.jpg b/zh_CN/docs/img/nni_pai_joblist.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa7564cb2a7c99f700a01c74d9e7e01ded023d28 GIT binary patch literal 85854 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 P(ERvc8w8pk|CszQc)~%| literal 0 HcmV?d00001 From 0f6228370f6cbb713efc4ca03e71fa8f45c6315e Mon Sep 17 00:00:00 2001 From: Chi Song Date: Tue, 8 Jan 2019 09:51:10 +0800 Subject: [PATCH 0320/1573] New translations experiment_process.jpg (Chinese Simplified) --- zh_CN/docs/img/experiment_process.jpg | Bin 0 -> 941089 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 zh_CN/docs/img/experiment_process.jpg diff --git a/zh_CN/docs/img/experiment_process.jpg b/zh_CN/docs/img/experiment_process.jpg new file mode 100644 index 0000000000000000000000000000000000000000..991f7f4978887b71dca7d3aed19257666f8fe8a9 GIT binary patch literal 941089 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
    t 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

    Va57{{i@I{ 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