Home

Awesome

<div align=center> <br> <img src='./docs/assets/images/logo_horizontal.svg' style="width: 55%"> <br>

RLLTE: Long-Term Evolution Project of Reinforcement Learning

<!-- <h3> <a href="https://arxiv.org/pdf/2309.16382.pdf"> Paper </a> | <a href="https://docs.rllte.dev/api/"> Documentation </a> | <a href="https://docs.rllte.dev/tutorials/"> Tutorials </a> | <a href="https://github.com/RLE-Foundation/rllte/discussions"> Forum </a> | <a href="https://hub.rllte.dev/"> Benchmarks </a></h3> -->

<img src="https://img.shields.io/badge/License-MIT-%230677b8"> <img src="https://img.shields.io/badge/GPU-NVIDIA-%2377b900"> <img src="https://img.shields.io/badge/NPU-Ascend-%23c31d20"> <img src="https://img.shields.io/badge/Python-%3E%3D3.8-%2335709F"> <img src="https://img.shields.io/badge/Docs-Passing-%23009485"> <img src="https://img.shields.io/badge/Codestyle-Black-black"> <img src="https://img.shields.io/badge/PyPI-0.0.1-%23006DAD">

<!-- <img src="https://img.shields.io/badge/Coverage-97.00%25-green"> --> <!-- | [English](README.md) | [δΈ­ζ–‡](docs/README-zh-Hans.md) | --> </div> <!-- # Contents - [Overview](#overview) - [Quick Start](#quick-start) + [Installation](#installation) + [Fast Training with Built-in Algorithms](#fast-training-with-built-in-algorithms) - [On NVIDIA GPU](#on-nvidia-gpu) - [On HUAWEI NPU](#on-huawei-npu) + [Three Steps to Create Your RL Agent](#three-steps-to-create-your-rl-agent) + [Algorithm Decoupling and Module Replacement](#algorithm-decoupling-and-module-replacement) - [Function List (Part)](#function-list-part) + [RL Agents](#rl-agents) + [Intrinsic Reward Modules](#intrinsic-reward-modules) - [RLLTE Ecosystem](#rllte-ecosystem) - [API Documentation](#api-documentation) - [Cite the Project](#cite-the-project) - [How To Contribute](#how-to-contribute) - [Acknowledgment](#acknowledgment) - [Miscellaneous](#miscellaneous) --> <!-- # Overview -->

Inspired by the long-term evolution (LTE) standard project in telecommunications, aiming to provide development components for and standards for advancing RL research and applications. Beyond delivering top-notch algorithm implementations, RLLTE also serves as a toolkit for developing algorithms.

<!-- <div align="center"> <a href="https://youtu.be/PMF6fa72bmE" rel="nofollow"> <img src='./docs/assets/images/youtube.png' style="width: 70%"> </a> <br> An introduction to RLLTE. </div> -->

Why RLLTE?

⚠️ Since the construction of RLLTE Hub requires massive computing power, we have to upload the training datasets and model weights gradually. Progress report can be found in Issue#30.

See the project structure below:

<div align=center> <img src='./docs/assets/images/structure.svg' style="width: 100%"> </div>

For more detailed descriptions of these modules, see API Documentation.

Quick Start

Installation

Open a terminal and install rllte with pip:

conda create -n rllte python=3.8 # create an virtual environment
pip install rllte-core # basic installation
pip install rllte-core[envs] # for pre-defined environments

Open a terminal and clone the repository from GitHub with git:

git clone https://github.com/RLE-Foundation/rllte.git
pip install -e . # basic installation
pip install -e .[envs] # for pre-defined environments

For more detailed installation instruction, see Getting Started.

Fast Training with Built-in Algorithms

RLLTE provides implementations for well-recognized RL algorithms and simple interface for building applications.

On NVIDIA GPU

Suppose we want to use DrQ-v2 to solve a task of DeepMind Control Suite, and it suffices to write a train.py like:

# import `env` and `agent` module
from rllte.env import make_dmc_env 
from rllte.agent import DrQv2

if __name__ == "__main__":
    device = "cuda:0"
    # create env, `eval_env` is optional
    env = make_dmc_env(env_id="cartpole_balance", device=device)
    eval_env = make_dmc_env(env_id="cartpole_balance", device=device)
    # create agent
    agent = DrQv2(env=env, eval_env=eval_env, device=device, tag="drqv2_dmc_pixel")
    # start training
    agent.train(num_train_steps=500000, log_interval=1000)

Run train.py and you will see the following output:

<div align=center> <img src='./docs/assets/images/rl_training_gpu.gif' style="filter: drop-shadow(0px 0px 7px #000);"> </div>

