Галоўная / Артыкулы / Практычныя прытамулкі: ад прагнозавання наступнага токена да ChatGPT <> Стварэнне LLM

Практычныя прытамулкі: ад прагнозавання наступнага токена да ChatGPT <> Стварэнне LLM

Практычныя прыказкі: ад прагнозавання наступнага токена да ChatGPT <> Стварэнне LLM: контракты, перакантаванні і слоты для коду для команд, якія выкарыстоўваюць гэты патэрн.

2460 слоў

Існавайце гэта як перапрацоўаны варыянт ідэй з матэрыялу “From Next-Token Prediction to ChatGPT <> Build an LLM From Scratch [6]” для аператараў: чыткія этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы задання. Этап Аналізу работае найкраща, калі яго розглядаць як мерыемую структуру. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычым расшырэнню масштаба. Зберагайце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцый должны знаходзіцца ў аднам месцы, куда аператары можуць адбавіць контроль без неабяжнага чытання всей структуры.

Этап 1: Падчысленне, якое вучыла завершэння задання, а не павінавальнасць

Для стадіі прадатчырання ў Першай частцы неабходна пазначыць вхідныя даны, адпаведальнага за этап і крэтыры завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчымае запускаць этап з вядомай точкі контролю без неабясненняя схованага стану. Неабходна адначасова документаванне успішнага і варыянтага падходу. Перапрыбуткі, людзкія перакрыцці і обробка некоректных паведамленняў є часткай продукту, а не наступным этапам дапрацоўкі. Калі наступным крокам є код або вызов інструменту, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.

Explain why the sky appears blue.
Explain why the sky appears blue.
The following questions are commonly asked in introductory physics...
The sky appears blue because Earth's atmosphere scatters
shorter wavelengths of sunlight more strongly than longer
wavelengths...
What text probably comes next?
When the text looks like an instruction,
what kind of continuation should I produce?

Частка 2: Ператвараць канверсаціі на прыклады для датчырання

Для стадіі «Разговоры на другой фарзе» неабяжна падзець інпутаў, адпаведнага власніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцуг задач. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны данні з перакананнем схэмы, замест вольнага формата тэксту.

example = {
    "instruction": "Convert the following sentence to passive voice.",
    "input": "The developer fixed the bug.",
    "output": "The bug was fixed by the developer."
}
Below is an instruction that describes a task.

### Instruction:
Convert the following sentence to passive voice.

### Input:
The developer fixed the bug.

### Response:
The bug was fixed by the developer.
instruction
    ↓
optional context
    ↓
response

Што на самай працы бачыць модэль

Для стадії «Што насправды робіць модель» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Спрыяйце тлумачэнню ціў стадіі як даговору межа вхідных даных і перакананых выходных рэзультатаў. Даць назвы артыфактам, узначыць перакананні пра успех і адмовіцца ад беззвучнага частковага завершэння. Калі наступны крок — це код або вызов інструмента, валідаванне структураваных выходных дадзеных за дапамою схемы лепша, чым вільная проза. Для стадії «Што насправды робіць модель» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Хавайце настройкі за межамі коду прыемленае. Файлы сераў, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф.

[21106, 318, 281, 12064, ... 4435, 257, 3126, ...]
Tokens:
[A, B, C, D, E]

Input:
[A, B, C, D]

Labels:
[B, C, D, E]
instruction → useful response

Паддінг трэбуе спецыяльнага адзьёмлена

Калі працуеце над этапам, дзе Паддінг трэбуе спецыяльнага адзьёмлена, спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі список пераканальвае ў тым, каб пазнейшыя змены коду былі чыстымі. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Зберагаюце у кэшы стабільныя інструкцыі системы і схемы адзінакоў. Перасылка ідэнтычных прамаравых дадзенняў ёсць частым выклікам перадмёркання ресурсаў.

Example 1:
[10, 20, 30, 40]

Example 2:
[11, 21]
Example 1:
[10, 20, 30, 40]

Example 2:
[11, 21, PAD, PAD]
PAD → PAD → PAD → PAD
ignore_index = -100
loss = cross_entropy(
    logits.reshape(-1, vocab_size),
    targets.reshape(-1),
    ignore_index=-100,
)

Этап 3: Дакладная налагодка працы

Калі працюеце над фінальной наладкай 3-й часты, спачатку запісаце кантракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест велікіх скрыптов. Калі якісь крок не выйшае, прычына нявыпання должна вказваць на адну адпаведальнасць, а не на заплутаны ланцужок задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзесланне ідэнтычных даных — частая прычына зайвага навантажэння.

