← Back to list

DPO Replaced RLHF at My Shop. Here’s What Actually Changed.

A working engineer’s honest account of scrapping a PPO pipeline, what we gained, what we lost, and the new post-training landscape that…

Dewansh Shekhar Singh · 2026-05-31 17:19 · 0 claps · 10.5 min read
#llm #mlops #agentic-ai #design-systems
Open on Medium ↗
Wiki topics: LLM · Large Language Models AGT · AI Agents FT · Fine-tuning & Adaptation OPS · LLMOps & Inference PRD · Product Design

DPO Replaced RLHF at My Shop. Here’s What Actually Changed.

A working engineer’s honest account of scrapping a PPO pipeline, what we gained, what we lost, and the new post-training landscape that makes both arguments look slightly outdated.

We killed our RLHF pipeline on a Tuesday afternoon.

No ceremony. No post-mortem. A Slack message to the team: “PPO stack is archived. DPO branch is now main. Let’s see how this goes.”

It had taken us four months to build the original RLHF pipeline. A reward model trained on 40,000 human preference annotations. A PPO loop carefully tuned to avoid reward hacking. KL coefficient dialed through a dozen runs to keep the policy from drifting into gibberish. Separate checkpoint management for the SFT model, the reward model, and the policy. A custom monitoring setup because the standard tooling for observing PPO training was either nonexistent or terrible.

It was, honestly, a beautiful piece of engineering. It was also an absolute nightmare to operate.

Switching to DPO took one engineer, three days, and about $200 in compute.

I want to be precise about what that switch bought us, what it cost us, and — more importantly — why by mid-2026 both “RLHF” and “DPO” feel like slightly outdated answers to a question the field has now reframed entirely.

What RLHF with PPO Actually Looks Like in Practice

Before I explain why we dropped it, let me explain what we were actually running. Because most of the “RLHF is complex” discourse is abstract. The complexity is very concrete.

A production RLHF pipeline with PPO has four distinct phases, each with its own failure modes:

Phase 1 — Supervised Fine-Tuning (SFT). Fine-tune the base model on high-quality demonstration data. This part is fine. It’s just supervised learning. The failure modes are the standard fine-tuning failure modes: data quality, learning rate, catastrophic forgetting. Manageable.

Phase 2 — Reward Model Training. Train a separate model to predict human preference scores from comparison pairs. This model needs to generalize well enough to score novel outputs, not just interpolate the training distribution. It has its own data requirements, its own hyperparameters, its own evaluation methodology. You’re now maintaining two separate model training pipelines before you’ve even started RL.

Phase 3 — PPO Training. Run the RL loop. The policy generates outputs, the reward model scores them, PPO updates the policy weights. While keeping the policy close enough to the SFT baseline that it doesn’t collapse into reward-hacking gibberish. The KL divergence coefficient — the parameter that controls how far the policy is allowed to drift from the SFT model — needs to be tuned carefully. Too loose and your model learns to say confidently wrong things if the reward model scores confidence highly. Too tight and you’re not actually learning anything new.

Phase 4 — Checkpoint management across all three models. SFT checkpoint, reward model checkpoint, policy checkpoint at each PPO iteration. If anything gets out of sync — wrong reward model evaluating the wrong policy version — your training signal is corrupted and you won’t necessarily know immediately.

We ran four separate GPU jobs at peak. Monitoring four sets of training curves. Writing custom tooling to correlate reward model scores with human preference labels on a held-out set, because the reward model is itself a learned approximation and needs its own eval discipline.

A 2025 patent from CloudWalk Technology, cited in PatSnap’s analysis of the RLHF landscape, put it cleanly: RLHF training using PPO “consumes large computational resources, is prone to convergence difficulties due to RL’s inherent instability, and is extremely sensitive to hyperparameters such as the KL divergence coefficient — small changes can produce dramatic performance swings.”

That was our lived experience, documented in patent language.

What DPO Actually Does Differently

