Skip to content

A high-performance, scalable MindSpore reinforcement learning framework.

License

Notifications You must be signed in to change notification settings

mindspore-lab/mindrl

Repository files navigation

MindSpore Reinforcement

查看中文

Python Version LICENSE PRs Welcome

Overview

MindSpore Reinforcement is an open-source reinforcement learning framework that supports the distributed training of agents using reinforcement learning algorithms. MindSpore Reinforcement offers a clean API abstraction for writing reinforcement learning algorithms, which decouples the algorithm from deployment and execution considerations, including the use of accelerators, the level of parallelism and the distribution of computation across a cluster of workers. MindSpore Reinforcement translates the reinforcement learning algorithm into a series of compiled computational graphs, which are then run efficiently by the MindSpore framework on CPUs, GPUs and Ascend AI processors. Its architecture is shown below:

MindSpore_RL_Architecture

Installation

MindSpore Reinforcement depends on the MindSpore training and inference framework. Therefore, please first install MindSpore following the instruction on the official website, then install MindSpore Reinforcement. You can install from pip or source code.

Version dependency

Due the dependency between MindSpore Reinforcement and MindSpore, please follow the table below and install the corresponding MindSpore verision from MindSpore download page.

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/{MindSpore-Version}/MindSpore/cpu/ubuntu_x86/mindspore-{MindSpore-Version}-cp37-cp37m-linux_x86_64.whl
MindSpore Reinforcement Version Branch MindSpore version
0.7.0 r0.7 2.1.0
0.6.0 r0.6 2.0.0
0.5.0 r0.5 1.8.0
0.3.0 r0.3 1.7.0
0.2.0 r0.2 1.6.0
0.1.0 r0.1 1.5.0

Installing from pip command

If you use the pip command, please download the whl package from MindSpore Reinforcement page and install it.

pip install  https://ms-release.obs.cn-north-4.myhuaweicloud.com/{MindSpore_version}/Reinforcement/any/mindspore_rl-{Reinforcement_version}-py3-none-any.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
  • Installing whl package will download MindSpore Reinforcement dependencies automatically (detail of dependencies is shown in requirement.txt), other dependencies should install manually.
  • {MindSpore_version} stands for the version of MindSpore. For the version matching relationship between MindSpore and Reinforcement, please refer to page.
  • {Reinforcement_version} stands for the version of Reinforcement. For example, if you would like to download version 0.1.0, you should fill 1.5.0 in {MindSpore_version} and fill 0.1.0 in {Reinforcement_version}.

Installing from source code

Download source code, then enter the mindrl directory.

git clone https://github.com/mindspore-lab/mindrl.git
cd mindrl/
bash build.sh
pip install output/mindspore_rl-{Reinforcement_version}-py3-none_{ARCH}.whl

build.sh is the compiling script in mindrl directory. Reinforcement_version is the version of MindSpore Reinforcement, ARCH is the platform of your device, such as x86_64 or aarch64.

Install dependencies

cd mindrl && pip install requirements.txt

Verification

If you can successfully execute following command, then the installation is completed.

import mindspore_rl

Quick Start

The algorithm example of mindcore reinforcement is located under reinforcement/example/. A simple algorithm Deep Q-Learning (DQN) is used to demonstrate how to use MindSpore Reinforcement.

The first way is using script files to run it directly:

cd reinforcement/example/dqn/scripts
bash run_standalone_train.sh

The second way is to use config.py and train.py to modify the configuration more flexibly:

cd reinforcement/example/dqn
python train.py --episode 1000 --device_target GPU

The first way will generate the logfile dqn_train_log.txt in the current directory. The second way prints log information on the screen:

Episode 0: loss is 0.396, rewards is 42.0
Episode 1: loss is 0.226, rewards is 15.0
Episode 2: loss is 0.202, rewards is 9.0
Episode 3: loss is 0.122, rewards is 15.0
Episode 4: loss is 0.107, rewards is 12.0
Episode 5: loss is 0.078, rewards is 10.0
Episode 6: loss is 0.075, rewards is 8.0
Episode 7: loss is 0.084, rewards is 12.0
Episode 8: loss is 0.069, rewards is 10.0
Episode 9: loss is 0.067, rewards is 10.0
Episode 10: loss is 0.056, rewards is 8.0
-----------------------------------------
Evaluate for episode 10 total rewards is 9.600
-----------------------------------------

For more details about the installation guide, tutorials, and APIs, see MindSpore Reinforcement API Docs.

Features

Algorithm

