Låt oss prata om ramverk, bibliotek, RL och varför jag förmodligen inte gillar din favorit RL-kodbas. Ja, inklusive den. Det ovanliga med RL är att algoritmen är den enkla delen. GRPO är en enlinjeekvation på vissa logprobs. Om du har data är det enkelt att beräkna förlusten, och då använder du den förmodligen med ett backprop-bibliotek som du väljer. Men det är det som är problemet – att få tag på data. Det är jobbigt. I vanlig RL måste du göra utrullningar, kanske trunkera vissa avsnitt, och hantera ändarna därefter. Om du inte vill vara en snigel vill du vektorisera miljön och anpassa algoritmen för det. Om du vill göra en LLM måste du göra allt nonsens som gör att LLM:er passar in i minnet. Du måste vara försiktig med dina uppmaningar, maskera ut rätt delar för förlusten. Du behöver en hyfsad generation motor (vLLM), vilket då gör det jobbigt att uppdatera vikterna. Om du vill göra multi-agent multi-turn LLM RL, kan du lika gärna begå sudoku. Även om vi har många meningsskiljaktigheter om nästan allt som har med RL att göra, tycker jag att @jsuarez5341:s Pufferlib exemplifierar detta på ett utmärkt sätt. Den är utan tvekan otrolig på vad den gör - att träna RL-algos på simulerade miljöer mycket, mycket snabbt. Men det mesta av dess nyhet är ren infra. Kärnalgoritmerna är i stort sett desamma som de har varit i flera år, och jag är villig att slå vad om att de representerar mindre än 10 % av den totala tekniska ansträngningen. Detta påverkar naturligtvis den kod som du behöver skriva för att göra något utöver att köra de inbyggda exemplen. Vad jag upptäcker gång på gång är att för många tillräckligt icke-triviala (läs: intressanta) forskningsproblem, tar det ungefär lika lång tid att (a) skriva saken från grunden/från enkla primitiver, eller (b) anpassa ett befintligt ramverk för att rymma galna idéer. I den förstnämnda fokuserar du på att skriva den faktiska logiken. I det senare fallet vrider du på ramverket så att du kan lägga till logiken. Jag vet vad jag gillar bättre. Allt detta beror på att algoritmen är den enkla delen. Infra är smärtan i röven. Så när du har möjlighet att välja - använd verktygen som förenklar infra och skriv träningsloopen själv. Bygg inte ramverk, bygg bibliotek. Du kommer att tacka dig själv senare. Stor shout out till min masterhandledare från förr i tiden, som var den första som sa åt mig att släppa rllib och bara skriva PPO själv i PyTorch. Och till @hallerite för att ha inspirerat mig att äntligen skriva upp denna rant. Jag kanske skriver ett ordentligt insatsinlägg med exempel någon gång i framtiden om folket kräver det.