Build sim from data for use in reinforcement learning and bonsai platform for machine teaching.
Перейти к файлу
sandip.kulkarni d13906d598 commented and simplified predict functions and plots 2021-05-05 21:31:19 -07:00
.github UPDATE: hopefully fixed workflows 2021-04-08 11:10:08 -07:00
.tours UPDATE: moab example 2021-01-19 12:46:58 -08:00
conf data yaml file added 2021-04-08 14:12:03 -07:00
csv_data ADD: bring back from the dead the off_names.csv 2021-03-30 16:10:30 -07:00
eda update: titles for distplots 2021-03-11 09:57:58 -08:00
img Adding jupyter notebook for presales qualification of data driven sim creation. It is using the nbgrader package to grade its feasibility with the Validate button. The release version is intended for usage for the 'students'. Major change with datadrivenmodel is the addition of selecting the lag for iterations between state transitions from the config 2020-11-04 01:29:34 -08:00
release/presales_evaluation changing verbage from sample to test in GMM 2020-12-08 10:55:26 -08:00
source/presales_evaluation changing verbage from sample to test in GMM 2020-12-08 10:55:26 -08:00
tests UPDATE: test skip sweep 2021-04-07 11:34:36 -07:00
.dockerignore update: ddm refactor1 2020-12-15 21:45:32 +00:00
.gitignore UPDATE: don't ignore data directory 2021-04-08 16:07:11 -07:00
CODE_OF_CONDUCT.md Initial CODE_OF_CONDUCT.md commit 2020-09-08 15:20:22 -07:00
Dockerfile update: ddm refactor1 2020-12-15 21:45:32 +00:00
LICENSE.txt Adding disclaimer and updating environment.yml to not need sdk2 2020-09-16 17:03:22 -07:00
LNN_5Kepi-deltastates.ipynb commented and simplified predict functions and plots 2021-05-05 21:31:19 -07:00
LNN_reference_comparison.ipynb commented and simplified predict functions and plots 2021-05-05 21:31:19 -07:00
README.md UPDATE: evaluate and evaluate margins methods 2021-02-25 14:14:31 -08:00
SECURITY.md Initial SECURITY.md commit 2020-09-08 15:20:27 -07:00
assessment_metrics_loader.py UPDATE: notebook to use hydra config instead of yaml and rich.logging instead of manual prints 2021-03-25 20:38:25 -07:00
base.py Merge branch 'main' of github.com:microsoft/datadrivenmodel into main 2021-04-06 12:56:21 -07:00
ddm_evaluation.ipynb LNN implementation with torchdyn 2021-04-07 19:37:07 -07:00
ddm_predictor.py UPDATE: remove azure-cli dependency since resolving its msal dependency is a pain 2021-04-06 13:59:50 -07:00
ddm_test_validate.py changed to type hinting + cfg build param passing 2021-03-31 13:40:29 -07:00
ddm_trainer.py UPDATE: add diffstate to trainer + some docs; todos 2021-04-01 12:06:06 -07:00
environment.yml cleaned up notebook xgboost part 2021-04-15 15:55:58 -07:00
gboost_models.py UPDATE: using **kwargs for build params 2021-03-25 20:39:35 -07:00
keras_models.py tests and timelag -> iteration_order to prevent argument clashing 2020-12-17 18:48:51 -08:00
loaders.py refactor: loaders class now only deals with features and labels directly 2021-01-14 16:58:32 -08:00
moab_sim_100epiSelectStates.csv added ddm_test_validate.py and logger 2021-03-02 07:41:05 -08:00
modelDelState.ckpt LNN implementation with torchdyn 2021-04-07 19:37:07 -07:00
model_loader.py Bug fixes 2021-03-15 03:56:27 -07:00
pltmodels.py refactor: basetrainer class for all models, initial hyperparam tuning pipelines 2020-11-09 04:22:17 +00:00
requirements.txt UPDATE: requirements for hyperopt 2021-04-07 11:24:10 -07:00
skmodels.py :BUG:-fix: fit separate when using sklearn should only expect dir names 2021-03-25 22:10:13 -07:00
torch_models.py UPDATE: include scale data in torch models 2021-03-30 15:32:51 -07:00

README.md

Training Data-Driven or Surrogate Simulators