for batch in train_loader:
    optimizer.zero_grad()

    input_ids = batch[:, :-1]
    targets = batch[:, 1:]

    logits = model(input_ids)

    loss = cross_entropy(
        logits.flatten(0, 1),
        targets.flatten(),
        ignore_index=-100,
    )

    loss.backward()
    optimizer.step()
model.learn_to_be_helpful()
### Instruction:
Summarize this paragraph.

### Response:
<clear concise summary>
### Instruction:
Write Python code that reverses a string.

### Response:
def reverse_string(s):
    return s[::-1]
The CPU cache is...
### Instruction:
Explain CPU caching to a beginner.

### Response:
A CPU cache is...

4-я часты: Ацэнка становіцца некомфортной

Калі працюеце над стадзіяй «Адзынак 4: Адзынакаванне стае рэальнасцю», спачатку запішыце кантракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад часты няудача. Такі чарт дапамагае заліцьваваць правдзівасць пазнейшых змян у коде. Спрытывайце гэту стадзію як кантракт межа даннэмі і перакананымі выходамі. Дайце назву артыфактам, задаце правіла пераканання успеху і не падзволяйце частам завершэнню без адказу. Зберагаеце у кешы стабільныя інструкцыі системы і схемы інструментаў. Перадзесланне ідэнтычных прамаўляючых частак — частая прычына зношэння ресурсаў. Калі працюеце над стадзіяй «Адзынак 4: Адзынакаванне стае рэальнасцю», спачатку запішыце кантракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад часты няудача. Такі чарт дапамагае заліцьваваць правдзівасць пазнейшых змян у коде. Зберагаеце настройкі за межамі коду прыемлівача. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, куда аператары можаць адбавіць аудыт без неабяжлівага чытання всей структуры.

Prediction: SPAM
Label:      SPAM

Correct.
Recursion is when a function solves a problem by calling
itself on a smaller version of the same problem.
Recursion is a technique where a problem is reduced into
smaller instances of itself until a stopping condition is reached.

Апавядковыя адказы яшчэ дапамагаюць.

Апавядковыя адказы яшчэ дапамагаюць, калі ўсё працуе наяўна, і яны найэфектывнейша прымаюцца як меркаваная плошча. Запісайце адна ідеальная версія, адзін прыклад неудачы і прыметку пра адвярненне змян перш чым расширваць масштаб. Дакументавайце як успішны, так і вярнучыся шляхы развіцця. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не наступным этапам дорабкі. Задаце бюджет на токены за кожны раунд і за кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.

{
    "instruction": "Explain recursion simply.",
    "reference": "Recursion solves a problem by repeatedly reducing it...",
    "model_response": "A recursive function calls itself..."
}

Запытайце іншага LLM пра адгук пра адказ.

Запрос да іншы LLM адгукаваць працюе найэфектывнейша, калі яго розглядаць як меравальную плошчу. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню перад расшырэнням масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаўце ліміт токенав на кожны рунд і на кожную сесію. Агентныя інструменты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі.

Instruction:
Explain recursion simply.

Reference answer:
...

Model answer:
...

Rate the model answer from 0 to 100 based on correctness,
relevance, and clarity.
1. Inspect representative outputs manually
2. Compare against reference answers where useful
3. Use an LLM judge for aggregate comparison

Акт 5: Потым мы сталкнуліся з яшчэ сложнейшай проблемай <> Перакананні

Этап «Act 5 Then We stage» працюе найкраща, калі яго розглядаць як вимерную паверхню. Зафіксавце адны «золаты» транскрыпт, адны прыклад неудачы і прыметку паўрануці, перш чым расширваць масштаб. Разглядзіце гэты этап як кантракт межа вхіднымі даннымі і паверыжанымі выходамі. Дайце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тыхоўскага частковага завершэння. Задзейце бюджет на токены за кожны раунд і за кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі. Этап «Act 5 Then We stage» працюе найкраща, калі яго розглядаць як вимерную паверхню. Зафіксавце адны «золаты» транскрыпт, адны прыклад неудачы і прыметку паўрануці, перш чым расширваць масштаб. Зберагаце настройкі праза код прыемліка. Файлы сяродавішча, хранільнікі секрэтных данных і флагі функций павінны знаходзіцца ў адном месцы, якое аператары можаць пераглядаць без неабяжнага чытання всіх элементаў.

Адпаведзь А

Для стадіі Адказу неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры перадзеі коду. Аперацыйныя працавнікі павінны магчымае перадзеі крок з вядомай точкі контролю, не падозрываючы схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.

Recursion is when a function calls itself.

Адказ B

Для стадіі Response B неабяжна практычна ваказваць інпуты, адказвальнага за крок і крытэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшае, прычына неудачы должна вказываць на адзін конкрэтны аспект, а не на заплутаны ланцюг задач. Калі наступны крок — это код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны данні з перакананням схемы, а не вольнае пісьменне выражэння.

