
FlashREINFORCE nima?
FlashREINFORCE agentga o‘xshash til modellarini asinxron o‘qitish uchun tanqidchisiz reinforcement learning frameworkidir. U o‘zgaruvchan uzunlikdagi fikrlash, vositalardan foydalanish yoki muhit bilan o‘zaro ta’sir sababli trayektoriyalar turli vaqtlarda yakunlanadigan uzoq davomli ish yuklamalari uchun mo‘ljallangan.
Har bir prompt uchun bir nechta bir xil darajadagi rollout generatsiya qilish o‘rniga, FlashREINFORCE har bir prompt uchun bitta rolloutdan foydalanadi. Shu sababli B ta trayektoriyadan iborat batch B xil promptni qamrab olishi mumkin, yakunlangan trayektoriyalar esa bir xil promptga berilgan bir nechta javobni kutmasdan learnerga yetib boradi.
Repository mustaqil PyTorch reference loss, CPU optimizer yangilanishi namunasi, testlar, R1 va Qwen2.5-Math uchun Molt launcherlar, shuningdek reasoning, Python vositalari, mixture-of-experts modellari va ALFWorld uchun tajriba sozlamalarini taqdim etadi. To‘liq asinxron o‘qitish launcherlarida Molt ishlatiladi.
Reinforcement Learning REINFORCE qilishi kerak.
Nega bitta rolloutdan foydalanish kerak?
Guruhga nisbatan ishlaydigan usullar bir xil promptdan olingan bir nechta rolloutga tayanadi. Asinxron agent ish yuklamalarida bu talab sinxronlash to‘siqlarini keltirib chiqarishi va belgilangan rollout budjeti doirasida qamrab olinadigan turli promptlar sonini kamaytirishi mumkin.
Bitta rollout asosida o‘qitish bir xil darajadagi rollout talabini olib tashlaydi, biroq uchta barqarorlik muammosini yuzaga keltiradi:
- Prompt darajasidagi baseline yaratish uchun bir xil guruhdagi qo‘shimcha rollout mavjud emas.
- Asinxron to‘plangan trayektoriyalar eski behavior policy tomonidan generatsiya qilingan bo‘lishi mumkin.
- Har bir token batch darajasida teng vaznga ega bo‘lsa, uzoq va muvaffaqiyatsiz trayektoriyalar yangilanishga haddan tashqari katta ta’sir ko‘rsatishi mumkin.
FlashREINFORCE bu muammolarni One-Batch REINFORCE, Sequence Trust Region va Sample-Mean Optimization yordamida hal qiladi.
Asosiy komponentlar
1. One-Batch REINFORCE
Har bir yangi batch uchun learner mustaqil promptlar bo‘yicha skalyar mukofotlarni markazlashtiradi. Agar R_i i-trayektoriyaning mukofoti bo‘lsa, uning advantage qiymati trayektoriya mukofatidan batch o‘rtacha qiymatini ayirish orqali hisoblanadi:
mean_reward = sum(R_j for j in batch) / B
A_i = R_i - mean_reward
O‘rtacha qiymatdan yuqori trayektoriyalar musbat advantage, undan past trayektoriyalar esa manfiy advantage oladi. Bu o‘qitilgan criticdan foydalanmasdan ishorali feedback beradi. Learner batch ustida bitta optimizer yangilanishini bajaradi va keyin uni tashlab yuboradi.
2. Sequence Trust Region
Har bir trayektoriya tanlangan tokenlarni amalda generatsiya qilgan behavior policy ehtimolini saqlashi kerak. Learner joriy policy ehtimolini qayta hisoblaydi va token importance ratio qiymatini hosil qiladi:
rho_i_t = exp(current_log_probability_i_t
- behavior_log_probability_i_t)
Bu nisbat saqlangan tarixdagi tanlangan harakatlar taqsimotini tuzatadi. Biroq tarixning o‘zi eski behavior policy tomonidan hosil qilinganini tuzatmaydi, shuning uchun FlashREINFORCE to‘liq trayektoriya bo‘yicha yig‘ilgan driftni ham baholaydi.
Har bir tanlangan harakat uchun u behavior ehtimoli p va joriy ehtimol q asosida Bernoulli KL proksisini hisoblaydi:
d_i_t = p * log(p / q)
+ (1 - p) * log((1 - p) / (1 - q))
Token qiymatlari trayektoriya bo‘yicha o‘rtachalashtiriladi. Trayektoriya uning o‘rtacha proksi qiymati sozlangan trust chegarasidan oshmagan taqdirdagina qabul qilinadi:
mean_drift_i = sum(d_i_t for t in trajectory_i) / T_i
mask_i = 1 if mean_drift_i <= delta else 0
Rad etilgan trayektoriya hech qanday token lossiga hissa qo‘shmaydi. Shu sababli trust qarori alohida tokenlarga emas, to‘liq saqlangan tarixga nisbatan qo‘llanadi.
3. Sample-Mean Optimization
Token darajasidagi batch o‘rtachasi uzunroq trayektoriyalarga avtomatik ravishda ko‘proq ta’sir kuchini beradi. Bu uzoq va muvaffaqiyatsiz rollout foydali oraliq qadamlarni o‘z ichiga olsa-yu, manfiy mukofot bilan yakunlansa, zararli bo‘lishi mumkin.
FlashREINFORCE avval har bir trayektoriyadagi token hissalarini o‘rtachalaydi, keyin trayektoriyalar bo‘yicha o‘rtacha qiymatni hisoblaydi:
trajectory_term_i = (
mask_i * advantage_i / trajectory_length_i
* sum(importance_ratio_i_t for each token t)
)
objective = sum(trajectory_term_i for i in batch) / B
Natijada javob uzunligidan qat’i nazar, har bir trayektoriya 1/B vazn oladi. Amaliy loss detached importance ratio qiymatlaridan foydalanadi. Asosiy usul o‘qitilgan critic, ratio clipping yoki reference-model forward passdan foydalanmaydi.
O‘rnatish va lokal sozlash
FlashREINFORCE repositorysini clone qiling yoki yuklab oling, uning root katalogiga kiring va test bog‘liqliklari bilan editable rejimda o‘rnating:
pip install -e '.[test]'
Keyin kiritilgan CPU namunasini ishga tushiring:
python examples/toy_update.py
Bu namuna reference objective CPUda optimizer yangilanishini hosil qila olishini tekshiradi. U funksional tekshiruv namunasi bo‘lib, maqoladagi benchmark natijalarini takrorlash uchun mo‘ljallanmagan.
Yakunida testlar to‘plamini ishga tushiring:
python -m pytest -q
Namuna va testlarning muvaffaqiyatli bajarilishi lokal reference implementatsiyasi hamda uning bog‘liqliklari mavjudligini tasdiqlaydi.
Reference implementatsiyani o‘rganish
Markaziy reference objective flashreinforce/loss.py faylida joylashgan. U maqola va README’da tavsiflangan quyidagi amallarni qamrab oladi:
- Batch bo‘yicha mukofotlarni markazlashtirish.
- Token darajasidagi importance sampling.
- Trayektoriya darajasidagi trust qabul qilinishi.
- Sample-mean optimization.
- Failure tokenlarini entropiya asosida ixtiyoriy filtrlash.
Reference lossning optimizer yangilanishida qanday ishtirok etishini ko‘rish uchun examples/toy_update.py faylidan boshlang. Keyin namuna tensorlari va maskalarini objective’ning alohida bosqichlari bilan bog‘lash uchun flashreinforce/loss.py faylini ko‘rib chiqing.
CPU misoli eng xavfsiz asosiy foydalanish yo‘lidir, chunki u to‘liq taqsimlangan ishga tushirish infratuzilmasini talab qilmaydi.
Bir martalik asinxron yangilanishni tushunish
Ishlab chiqarishdagi FlashREINFORCE yangilanishi olti bosqichdan iborat:
- Yig‘ish: Ishga tushirish workerlari har bir prompt uchun mustaqil ravishda bitta yakunlangan trayektoriyani yuboradi. Har bir trayektoriya o‘z mukofoti va tokenlarni tanlashda ishlatilgan haqiqiy xulq-atvor siyosati ehtimollarini o‘z ichiga oladi.
- Batchlash: Learner keyingi B ta yakunlangan trayektoriyani oladi va ishorali afzalliklarni hisoblash uchun ularning mukofotlarini markazlashtiradi.
- Tuzatish: Learner joriy siyosatning log-ehtimollarini qayta hisoblaydi va tokenlar uchun muhimlik nisbatlarini tuzadi.
- Ishonchlilikni tekshirish: U har bir trayektoriya uchun tanlangan harakatlarning o‘rtacha KL proksisini hisoblaydi va to‘liq trayektoriyani faqat qiymat sozlangan chegaraga mos kelsa qabul qiladi.
- Optimallashtirish: U avval har bir qabul qilingan trayektoriya ichida, so‘ng batch bo‘yicha o‘rtacha qiymatni hisoblaydi va bitta optimallashtiruvchi qadamni bajaradi.
- Bekor qilish: Yig‘ilgan batchni learner uchun qo‘shimcha yangilanishlarda qayta ishlatmaydi.
Yakuniy bekor qilish bosqichi usulning muhim qismidir. FlashREINFORCE bir xil xulq-atvor snapshotidan ketma-ket bir nechta minibatch yangilanishlarini bajarish o‘rniga, yangi yig‘ilgan har bir batch uchun bitta to‘liq batch yangilanishidan foydalanadi.
Molt trening konfiguratsiyasini ko‘rib chiqish
Repository Molt’ning asinxron implementatsiyasi orqali treningni ishga tushirish uchun scripts/train_molt.py faylini o‘z ichiga oladi. To‘liq treningni ajratishdan oldin, trening flaglarini ko‘rib chiqish uchun uning dry-run rejimidan foydalaning:
python scripts/train_molt.py --dry-run
GPU sozlamalari, ma’lumotlarni tayyorlash, trening buyruqlari, maqoladagi tushunchalarning koddagi mosligi va ma’lum reproduksiya cheklovlari uchun docs/training.md fayliga murojaat qiling. examples/README.md qo‘llanmasida topshiriq presetlari, ablyatsiyalar va imkoniyatlarni tekshiruvchi native trainer launcher mavjud.
R1 va Qwen2.5-Math launcher’lari repository’da aniq versiyalarga biriktirilgan. Tool-use va ALFWorld sozlamalari mos agentlar hamda muhitlarni ham talab qiladi, shuning uchun ushbu tajribalarni ishga tushirishdan oldin ularning runtime talablarini ko‘rib chiqing.
Har bir trayektoriya saqlashi kerak bo‘lgan ma’lumotlar
Yangilanish generatsiya vaqtida yozib olingan ma’lumotlarga bog‘liq. Hech bo‘lmaganda, konseptual trening oqimiga yakunlangan tokenlar ketma-ketligi, uning skalyar mukofoti va tanlangan har bir harakatga mos xulq-atvor ehtimoli kerak bo‘ladi. Keyin learner saqlangan harakatlar va tarixlarni baholash orqali joriy siyosatning mos ehtimollarini oladi.
Qayd etilgan sampling ehtimollarini keyinroq qayta tiklangan ehtimollar bilan almashtirmang. Keyingi model baholashi inference engine sampling vaqtida amalda foydalangan ehtimolni aynan takrorlashiga kafolat yo‘q.
Barqarorlik bo‘yicha ilg‘or maslahatlar
Sampling qo‘llab-quvvatlashini saqlang
Aniq muhimlik tuzatishi target siyosat xulq-atvor siyosati qo‘llab-quvvatlashidan tashqarida ehtimollik massasini belgilamasligini nazarda tutadi. Juda agressiv top-k yoki top-p qisqartirishi bu taxminni buzishi mumkin. Shuning uchun sampling sozlamalari qo‘llab-quvvatlash talabini hisobga olgan holda tanlanishi kerak.
Token muhimlik samplingini to‘liq trayektoriya tuzatishi deb qabul qilmang
Token muhimlik nisbatlari saqlangan tarixlar shartida tanlangan harakatlarni tuzatadi. Ular bu tarixlarning taqsimotini tuzatmaydi. Xulq-atvor siyosati va learner siyosati o‘rtasidagi to‘plangan tafovut haddan tashqari katta bo‘lgan trayektoriyalarni filtrlash uchun Sequence Trust Region’dan foydalaning.
Yangilanishlarni yangi saqlang
Har bir yig‘ilgan batch uchun bitta optimallashtiruvchi yangilanishni bajaring va keyin uni bekor qiling. Eskirgan batchni bir nechta learner yangilanishlarida qayta ishlatish hujjatlashtirilgan bir martalik usuldan chetga chiqadi va siyosatlar nomuvofiqligini oshirishi mumkin.
Trayektoriya darajasidagi vaznlashni saqlang
Batch bo‘yicha trayektoriyalarni o‘rtacha qilishdan oldin har bir trayektoriya ichidagi token hissalarini o‘rtacha qiling. Barcha yaroqli tokenlarni bitta umumiy batch o‘rtachasiga tekislash javob uzunligi ko‘paytiruvchisini qayta kiritadi va uzun trayektoriyalarga nomutanosib vazn berilishiga olib keladi.
Trust maskasini to‘g‘ri talqin qiling
Sequence Trust Region butun trayektoriya uchun bitta qabul qilish qarorini chiqaradi. Agar trayektoriya chegaradan oshsa, uning barcha token loss qiymatlari ushbu yangilanishdan chiqarib tashlanadi.
Tekshirishni reproduksiyadan ajrating
CPU misoli faqat optimallashtiruvchi yangilanishini tekshiradi. Tadqiqot natijalarini reproduksiya qilish uchun trening va examples qo‘llanmalarida hujjatlashtirilgan GPU, ma’lumotlar, model, agent, muhit va asinxron runtime konfiguratsiyalari talab qilinadi.
Qayd etilgan qo‘llanish sohalari
Qayd etilgan tajribalar matematik fikrlash, ko‘p bosqichli Python tool use, mixture-of-experts treningi va interaktiv ALFWorld qaror qabul qilishni qamrab oladi. README DeepSeek-R1-Distill-Qwen-1.5B uchun 6,000 ta yangilanishgacha barqaror uzun chain-of-thought treningini, Qwen2.5-Math-1.5B uchun matematik fikrlash natijalarini, Qwen2.5-7B-Instruct va Qwen3-30B-A3B bilan Python-tool tajribalarini hamda Qwen2.5-7B-Instruct bilan ALFWorld tajribalarini qayd etadi.
Bu natijalar framework’ning ko‘zlangan ko‘lamini namoyish etadi, biroq ularni kichik CPU yangilanish misolidan kutmaslik kerak.
Foydali resurslar
- FlashREINFORCE repozitoriysi
- Loyiha veb-sayti
- NVIDIA NeMo Molt kodi
- O‘qitish qo‘llanmasi
- Tajriba sozlamalari va misollar
Xulosa
FlashREINFORCE bitta rollout doirasidagi prompt qamrovini ixcham, kritiksiz yangilash usuli bilan birlashtiradi. Batch markazidagi mukofotlar ishorali afzalliklarni taqdim etadi, tokenlarning muhimlik bo‘yicha tanlanishi eskirgan harakatlarni hisobga oladi, Sequence Trust Region to‘plangan trayektoriya og‘ishini boshqaradi, tanlama o‘rtachasi asosidagi optimallashtirish esa javob uzunligi trayektoriya vaznini belgilashining oldini oladi.
Tahrirlash mumkin bo‘lgan o‘rnatish, CPU yangilash misoli va testlardan boshlang. Ular ishlagach, Molt ishga tushirgichini --dry-run parametri bilan oldindan sinab ko‘ring va modelga xos GPU hamda ma’lumotlarni tayyorlash bo‘yicha o‘qitish qo‘llanmasiga amal qiling. Loyiha Apache License 2.0 litsenziyasi ostida taqdim etilgan.
