Snilld

Hands-on DPO: sådan går du fra HH-RLHF-par til policy i Colab

En ny, detaljeret MarkTechPost-tutorial går hele vejen fra datasætaudit og lexical shortcut-tests til en fuld TRL-DPO-træning af Qwen2.5-0.5B-Instruct – inklusive et par nyttige Colab-greb som at fjerne torchao for at undgå tunge, inkompatible opgraderinger. Den er konkret nok til, at teams kan løfte preference-learning fra notebook til mere driftssikre setups.

20. august 2026 Peter Munkholm

MarkTechPost har udgivet en tutorial, der går praktisk til værks med preference-learning på Anthropic HH-RLHF ved hjælp af Direct Preference Optimization. Guiden opsætter et reproducerbart Colab-miljø, auditerer chosen–rejected-par for bias, bygger en TRL-baseret DPO-pipeline (med valgfri LoRA) og finetuner en Qwen2.5-0.5B-Instruct-model med efterfølgende evaluering og gemning af policy. Ikke glamourøst – men præcis den slags opskrift, der flytter prototyper fra »interessant« til »målbart«.\n

Timingen er god. Preference-learning er på vej mod standard, men mange teams snubler på de små ting: et inkompatibelt hjørne i Colab, eller længde-bias, der gør modellen for glad for lange svar. Tutorialen samler trådene og viser en ende-til-ende vej uden at foregive at være enterprise-klar – og netop det gør den brugbar.\n

Hvad DPO og HH-RLHF betyder i praksis

DPO optimerer direkte en politik til at foretrække ét svar frem for et andet, givet præferencepar. I modsætning til klassisk supervised finetuning udnyttes parvise signaler (chosen vs. rejected) i stedet for ét facit. HH-RLHF fra Anthropic er et udbredt datasæt til formålet, med underudsnit som helpful-base og harmless-base, der hver presser forskellige facetter af modeladfærd.\n

I stedet for at bygge en separat reward-model eller køre PPO-trin lærer DPO politikken direkte fra præferencerne. Det fjerner kompleksitet – og gør samtidig datakvalitet og bias-kontrol endnu vigtigere, fordi hele træningsretningen ligger i par-signalet. Pointen og faldgruben i samme pakke.\n

Makro af to sagsomslag med forskellig tykkelse og slidte kanter — metafor for korte kontra lange model‑svar.

Colab-opsætningen og den lille sten i skoen

Tutorialen starter med en enkel disciplin: én samlet pip-installation af afhængigheder – trl (>=0.12), transformers (>=4.45), accelerate, datasets, peft og scikit-learn – så resolveren kan finde et kompatibelt sæt. Det mindsker kollisionsrisikoen, især i Colab, hvor basebilledet kan skifte uden varsel.\n

Og så detaljen, der sparer tid: Colab leverer torchao 0.10.0, mens peft forventer >0.16 og fejler i stedet for bare at ignorere. Rådet er at afinstallere torchao, da det ikke bruges i forløbet, og fordi en opgradering risikerer at trække en uheldig torch-build ind. Lavpraktisk og klogt: fjern det, der blokerer, i stedet for at skifte gulvet under hele sessionen.\n

Fra HH-RLHF-rådata til trænbart sæt

Datastrømmen er klar. Chosen–rejected-par indlæses fra flere underudsnit (helpful-base, helpful-rejection-sampled, helpful-online, harmless-base) og samples i faste mængder til træning og test. Før der trænes, auditeres sættet for strukturelle og længde-baserede præferencebias. Ikke pynt – en nødvendig risikobremse, som ofte overses i hastværk.\n

Tutorialen inkluderer tokenizer-aware filtrering, så maks-længde (fx 512 tokens med separat loft for prompt) overholdes i tråd med den valgte model. Små forskydninger i tokenisering kan give store forskelle i performance – især når lange svar belønnes utilsigtet, fordi de bare er… længere.\n

Banner

Lexical shortcuts, der lugter for godt