Recursion is a technique where a function solves a problem
by calling itself on a smaller version of that problem.
The process stops when it reaches a base case.
correct vs incorrect
chosen vs rejected
{
    "prompt": "Explain recursion simply.",
    "chosen": """
    Recursion solves a problem by repeatedly reducing it
    until reaching a base case.
    """,
    "rejected": """
    Recursion is when recursion happens recursively.
    """
}
Prompt
   ↓
Chosen response ─────┐
                     ├── preference objective
Rejected response ───┘
                     ↓
               model update
Pretraining
    ↓
learn language patterns

------------------------------

Instruction fine-tuning
    ↓
learn instruction → response behavior

------------------------------

Preference tuning
    ↓
learn which acceptable responses we prefer

Што на самай працы змянілася?

Для стадіі «Што на самай працо змянілася» неабходна прадзеўжды апранаваць вхідныя даны, адпаведальнага за выкананне крока і крэтыяры завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіі як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, апранаваць перакананні на успех і не прымайце часткова завершанне без паведамлення. Калі наступны крок — це код або вызов інструмента, валідаваць структураваныя выходныя даны з падтрымкай схемы лепш, чым вольнападобны прозаічны тэкст. Для стадіі «Што на самай працо змянілася» неабходна прадзеўжды апранаваць вхідныя даны, адпаведальнага за выкананне крока і крэтыяры завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Храніце настройкі параду коду прыемленае. Файлы сераўіса, хранілішча секрэтных дадзеных і флагі функцияў павінны знаходзіцца ў адном месцы, якое працавнікі можу аудытаваць, не чытаючы весь ланцуг.

### Instruction:
Pretraining:
What token should come next?

Instruction tuning:
What does a good answer look like after an instruction?

Preference tuning:
Of several reasonable answers, which behavior should we prefer?

Заключныя заўважэнні

Калі працуеце над стадзіяй заключных заўважэнняў, спачатку запісайце угоду: неабходныя даны, сігнал успеху і тое, што выканаецца у разы частковага невялікога браку. Такі чарт дапамагае заставаць пазнейшыя змены коду чыстымі. Документавайце як шлях успеху, так і шлях вяснавання ситуацыі. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам. Зберагайце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перасылка ідэнтычных прамуслов ёсць частым выклікам для ресурсаў.

Якщо гід вам дапамог…

Калі працуеце над этапам разработкі, запісайце спачатку умовы виконання: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага невыконання. Такі список контролю дапамагае заліцварыць пазнейшыя змены ў кодзе.

Чэрніцкі список для эксплуатацыі

Калі працуеце над этапам чэрніцкага списку для эксплуатацыі, запісайце спачатку умовы виконання: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага невыконання. Такі список контролю дапамагае заліцварыць пазнейшыя змены ў кодзе.

Запісвайце час выконання і кост токена або запиту праза функцыональныя рэзультаты. Відразувая відображэння костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.

Зберагаеце інструкцыі стабільной системы та схемы адзінакоў. Павторная апрабоўка ідэнтычных даных ёсць частым выклікам працэздатнасці.

Зменшыце вартасць обробкі дадзеных і адкладыце дорогія крокі обработкі толькі пасля аналізу. Нерэшаная мемаізацыя можа закрыць багі, вызваные застарэлымі дадзеннямі.

Калі бюджет дазволяе, дадзіце тэст на працэздатнасць, які пераглядае критычны шлях у середовішчы CI з викорыстаннем фіксатываў, а не рэальных платных API.

Вядзьміце прыоритет над маленькімі, тэставанымі елементамі працэздатнасці над вялікімі скрыптамі. Калі якісь крок не выйшаў, адказнасць за гэта падазроўваеце толькі адзін элемент, а не цэлы складны ланцюг.

Перш чым пераходзіце на новую версію, заморозьце існуючыя версіі, зафіксуйце ідеальны варыянт дадзеных для критычнага шляху та паказвайце способы ўвядзення ў пачатковы стан. У спільных середовішчах неабходны ліміты на частоту запытоў, перакананні ў правах на выкарыстоўванне ресурсоў та чысткі распадзел вядальніцтва за секрэтнымі данымі. Вядзьміце прыоритет над надзеямі на выдатную працэздатнасць над красівымі, але разовымі дэманстрацыямі.

Запіскі для пакета 6748f099cda4: не класты ключі прадаўцоў у репазітарыю, задаць максымальную колькасць токенаў на сесію, а таксама зберагчы транскрыпціі праза фіксатуры адлічэння, каб пазнейшыя замены моделей заставаліся пораўнаннэй.