Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions MyIA.AI.Notebooks/RL/rl_15_grpo_group_relative_policy.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,14 @@
"print(f\"Device: {DEVICE}\") # VRAM probe in next cell (REPAIR c.692 narrow worker, nvidia-smi + max_memory_allocated real)\n"
]
},
{
"cell_type": "markdown",
"id": "d90c79e4",
"metadata": {},
"source": [
"**Lecture de la sortie — le device de CE run.** `Device: cuda` : la cellule de detection a trouve un GPU et l'a retenu pour l'execution qui suit. Le paragraphe de setup ci-dessus precise le contrat : la detection ne REQUIERT pas CUDA — sur une machine CPU-only, la meme cellule afficherait `Device: cpu` et tout le notebook s'executerait quand meme (reproductibilite CPU garantie). La sortie n'est donc pas une exigence mais un temoin : ce run commite a ete execute sur GPU, et la probe VRAM de la section suivante s'appuie precisement sur ce device.\n"
]
},
{
"cell_type": "markdown",
"id": "vram_probe_md",
Expand Down Expand Up @@ -372,6 +380,14 @@
"print(\"[result] _vram_result =\", _json.dumps(_vram_result, indent=2))"
]
},
{
"cell_type": "markdown",
"id": "7324a102",
"metadata": {},
"source": [
"**Lecture chiffree — la probe VRAM en nombres bruts.** Avant le verdict, la sortie pose le terrain. La ligne `[nvidia-smi]` d'abord, citee telle quelle : `NVIDIA GeForce RTX 3070 Laptop GPU, 8192 MiB, 749 MiB, 7270 MiB, 610.88` — 8 192 MiB totaux, 749 occupes, 7 270 libres au moment de la mesure. Puis `[model] params=9155 (target <50K), device=cuda` : le modele teste fait exactement 9 155 parametres, loin sous le plafond de 50K annonce. Sous l'en-tete `[VRAM peak after 10 GRPO steps]` : `peak allocated: 17.68 MiB`, `peak reserved: 22.00 MiB`, `final allocated: 16.41 MiB`, `GPU total: 8192 MiB` — la borne visee etant `6144 MiB`, le verdict `VRAM < 6 GB sur RTX 3070 ? YES - borne PROUVEE` dispose d'une marge de plus de 300x. Point de vigilance pour le lecteur attentif : la prose du verdict ci-dessous cite un pic a `17.44 MiB` alors que la sortie commitee affiche `17.68 MiB` (le JSON interne donne meme `vram_peak_mib: 17.6845703125`) — deux mesures de runs proches mais distinctes ; l'ecart est sans consequence sur la borne mais merite d'etre note (defaut preexistant, signale, non corrige ici).\n"
]
},
{
"cell_type": "markdown",
"id": "vram_probe_verdict",
Expand Down Expand Up @@ -499,6 +515,14 @@
"print(f\"obs_dim={obs_dim}, n_actions={n_actions}\")\n"
]
},
{
"cell_type": "markdown",
"id": "b457a3f7",
"metadata": {},
"source": [
"**Lecture de la sortie — l'espace du probleme pose par deux entiers.** `obs_dim=4, n_actions=2` : CartPole-v1 en une ligne. Le reseau de politique decrit plus haut (`4-64-64-2`) se lit exactement sur ces deux nombres — 4 entrees d'observation, 2 logits de sortie (un par action), les deux couches cachees de 64 faisant tout le travail d'interpolation. C'est aussi ce qui borne la probe VRAM : un reseau de 9 155 parametres, la taille du probleme etant dans l'ordre de grandeur du CartPole classique, pas d'un LLM — la section suivante comparera PPO et GRPO sur CE terrain.\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
Expand Down Expand Up @@ -945,6 +969,14 @@
" print(f\"seed={seed}: PPO final30 mean={np.mean(ppo_rewards[-30:]):.2f}, GRPO final30 mean={np.mean(grpo_rewards[-30:]):.2f}\")\n"
]
},
{
"cell_type": "markdown",
"id": "bdc1ea0c",
"metadata": {},
"source": [
"**Lecture chiffree — les six lignes par seed, avant tout agregat.** La sortie egraine les six seeds : `seed=0: PPO 459.00 vs GRPO 129.73`, `seed=1: 236.93 vs 188.27`, `seed=7: 315.93 vs 195.57`, `seed=42: 390.00 vs 227.43`, `seed=99: 399.13 vs 197.13`, `seed=123: 368.27 vs 86.00`. Trois lectures par seed : PPO devant sur les SIX seeds (6/6, aucun renversement) ; les ecarts vont de `48.66` (seed=1, le seul cas ou GRPO approche) a `329.27` (seed=0) et `282.27` (seed=123, ou GRPO s'effondre a 86) ; et le fait le plus tranchant — le MEILLEUR GRPO (227.43, seed=42) reste sous le PIRE PPO (236.93, seed=1) : les deux distributions ne se chevauchent pas, l'ecart n'est pas porte par une ou deux seeds extremes mais par l'ensemble.\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
Expand Down Expand Up @@ -1021,6 +1053,14 @@
"print(f\"IC95% delta (bootstrap): [{ci_low:.2f}, {ci_high:.2f}]\")\n"
]
},
{
"cell_type": "markdown",
"id": "435ae034",
"metadata": {},
"source": [
"**Lecture chiffree — les agregats, reverifies ligne par ligne.** `PPO : mean=361.54, std=69.97` et `GRPO : mean=170.69, std=47.78` : les moyennes se re-derivent des six seeds ci-dessus (2169.26/6 = 361.54 pour PPO, 1024.13/6 = 170.69 pour GRPO), le delta affiche `-190.86` est la difference exacte des deux moyennes. La ligne `edge (naive) = -3.24sigma` se cite telle quelle — le notebook ne detaille pas son denominateur dans la sortie, on ne le re-derive pas ici. Le test apparie : `Wilcoxon signed-rank (n=6, ties=0): stat=0.0, p-value=0.0312` — stat=0 signifie que les SIX differences sont du meme signe, et p=0.0312 atteint exactement le minimum n=6 que la prose ci-dessus (REPAIR c.644, passage de 4 a 6 seeds) rendait atteignable. L'intervalle `IC95% delta (bootstrap): [-265.41, -117.11]` exclut 0 des deux cotes.\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
Expand Down Expand Up @@ -1066,6 +1106,14 @@
"print(f\"VERDICT : {verdict}\")\n"
]
},
{
"cell_type": "markdown",
"id": "f217b544",
"metadata": {},
"source": [
"**Lecture du verdict — les trois conditions de la prose, reunies par cette execution.** La sortie rend `VERDICT : PPO BEATS GRPO (edge<=-2sigma AND Wilcoxon p<0.05 AND IC95% excludes 0)`. Lu contre les trois conditions posees par la section Lecture du resultat ci-dessous : edge au-dela de 2 sigma, Wilcoxon p=0.0312 < 0.05, IC95% excluant 0 — la conjonction est complete, le verdict directionnel est atteint. Note de lecture honnete, a ne pas gommer : la motivation ci-dessus documente les sorties v3 (PPO 299.36 +- 55.26 vs GRPO 197.65 +- 104.99, edge -1.27sigma, p=0.0938, verdict INCONCLUSIVE, et std_GRPO ~ 2x std_PPO) ; les sorties commitees ici sont celles d'une execution ULTERIEURE, qui inverse meme le rapport de variance (47.78 contre 69.97 — GRPO MOINS variable que PPO sur cette execution). La prose historique et la sortie actuelle divergent sur les chiffres comme sur le verdict : les sorties commitees font foi pour ce run, la reconciliation de la prose appartient au owner (defaut preexistant, signale, non corrige dans cette tranche md-only).\n"
]
},
{
"cell_type": "markdown",
"id": "c6f43034",
Expand Down
Loading