Како фино подесити LLM [и када умјесто тога користити RAG или промптовање]

Овај водич објашњава како да фино подесите LLM корак по корак, пореди потпуно фино подешавање са LoRA и QLoRA методама и показује када су промптовање или RAG бољи начин да побољшате излазе модела.

Diagram comparing pre-training and fine-tuning: pre-training turns a vast general text corpus (trillions of tokens, large labs, huge compute) into a base model, while fine-tuning combines a base model with a small task-specific dataset (a few hundred to a few thousand examples, one GPU, hours) to produce a specialized model.

Фино подешавање великог језичког модела (LLM) значи дорађивање претходно тренираног LLM-а на малом скупу података специфичном за задатак, како би давао резултате које не можете добити само промптовањем.

Фино подешавање подразумијева прикупљање примјера парова улаз/излаз који показују жељено понашање, покретање циклуса тренирања који помјерају тежине модела ка њима и провјеру резултата у поређењу са излазима оригиналног модела. Методе ефикасне по параметрима, попут LoRA, чине овај процес довољно јефтиним да се може покренути на једном GPU-у.

Ако нисте задовољни излазима LLM-а, прво дорадите промптове и генерисање потпомогнуто претраживањем (RAG). Фино подешавање мијења начин на који се LLM понаша. Када вам је потребно да користи свјеже или власничке информације, промптовање и RAG су обично бољи избор.

Ево како да фино подесите LLM корак по корак, које су главне методе финог подешавања (LoRA и QLoRA) и који изазови и грешке могу да покваре цијели процес.

Шта је фино подешавање LLM-а и по чему се разликује од претходног тренирања LLM-а

Претходно тренирање LLM-а изграђује општу језичку способност модела од нуле на огромном корпусу, док фино подешавање LLM-а прилагођава претходно тренирани модел на малом скупу података за један задатак.

Претходно тренирање LLM-а је фаза која захтијева много ресурса и чији је резултат базни модел. Модел учи из широког корпуса текстова, што му даје опште познавање граматике, чињеница и способност расуђивања, али не и специјализацију за ваш задатак.

Фино подешавање LLM-а наставља тренирање базног модела на малом, пажљиво одабраном скупу података, како би модел давао жељене излазе за одређени задатак или случај употребе. Ту спадају досљедан формат, глас или тон бренда, обрасци специфични за домен или поуздани позиви алата и функција.

Када фино подешавати LLM-ове, а када умјесто тога користити промптове или RAG

Да бисте побољшали перформансе LLM-а, пењите се степеницу по степеницу: промптовање -> RAG -> фино подешавање.

Дорадите промптове детаљнијим упутствима и користите RAG да бисте моделу дали ажурне информације. Фино подешавање користите само када побољшања промптова и претраживања не дају резултате.

Приступ

Шта мијења

Користите га када

Главно ограничење

Промпт инжењеринг

Захтјев који шаљете

Понашање је блиско жељеном, а желите брзину и могућност враћања промјена

Ограничено постојећим способностима базног модела

RAG

Оно што модел види у тренутку инференције

Чињенице се често мијењају, а LLM мора да има приступ ажурним информацијама

Додаје кашњење због претраживања и додатну инфраструктуру; не мијења понашање

Фино подешавање LLM-а

Тежине модела (интерни параметри модела)

Потребни су вам досљедно понашање, формат или тон у великом обиму, или краћи промптови при сваком позиву

Почетни трошак, знање уграђено у тежине застаријева, ризик од заборављања понашања стечених у претходном тренирању

Када бољи промптови надмашују фино подешавање, а када нису довољни

Промптовање је најбржа и најјефтинија полуга. У многим случајевима прецизнији и детаљнији промптови доводе до жељених промјена у понашању.

Али дужи промптови успоравају рад и поскупљују га, а не могу да превазиђу постојећа ограничења модела.

Знаци да је промптовање можда достигло своје границе:

  • Нови гранични случајеви стално кваре излаз: На примјер, модел враћа прозу када вам треба JSON или одступа од жељеног тона, а ви за сваки нови случај крпите промпт.
  • Системски промпт стално расте: Промпт има стотине или хиљаде редова и тешко се њиме управља.
  • Плаћате га при сваком позиву: Промпт се поново шаље и обрађује при сваком захтјеву, па расту трошкови токена и кашњење.
  • Промјене више немају ефекта: Нова упутства не побољшавају излазе.

Чак и тада, прво испробајте јефтиније исправке на нивоу промпта. Користите few-shot примјере да бисте моделу показали образац (парове улаз/излаз), уланчавање промптова да бисте тешке задатке подијелили на мање кораке или позивање функција да бисте прецизна претраживања или израчунавања препустили спољним алатима.