This repository provides a template for training data-driven simulators that can then be leveraged for training brains (reinforcement learning agents) with Project Bonsai.

⚠️ Disclaimer: This is not an official Microsoft product. This application is considered an experimental addition to Microsoft's Project Bonsai toolbox. Its primary goal is to reduce barriers of entry to use Project Bonsai's core Machine Teaching. Pull requests for fixes and small enhancements are welcome, but we expect this to be replaced by out-of-the-box features of Project Bonsai shortly.

Dependencies

This repository leverages Anaconda for Python virtual environments and all dependencies. Please install Anaconda or miniconda first and then run the following:

conda env update -f environment.yml
conda activate ddm

This will create and activate a new conda virtual environment named ddm based on the configuration in the environment.yml file.

Tests

To get an understanding of the package, you may want to look at the tests in tests, and the configuration files in conf. You can run the tests by simply:

pytest tests
# or
python -m pytest tests/

Usage

The scripts in this package expect that you have a dataset of CSVs or numpy arrays. If you are using a CSV, you should ensure that:

  • The CSV has a header with unique column names describing your inputs to the model and the outputs of the model.
  • The CSV should have a column for the episode index and another column for the iteration index.
  • The CSV should have been cleaned from any rows containing NaNs

Generating Logs from an Existing Simulator

For an example on how to generate logged datasets from a simulator using the Python SDK, take a look at the examples in the samples repository, in particular, you can use the flag --test-local True --log-iteration True to generate a CSV data that matches the schema used in this repository.

Training Your Models

The scripts in this package leverage the configuration files saved in the conf folder to load CSV files, train and save models, and interface them to the Bonsai service. There are three configuration files:

  • conf/data/$YOUR_DATA_CONFIG.yaml defines the interface to the data to train on
  • conf/model/$YOUR_MODEL_CONFIG.yaml defines the Machine Learning model's hyper-parameters
  • conf/simulator/$YOUR_SIM_CONFIG.yaml defines the simulator interface

The library comes with a default configuration set in conf/config.yaml.

python ddm_trainer.py

You can change any configuration parameter by specifying the configuration file you would like to change and its new path, i.e.,

python ddm_trainer.py data=cartpole_st_at simulator=gboost_cartpole.yaml

which will use the configuration files in conf/data/cartpole_st_at.yaml and conf/simulator/gboost_cartpole.yaml.

You can also override the parameters of the configuration file by specifying their name:

python ddm_trainer.py data.path=csv_data/cartpole_at_st.csv data.iteration_order=1
python ddm_trainer.py data.path=csv_data/cartpole_at_st.csv model=xgboost 

The script automatically saves your model to the path specified by model.saver.filename. An outputs directory is also saved with your configuration file and logs.

Building Your Simulators

The schema for your simulator resides in conf/simulator. After defining your states, actions, and configs, you can run the simulator as follows:

python ddm_predictor simulator=$YOUR_SIM_CONFIG.yaml

If you would like to test your simulator before connecting to the platform, you can use a random policy:

python ddm_predictor.py simulator=$YOUR_SIM_CONFIG.yaml simulator.policy=random

Build Simulator Package

az acr build --image <IMAGE_NAME>:<IMAGE_VERSION> --file Dockerfile --registry <ACR_REGISTRY> .

Data Evaluation

Use the release version of the jupyter notebook to assist you with qualifying your data for creation of a simulator using supervised learning. The notebook is split up into three parts. The notebook uses the nbgrader package, where the user should click the Validate button to determine if all tests have been passed. You will be responsible for loading the data, running cells to see if you successfully pass tests, and manipulating the data in Python if the notebook finds things like NaNs and outliers. It will ask for desired operating limits of the model you wish to create and compare that against what is available in your provided datasets. Asssuming you pass the tests for data relevance, your data will be exported to a single csv named approved_data.csv which is ready to be ingested by the datadrivenmodel tool.

  • Data Relevance
  • Sparsity
  • Data Distribution Confidence
jupyter notebook release/presales_evaluation/presales_evaluation.ipynb

Once you have successfuly qualified your data using the Validate button, it is recommended to export it as a PDF to share the results without requiring access to the data.

Contribute Code

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repositories using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Telemetry

The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft's privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.