Low-precision rollout normalization can overflow its divisor and erase advantages
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- machine-learning
Direzione di ricerca
Inizia da normalize_advantages_by_rollout in agentlightning/verl/per_rollout_loss.py e segui come costruisce il divisore e accumula i conteggi dei token. Riproduci l’esempio float16 dell’issue, quindi controlla su CPU i casi indicati per float16, bfloat16, float32, float64 e i gradienti. Il lavoro è terminato quando i conteggi restano esatti, il divisore e la divisione usano almeno float32, il tipo di dato dell’output del chiamante viene preservato e il raggruppamento dei rollout e il divisore delle righe addestrate restano invariati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
normalize_advantages_by_rollout constructs the rollout divisor in advantages.dtype. With float16 advantages, a representable normalized result can become zero because the intermediate divisor overflows. Token counts are also converted to the advantage dtype before accumulation, which rounds counts such as 257 in bfloat16.
Reproduced on main 05c7fe133175653e48c990546a3509e52dc56512, Python 3.12.2, torch 2.13.0+cpu, VERL 0.8.0, with the locked verl-cpu development environment:
import torch
from agentlightning.verl.per_rollout_loss import normalize_advantages_by_rollout
mask = torch.ones(2, 1024, dtype=torch.long)
advantages = torch.ones(2, 1024, dtype=torch.float16)
scaled = normalize_advantages_by_rollout(
advantages, mask, ["A", "A"], num_trained_rows=64
)
print(scaled.float().sum().item()) # 0.0; expected 1 / 64 == 0.015625
The divisor is 2048 * 64 = 131072, which becomes infinity in float16, while each correctly normalized advantage (1 / 131072) is representable. This can erase the policy-gradient contribution before the loss function sees it. This is separate from reward conversion before GRPO (#639/#640): the input here is an already nonzero advantage tensor.
Expected: retain exact token counts and evaluate the existing divisor and division in at least float32, then preserve the caller's output dtype. The rollout grouping and the existing trained-row divisor stay the same. A focused patch can cover float16 overflow, bfloat16 token-count rounding, float32/float64 controls, and gradient propagation on CPU.
This is a numerical reproduction, not a model-training or GPU-quality result. Codex assisted the investigation.
- Lingua principale
- Python
- Stelle
- 18.8k
- Fork
- 1.7k
- Merge medio
- 3g 13h
- PR unite (30g)
- 10
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/agent-lightning
-
RayPPOTrainer._dump_generations() missing gts argument in _train_step callForse già presa @yunkai-yyk l’ha presa 253 giorni fa. Apertabug v0.x verl
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
microsoft/agent-lightning#492 ·
I maintainer di solito rispondono entro 2 giorni
-
enhancement store v0.x
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
microsoft/agent-lightning#372 · 10 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
Terminal rollout projection drops numeric dataset ID zeroForse già presa @notoufa l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
microsoft/agent-lightning#659 ·
I maintainer di solito rispondono entro 2 giorni
-
Gateway loses model-request events for malformed or non-object upstream JSONForse già presa @JianhaoYu-AI l’ha presa 3 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 20/100
microsoft/agent-lightning#655 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
microsoft/agent-lightning#650 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di microsoft/agent-lightning
Issue simili
-
changelog investigate
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
ramnes/notion-sdk-py#433 ·
-
docs pkg:core
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
pydantic/pydantic-ai#11929 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
intake/intake-esm#789 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
MemMachine/MemMachine#1877 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
openedx/openedx-authz#579 ·
I maintainer di solito rispondono entro 1 giorno