Algorithm RL Version Action Space Device Example Environment
DiscreteContinuous CPUGPUAscend
DQN >= 0.1 ✔️ / ✔️ ✔️ ✔️ CartPole-v0
PPO >= 0.1 / ✔️ ✔️ ✔️ ✔️ HalfCheetah-v2
AC >= 0.1 ✔️ / ✔️ ✔️ ✔️ CartPole-v0
A2C >= 0.2 ✔️ / ✔️ ✔️ ✔️ CartPole-v0
DDPG >= 0.3 / ✔️ ✔️ ✔️ ✔️ HalfCheetah-v2
QMIX >= 0.5 ✔️ / ✔️ ✔️ ✔️ SMAC, Simple Spread
SAC >= 0.5 / ✔️ ✔️ ✔️ ✔️ HalfCheetah-v2
TD3 >= 0.6 / ✔️ ✔️ ✔️ ✔️ HalfCheetah-v2
C51 >= 0.6 ✔️ / ✔️ ✔️ ✔️ CartPole-v0
A3C >= 0.6 ✔️ / / ✔️ ✔️ CartPole-v0
CQL >= 0.6 / ✔️ ✔️ ✔️ ✔️ Hopper-v0
MAPPO >= 0.6 ✔️ / ✔️ ✔️ ✔️ Simple Spread
GAIL >= 0.6 / ✔️ ✔️ ✔️ ✔️ HalfCheetah-v2
MCTS >= 0.6 ✔️ / ✔️ ✔️ / Tic-Tac-Toe
AWAC >= 0.6 / ✔️ ✔️ ✔️ ✔️ Ant-v2
Dreamer >= 0.6 / ✔️ / ✔️ ✔️️️️ Walker-walk
IQL >= 0.6 / ✔️ ✔️ ✔️ ✔️ Walker2d-v2
MADDPG >= 0.6 ✔️ / ✔️ ✔️ ✔️ simple_spread
Double DQN >= 0.6 ✔️ / ✔️ ✔️ ✔️ CartPole-v0
Policy Gradient >= 0.6 ✔️ / ✔️ ✔️ ✔️ CartPole-v0
Dueling DQN >= 0.6 ✔️ / ✔️ ✔️ ✔️ CartPole-v0

Environment

In the field of reinforcement learning, during the interaction between the agent and the environment, the learning strategy maximizes the numerical benefit signal. As a problem to be solved, environment is an important element in reinforcement learning. The currently supported environments are shown in the table below:

Environments Version
Gym >= v0.1
MuJoCo >= v0.1
MPE >= v0.6
SMAC >= v0.5
DMC >= v0.6
PettingZoo-mpe >= v0.6
D4RL >= v0.6

ReplayBuffer

In reinforcement learning, ReplayBuffer is a commonly used basic data storage method. It is used to store the data obtained by the interaction between the agent and the environment. ReplayBuffer can solve the following problems:

  1. The stored historical experience data can be extracted by sampling or certain priority to break the correlation of the training data and make the sampled data have the characteristics of independent and identical distribution.

  2. It can provide temporary storage of data and improve the utilization rate of data.

In general, researchers use native Python data structures or numpy data structures to construct ReplayBuffer, or the general reinforcement learning framework also provides standard API encapsulation. The difference is that MindSpore implements the ReplayBuffer structure on the device. On the one hand, it can reduce the frequent copying of data between the host and the device when using GPU/Ascend hardware. On the other hand, it can express the ReplayBuffer in the form of MindSpore operators, which can build a complete IR graph and enable MindSpore GRAPH_MODE optimization to improve the overall performance.

Type Features Device
CPUGPUAscend
UniformReplayBuffer 1 FIFO, fist in fist out.
2 Support batch input.
✔️ ✔️ /
PriorityReplayBuffer 1 Proportional-based priority strategy.
2 Using Sum Tree to improve sample performance.
✔️ ✔️ ✔️
ReservoirReplayBuffer keeps an 'unbiased' sample of previous iterations. ✔️ ✔️ ✔️

Distribution

We describe MindSpore Reinforcement Learning (MSRL), a distributed RL training system that supports distribution policies that govern how RL training computation is parallelised and distributed on cluster resources, without requiring changes to the algorithm implementation. MSRL introduces the new abstraction of a fragmented dataflow graph, which maps Python functions from an RL algorithm’s training loop to parallel computational fragments. Fragments are executed on different devices by translating them to low-level dataflow representations, e.g. computational graphs as supported by deep learning engines, CUDA implementations or multi-threaded CPU processe. Refer to the detail.

By now we have supported such distribution policies:

Policy Type Policy Example
MultiActorSingleLearnerDP structure of single leaner with multi actors ppo
AsyncMultiActorSingleLearnerDP async structure of single leaner with multi actors a3c
SingleActorLearnerWithMultEnvDP structure of single actor leaner with multi envs ppo
SingleActorLearnerWithMultEnvHeterDP structure of single actor leaner with multi heterogeneous envs ppo

MultiActorSingleLearnerDP


AsyncMultiActorSingleLearnerDP


SingleActorLearnerWithMultEnvDP
SingleActorLearnerWithMultEnvHeterDP

Future Roadmap

This initial release of MindSpore Reinforcement contains a stable API for implementing reinforcement learning algorithms and executing computation using MindSpore's computational graphs. Now it supports automatic distributed execution of algorithms, multi-agent, offline-rl, mcts and so on. Features of optimized automatic distributed execution and LLMs will be included in the subsequent version of MindSpore Reinforcement. Please look forward to it.

Community

Governance

MindSpore Open Governance

Communication

Contributions

Welcome to MindSpore contribution. MindSpore Reinforcement will be updated every 3 months. If you encounter any problems, please inform us in time. We appreciate all contributions and can submit your questions or modifications in the form of issues or prs.

License

Apache License 2.0

About

A high-performance, scalable MindSpore reinforcement learning framework.

Resources

License

Stars

Watchers

Forks

Packages

No packages published