Када RAG има више смисла од финог подешавања модела

RAG мијења оно што LLM зна, док фино подешавање LLM-а мијења начин на који се понаша. Ако је недостатак у знању, нарочито у знању које се често мијења или се налази у вашим документима, RAG је рјешење. Ако је недостатак у понашању, користите фино подешавање.

Фино подешавање такође мијења оно што модел зна, али су све чињенице које усвоји замрзнуте у тренутку тренирања и брзо застаријевају у областима које се брзо развијају. Осим тога, информације се уграђују у тежине модела, које не чувају никакав запис о њиховом извору.

Ажурирање изворних докумената које користи слој за претраживање брже је и јефтиније, а тај слој може да наведе тачне изворе које је користио. Због тога је бољи избор када су вам потребне ажурне информације које се могу поткријепити.

Мана RAG-а? То је додатни слој који треба изградити и одржавати, а уз то повећава кашњење.

У пракси ће вам често требати обоје. Продукциони системи комбинују фино подешене моделе са RAG-ом: моделе користе за досљедно понашање, а RAG за актуелне чињенице.

Уобичајене замке, ризици и изазови финог подешавања

Чак и када је фино подешавање прави алат, оно носи трошкове и ризике:

  • Трошкови и вријеме: Прикупљање чистих, репрезентативних података за тренирање и рачунарски ресурси за тренирање су скупи.
  • Катастрофално заборављање: Када се тренира на уском скупу података, модел може да изгуби опште вјештине и развије нове облике грешака, што доводи до пропуста које базни модел није правио.
  • Преприлагођавање: Са премало или превише репетитивних података, модел памти ваше примјере за тренирање умјесто да учи обрасце, па даје добре резултате на узорцима за тренирање, али лоше на стварним улазима.
  • Застаријевање: Знање уграђено у тежине брзо застаријева, па морате поново да тренирате модел на новим подацима.
  • Превазиђеност: Када се појави јачи модел, он често већ у старту надмашује ваш фино подешени модел, па морате да поновите посао.
  • Изазови при евалуацији и репродукцији: Тешко је доказати да фино подешени модел даје боље резултате од базног модела. Два тренирања на GPU-у са истим подешавањима такође могу да дају мало другачије моделе.
  • Управљање подацима: Тренирање на власничким или осјетљивим подацима отвара питања приватности и лиценцирања; модел касније може да открије фрагменте података на којима је трениран.

Главне методе финог подешавања

Главне врсте финог подешавања LLM-а разликују се по томе колики дио модела мијењају: потпуно фино подешавање поново тренира цијели модел, док методе финог подешавања ефикасног по параметрима (PEFT), попут LoRA и QLoRA, ажурирају само дио тежина. PEFT методе захтијевају тек дјелић меморије потребне за потпуно фино подешавање и, уз одговарајућа подешавања, могу да постигну исте резултате.

Потпуно фино подешавање ажурира сваку тежину модела. Најскупље је и носи највећи ризик од катастрофалног заборављања. Оставите га за велике промјене понашања када имате довољно података и рачунарских ресурса.

Алтернатива је фино подешавање ефикасно по параметрима, односно PEFT. То је кровни назив за методе које замрзавају већи дио модела и тренирају само мали скуп параметара. Користи далеко мање меморије и мање је склоно заборављању, јер базни модел остаје нетакнут.

При ниским ранговима PEFT учи мање од потпуног финог подешавања, али повећање ранга и подешавање стопе учења надокнађују већи дио те разлике на задацима подешавања према упутствима.

PEFT методе обухватају:

  • LoRA (Low-Rank Adaptation – адаптација ниског ранга): Уобичајена полазна тачка; замрзава оригиналне тежине и тренира мали скуп додатних параметара адаптера, често мање од 1% укупног броја, па ради на једном потрошачком GPU-у.
  • QLoRA (Quantized Low-Rank Adaptation – квантизована адаптација ниског ранга): Компресује базни модел на 4-битну прецизност прије примјене LoRA-е, што вам омогућава да фино подесите велики модел на једном GPU-у.

Метода

Шта ажурира

Хардвер у пракси

Користите га када

Потпуно фино подешавање

Све тежине модела

Чвор са више GPU-ова за моделе класе 7B, далеко више за веће моделе

Потребна вам је дубока промјена понашања и имате податке и рачунарске ресурсе

LoRA (PEFT)

Мали скуп додатних тежина адаптера

Један потрошачки GPU

Ваша подразумијевана полазна тачка

QLoRA (PEFT)

LoRA адаптери на 4-битно компресованом базном моделу

Веома велики модели на једном GPU-у

Немате довољно меморије, али желите велики базни модел