Her køres lexical shortcut diagnostics: simple tekstfeatures (TF-IDF) plus en baseline-klassifikator tester, om overfladiske sprogmønstre kan adskille chosen fra rejected. Hvis ja, er det et rødt flag. Så risikerer modellen at lære manérer frem for hjælp og sikkerhed.\n

Det rammer annoteringspraksis direkte. Hvis høflighedsfraser, disclaimere og faste vendinger bliver stærke signaler, bliver politikken skrøbelig. Justér guidelines, læg et ekstra review-lag ind, eller brug mod-par, hvor overfladen spejles men indholdet varierer. Start simpelt: mål, om en billig logreg kan vinde.\n

Tekniker, kun delvist i billede, lægger prøveposer på en cyan gulvsti; en grøn sti er allerede fyldt — et process‑øjeblik om routing og prioritering.

DPO-pipeline i TRL og valget om LoRA

Med datasættet på plads bygges en version-robust DPO-pipeline i TRL. Konfigurationen samler batchstørrelse, gradientakkumulering, læringsrate, warmup og beta (her 0,1), så eksperimenter kan gentages og forklares. Kedeligt? Måske. Nødvendigt? Ja – det er bindevævet mellem intention og resultat.\n

LoRA er valgfri. Det holder ressourceforbruget nede og forlænger ikke træningstiden unødigt på små GPU’er. Full finetune kan være stærkt på større modeller, men LoRA giver hurtigere iterationer og enklere deployments. Valget handler også om release-cadence og rollback, ikke kun om benchmarks.\n

Finetuning af Qwen2.5-0.5

B-Instruct: hvad man skal kigge efter

Tutorialen træner Qwen2.5-0.5B-Instruct, måler reward-accuracy, følger træningsadfærden og analyserer performance på de enkelte HH-RLHF-underudsnit. Den gemmer også den resulterende policy. Det sidste er væsentligt: uden et stabilt artefakt ingen fornuftig CI\/CD, og ingen hurtig rollback, når noget går skævt mandag morgen.\n

En nærliggende læsning af forløbet er, at små modeller reagerer markant på længde-bias og prompt-rammen. Derfor giver tokenizer-aware filtrering og subset-rapporter værdi over forventning. Man ser det ikke altid i snit-metrics, men i halerne – dér, hvor brugeroplevelsen faktisk lever.\n

Længde-bias, batching og den virkelige verden

Længde-bias dukker igen op i evalueringen. Hvis modellen belønner lange svar, bliver latency og pris dårligere end planlagt, fordi output fylder mere. I produktion er det ikke kun fairness; det rammer budgetter og svartider.\n

Tænk derfor batching- og truncation-strategier sammen med DPO-træningen. Hvis kortere, præcise svar underperformer, kan en justering i data – balancerede par eller længde-regularisering via filtrering – være billigere end en kompliceret inference-heuristik bagefter. Kort sagt: ret træningen, ikke kun inferencen.\n

Makro af to sagsomslag med forskellig tykkelse og slidte kanter — metafor for korte kontra lange model‑svar.

Målinger og artefakter, der holder til CI\/CD

Reward-accuracy er med i tutorialen, sammen med subset-analyser og prøveudskrifter. Gode første skridt. Næste trin i en moden pipeline er faste eval-scripts, semver-versionering af politikker, tokenizere og hyperparametre samt upload til revisionssikkert lager. Ikke for skønhedens skyld – men for at kunne sammenligne modeller over tid.\n

Gemte policies er ikke bare checkpoints. De er kontrakter mellem træning og drift. Når driften melder om længere svar natten til tirsdag, skal ingen lede i Slack-tråde; det skal stå i metrikkerne – og i metadatafilerne, der ligger i artifacts sammen med commit-hash og TRL-version.\n

Banner

Routing-lag og valg af endpoint

Kort kontekst: OpenRouter – som Stripe har aftalt at opkøbe – fungerer som et routing-lag, der kan dirigere requests til mange modeller på tværs af leverandører, vurderet på opgavekompleksitet, pris, hastighed og pålidelighed. Pointen er driftskontrol: adskil modelvalget fra endpointet, og lad målinger styre trafikken.\n

