name: cleanrl
description: Implémentations en fichier unique d'apprentissage par renforcement profond (CleanRL). Implémentations autonomes de haute qualité de PPO, DQN, C51, SAC, DDPG, TD3 avec fonctionnalités adaptées à la recherche. Chaque algorithme est un fichier autonome d'environ 300-500 lignes. Inclut des variantes Atari, MuJoCo, Procgen, PettingZoo multi-agent et JAX. À utiliser comme référence d'algorithme RL, prototypage rapide et compréhension des détails d'implémentation.
license: MIT license
tags: [ppo, dqn, sac, rl-reference-implementation, cleanrl]
metadata:
skill-author: K-Dense Inc.
--------|------|----------------|
| PPO | ppo.py | python cleanrl/ppo.py --env-id CartPole-v1 |
| PPO Atari | ppo_atari.py | python cleanrl/ppo_atari.py --env-id BreakoutNoFrameskip-v4 |
| PPO Continuous | ppo_continuous_action.py | python cleanrl/ppo_continuous_action.py --env-id HalfCheetah-v4 |
| PPO Multi-Agent | ppo_pettingzoo_ma_atari.py | python cleanrl/ppo_pettingzoo_ma_atari.py --env-id pong_v3 |
| DQN | dqn.py | python cleanrl/dqn.py --env-id CartPole-v1 |
| DQN Atari | dqn_atari.py | python cleanrl/dqn_atari.py --env-id BreakoutNoFrameskip-v4 |
| C51 Atari | c51_atari.py | python cleanrl/c51_atari.py --env-id BreakoutNoFrameskip-v4 |
| SAC Continuous | sac_continuous_action.py | python cleanrl/sac_continuous_action.py --env-id HalfCheetah-v4 |
| SAC Atari | sac_atari.py | python cleanrl/sac_atari.py --env-id BreakoutNoFrameskip-v4 |
| DDPG | ddpg_continuous_action.py | python cleanrl/ddpg_continuous_action.py --env-id HalfCheetah-v4 |
| TD3 | td3_continuous_action.py | python cleanrl/td3_continuous_action.py --env-id HalfCheetah-v4 |
3. Flux de travail d'entraînement PPO
# PPO minimal sur CartPole
python cleanrl/ppo.py \
--seed 1 \
--env-id CartPole-v1 \
--total-timesteps 50000 \
--track \
--wandb-project-name my-project
# PPO sur Atari (configuration standard)
python cleanrl/ppo_atari.py \
--seed 1 \
--env-id BreakoutNoFrameskip-v4 \
--total-timesteps 10000000 \
--track \
--capture-video
# PPO sur MuJoCo contrôle continu
python cleanrl/ppo_continuous_action.py \
--seed 1 \
--env-id HalfCheetah-v4 \
--total-timesteps 1000000
Hyperparamètres clés de PPO :
| Paramètre | CartPole/Classique | Atari | MuJoCo |
|-----------|-----------------|-------|--------|
| --total-timesteps | 50K | 10M | 1M |
| --learning-rate | 2.5e-4 | 2.5e-4 | 3e-4 |
| --num-envs | 4 | 8 | 1 |
| --num-steps | 128 | 128 | 2048 |
| --anneal-lr | True | True | False |
| --gae-lambda | 0.95 | 0.95 | 0.95 |
| --update-epochs | 4 | 4 | 10 |
| --norm-adv | True | True | True |
| --clip-coef | 0.2 | 0.1 | 0.2 |
| --ent-coef | 0.01 | 0.01 | 0.0 |
4. Entraînement DQN
# DQN sur Atari
python cleanrl/dqn_atari.py \
--seed 1 \
--env-id BreakoutNoFrameskip-v4 \
--total-timesteps 10000000 \
--buffer-size 100000 \
--learning-starts 80000 \
--target-network-frequency 1000 \
--batch-size 32 \
--track
5. RL multi-agent avec PettingZoo
# PPO sur Pong multi-agent Atari
python cleanrl/ppo_pettingzoo_ma_atari.py \
--seed 1 \
--env-id pong_v3 \
--total-timesteps 10000000 \
--track
# Environnements MA disponibles :
# pong_v3, surround_v2, tennis_v3, space_invaders_v2,
# warlords_v3, combat_plane_v2, combat_tank_v2
6. Journalisation et suivi
# TensorBoard (s'exécute dans cleanrl/runs/)
tensorboard --logdir runs
# Weights & Biases (nécessite wandb login)
python cleanrl/ppo.py --track --wandb-project-name my-project --wandb-entity my-entity
# Capture vidéo (tous les 100e évaluation)
python cleanrl/ppo_atari.py --capture-video --env-id BreakoutNoFrameskip-v4
7. Variantes accélérées JAX
Entraînement 5 à 10 fois plus rapide via compilation JAX + EnvPool :
# Installer le support JAX
pip install -r requirements/requirements-jax.txt
# JAX PPO sur Atari (ultra-rapide)
python cleanrl/ppo_atari_envpool_xla_jax.py \
--env-id BreakoutNoFrameskip-v4 \
--total-timesteps 10000000
# JAX DQN sur Atari
python cleanrl/dqn_atari_jax.py \
--env-id BreakoutNoFrameskip-v4 \
--total-timesteps 10000000
8. Docker et Cloud (AWS)
# Construire l'image Docker
docker build -t cleanrl .
# Soumettre à AWS Batch
python cleanrl/ppo_atari.py \
--env-id BreakoutNoFrameskip-v4 \
--total-timesteps 10000000 \
--track \
--upload-model
9. Structure de l'algorithme (Lire une implémentation)
Chaque fichier suit une structure cohérente :
# 1. Imports
# 2. parse_args() — arguments CLI
# 3. make_env() — création d'environnement
# 4. Classe Agent (si nécessaire) — réseau de neurones, généralement MLP/CNN simple
# 5. main():
# a. Configuration : seed, device, envs
# b. Initialiser l'agent, l'optimiseur
# c. Initialiser le stockage (rollout buffer, replay buffer)
# d. Boucle d'entraînement :
# - Collecter l'expérience
# - Calculer les retours/avantages
# - Mettre à jour la politique/valeur/réseau Q
# - Journaliser les métriques
# e. Sauvegarder le modèle, télécharger
Chaque fichier fait environ 300-500 lignes et est conçu pour être lu de haut en bas.
10. Débogage et développement
# Exécution de test minimal (moins d'étapes, journalisation plus fréquente)
python cleanrl/ppo.py \
--env-id CartPole-v1 \
--total-timesteps 5000 \
--num-envs 1 \
--num-steps 32 \
--track
# Désactiver wandb (pur TensorBoard)
python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps 50000
# Vérifier les IDs d'env disponibles
python -c "import gymnasium as gym; print([e for e in gym.envs.registry if 'CartPole' in e])"
Modèles clés
- CleanRL n'est PAS une bibliothèque — ne pas
import cleanrl, exécuter les scripts directement - Chaque fichier est autonome — copier
ppo.pyet le modifier pour votre recherche - Utiliser
--trackpour la journalisation W&B, omettre pour TensorBoard seul --capture-videosauvegarde le gameplay de l'agent — excellente pour l'évaluation qualitative- Les variantes JAX sont les plus rapides mais nécessitent une compréhension de
jax.lax.scan - Toutes les implémentations sont benchmarkées — voir https://benchmark.cleanrl.dev