Dobra, porozmawiajmy o frameworkach, bibliotekach, RL i dlaczego prawdopodobnie nie lubię twojej ulubionej bazy kodu RL. Tak, w tym również. Niezwykłą rzeczą w RL jest to, że algorytm to łatwa część. GRPO to jednolinijkowe równanie na podstawie logprobs. Jeśli masz dane, obliczenie straty jest trywialne, a potem przypuszczalnie używasz tego z biblioteką backprop, którą wybierzesz. Ale to jest problem - zdobycie danych. To jest ból w dupie. W zwykłym RL musisz robić rollouts, może skracać niektóre epizody i odpowiednio obsługiwać końce. Jeśli nie chcesz być ślimakiem, będziesz chciał wektoryzować środowisko i dostosować algorytm do tego. Jeśli chcesz zrobić LLM, musisz zrobić wszystkie bzdury, które sprawiają, że LLM-y mieszczą się w pamięci. Musisz być ostrożny z twoimi promptami, zamaskować odpowiednie części dla straty. Potrzebujesz przyzwoitego silnika generacji (vLLM), co sprawia, że aktualizacja wag jest uciążliwa. Jeśli chcesz robić RL LLM z wieloma agentami i wieloma turami, lepiej zrób commit sudoku. Chociaż mamy wiele nieporozumień na prawie każdy temat związany z RL, myślę, że Pufferlib @jsuarez5341 pięknie ilustruje ten punkt. Bez wątpienia jest niesamowity w tym, co robi - szybkim trenowaniu algorytmów RL w symulowanych środowiskach. Ale większość jego nowości to czysta infrastruktura. Główne algorytmy są w dużej mierze takie same, jak były przez lata, i jestem gotów założyć, że stanowią mniej niż 10% całkowitego wysiłku inżynieryjnego. Naturalnie, ma to implikacje na kod, który musisz napisać, aby zrobić cokolwiek poza uruchamianiem wbudowanych przykładów. Co odkrywam raz po raz, to to, że dla wielu wystarczająco nietrywialnych (czytaj: interesujących) problemów badawczych, zajmuje to podobną ilość czasu, aby (a) napisać to od podstaw/z prostych prymitywów, lub (b) dostosować istniejący framework do szalonych pomysłów. W pierwszym przypadku skupiasz się na pisaniu rzeczywistej logiki. W drugim przypadku zmagasz się z frameworkiem, aby pozwolić sobie dodać logikę. Wiem, co wolę. Wszystko to dlatego, że algorytm to łatwa część. Infrastruktura to ból w dupie. Więc ilekroć masz możliwość wyboru - używaj narzędzi, które upraszczają infrastrukturę i napisz pętlę treningową samodzielnie. Nie buduj frameworków, buduj biblioteki. Później będziesz sobie za to wdzięczny. Wielkie podziękowania dla mojego promotora magisterskiego z dawnych lat, który jako pierwszy powiedział mi, żebym porzucił rllib i po prostu napisał PPO samodzielnie w PyTorch. I dla @hallerite za zainspirowanie mnie do w końcu napisania tego wywodu. Może w przyszłości napiszę porządny post z przykładami, jeśli ludzie tego zażądają.