Certo, vamos falar sobre frameworks, bibliotecas, RL e por que provavelmente não gosto da sua base de código RL favorita. Sim, incluindo aquela. A coisa incomum sobre RL é que o algoritmo é a parte fácil. GRPO é uma equação de linha única em alguns logprobs. Se você tem os dados, calcular a perda é trivial, e então presumivelmente você está usando isso com uma biblioteca de retropropagação de sua escolha. Mas esse é o problema -- obter os dados. É uma dor de cabeça. No RL regular, você tem que fazer rollouts, talvez truncar alguns episódios e lidar com os finais de acordo. Se você não quer ser uma lesma, vai querer vetorizar o ambiente e adaptar o algoritmo para isso. Se você quer fazer um LLM, precisa fazer toda a besteira que faz os LLMs caberem na memória. Você precisa ter cuidado com seus prompts, mascarar as partes certas para a perda. Você precisa de um motor de geração decente (vLLM), o que torna difícil atualizar os pesos. Se você quer fazer RL LLM multi-agente e multi-turno, é melhor fazer sudoku de compromisso. Embora tenhamos muitas discordâncias sobre praticamente qualquer coisa relacionada a RL, acho que a Pufferlib do @jsuarez5341 exemplifica esse ponto de forma linda. 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 centrais são em grande parte os mesmos que têm sido por anos, e estou disposto a apostar que representam menos de 10% do esforço total de engenharia. Naturalmente, isso tem implicações no código que você precisa escrever para fazer qualquer coisa além de executar os exemplos embutidos. O que encontro repetidamente é que, para muitos problemas de pesquisa suficientemente não triviais (leia-se: interessantes), leva um tempo semelhante para (a) escrever a coisa do zero/a partir de primitivas simples, ou (b) adaptar um framework existente para acomodar ideias malucas. No primeiro caso, você se concentra em escrever a lógica real. No segundo, você lida com o framework para permitir que você adicione a lógica. Eu sei do que gosto mais. Tudo isso porque o algoritmo é a parte fácil. A infra é a dor de cabeça. Então, sempre que você estiver em uma posição para escolher - use as ferramentas que simplificam a infra e escreva o loop de treinamento você mesmo. Não construa frameworks, construa bibliotecas. Você vai se agradecer depois. Um grande agradecimento ao meu supervisor de mestrado da época, que foi o primeiro a me dizer para largar o rllib e apenas escrever PPO eu mesmo em PyTorch. E ao @hallerite por me inspirar a finalmente escrever este desabafo. Eu posso escrever um esforço adequado com exemplos em algum momento no futuro, se as pessoas pedirem.