Поврх тога, користимо методе подешавања према упутствима и према преференцијама, од RLHF-а (Reinforcement Learning from Human Feedback – учење поткрепљивањем на основу људских повратних информација) до лакших алтернатива, као што су Direct Preference Optimization (DPO) и Odds Ratio Preference Optimization (ORPO), да бисмо обликовали начин на који модел прати упутства и усклађује се са људским преференцијама.

Како фино подесити LLM корак по корак

Када одлучите да је фино подешавање LLM-а прави избор, ево тока рада.

Корак 1: Дефинишите задатак и начин на који ћете мјерити успјех

Одлучите какво понашање желите од LLM-а и како ћете знати да сте га постигли.

Наведите конкретан посао који желите да фино подешени модел обавља, на примјер класификацију тикета подршке, сажимање уговора у фиксном формату или генерисање кода у стилу ваше компаније.

Затим дефинишите успјех. Уобичајене опције обухватају:

  • Валидност излаза: На примјер, да ли се резултат може парсирати као исправан JSON или да ли одговара Markdown структури која вам је потребна?
  • Аутоматизоване оцјене: Користите метрике као што су BLEU или ROUGE, које пореде генерисани текст са референтним одговорима, или тачност извршавања задатка на означеном скупу.
  • Људске оцјене: Скала за бодовање или критеријум прошао/пао за квалитете које скрипта не може добро да оцијени, као што су тон или корисност.
  • Поузданост на тешким улазима: Да ли модел обрађује неуобичајене улазе на којима је базни модел гријешио?

Корак 2: Припремите скуп података

Квалитет података одређује успјех финог подешавања, зато уложите труд у прикупљање правог скупа података за фино подешавање.

Форматирајте податке као парове упутство/одговор у формату JSONL, гдје сваки ред садржи улаз (уз евентуални контекст) и тачан излаз који желите да добијете.

На примјер, погледајте јавне скупове података, попут општег скупа упутстава Alpaca-cleaned или скупа Dolly компаније Databricks, или скупа banking77 специфичног за задатак, који садржи преко 13.000 стварних упита корисничкој подршци означених према 77 намјера.

За фокусиран задатак, неколико стотина до неколико хиљада чистих, разноврсних примјера може да промијени понашање, под условом да примјери одражавају стварне продукционе улазе, укључујући граничне случајеве, и да су досљедно форматирани.

Још немате парове улаз/излаз? Направите скуп од података које већ имате, као што су тикети подршке и најбољи одговори на њих или документи и њихови сажеци.

Ако имате само излазе, користите јачи модел да генерише увјерљив улаз за сваки од њих или ручно напишите мали почетни скуп и проширите га помоћу већег модела „учитеља“, а затим задржите најбоље парове.

На крају, подијелите податке на скупове за тренирање, валидацију и тестирање, како бисте мјерење могли да обавите на примјерима које модел није видио.

Корак 3: Изаберите базни модел и методу

Почните са малим моделом отвореног кода од 3 до 7 милијарди параметара и методом финог подешавања ефикасног по параметрима, као што су LoRA или QLoRA.

Отворене породице модела као што су Llama, Mistral и Qwen дају вам снажну основу коју можете сами да хостујете, а PEFT методе држе хардверске захтјеве ниским: QLoRA квантизује базни модел на 4 бита, па је за фино подешавање модела од 7B потребна само потрошачка графичка картица од 16–24 GB. Потпуно фино подешавање истог модела захтијева вишеструко више меморије.

Корак 4: Подесите хиперпараметре тренирања

Ево кључних параметара финог подешавања LLM-а и предложених почетних опсега:

  • Стопа учења одређује колико је велико свако ажурирање тежина. Студија Бидермана и сарадника из 2024. године показала је да су најбоље стопе за LoRA биле отприлике десет пута више него за потпуно фино подешавање, обично од 5e-5 до 5e-4 наспрам 1e-5 до 5e-5. Студија препоручује испробавање вриједности у опсегу од 1e-5 до 5e-4 и коришћење највеће вриједности при којој је тренирање стабилно.
  • Величина серије је број примјера из којих модел учи прије сваког ажурирања тежина. На једном GPU-у користите малу серију по уређају, од 1 до 8 примјера, и акумулацију градијента како бисте достигли ефективну серију од отприлике 16 до 64 примјера.
  • Број епоха показује колико пута модел прође кроз цијели скуп података. Када модел тренирате за обављање специфичних задатака, 1 до 3 епохе су добро оквирно правило, али LoRA тренинзи често захтијевају више.
  • LoRA ранг (r) одређује капацитет адаптера, односно колико може да научи. Почните са вриједностима од 8 до 32 за једноставније задатке и повећајте га за захтјевније: у раније наведеној студији о LoRA методи коју су објавили Biderman и сарадници, при инструкцијском подешавању модела од 7B на коду био је потребан ранг 256 да би се достигли резултати потпуног финог подешавања, док се ранг 64 томе приближио на математици.
  • Максимална дужина секвенце је најдужи улаз који ће тренинг обрадити. Подесите је тако да обухвати ваше најдуже примјере, највише до величине контекстног прозора модела, јер се све што је дуже скраћује.
  • Загријавање и распоред одређују како стопа учења расте и мијења се током тренинга. Кратко загријавање и косинусно опадање уобичајене су подразумијеване поставке. Међутим, студија о малим моделима коју су објавили Pareja и сарадници показала је да изостављање загријавања није негативно утицало на коначне резултате.

