d3rlpy: An offline deep reinforcement learning library
d3rlpy is an offline deep reinforcement learning library for practitioners and researchers.
import d3rlpy
dataset, env = d3rlpy.datasets.get_dataset("hopper-medium-v0")
# prepare algorithm
sac = d3rlpy.algos.SAC()
# train offline
sac.fit(dataset, n_steps=1000000)
# train online
sac.fit_online(env, n_steps=1000000)
# ready to control
actions = sac.predict(x)
- Documentation: https://d3rlpy.readthedocs.io
- Paper: https://arxiv.org/abs/2111.03788
key features
⚡
Most Practical RL Library Ever
- offline RL: d3rlpy supports state-of-the-art offline RL algorithms. Offline RL is extremely powerful when the online interaction is not feasible during training (e.g. robotics, medical).
- online RL: d3rlpy also supports conventional state-of-the-art online training algorithms without any compromising, which means that you can solve any kinds of RL problems only with
d3rlpy
. - advanced engineering: d3rlpy is designed to implement the faster and efficient training algorithms. For example, you can train Atari environments with x4 less memory space and as fast as the fastest RL library.
🔰
Easy-To-Use API
- zero-knowledge of DL library: d3rlpy provides many state-of-the-art algorithms through intuitive APIs. You can become a RL engineer even without knowing how to use deep learning libraries.
- scikit-learn compatibility: d3rlpy is not only easy, but also completely compatible with scikit-learn API, which means that you can maximize your productivity with the useful scikit-learn's utilities.
🚀
Beyond State-Of-The-Art
- distributional Q function: d3rlpy is the first library that supports distributional Q functions in the all algorithms. The distributional Q function is known as the very powerful method to achieve the state-of-the-performance.
- many tweek options: d3rlpy is also the first to support N-step TD backup and ensemble value functions in the all algorithms, which lead you to the place no one ever reached yet.
installation
d3rlpy supports Linux, macOS and Windows.
PyPI (recommended)
$ pip install d3rlpy
Anaconda
$ conda install -c conda-forge d3rlpy
Docker
$ docker run -it --gpus all --name d3rlpy takuseno/d3rlpy:latest bash
supported algorithms
algorithm | discrete control | continuous control | offline RL? |
---|---|---|---|
Behavior Cloning (supervised learning) | |
|
|
Deep Q-Network (DQN) | |
|
|
Double DQN | |
|
|
Deep Deterministic Policy Gradients (DDPG) | |
|
|
Twin Delayed Deep Deterministic Policy Gradients (TD3) | |
|
|
Soft Actor-Critic (SAC) | |
|
|
Batch Constrained Q-learning (BCQ) | |
|
|
Bootstrapping Error Accumulation Reduction (BEAR) | |
|
|
Advantage-Weighted Regression (AWR) | |
|
|
Conservative Q-Learning (CQL) | |
|
|
Advantage Weighted Actor-Critic (AWAC) | |
|
|
Critic Reguralized Regression (CRR) | |
|
|
Policy in Latent Action Space (PLAS) | |
|
|
TD3+BC | |
|
|
supported Q functions
- standard Q function
- Quantile Regression
- Implicit Quantile Network
other features
Basically, all features are available with every algorithm.
- evaluation metrics in a scikit-learn scorer function style
- export greedy-policy as TorchScript or ONNX
- parallel cross validation with multiple GPU
experimental features
- Model-based Algorithms
- Q-functions
- Fully parametrized Quantile Function (experimental)
benchmark results
d3rlpy is benchmarked to ensure the implementation quality. The benchmark scripts are available reproductions directory. The benchmark results are available d3rlpy-benchmarks repository.
examples
MuJoCo
import d3rlpy
# prepare dataset
dataset, env = d3rlpy.datasets.get_d4rl('hopper-medium-v0')
# prepare algorithm
cql = d3rlpy.algos.CQL(use_gpu=True)
# train
cql.fit(dataset,
eval_episodes=dataset,
n_epochs=100,
scorers={
'environment': d3rlpy.metrics.evaluate_on_environment(env),
'td_error': d3rlpy.metrics.td_error_scorer
})
See more datasets at d4rl.
Atari 2600
import d3rlpy
from sklearn.model_selection import train_test_split
# prepare dataset
dataset, env = d3rlpy.datasets.get_atari('breakout-expert-v0')
# split dataset
train_episodes, test_episodes = train_test_split(dataset, test_size=0.1)
# prepare algorithm
cql = d3rlpy.algos.DiscreteCQL(n_frames=4, q_func_factory='qr', scaler='pixel', use_gpu=True)
# start training
cql.fit(train_episodes,
eval_episodes=test_episodes,
n_epochs=100,
scorers={
'environment': d3rlpy.metrics.evaluate_on_environment(env),
'td_error': d3rlpy.metrics.td_error_scorer
})
See more Atari datasets at d4rl-atari.
PyBullet
import d3rlpy
# prepare dataset
dataset, env = d3rlpy.datasets.get_pybullet('hopper-bullet-mixed-v0')
# prepare algorithm
cql = d3rlpy.algos.CQL(use_gpu=True)
# start training
cql.fit(dataset,
eval_episodes=dataset,
n_epochs=100,
scorers={
'environment': d3rlpy.metrics.evaluate_on_environment(env),
'td_error': d3rlpy.metrics.td_error_scorer
})
See more PyBullet datasets at d4rl-pybullet.
Online Training
import d3rlpy
import gym
# prepare environment
env = gym.make('HopperBulletEnv-v0')
eval_env = gym.make('HopperBulletEnv-v0')
# prepare algorithm
sac = d3rlpy.algos.SAC(use_gpu=True)
# prepare replay buffer
buffer = d3rlpy.online.buffers.ReplayBuffer(maxlen=1000000, env=env)
# start training
sac.fit_online(env, buffer, n_steps=1000000, eval_env=eval_env)
tutorials
Try a cartpole example on Google Colaboratory!
contributions
Any kind of contribution to d3rlpy would be highly appreciated! Please check the contribution guide.
The release planning can be checked at milestones.
community
Channel | Link |
---|---|
Chat | Gitter |
Issues | GitHub Issues |
family projects
Project | Description |
---|---|
d4rl-pybullet | An offline RL datasets of PyBullet tasks |
d4rl-atari | A d4rl-style library of Google's Atari 2600 datasets |
MINERVA | An out-of-the-box GUI tool for offline RL |
roadmap
The roadmap to the future release is available in ROADMAP.md.
citation
The paper is available here.
@InProceedings{seno2021d3rlpy,
author = {Takuma Seno, Michita Imai},
title = {d3rlpy: An Offline Deep Reinforcement Library},
booktitle = {NeurIPS 2021 Offline Reinforcement Learning Workshop},
month = {December},
year = {2021}
}
acknowledgement
This work is supported by Information-technology Promotion Agency, Japan (IPA), Exploratory IT Human Resources Project (MITOU Program) in the fiscal year 2020.