DPO — Direct Preference Optimization, introduced in the 2023 Rafailov et al. paper — makes a mathematical observation that I find genuinely elegant: you don’t need an explicit reward model. The preference optimization objective can be expressed directly as a supervised loss over preference pairs, using the policy model itself as an implicit reward function.

The practical consequence is dramatic. The entire pipeline collapses:

  • No reward model to train, evaluate, and maintain
  • No PPO sampling loop
  • No KL coefficient to tune
  • No multi-model checkpoint coordination
  • Training looks like supervised fine-tuning, because it basically is

Instead of the four-phase RLHF pipeline, DPO is: take your preference data as (prompt, chosen response, rejected response) triples, compute a contrastive loss that pushes the policy toward chosen and away from rejected relative to a frozen reference model, train.

In memory terms: PPO requires holding four models in GPU memory simultaneously — SFT model, reward model, policy, and value function. DPO requires two: the policy being trained and the frozen reference model. On a 13B model, the difference between four models and two models in memory is the difference between needing 8 A100s and needing 2.

The infrastructure simplification is real and it’s not marginal. It’s the difference between a system that requires a dedicated ML engineer to babysit and a system that runs unattended through a standard training job.

The Benchmarks: What DPO Actually Gets You

Here’s where I’ll try to be honest rather than tribal.

DPO performs comparably to PPO on conversational alignment tasks — dialogue quality, helpfulness, instruction following, summarization. On MT-Bench and AlpacaEval 2, well-tuned DPO consistently matches or exceeds PPO RLHF at a fraction of the infrastructure cost. The simplification doesn’t come at a quality tax for these use cases.

It does come at a quality tax for complex reasoning and code generation. A 2024 study comparing DPO and PPO on multiple benchmarks found PPO outperforming DPO specifically on challenging code generation tasks. The intuition is straightforward: PPO can explore the output space dynamically during training, discovering responses that a static preference dataset never contained. DPO is bounded by what’s in your preference pairs.

For tasks where you can enumerate “good” and “bad” outputs in a dataset — which covers most alignment use cases for chat assistants, content generation, and conversational products — DPO is the right default. For tasks requiring emergent capability improvement, especially in structured domains with verifiable correctness, DPO hits a ceiling.

Our use case — a domain-specific content assistant with quality and tone alignment requirements — fell firmly in the first category. DPO gave us equivalent quality at dramatically lower operational cost. For a team with a coding assistant or a math tutoring product, the calculus is different.

The more interesting data point: SimPO (Simple Preference Optimization), a reference-free DPO variant from Princeton NLP, outperforms standard DPO by 6.4 points on AlpacaEval 2 and 7.5 points on Arena-Hard with comparable simplicity. It eliminates the reference model entirely — meaning only one model in memory during training, not two. Gemma-2–9B fine-tuned with SimPO achieved a 72.4% length-controlled win rate on AlpacaEval 2, hitting first on the leaderboard at time of publication.

The DPO family is not static. If you implemented vanilla DPO eighteen months ago and haven’t revisited it, you’re leaving measurable quality on the table.

What We Actually Gained From the Switch

Let me be specific about the operational changes, because “infrastructure simplification” is easy to say and easy to underweight.

Training iteration speed went from days to hours. The PPO pipeline had a long tail of failure modes that extended wall-clock iteration time beyond the raw compute time. Reward model eval runs. Hyperparameter sweeps to stabilize KL. Manual review of sampled outputs to check for reward hacking. The DPO pipeline has a tight loop: update preference data, run training job, evaluate. We went from 3–5 day iteration cycles to same-day.

GPU cost per training run dropped roughly 60%. The four-model PPO setup versus two-model DPO setup on a 13B model: roughly 8 A100-hours for a full PPO run versus 3 A100-hours for an equivalent DPO run. At $2/hr per A100, that’s $16 versus $6 per run. Across 50 iterations over a project, the compound savings are real.

The reward model maintenance burden disappeared. This is underrated. A reward model degrades over time as your distribution shifts. Keeping it current requires continuous human annotation, retraining cycles, and evaluation to verify it’s still a reliable signal. Dropping the reward model dropped an entire ongoing maintenance obligation.

