From ea5df39729327b1f69025f9742cd1fb0c6ec521b Mon Sep 17 00:00:00 2001 From: Gabriel Barth-Maron Date: Mon, 1 Jun 2020 05:19:57 -0700 Subject: [PATCH] Update README.md PiperOrigin-RevId: 314113955 Change-Id: Ic4d656fec4ace428d2568148b30f559a62cd356c --- README.md | 448 +++++++++++++++++------- docs/images/multiple_tables_example.png | Bin 0 -> 57099 bytes 2 files changed, 316 insertions(+), 132 deletions(-) create mode 100644 docs/images/multiple_tables_example.png diff --git a/README.md b/README.md index 601ff98..bc9e0ce 100644 --- a/README.md +++ b/README.md @@ -1,141 +1,325 @@ # Reverb -## Overview - Reverb is an efficient and easy-to-use data storage and transport system -designed for machine learning research. Reverb is most commonly used as a -prioritized experience replay system in distributed reinforcement learning -algorithms, but the system also supports other data structure representations -such as -[FIFO](https://en.wikipedia.org/wiki/FIFO_\(computing_and_electronics\)) -and -[priority queues](https://en.wikipedia.org/wiki/Priority_queue). +designed for machine learning research. Reverb is primarily used as an +experience replay system for distributed reinforcement learning algorithms but +the system also supports multiple data structure representations such as FIFO, +LIFO, and priority queues. + +## Table of Contents + +- [Installation](#installation) +- [Quick Start](#quick-start) +- [Detailed Overview](#detailed-overview) + - [Tables](#tables) + - [Item Selection Strategies](#item-selection-strategies) + - [Rate Limiting](#rate-limiting) + - [Sharding](#sharding) + - [Checkpointing](#checkpointing) +- [Citation](#citation) ## Installation -### Install using pip -TODO(b/155492840) Explain how to install with pip. +The recommended way to install Reverb is with `pip`, but we provide docker images +that can be used to build Reverb from source. + +### Using pip + +Note: Reverb expects TensorFlow >= 2.3.0 and thus requires the +[tf-nightly](https://pypi.org/project/tf-nightly/) package until a stable 2.3 +[tensorflow](https://pypi.org/project/tensorflow/) release is available. + +```shell +$ pip install tf-nightly +$ pip install dm-reverb-nightly +``` ### Build from source -TODO(b/155494968): Explain how to build from source. - -## Key Benefits - -The key benefits of using Reverb (compared with built-in Python data structures -and other memory storage systems) are as follows: - -* Efficiency - * High performing C++ implementation - * Extremely fast sampling and update operations - * Memory-efficient storage -* Usability - * Clean Python API - * Support for both queues and replay tables - * Custom TensorFlow operations for in-graph sampling, inserting, and - updating -* Consistency - * Support for single-process and distributed settings - * Controlled throughput via rate limiters for reduced impact of external - conditions - -## The Data Model - -![](docs/animations/diagram2.svg) - -The above image demonstrates one of the key benefits of Reverb-- a -memory-efficient data model. Each timestep is only stored once on the server, -even if it is referenced by multiple items in a single table or by -multiple tables. Furthermore, the client only writes data to the server -when necessary. - -## Reverb in Practice - -![](docs/animations/diagram1.svg) - -This animation shows what the state of the server looks like at each step in the -code block. Although we are manually setting each item to have the same priority -value of 1.5, items do not need to have the same priority values (and, in -reality, will likely have differing and dynamically-calculated priority values). - - -For more examples of Reverb in practice, see [Code Examples](#code-examples). - -## Further Customizations - -Reverb can be customized according to the experiment's requirements. Common -customizations are as follows: - -* Creating multiple tables referencing the same underlying data -* Modifying `sampler` to control the strategy used to select samples -* Modifying `remover` to maintain a different set of items in full tables -* Using `RateLimiter` to maintain balance between actors and learners -* Limiting the number of times each item can be sampled using - `max_times_sampled` - -### Item Selectors - -Reverb defines several types of item selection strategies that can be used for -sampling or removing (when the table reaches maximum size) data from tables. -Below is a brief overview of the available selection strategies. - - * [Prioritized](https://arxiv.org/abs/1511.05952): sample such that the probability of sampling an item is - correlated to its specified priority value - * For more details about prioritized sampling and experience replay as - used in research, see - [Experience Replay in Research](#experience-replay-in-research) - * [MaxHeap](https://en.wikipedia.org/wiki/Heap_\(data_structure\)): sample - the item with the highest priority. If multiple items share the same - (highest) priority, select the most recently modified item - * [Uniform](https://en.wikipedia.org/wiki/Uniform_distribution): sample - from all items with equal probability, thus ignoring priority - * [Lifo](https://en.wikipedia.org/wiki/LIFO): sample the newest item - * [Fifo](https://en.wikipedia.org/wiki/FIFO_\(computing_and_electronics\)): - remove the oldest item - * [Lifo](https://en.wikipedia.org/wiki/LIFO): remove the newest item - * [MinHeap](https://en.wikipedia.org/wiki/Heap_\(data_structure\)): remove - the item with the minimum priority (or the least recently - inserted/updated if multiple items have this same priority) - * *Uniform*: remove from all items with equal probability - -### Rate Limiters - -`RateLimiters` are a powerful tool in making machine learning experiments more -robust by mitigating the impact of external factors on experiment results. -External factors could include noise such as changes in connection overhead or -hardware efficiency. By explicitly regulating the sampling rate, rate limiters -will ultimately lead to more robust and reproducible experiments. - -The two rate limiters available are: - -- `MinSize`: only allows sampling when the table contains a minimum number of - items -- `SampleToInsertRatio`: controls throughput so that the number of times each - item is sampled on average remains constant within the user-defined margin - of error - -Rate limiters block inserts and samples to maintain the desired ratio. This -behavior controls the rate that learners and actors are able to sample from and -insert into the replay buffer, regulating external factors such as the speed at -which the actor can take an environment step. - -Consider the following scenario describing a SampleToInsertRatioLimiter with an -error buffer of 3.0 and a sample-to-insert ratio of 2: - -![](docs/animations/diagram3.svg) - -One particular group of agent implementations, *single-threaded Python*, require -extra attention as they are prone to deadlocks caused by the RateLimiter's -blocking behavior. These risks do not exist in the distributed setting. - -## Experience Replay in Research - -Prioritized experience replay is one of the most common uses of Reverb. The -following papers present the relevant state of the art research: - -* [Prioritized Experience Replay](https://arxiv.org/abs/1511.05952) -* [Distributed Prioritized Experience Replay](https://arxiv.org/abs/1803.00933) -* Queue-based experience replay ([IMPALA](https://arxiv.org/abs/1802.01561) - and [hybrid A3C](https://arxiv.org/abs/1611.06256)) -* [DQN](https://www.nature.com/articles/nature14236) - +Please see +[this guide](pip_package/README.md#how-to-develop-and-build-reverb-with-the-docker-containers) +for details on how to build Reverb from source. + +## Quick Start + +Starting a Reverb server is as simple as: + +```python +import reverb + +server = reverb.Server(tables=[ + reverb.Table( + name='my_table', + sampler=reverb.selectors.Uniform(), + remover=reverb.selectors.Fifo(), + max_size=100, + rate_limiter=reverb.rate_limiters.MinSize(1)), + ], + port=8000 +) +``` + +Create a client to communicate with the server: + +```python +client = reverb.Client(‘localhost:8000’) +print(client.server_info()) +``` + +Write some data to the table: + +```python +# Creates a single item and data element [0, 1]. +client.insert([0, 1], priorities={'my_table': 1.0}) +``` + +This creates an item with a reference to a single data element, `0`. An item can +also reference multiple data elements: + +```python +# Creates three data elements (2, 3, and 4) and a single item `[2, 3, 4]` that +# references all three of them. +with client.writer(max_sequence_length=3) as writer: + writer.append(2) + writer.append(3) + writer.append(4) + writer.create_item('my_table', num_timesteps=3, priority=1.0) +``` + +The items we have added to Reverb can be read by sampling them: + +```python +print(list(client.sample('my_table', num_samples=2))) # client.sample() returns a generator +``` + +Continue with the +[Reverb Tutorial](https://github.com/deepmind/reverb/tree/master/reverb/examples/demo.ipynb) +for an interactive tutorial. + +## Detailed overview + +Experience replay has become an important tool for training off-policy +reinforcement learning policies. It is used by algorithms such as +[Deep Q-Networks (DQN)][DQN], [Soft Actor-Critic (SAC)][SAC], +[Deep Deterministic Policy Gradients (DDPG)][DDPG], and +[Hindsight Experience Replay][HER], ... However building an efficient, easy to +use, and scalable replay system can be challenging. For good performance Reverb +is implemented in C++ and to enable distributed usage it provides a gRPC service +for adding, sampling, and updating the contents of the tables. Python clients +expose the full functionality of the service in an easy to use fashion. +Furthermore native TensorFlow ops are available for performant integration with +TensorFlow and `tf.data`. + +Although originally designed for off-policy reinforcement learning, Reverb's +flexibility makes it just as useful for on-policy reinforcement -- or even +(un)supervised learning. Creative users have even used Reverb to store and +distribute frequently updated data (such as model weights), acting as an +in-memory light-weight alternative to a distributed file system where each table +represents a file. + +### Tables + +A Reverb `Server` consists of one or more tables. A table hold items, and each +item references one or more data elements. Tables also define sample and +removal [selection strategies](#item-selection-strategies), a maximum item +capacity, and a [rate limiter](#rate-limiting). + +Multiple items can reference the same data element, even if these items exist in +different tables. This is because items only contain references to data elements +(as opposed to a copy of the data itself). This also means that a data element +is only removed when there exists no item that contains a reference to it. + +For example, it is possible to set up one Table as a Prioritized Experience +Replay (PER) for transitions (sequences of length 2), and another Table as a +(FIFO) queue of sequences of length 3. In this case the PER data could be used +to train DQN, and the FIFO data to train a transition model for the environment. + +![Using multiple tables](docs/images/multiple_tables_example.png) + +Items are automatically removed from the Table when one of two conditions are +met: + +1. Inserting a new item would cause the number of items in the Table to exceed + its maximum capacity. + +1. An item has been sampled more than the maximum number of times permitted by + the Table’s rate limiter. Note that not all rate limiters will enforce this. + +In both cases, which item to remove is determined by the table’s removal +strategy. As mentioned earlier, a data element is automatically removed from the +`Server` when the number of items that references it reaches zero. + +Users have full control over how data is sampled and removed from Reverb +tables. The behavior is primarily controlled by the +[item selection strategies](#item-selection-strategies) provided to the `Table` +as the `sampler` and `remover`. In combination with the +[`rate_limiter`](#rate-limiting) and `max_times_sampled`, a wide range of +behaviors can be achieved. Some commonly used configurations include: + +**Uniform Experience Replay** + +A set of the `N=1000` most recently inserted items are maintained. By setting +`sampler=reverb.selectors.Uniform()`, the probability to select an item is the +same for all items. Due to `reverb.rate_limiters.MinSize(100)`, sampling +requests will block until 100 items have been inserted. By setting +`remover=reverb.selectors.Fifo()` when an item needs to be removed the oldest +item is removed first. + +```python +reverb.Table( + name='my_uniform_experience_replay_buffer', + sampler=reverb.selectors.Uniform(), + remover=reverb.selectors.Fifo(), + max_size=1000, + rate_limiter=reverb.rate_limiters.MinSize(100), +) +``` + +Examples of algorithms that make use of uniform experience replay include [SAC] +and [DDPG]. + +**Prioritized Experience Replay** + +A set of the `N=1000` most recently inserted items. By setting +`sampler=reverb.selectors.Prioritized(priority_exponent=0.8)`, the probability +to select an item is proportional to the item's priority. + +Note: See [Schaul, Tom, et al.][PER] for the algorithm used in this +implementation of Prioritized Experience Replay. + +```python +reverb.Table( + name='my_prioritized_experience_replay_buffer', + sampler=reverb.selectors.Prioritized(0.8), + remover=reverb.selectors.Fifo(), + max_size=1000, + rate_limiter=reverb.rate_limiters.MinSize(100), +) +``` + +Examples of algorithms that make use of Prioritized Experience Replay are DQN +(and its variants), and +[Distributed Distributional Deterministic Policy Gradients][D4PG]. + +**Queue** + +Collection of up to `N=1000` items where the oldest item is selected and removed +in the same operation. If the collection contains 1000 items then insert calls +are blocked until it is no longer full, if the collection is empty then sample +calls are blocked until there is at least one item. + +```python +reverb.Table( + name='my_queue', + sampler=reverb.selectors.Fifo(), + removers=reverb.selectors.Fifo(), + max_size=1000, + max_times_sampled=1, + rate_limiter=reverb.rate_limiters.Queue(size=1000), +) + +# Or use the helper classmethod `.queue`. +reverb.Table.queue(name=’my_queue', max_size=1000) +``` + +Examples of algorithms that make use of Queues are +[IMPALA](https://arxiv.org/abs/1802.01561) and asynchronous implementations of +[Proximal Policy Optimization](https://arxiv.org/abs/1707.06347). + +### Item selection strategies + +Reverb defines several selectors that can be used for item sampling or removal: + +- **Uniform:** Sample uniformly among all items. +- **Prioritized:** Samples proportional to stored priorities. +- **FIFO:** Selects the oldest data. +- **LIFO:** Selects the newest data. +- **MinHeap:** Selects data with the lowest priority. +- **MaxHeap:** Selects data with the highest priority. + +Any of these strategies can be used for sampling or removing items from a +Table. This gives users the flexibility to create customized Tables that best +fit their needs. + +### Rate Limiting + +Rate limiters allow users to enforce conditions on when items can be inserted +and/or sampled from a Table. Here is a list of the rate limiters that are +currently available in Reverb: + +- **MinSize:** Sets a minimum number of items that must be in the Table before + anything can be sampled. +- **SampleToInsertRatio:** Sets that the average ratio of inserts to samples + by blocking insert and/or sample requests. This is useful for controlling + the number of times each item is sampled before being removed. +- **Queue:** Items are sampled exactly once before being removed. +- **Stack:** Items are sampled exactly once before being removed. + +### Sharding + +Reverb servers are unaware of each other and when scaling up a system to a multi +server setup data is not replicated across more than one node. This makes Reverb +unsuitable as a traditional database but has the benefit of making it trivial to +scale up systems where some level of data loss is acceptable. + +Distributed systems can be horizontally scaled by simply increasing the number +of Reverb servers. When used in combination with a gRPC compatible load +balancer, the address of the load balanced target can simply be provided to a +Reverb client and operations will automatically be distributed across the +different nodes. You'll find details about the specific behaviors in the +documentation of the relevant methods and classes. + +If a load balancer is not available in your setup or if more control is required +then systems can still be scaled in almost the same way. Simply increase the +number of Reverb servers and create separate clients for each server. + +### Checkpointing + +Reverb supports checkpointing; the state and content of Reverb servers can be +stored to permanent storage. While pointing, the `Server` serializes all of its +data and metadata needed to reconstruct it. During this process the `Server` +blocks all incoming insert, sample, update, and delete requests. + +Checkpointing is done with a call from the Reverb `Client`: + +```python +# client.checkpoint() returns the path the checkpoint was written to. +checkpoint_path = client.checkpoint() +``` + +To restore the a `reverb.Server` from a checkpoint: + +```python +checkpointer = reverb.checkpointers.DefaultCheckpointer(path=checkpoint_path) +# The arguments passed to `tables=` must be the as those used by the `Server` +# that wrote the checkpoint. +server = reverb.Server(tables=[...], checkpointer=checkpointer) +``` + +Refer to +[tfrecord_checkpointer.h](https://github.com/deepmind/reverb/tree/master/reverb/cc/platform/tfrecord_checkpointer.h) +for details on the implementation of checkpointing in Reverb. + +## Citation + +If you use this code, please cite it as: + +``` +@misc{Reverb, + title = {{Reverb}: An efficient data storage and transport system for ML research}, + author = "{Albin Cassirer, Gabriel Barth-Maron, Manuel Kroiss, Eugene Brevdo}", + howpublished = {\url{https://github.com/deepmind/reverb}}, + url = "https://github.com/deepmind/reverb", + year = 2020, + note = "[Online; accessed 01-June-2020]" +} +``` + + + +[D4PG]: https://arxiv.org/abs/1804.08617 +[DDPG]: https://arxiv.org/abs/1509.02971 +[DQN]: https://www.nature.com/articles/nature14236 +[HER]: https://arxiv.org/abs/1707.01495 +[PER]: https://arxiv.org/abs/1511.05952 +[SAC]: https://arxiv.org/abs/1801.01290 diff --git a/docs/images/multiple_tables_example.png b/docs/images/multiple_tables_example.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b89a827f17741f77335892e38c201df8bf14d1 GIT binary patch literal 57099 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 literal 0 HcmV?d00001