Сматрајте ово полазним вриједностима за систематско испробавање, а не фиксним поставкама.

Корак 5: Тренирајте модел и пратите губитак

Док тренинг траје, пратите криве губитка на скупу за тренинг и скупу за валидацију да бисте видјели да ли поступак даје резултате.

Губитак мјери колико се излази модела разликују од ваших примјера и требало би да равномјерно опада како тренинг одмиче. Губитак на тренингу односи се на податке из којих модел учи. Губитак на валидацији мјери се на издвојеним примјерима.

Ако губитак на тренингу и губитак на валидацији опадају заједно, модел учи да генерализује. Ако губитак на тренингу наставља да опада, а губитак на валидацији стагнира или расте, модел памти скуп за тренинг умјесто да учи образац (преприлагођавање).

Корак 6: Евалуирајте модел, а затим га пустите у рад

Низак губитак на тренингу не гарантује тачне излазе, па фино подешени модел процијените према критеријумима које сте поставили у кораку 1.

Када модел прође провјеру, имате два начина да га пустите у рад:

  • Покрените адаптер на основном моделу и учитајте оба током извршавања; на тај начин адаптер можете лако замијенити.
  • Спојите адаптер са тежинама основног модела како бисте добили један самостални модел који је једноставније хостовати.

Користите Perplexity да бисте свом LLM-у омогућили приступ актуелним информацијама

Фино подешавање је прави избор када желите да прилагодите понашање модела својим потребама.

Ако вашем моделу требају актуелне информације, нарочито оне које се брзо мијењају, потребан вам је RAG или поуздан алат за претрагу треће стране.

Прилагођени систем за проналажење информација најбоље функционише за власничке скупове података, као што су ваша интерна вики страница, историја корисничке подршке, уговори или документација производа.

Када је знање које желите да користите јавно, нема потребе да градите посебан слој за проналажење информација. Perplexity је машина за одговоре која враћа одговоре са уметнутим цитатима на које се може кликнути, на основу индекса веба који се ажурира у реалном времену. Његов Agent API у једном позиву пружа такве одговоре засноване на вебу и поткријепљене цитатима, тако да ваша апликација може да се ослони на актуелне изворе.

Најчешћа питања о фином подешавању LLM-ова

Може ли се LLM фино подесити бесплатно?

Да, мали отворени LLM можете фино подесити бесплатно. На примјер, бесплатни ниво сервиса Google Colab пружа довољно GPU ресурса за покретање QLoRA методе на моделу од 3B до 8B, што је сасвим довољно за фокусиран задатак. Почињете да плаћате када вам затреба више меморије, дужи тренинзи или већи основни модел него што бесплатни ниво може да подржи.

Да ли вам је потребан сопствени GPU или фино подешавање можете обавити у облаку?

Не морате посједовати GPU да бисте фино подешавали LLM-ове. Управљани сервиси и добављачи GPU ресурса у облаку изнајмљују хардвер по сату, па је један изнајмљени GPU довољан за QLoRA тренинг малог модела. Куповина GPU-а исплати се само ако често фино подешавате моделе или морате да чувате све податке на сопственим машинама.

Колико траје фино подешавање LLM-ова?

Код малог LLM-а тренинг може да се заврши за неколико минута до неколико сати, у зависности од величине скупа података и хардвера. Компанија Oumi је, на примјер, потпуно фино подесила модел од 0,8B за нешто више од сат времена на својој хостованој платформи.

Код већих модела или десетина хиљада примјера то може потрајати дан или више: LoRA тренинзи компаније Emburse на моделу од 7B трајали су 8 сати за 5.000 примјера и око 30 сати за 50.000 примјера на једном GPU-у од 40 GB.

Може ли се фино подешени модел стално ажурирати како се ваши подаци мијењају?

Модел можете поново фино подесити на новим подацима, али сваки циклус захтијева рачунарске ресурсе и носи ризик од катастрофалног заборављања. За знање које се често мијења, RAG је обично боље рјешење, јер ажурирате изворне документе умјесто да поново тренирате модел.