Debugging became tractable. When DPO training behaves unexpectedly, the debugging surface is a supervised loss on preference pairs. When PPO training behaves unexpectedly, you’re debugging across a reward model, a value function, a KL coefficient, sampling dynamics, and reward hacking pathologies simultaneously. I have lost days of my life to PPO debugging sessions that DPO would have made irrelevant.

Where RLHF Still Wins

I want to be direct about this, because the post-DPO discourse tends toward overclaiming.

RLHF with PPO earns its complexity for frontier-scale alignment. Every major frontier model — GPT-4, Claude 3.5, Gemini 1.5 — uses RLHF in some form. The online feedback dynamics of PPO, where the policy generates fresh outputs that the reward model scores during training, allow the system to discover behaviors that no static preference dataset contains. At frontier scale, with a real reward model trained on millions of human annotations and the compute budget to run the full pipeline properly, RLHF extracts quality that DPO cannot match.

When your policy distribution is non-stationary, DPO goes stale. DPO trains on a fixed preference dataset. If your model is improving rapidly — either through concurrent fine-tuning or through iterative training rounds — the preference pairs you collected against an earlier model version become less relevant. Online RLHF generates fresh comparisons from the current policy throughout training. DPO can approximate this with iterative rounds (collect new preferences from the current checkpoint, re-run DPO), but it adds friction.

For structured output tasks with verifiable correctness, neither DPO nor PPO is the right answer anymore. This brings us to the part of this post that makes everything above feel slightly dated.

The Real Shift: RLVR Has Entered the Stack

Here’s the development that changes the framing of the DPO vs. RLHF debate entirely.

For tasks where correctness is programmatically verifiable — code that passes unit tests, math solutions with checkable answers, structured JSON that parses, tool calls that succeed or fail — there is a better reward signal than either human preferences or a learned reward model. There is ground truth.

RLVR (Reinforcement Learning with Verifiable Rewards) uses this directly. Instead of training a reward model to approximate human preferences, you write a verifier: a function that returns 1 if the output is correct and 0 if it isn’t. Code generation: does the code pass the test suite? Math: is the final answer correct? The reward is binary, programmatic, and perfectly reliable.

DeepSeek-R1 demonstrated that pure RLVR training on reasoning tasks can produce emergent chain-of-thought capabilities — the model spontaneously developing multi-step reasoning behaviors that weren’t in the training data. This is the kind of capability improvement that DPO fundamentally cannot produce. It requires the online exploration dynamics of RL.

The infrastructure for RLVR is simpler than RLHF-with-PPO because you’ve eliminated the learned reward model — but it’s more complex than DPO because you still have a RL loop. GRPO (Group Relative Policy Optimization, introduced by DeepSeek) reduces this complexity by eliminating the separate value function: it estimates advantages by comparing outputs within a group sampled from the same prompt, rather than requiring a critic model. This makes GRPO meaningfully cheaper than PPO while matching or exceeding PPO performance on reasoning tasks.

The practical post-training stack that most serious teams are converging on in 2026 looks like this:

  1. SFT — instruction following, format compliance, domain grounding
  2. DPO / SimPO / KTO — conversational alignment, tone, helpfulness, refusal behavior
  3. GRPO / DAPO with verifiable rewards — reasoning, code, math, structured output

It’s not DPO versus RLHF. It’s a modular pipeline where each component is matched to the feedback signal it handles best.

The β Parameter and the Mistakes Everyone Makes With DPO

A section nobody writes but everyone should read.

DPO has one major hyperparameter that determines how strongly the preference signal influences the policy: β (beta). It controls the KL penalty between the trained policy and the reference model — effectively, how far DPO is allowed to push the model away from its SFT baseline.

High β: the model stays close to the reference. Preference signal is applied conservatively. Safe, but you’re not getting much out of your preference data.

Low β: the model moves aggressively toward preferred outputs. You’ll see stronger alignment on preference dimensions, but increased risk of capability degradation — the model optimizing so hard for the preference signal that it loses general coherence.

