Exploration Approfondie de l'Architecture d'Open-Reasoner-Zero : De PPO à GRPO

Open-Reasoner-Zero est un système d'inférence open-source sophistiqué dont l'architecture centrale repose sur des techniques d'apprentissage par renforcement, notamment les algorithmes PPO (Proximal Policy Otpimization) et GRPO (Generalized Proximal Policy Optimization). Cet article détaille la conception architecturale et les spécificités d'implémentation de ces technologies clés, dans le but de clarifier le fonctionnement interne de ce système complexe pour les novices et les utilisateurs généraux.

Aperçu de l'Architecture d'Apprentissage par Renforcement

Le cadre d'apprentissage par renforcement d'Open-Reasoner-Zero se trouve principalement dans le répertoire orz/ppo/. Ce répertoire héberge les composants essentiels pour la mise en œuvre des algorithmes PPO et GRPO, tels que les optimiseurs, les acteurs, les modèles et les tampons de rejeu. L'architecture globale adopte une conception distribuée, permettant l'entraînement sur plusieurs GPU et le déploiement de modèles à grande échelle.

Composants Majeurs

  1. Composant d'Optimisation : Défini dans orz/ppo/trainer.py, la classe RayPPOTrainer orchestre l'ensemble du processus d'entraînement. Elle gère la collecte de données, les mises à jour du modèle et l'évaluation des performances.
  2. Composant Acteur : Les classes comme BasePPORole et RayActor, implémentées dans orz/ppo/actors.py, sont responsables de l'exécution de la politique et de l'interaction avec l'environnement, jouant un rôle crucial dans la collecte des données d'entraînement.
  3. Composant Modèle : orz/ppo/models.py contient les définitions des réseaux de politique et de valeur, supportant diverses architectures de modèles allant de 14 millions à 32 milliards de paramètres.
  4. Tampon de Rejeu : L'implémentation du mécanisme d'expérience de rejeu dans orz/ppo/replay_buffer.py permet le stockage et l'échantillonnage efficaces des données d'entraînement, améliorant ainsi la rapidité d'apprentissage.

Détails d'Implémentation de l'Algorithme PPO

PPO (Proximal Policy Optimization) constitue l'algorithme d'apprentissage par renforcement fondamental d'Open-Reasoner-Zero. Son principe central est de stabiliser l'entraînement en limitant l'amplitude des mises à jour de la politique.

Implémentation Clé de PPO

Dans orz/ppo/actors.py, le constructeur de la classe BasePPORole initialise le paramètre essentiel de PPO :


def __init__(self, clip_eps: float = 0.2) -> None:
   # Initialisation du paramètre epsilon de troncature pour PPO
   self.clip_eps = clip_eps
   

Ce paramètre clip_eps régule l'ampleur des mises à jour de la politique, étant un élément clé pour assurer la stabilité de l'algorithme PPO.

Support de l'Entraînement Distribué

Open-Reasoner-Zero prend en charge l'entraînement distribué via orz/exp_engine/parallels/orz_distributed_c10d.py, permettant ainsi à l'algorithme PPO de fonctionner efficacement dans des environnements multi-GPU.

Améliorations Innovantes avec GRPO

GRPO (Generalized Proximal Policy Optimizaton) représente une amélioration novatrice d'Open-Reasoner-Zero par rapport à PPO. Il se distingue principalement par la conception de la fonction de récompense et l'optimisation des mises à jour de politique.

Localisation de l'Implémentation GRPO

L'implémentation de GRPO se retrouve dans les scripts expérimentaux tels que playground/orz_7b_ppo.py. Elle améliore la stabilité de l'entraînement grâce à une technique de normalisation des récompenses :


# GRPO
if self.cfg.use_grpo:
   self.writer.add_scalar("grpo_raw_reward", np.mean(scores), self.global_step)
   # Normalisation des récompenses GRPO
   for i, prompt in enumerate(prompts):
       scores[i] -= np.mean(pass_at_n_dict[prompt])
       if std := np.std(pass_at_n_dict[prompt]) > 0:
           scores[i] /= std
   

Ce fragment de code illustre comment GRPO normalise les récompenses en soustrayant la moyenne et en divisant par l'écart-type, ce qui contribue à améliorer la stabilité de l'entraînement et la vitesse de convergence.

Comparaison et Analyse des Performances

Open-Reasoner-Zero propose des comparaisons de performances pour différents modèles (de 7 milliards à 32 milliards de paramètres) sur plusieurs tâches d'inférence.

Les graphiques ci-dessus illustrent les performances des modèles 7B et 32B d'Open-Reasoner-Zero sur les ensembles de données AIME2024, AIME2025, MATH500 et GPQA Diamond. On observe une amélioration continue de la précision du modèle avec l'augmentation des étapes d'entraînement, et le modèle 32B surpasse systématiquement le modèle 7B, démontrant ainsi l'avantage des modèles à grande échelle pour les tâches d'inférence.

Dynamiques d'Entraînement et Analyse des Récompenses

Les dynamiques d'apprentissage des modèles peuvent être analysées via l'évolution des récompenses et la longueur des réponses dans le processus d'entraînement d'Open-Reasoner-Zero.

Le graphique de gauche montre l'évolution des récompenses d'entraînement pour les modèles de différentes tailles, tandis que celui de droite affiche la longueur des réponses en fonction des étapes d'entraînement. Il est notable que le modèle 32B (ORZ-32B) présente des valeurs de récompense et une longueur de réponse significativement plus élevées que les modèles plus petits, indiquant que les modèles de plus grande taille sont capables de générer des résultats d'inférence plus longs et de meilleure qualité.

Démarrage Rapide et Configuraton Expérimentale

Open-Reasoner-Zero fournit plusieurs scripts de configuration expérimentale pour faciliter la prise en main et la réalisation d'expériences personnalisées.

Scripts Expérimentaux Principaux

  • playground/orz_7b_ppo.py : Configuration d'entraînement PPO pour le modèle 7B.
  • playground/orz_7b_grpo.py : Configuration d'entraînement GRPO pour le modèle 7B.
  • playground/orz_32b_ppo.py : Configuration d'entraînement PPO pour le modèle 32B.

Premiers Pas

Pour commencer avec Open-Reasoner-Zero, clonez d'abord le dépôt :


git clone https://gitcode.com/gh_mirrors/op/Open-Reasoner-Zero
   

Vous pouvez ensuite utiliser les scripts expérimentaux fournis pour exécuter des tâches d'entraînement prédéfinies, par exemple :


python playground/orz_7b_ppo.py
   

Conclusion et Perspectives

Grâce à l'implémentation approfondie des algorithmes PPO et GRPO, Open-Reasoner-Zero offre un cadre d'apprentissage par renforcement puissant pour les tâches d'inférence. Son architecture distribuée supporte l'entraînement de modèles à grande échelle, tandis que l'algorithme GRPO innovant améliore encore la stabilité de l'entraînement et les performances d'inférence. Avec l'augmentation de la taille des modèles, Open-Reasoner-Zero continue de démontrer des performances améliorées sur diverses tâches d'inférence, révélant un potentiel considérable.

À l'avenir, l'équipe d'Open-Reasoner-Zero poursuivra l'optimisation des implémentations algorithmiques, explorera l'entraînement de modèles encore plus vastes et étendra la portée à davantage de scénarios de tâches d'inférence, afin de fournir à la communauté open-source des outils d'inférence plus performants.

Étiquettes: Apprentissage par renforcement PPO grpo Inference Architecture Distribuée

Publié le 3 octobre à 04h50