Close Menu
NCIJ Network NCIJ Network
    What's Hot

    Estrogen therapy is linked to fewer signs of Alzheimer’s in the brain

    August 12, 2026

    Bolsonaro’s easing of gun control fueled illegal hunting, study indicates

    August 12, 2026

    An election night error overshadowed Milwaukee’s improvements at processing absentee ballots

    August 12, 2026
    Facebook X (Twitter) Instagram
    Trending
    • Estrogen therapy is linked to fewer signs of Alzheimer’s in the brain
    • Bolsonaro’s easing of gun control fueled illegal hunting, study indicates
    • An election night error overshadowed Milwaukee’s improvements at processing absentee ballots
    • Russia-Ukraine War Escalates With Black Sea Strikes, North Korean Missiles
    • Trump’s press secretary Karoline Leavitt leaving role, president says – US politics live | Donald Trump
    • Trump Is Sued Over Plan to Sell Early Access to His Truth Social Posts
    • Amazon will train on Twitch streamers’ content by default, unless they opt out
    • AllenAI Open Instruct Tulu 3 Post-Training with SFT, DPO, RLVR, GRPO, and Verifier-Based Evaluation
    • About
      • Our Team
      • Editorial Policy
      • Editorial Independence
      • International Support
    • Trust & Standards
      • AI Usage Policy
      • Conflict of Interest Policy
      • Corrections Policy
      • Ethics Policy
      • Fact-Checking Policy
      • Source Protection
    • Get Involved
      • Guide for Sources
      • Support Independent Journalism
    • Legal
      • Cookie Policy
      • Privacy Policy
      • Terms of Use
    Facebook X (Twitter) Instagram
    NCIJ Network NCIJ Network
    Wednesday, August 12
    • Home
    • World
    • Ai
    • Business
    • Politics
    • Health
    • Crypto
    • Science
    • Technology
    • Cybersecurity
    • Defense & Security
    • Economy
    • Energy
    • Europe
    • More
      • Fact Check
      • Investigations
      • Opinion & Analysis
      • Environment
    NCIJ Network NCIJ Network
    Home»Artificial Intelligence

    AllenAI Open Instruct Tulu 3 Post-Training with SFT, DPO, RLVR, GRPO, and Verifier-Based Evaluation

    NCIJ NETWNCIJ NETWORKBy NCIJ NETWNCIJ NETWORKAugust 12, 2026 Artificial Intelligence No Comments3 Mins Read
    Share
    Facebook Twitter LinkedIn Pinterest Email

    print("n" + "=" * 90); print("STAGE 3 — RLVR / GRPO"); print("=" * 90)
    grpo_cfg = types.SimpleNamespace(loss_fn=GRPOLossType.dapo, clip_lower=cfg.clip_lower,
                                    clip_higher=cfg.clip_higher, kl_estimator=cfg.kl_estimator)
    _gen_eos = getattr(getattr(model, "generation_config", None), "eos_token_id", None)
    _terms = {tok.eos_token_id, tok.pad_token_id}
    _terms |= set(_gen_eos) if isinstance(_gen_eos, (list, tuple)) else {_gen_eos}
    TERMINATORS = torch.tensor(sorted(t for t in _terms if t is not None), device=DEV)
    def token_logps(seq, attn, temperature, grad=True):
       pos = (attn.cumsum(-1) - 1).clamp(min=0)
       ctx = torch.enable_grad() if grad else torch.no_grad()
       with ctx, amp():
           logits = model(input_ids=seq, attention_mask=attn, position_ids=pos).logits
       return per_token_logps_fn(logits / temperature, seq)
    def rollout(batch_rows):
       G = cfg.samples_per_prompt
       ids = [r["input_ids_prompt"] for r in batch_rows]
       P = max(len(x) for x in ids)
       pin = torch.tensor([[tok.pad_token_id] * (P - len(x)) + x for x in ids], device=DEV)
       pmask = torch.tensor([[0] * (P - len(x)) + [1] * len(x) for x in ids], device=DEV)
       model.eval()
       with torch.no_grad(), amp(), with_cache():
           seq = model.generate(input_ids=pin, attention_mask=pmask, do_sample=True,
                                temperature=cfg.grpo_temperature, top_p=1.0, top_k=0,
                                max_new_tokens=cfg.grpo_max_new, num_return_sequences=G,
                                pad_token_id=tok.pad_token_id)
       model.train()
       resp = seq[:, P:]
       is_term = torch.isin(resp, TERMINATORS)
       first = torch.where(is_term.any(1), is_term.float().argmax(1),
                           torch.full((resp.shape[0],), resp.shape[1] - 1, device=DEV))
       idx = torch.arange(resp.shape[1], device=DEV).unsqueeze(0)
       resp_mask = (idx <= first.unsqueeze(1)).long()
       full_mask = torch.cat([torch.zeros(seq.shape[0], P, dtype=torch.long, device=DEV), resp_mask], 1)
       attn = torch.cat([pmask.repeat_interleave(G, 0), resp_mask], 1)
       texts = tok.batch_decode(resp, skip_special_tokens=True)
       gts = [r["ground_truth"] for r in batch_rows for _ in range(G)]
       srcs = [r["dataset"] for r in batch_rows for _ in range(G)]
       scores = verify_batch(texts, gts, srcs)
       per_prompt = scores.reshape(-1, G)
       mean_g = np.repeat(per_prompt.mean(-1), G, 0)
       if cfg.adv_norm == "standard":
           adv = (scores - mean_g) / (np.repeat(per_prompt.std(-1), G, 0) + 1e-8)
       else:
           adv = scores - mean_g
       adv_t = torch.tensor(adv, device=DEV, dtype=torch.float32).unsqueeze(1).expand_as(full_mask.float())
       return seq, attn, full_mask, adv_t, scores, texts
    opt, sched, scaler = new_opt(cfg.grpo_lr, cfg.grpo_iters * cfg.grpo_inner_epochs)
    order = list(range(len(rlvr_ds))); random.shuffle(order)
    for it_i in range(cfg.grpo_iters):
       rows = [rlvr_ds[order[(it_i * cfg.prompts_per_iter + j) % len(rlvr_ds)]]
               for j in range(cfg.prompts_per_iter)]
       seq, attn, mask, adv, scores, texts = rollout(rows)
       with torch.no_grad():
           old_lp = torch.cat([token_logps(seq[i:i + cfg.grpo_micro_bs], attn[i:i + cfg.grpo_micro_bs],
                                           cfg.grpo_temperature, grad=False)
                               for i in range(0, seq.shape[0], cfg.grpo_micro_bs)])
           with model.disable_adapter():
               ref_lp = torch.cat([token_logps(seq[i:i + cfg.grpo_micro_bs], attn[i:i + cfg.grpo_micro_bs],
                                               cfg.grpo_temperature, grad=False)
                                   for i in range(0, seq.shape[0], cfg.grpo_micro_bs)])
       n_chunks = math.ceil(seq.shape[0] / cfg.grpo_micro_bs)
       for ep in range(cfg.grpo_inner_epochs):
           stats = {"pg": 0.0, "kl": 0.0, "clip": 0.0}
           for i in range(0, seq.shape[0], cfg.grpo_micro_bs):
               sl = slice(i, i + cfg.grpo_micro_bs)
               new_lp = token_logps(seq[sl], attn[sl], cfg.grpo_temperature, grad=True)
               new_lp_, old_lp_, ref_lp_ = new_lp[:, :-1], old_lp[sl][:, :-1], ref_lp[sl][:, :-1]
               m_, a_ = mask[sl][:, 1:], adv[sl][:, 1:]
               ratio = torch.exp((new_lp_ - old_lp_).clamp(-20, 20))
               pg, clipfrac, kl = compute_grpo_loss(new_lp_, ratio, a_, ref_lp_, grpo_cfg,
                                                    torch.ones_like(ratio))
               loss = masked_mean(pg + cfg.grpo_kl_beta * kl, m_) / n_chunks
               scaler.scale(loss).backward()
               with torch.no_grad():
                   stats["pg"] += masked_mean(pg.detach(), m_).item() / n_chunks
                   stats["kl"] += masked_mean(kl.detach(), m_).item() / n_chunks
                   stats["clip"] += masked_mean(clipfrac.detach(), m_).item() / n_chunks
               del new_lp, ratio, pg, kl
           step_opt(opt, sched, scaler)
           if DEV == "cuda":
               torch.cuda.empty_cache()
           print(f"  grpo iter {it_i+1}/{cfg.grpo_iters} ep{ep+1}  reward {scores.mean():.3f} "
                 f"(solved {int(scores.sum())}/{len(scores)})  pg {stats['pg']:+.4f}  "
                 f"kl {stats['kl']:.4f}  clipfrac {stats['clip']:.3f}")
    print("n  sample rollout ->", textwrap.shorten(texts[0].replace("n", " "), 220))
    rlvr_acc = evaluate("after-rlvr", eval_rows)
    print("n" + "=" * 90)
    print(f"{'stage':<14}{'verifier acc':>14}")
    for name, val in [("base", f"{base_acc:.3f}"), ("sft", f"{sft_acc:.3f}"),
                     ("dpo", f"{dpo_acc:.3f}"), ("rlvr", f"{rlvr_acc:.3f}")]:
       print(f"{name:<14}{val:>14}")
    print("=" * 90)
    OUT = "/content/tulu-mini" if os.path.isdir("/content") else "./tulu-mini"
    merged = model.merge_and_unload()
    merged.save_pretrained(OUT); tok.save_pretrained(OUT)
    print(f"merged checkpoint -> {OUT}  (equivalent to `python open_instruct/merge_lora.py`)")
    
    AllenAI DPO evaluation GRPO Instruct open PostTraining RLVR SFT Tulu VerifierBased
    NCIJ NETWNCIJ NETWORK
    • Website

    Keep Reading

    OCC Says It’s ‘Open For Business’ As Crypto Firms Line Up For Bank Charters

    Google tests AMIE for clinical video consultations

    Daybreak models are now available on AWS

    Rybakina defeats Osaka, advances to Canadian Open semifinals to play Gauff | Tennis News

    NVIDIA AI Releases Nemotron 3.5 Lightning: A 30B Open MoE with 3B Active Parameters, and NeMo Switchyard Model Router

    Xiaomi’s MiLM Plus Releases PROVE: Perception-Aligned Object Removal Metrics RC-S and RC-T With a Real-World Video Benchmark

    Add A Comment
    Leave A Reply Cancel Reply

    Editors Picks

    Estrogen therapy is linked to fewer signs of Alzheimer’s in the brain

    August 12, 2026

    Bolsonaro’s easing of gun control fueled illegal hunting, study indicates

    August 12, 2026

    An election night error overshadowed Milwaukee’s improvements at processing absentee ballots

    August 12, 2026

    Russia-Ukraine War Escalates With Black Sea Strikes, North Korean Missiles

    August 12, 2026
    Latest Posts

    Record-breaking wildfires burned nearly 100,000 hectares in France, interior minister says – POLITICO

    July 25, 2026

    Former top US food safety official says Trump’s handling of cyclospora is ‘catastrophic’ | Trump administration

    July 25, 2026

    Did Trump collapse while trying to get into vehicle?

    July 25, 2026

    Subscribe to News

    Get the latest sports news from NewsSite about world, sports and politics.

    NCIJ Network is an independent digital news platform delivering trusted investigative journalism, European and global news, in-depth analysis, and fact-based reporting with accuracy, transparency, and integrity.

    Facebook X (Twitter) Instagram Pinterest YouTube

    Estrogen therapy is linked to fewer signs of Alzheimer’s in the brain

    August 12, 2026

    Bolsonaro’s easing of gun control fueled illegal hunting, study indicates

    August 12, 2026

    An election night error overshadowed Milwaukee’s improvements at processing absentee ballots

    August 12, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    Type above and press Enter to search. Press Esc to cancel.