The right value is task-dependent and data-dependent, and almost nobody runs a proper sweep on it. Common default is 0.1. I’ve seen cases where the optimal value was 0.01 and cases where 0.5 was right. Run a sweep. It takes a few GPU hours. The quality difference between an untuned and tuned β can be 5–10 points on alignment benchmarks.

The second mistake: treating preference data quality as less important than in RLHF because “it’s just supervised learning.” It is not less important. DPO is particularly sensitive to preference pairs where the margin between chosen and rejected is small — cases where a human annotator was uncertain and could have gone either way. Low-margin pairs add noise to the loss function without adding signal. Research published in 2025 found that selecting high-margin preference data yields 3–8% improvements on AlpacaEval benchmarks using only 10% of the original dataset. Quality over quantity, hard.

The third mistake: skipping the reference model and going straight to SimPO without understanding the tradeoff. SimPO removes the reference model and with it the KL anchor that prevents catastrophic forgetting. It works well when your preference data is high-quality and well-distributed across the model’s capability range. It can degrade general capabilities when the preference data is narrow. Know what you’re giving up before you give it up.

The Decision Tree

If you’re choosing a post-training alignment strategy today:

Conversational alignment, tone, helpfulness, content policy → DPO or SimPO. Mature tooling in TRL, low operational overhead, strong benchmark results, no ongoing reward model maintenance. Default choice for 80% of production alignment use cases.

Code generation, math, structured output, tool use → GRPO or DAPO with verifiable rewards. You have ground truth. Use it. Don’t train a reward model to approximate a signal you can compute exactly.

Frontier-scale capability improvement, non-stationary policy, online feedback requirements → PPO RLHF. Justified at scale with sufficient annotation budget. Not justified for most teams.

Extremely limited annotation budget, binary feedback (like/dislike) available → KTO. Kahneman-Tversky Optimization works with unpaired binary feedback rather than preference pairs. Significant advantage when paired annotation is expensive or logistically difficult.

Minimum operational overhead, clean high-quality preference data → SimPO. No reference model, single training stage, state-of-the-art benchmark numbers. The tradeoff is reduced robustness to noisy data.

What I’d Tell Myself Four Years Ago

Don’t build the PPO pipeline until you’ve exhausted DPO. The capability ceiling of DPO for most alignment use cases is higher than you think, the operational cost is lower than you think, and the PPO complexity is higher than you think.

And don’t anchor too hard on DPO either. The field moved from RLHF to DPO to SimPO to GRPO in roughly three years. The modular stack — SFT, preference optimization, verifiable RL — is more durable than any specific algorithm. Build your infrastructure to be swappable at each layer, because the algorithm at each layer will almost certainly change before your product does.

The teams winning on post-training right now aren’t the ones who picked the right algorithm. They’re the ones who built clean data pipelines, honest evaluation infrastructure, and training systems flexible enough to swap algorithms without rebuilding from scratch.

Pick DPO for your conversational alignment work. Write a verifier for your structured output work. Keep your reward model if you genuinely need online feedback dynamics. And watch GRPO — it’s eating PPO’s lunch at the fraction of the infrastructure cost, and that story is still developing.

Using DPO in production, or running a GRPO / RLVR stack for reasoning tasks? I’d like to hear what’s actually working. The comments are open.

Tags: Machine Learning · LLM Fine-Tuning · RLHF · DPO · AI Engineering · MLOps · Deep Learning · NLP · Alignment · Software Engineering


메타데이터
post_id
6d3419737fe0
slug
dpo-replaced-rlhf-at-my-shop-heres-what-actually-changed-6d3419737fe0
url
https://medium.com/@dewanshshekharsingh/dpo-replaced-rlhf-at-my-shop-heres-what-actually-changed-6d3419737fe0
canonical_url
https://medium.com/@dewanshshekharsingh/dpo-replaced-rlhf-at-my-shop-heres-what-actually-changed-6d3419737fe0
author_url
https://medium.com/@dewanshshekharsingh
status
ok
fetched_at
2026-06-09 15:37:30