On HUAWEI NPU

Similarly, if we want to train an agent on HUAWEI NPU, it suffices to replace cuda with npu:

device = "cuda:0" -> device = "npu:0"

Three Steps to Create Your RL Agent

Developers only need three steps to implement an RL algorithm with RLLTE. The following example illustrates how to write an Advantage Actor-Critic (A2C) agent to solve Atari games.

As shown in this example, only a few dozen lines of code are needed to create RL agents with RLLTE.

Algorithm Decoupling and Module Replacement

RLLTE allows developers to replace settled modules of implemented algorithms to make performance comparison and algorithm improvement, and both built-in and custom modules are supported. Suppose we want to compare the effect of different encoders, it suffices to invoke the .set function:

from rllte.xploit.encoder import EspeholtResidualEncoder
encoder = EspeholtResidualEncoder(...)
agent.set(encoder=encoder)

RLLTE is an extremely open framework that allows developers to try anything. For more detailed tutorials, see Tutorials.

Function List (Part)

RL Agents

TypeAlgo.BoxDis.M.B.M.D.M.P.NPUπŸ’°πŸ”­
On-PolicyA2Cβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβŒ
On-PolicyPPOβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβŒ
On-PolicyDrACβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈ
On-PolicyDAACβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβŒ
On-PolicyDrDAACβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈβœ”οΈ
On-PolicyPPGβœ”οΈβœ”οΈβœ”οΈβŒβœ”οΈβœ”οΈβœ”οΈβŒ
Off-PolicyDQNβœ”οΈβŒβŒβŒβœ”οΈβœ”οΈβœ”οΈβŒ
Off-PolicyDDPGβœ”οΈβŒβŒβŒβœ”οΈβœ”οΈβœ”οΈβŒ
Off-PolicySACβœ”οΈβŒβŒβŒβœ”οΈβœ”οΈβœ”οΈβŒ
Off-PolicySAC-DiscreteβŒβœ”οΈβŒβŒβœ”οΈβœ”οΈβœ”οΈβŒ
Off-PolicyTD3βœ”οΈβŒβŒβŒβœ”οΈβœ”οΈβœ”οΈβŒ
Off-PolicyDrQ-v2βœ”οΈβŒβŒβŒβŒβœ”οΈβœ”οΈβœ”οΈ
DistributedIMPALAβœ”οΈβœ”οΈβŒβŒβœ”οΈβŒβŒβŒ

Intrinsic Reward Modules

TypeModules
Count-basedPseudoCounts, RND, E3B
Curiosity-drivenICM, GIRM, RIDE, Disagreement
Memory-basedNGU
Information theory-basedRE3, RISE, REVD

See Tutorials: Use Intrinsic Reward and Observation Augmentation for usage examples.

RLLTE Ecosystem

Explore the ecosystem of RLLTE to facilitate your project:

<!-- # API Documentation View our well-designed documentation: [https://docs.rllte.dev/](https://docs.rllte.dev/) <div align=center> <img src='./docs/assets/images/docs.gif' style="width: 100%"> </div> -->

How To Contribute

Welcome to contribute to this project! Before you begin writing code, please read CONTRIBUTING.md for guide first.

Cite the Project

To cite this project in publications:

@article{yuan2023rllte,
  title={RLLTE: Long-Term Evolution Project of Reinforcement Learning}, 
  author={Mingqi Yuan and Zequn Zhang and Yang Xu and Shihao Luo and Bo Li and Xin Jin and Wenjun Zeng},
  year={2023},
  journal={arXiv preprint arXiv:2309.16382}
}

Acknowledgment

This project is supported by The Hong Kong Polytechnic University, Eastern Institute for Advanced Study, and FLW-Foundation. EIAS HPC provides a GPU computing platform, and HUAWEI Ascend Community provides an NPU computing platform for our testing. Some code of this project is borrowed or inspired by several excellent projects, and we highly appreciate them. See ACKNOWLEDGMENT.md.

<!-- # Miscellaneous ## &#8627; Stargazers, thanks for your support! [![Stargazers repo roster for @RLE-Foundation/rllte](https://reporoster.com/stars/RLE-Foundation/rllte)](https://github.com/RLE-Foundation/rllte/stargazers) ## &#8627; Forkers, thanks for your support! [![Forkers repo roster for @RLE-Foundation/rllte](https://reporoster.com/forks/RLE-Foundation/rllte)](https://github.com/RLE-Foundation/rllte/network/members) ## &#8627; Star History <div align="center"> [![Star History Chart](https://api.star-history.com/svg?repos=RLE-Foundation/rllte&type=Date)](https://star-history.com/#RLE-Foundation/rllte&Date) </div> -->