cleanrl

Par mkurman · zorai

npx skills add https://github.com/mkurman/zorai --skill cleanrl

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

  1. CleanRL n'est PAS une bibliothèque — ne pas import cleanrl, exécuter les scripts directement
  2. Chaque fichier est autonome — copier ppo.py et le modifier pour votre recherche
  3. Utiliser --track pour la journalisation W&B, omettre pour TensorBoard seul
  4. --capture-video sauvegarde le gameplay de l'agent — excellente pour l'évaluation qualitative
  5. Les variantes JAX sont les plus rapides mais nécessitent une compréhension de jax.lax.scan
  6. Toutes les implémentations sont benchmarkées — voir https://benchmark.cleanrl.dev

Références

Skills similaires