Relevansen her er, at DPO-finetunede policies kan leve side om side med generalistmodeller. Et routing-lag kan vælge policyen til sager med stærke præferencer (kundetone, regulatorisk form) og falde tilbage til en anden model ved bredere domænespørgsmål. Pris og latency svinger ofte voldsomt mellem endpoints – nogle gange med en faktor ti.\n

Risikobillede og de ting, man glemmer

Tutorialen rører ved, men dækker ikke fuldt, governance og sikkerhed. Annotator-bias, data-leakage, adgangskontrol til præferencesæt og løbende driftsovervågning kræver proces. Der er klar værdi i at have data-lineage ned på enkeltsæt: hvor kom parret fra, hvem godkendte, og hvornår blev det sidst revideret.\n

Adversarial tests er et andet hul. Hvis lexical diagnostics indikerer let separabilitet, kan angreb også udnytte det. Små tekstlige hooks kan trække modellen væk fra den tiltænkte politik. Test det målrettet – før kunderne opdager det i en log.\n

Hvad teams konkret bør gøre nu

Start med en audit-playbook. Skriv ned, hvordan chosen–rejected-par valideres, og hvordan lexical shortcuts måles. Bevar simple baseline-mål (logreg\/TF-IDF) som regressionscheck ved hver dataopdatering. Versionér tokenizer-konfigurationer separat fra modelcheckpoints, så ændringer i token-grænser ikke forklædes som træningsfremskridt.\n

Vælg LoRA først til de fleste POC’er for at reducere risiko og lette rullende eksperimenter. Læg en klar rollback-plan, og kræv, at policies kun går i produktion via signeret artefaktlager. Definér 3–5 driftlige metrikker, der kan aflæses uden en notebook: reward-accuracy på et fast holdout, gennemsnitlig svarlængde, time-to-first-token og en simpel fejlhåndteringsrate.\n

Hvor tutorialen ikke rækker helt ud

Skalering behandles sparsomt. Notebooken viser vejen på en 0,5B-model, men ikke, hvordan DPO-træning fordeles stabilt på flere GPU’er eller orkestreres i k8s. Omkostningsprofilen for større modeller udebliver også, hvilket gør prioritering svær i enterprise-miljøer, hvor budgetter tælles i tokens og timer.\n

Der mangler desuden en dybere sammenligning med alternativer til DPO, fx PPO-baseret RLHF eller nyere reward-model-tilgange. Uden den kontekst er det svært at vælge metode til en given opgave. Og endelig: distributionsevaluering er tynd – ingen A\/B i produkt, ingen langtidsmålinger af brugeroplevelse. Det efterlader et arbejde, som må løftes af implementerende teams.\n

Hurtige gevinster, man kan lande i en sprint

Indfør tokenizer-aware length filtering før næste træning. Det tager timer, ikke uger. Kør lexical shortcut diagnostics som en fast preflight, og gem en kort rapport i artefaktlageret. Gem policies og eval-scripts sammen – ikke i hver sin mappe. Småtteri, der gør en forskel, når noget knaser.\n

Overvej også et routing-lag for at skille eksperimenter fra driftskritiske endpoints. Så kan specialiserede DPO-politikker rulles ind dér, hvor de giver mest værdi, uden at hele produktet lægges om. Det er sådan, man undgår weekend-alarmer.\n

Den nøgterne status

Samlet set leverer tutorialen en reel ende-til-ende opskrift: Colab-setup, afhængigheder, audit, diagnostics, DPO med TRL og valgfri LoRA, finetuning af Qwen2.5-0.5B-Instruct, evaluering og gemning af policy. Den er anvendelig nu, især til POC og pre-prod. Men den dækker ikke hele vejen til enterprise – endnu.\n

Teknikken er klar nok til at skabe værdi, hvis den kobles til stram datahygiejne, reproducerbare artefakter, metrikker i drift og en bevidst integrationsstrategi. Resten er håndværk – og det mærker man først, når man står med det i hånden.

Kilder

    Gør brugeroplevelsen bedre.
    Hvilket firma arbejder du for?