Aight, vamos falar sobre frameworks, bibliotecas, RL e por que provavelmente não gosto da sua base de código RL favorita. Sim, incluindo aquele. A coisa incomum sobre RL é que o algoritmo é a parte fácil. GRPO é uma equação de linha única em alguns logprobs. Se você tiver os dados, calcular a perda é trivial e, presumivelmente, você os está usando com uma biblioteca de backprop de sua escolha. Mas esse é o problema - obter os dados. É um pé no saco. No RL regular, você precisa fazer lançamentos, talvez truncar alguns episódios e lidar com as extremidades de acordo. Se você não quer ser um caracol, você vai querer vetorizar o ambiente e adaptar o algoritmo para isso. Se você quer fazer um LLM, você precisa fazer todas as bobagens que fazem os LLMs caberem na memória. Você precisa ter cuidado com suas instruções, mascarar as partes certas para a perda. Você precisa de um mecanismo de geração decente (vLLM), o que torna difícil atualizar os pesos. Se você quiser fazer LLM RL multiagente e várias voltas, é melhor fazer commit sudoku. Embora tenhamos muitas divergências sobre praticamente qualquer coisa relacionada a RL, acho que o Pufferlib de @jsuarez5341 exemplifica esse ponto lindamente. É sem dúvida incrível no que faz - treinar algoritmos RL em ambientes simulados muito, muito rapidamente. Mas a maior parte de sua novidade é pura infra. Os algoritmos principais são basicamente os mesmos de anos e estou disposto a apostar que representam menos de 10% do esforço geral de engenharia. Naturalmente, isso tem implicações no código que você precisa escrever para fazer qualquer coisa além de executar os exemplos integrados. O que eu descubro repetidamente é que, para muitos problemas de pesquisa suficientemente não triviais (leia-se: interessantes), leva uma quantidade semelhante de tempo para (a) escrever a coisa do zero / de primitivos simples, ou (b) adaptar uma estrutura existente para acomodar ideias malucas. No primeiro, você se concentra em escrever a lógica real. Neste último, você discute a estrutura para permitir que você adicione a lógica. Eu sei o que eu gosto mais. Tudo isso porque o algoritmo é a parte fácil. O infra é o pé no saco. Portanto, sempre que você estiver em posição de escolher - use as ferramentas que simplificam a infraestrutura e escreva o loop de treinamento você mesmo. Não construa estruturas, construa bibliotecas. Você vai agradecer a si mesmo mais tarde. Um grande grito para o supervisor do meu mestrado de antigamente, que foi o primeiro a me dizer para largar o rllib e apenas escrever PPO eu mesmo no PyTorch. E para @hallerite por me inspirar a finalmente escrever este discurso retórico. Eu poderia escrever um effortpost adequado com exemplos em algum momento no futuro, se as pessoas exigirem.