Галоўная / Артыкулы / Оптымізацыя вычысленняў LLM: падзаполненне, декодаванне і корпоратыўскія методы керування LLM.

Оптымізацыя вычысленняў LLM: падзаполненне, декодаванне і корпоратыўскія методы керування LLM.

Проблемы прадзяўлення проты расшыфравання, непаўзлівая групаванне даных, FlashAttention, квантызацыя, PagedAttention, спекуляatyвае расшыфравання, прадзяўленне па часткам і роздзельная аператываўная обработка.

1809 слоў

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

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

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

1. Две фазы, два узгорнуткі

Кожны запит на інферэнс дзеліцца на прадаўленне і декодаванне. Кожная з фаз сталквецца з іншай мерытлівасцю апаратуры.

Прадаўленне (зазвычай залежна ад вычыслювальных магчымасцей)

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

Декодаванне (зазвычай залежыць ад пропускной спроможнасі памяці)

Пасля таго, як запит увайшоў, токены прыходзяць адні за іншым. Кожны крок запоўняе вагі всіго модэлю і растучуююцыся історыю ключ-значэння з памяці высокай пропускной спроможнасі (HBM) у SRAM GPU. Пры малых розмарках пакетаў такія перадачы выконваюцца так часта, што GPU чакае на пропускную спроможнась памяці, а не на вычыслы.

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

Рэвуляцыя затрымкі

Аб’ём загальных затрымакаў запыту дзеліцца на часткі прадактывацыі і декодавання:

T_total  =  TTFT  +  (N_tokens − 1) × TPOT
  • TTFT (вырахунак часу да першага токена) включае цэлы процес прадактывацыі запыту плюс першы токен выходу — гэта тое, як корыстнік спрыяжаеся з системай на пачатку.
  • TPOT (час на кожны токен выходу), або затрымка межа токанамі, — це стая вартасць кожнага наступнага крока декодавання.
  • N_tokens — гэта дыяпазон довжыны выходу.

Фактар (N − 1) ўзяты намеравана: першы токен уже знаходзіцца ўнутрь TTFT, таму толькі рэшта элементаў множыцца на TPOT. Сумешчанне неапранутых вычыслаў прадзействавання з TTFT — частая памылка. TTFT назначана для відображэння для корыстувальця і павінна включаць гэты першы крок декодавання.

2. Прыйом даных прытаму, калі GPU ўжо бачаць трафік

Максымальны трафік можа выцягнуць GPU, якщо толькі не будзе прадваральнай перапрацоўкі, адзначэння і фільтрацыі даных. Тыповы маршрут: API-шлюз → багатаслоўны семантычны кэш → у разе нявасобнасці — інтелігентны маршрутызатор, які ацэнюе складнась і направляе задачу ў кеш на базе стандартных модэлей або у кеш на базе прыграндных модэляў.

Ключовы элементы:

  • Багатаслоўны семантычны кэшаванне: адпаведнасць ключа і значэння плюс вектарная схожасць з коефіцыентам cos θ ≥ τ. Павтарэння ніколі не вплываюць на модель; адпаведна знижваецца і вартась, і час адпаведзення.
  • Інтэлігентна маршрутацыя модэляў: лёгкі класыфікатор адправляе інформацыю пра класыфікацыю/форматаванне да малых модэляў, а сложныя модэлі застаюцца для рашэння складных задач або викорыстання калькуляцыйных інструментаў у кольках крокаў.
  • 3. Агульны механізм выконання: безперывнае групаваўчыкаўцо і поток памяці

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

    Безперывнае групаваўчыкаўцо стосуецца не толькі пра швальнасць. Яно таксама дапамагае перайсці з режыму, калі прыгрэш лімітуўваецца памяцю, у режым, калі прыгрэш лімітуўваецца вычысленнямі, тады GPU выпрацоўвае арыфметычныя операцыі замест таго, каб чакаць на HBM.

    4. Адразу усуненне вузькаяго месца на практычным этапе

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

    Prefill: FlashAttention

    Косцт пры выкарыстоўванні Prefill адрастае пры квадрате дужыны запиту, калі класычны метод атэнцыі стварае цэлую матрыцу оцэнак размерам N×N у HBM. FlashAttention — это ядро, якое врачуе прыемність дадзеных па частках і вырачоўвае ёё точна, перадаючы гэтыя часткі через SRAM на крыхтэ чипа, тым самым зменшуючы навантажэння на HBM без неабяжнасці апрыксамаў. Результат вырахоўвання є точным, а час обробкі дужоўдзейшы пры дугіх запитах. Ён ўсталоўленае рашэнне ў большасці систем обслугавання і выкарыстоўваецца разам з частковым заповненняем памяці і адсаюваннем дадзеных.

    Квантызацыя

    Декодаванне вимагае ресурсоў для перадачы ваг у памяць SRAM з HBM. Квантызацыя зменшае розмер ваг — з FP16 да FP8, INT8 або 4-бітных форматаў (AWQ, GPTQ) — такім чынам кожны токен перадае менш байтов. Эфектывае пропускнае здольнасць памяці вырастае, і ў яе можа поместыцца больш последоўнасцяў. Можна спакульаваць незначныя падыходы ў точнасці, якія неабходна пераканацца праз сасавыя тэсты.

    Кеш KV з падзеленнем на сторанкі (PagedAttention)

    Історычныя ключы/значэння расширваюць токены поштоўка за поштоўкай і спрычыняюць значны выкарыстанне памяці. Фрагментаванне алакрацоў памяці вымагае ўзбольшання ресурсаў. PagedAttention зберагае KV у блоках фіксаванага размяру, як у віртуальной памяці ОС, чым усунувае фрагментаванне і дазволяе вялікія размеры пакетаў на той жа апаратура. Яго можна выкарыстоўваць разам з безперывным формаваннем пакетаў для досягнення высокай паралельнасці.

    Спекулятивная дэкодаванне

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

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

    5. Планаванне обох фаз: часткова падготовка і дэагрегацыя

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

    Частковая падготовка

    У зяместо аднага велікага прадзейсвення, раздзяліце запит на часткі і сумешайце іх з крокамі дэкодавання ў той жа пакет (Sarathi / Sarathi-Serve). эта мера смягчае рывкі TTFT для суседніх задач і спалюе працу, залежную ад вычысляў, і тую, якая залежыць ад памяці. Пастойчыя групаванні выбіраюць, каторыя запиты дзелаюць адночасна; часткова прадзейсвення вялікага об’ёму вядома, як ўвайсці большым об’ёмам дадзенняў, не заважаючы процесу дэкодавання.

    Раздзельнае выдаванне

    Частковая прадзейсвення зменшае перасяганне між задачамі; раздзельнае выдаванне усуняе яго, распаковуючы разныя фазы на розным апаратнам забезпечэнні (DistServe, Splitwise). Прадзейсвення вялікага об’ёму адбываецца на пулах, оптымаізаваных для вычысляў, а дэкодавання — на пулах, оптымаізаваных для працы з прасоўкай дадзенняў, пры чым KV-данні перасылаюцца через меры взаімнае з’ўязку. Кожная фаза масштабуецца на сіліконе, який падходзіць для ўсунення елемента, які створыў галоўную перашкоду.

    Існуюць рэальныя компрасы: перадача KV становіцца новым вузкам местам, а вагі павінны знаходзіцца ў обох базах дадзеных. На вялікіх масштабах стае зрозумела перавага спецыяльнага запасвання ресурсаў па фазам над такім додатковым навантажэнням. Меньшыя проекты часта задовольняюцца толькі частковым падготавленнем дадзеных.

    6. Сістэмныя наследкі і компрасы

    Шаблоны працы системы прагнуць збалансаваць выконвальную спроможнасць з аперацыйным рызыкам і вартасцю інфраструктуры. Ці фіксуюцца показнікі залежна ад апаратуры, модэля, трафіку і налашоўкаў — трэба аналізаваць сябе, а не копіраваць узнаваныя пэрасэнты.

    Багаташаровая семантычная кэшаванне — точныя KV-данные плюс аналіз сэмантычнай супарадненасці вектароў. У такім разе не патрэбна праця з модэлем. Вартасць: пошук вектароў (выдзей ад каляго дзесятка мілісекундаў), а такса можа быць недакладной, якщо параметр τ занадта маленькі.

    Інтэлектуальнае маршрутызаванне — класыфікатор складнасці направляе простыя завданні да маленькіх модэляў. Гэта знижвае сярэднюю вартасць обробкі дадзеных; неправильнае маршрутызаванне паграджае якасць.

    Непаўзлівая групаванне — з’еднанне на рэвэліцыйскам узроўе пад час генеравання. Вышэйшая выкарыстоўванасць і прахіднасць пад канкурэнцыяй; адзіныя запиты могу стаць у черге пад час складання. Статычная групаванне яшчэ падходзіць для задаў з прахіднасцю па афлайн-режыме.

    Квантызацыя — вагі з нижэйшай точнасцю зменшаюць колькасць перадач HBM→SRAM. Большая канкурэнцыя на адной GPU; патрабуеяцца перакананне ў точнасці; падтрымка кэрнела разная.

    Paged KV — фіксаваныя блакі знімаюць фрагментацыю. Вышэйшыя размеры груп; патрабуецца калектывнае адарожванне блакоў і сумэжны кэрнел атэнцыі.

    Спекулятивнае дэкодаванне — маленькі працоўнік прыносіць прыпуск; большая модель перакананая разам. Калькі токэнаў за большы крок; чутлівасць да другой модэлі і каляркі адзыявання.

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

    7. Закрыцья цыклу

    Пераход з пратотыпа да практычнага викорыстоўвання значыць проектаванне з урахоўваннем апаратуры. Аддзельна працюйце з падготавкой данных і ўзлагоджэнням іх, стежыце за тым, як размах пакетаў вплывае на процес узлагоджэння ў залежнасці ад таго, чыя меры ўплываюць больш — памяць чы вычысленні, кэшаваце прогнозаваныя запиты, направляйце простыя задачы да малых модэлей, а таксама збірайце токены за дапамогою стацыонарнага пакетавання. Потым борціце з проблемамі узлагоджэння за дапамогою квантывацыі, структуры KV і спекулятивнага узлагоджэння, а таксама зменшайце втручанне фаз за дапамогою частковай падготовкі данных і ўскладнення їх структуры. Што даўнае, гэтыя методы дапамагаюць пераканацца пікі навантажэння без выкарыстоўвання всіх можлівасцей GPU.

    Спіс пераконтраўкі планавання ўместнасці

    Калі TTFT вырастае, трэба пераканаліцца на распадзе дужын запитоў, шчыцькіста падачы з сэмантычнага кешу, наявнасць FlashAttention і чы не продалей дугі запиты монаполізуюць GPU як адна вялікая пачатковая заданне. Калі TPOT вырастае за сцэнарыяў канкурантнасці, трэба пераканаліцца на фактычным розмеры пакета, перадзеі KV, рэвэліцыяй уровні і чы разбор запітоў зноў не перайшоў у режым, калі ён залежыць ад памяці.

    Практычны ўзаемнае адгукі ў тыжневым меры включае трох пытанняў: Чы мы кэшуем прагнозавальныя запиты? Чы мы перадаўм простыя задачы за межы фронтальных модэляў? Чы мы арганізавалі разбор запітоў так, каб GPU моглі выконваць арытмэтычныя вычысленні замест таго, каб чакаць на HBM? Адпаведныя адказы зазвычай кращыя, чым пакупка ўтварэння пры тым, калі стак сэрвісавання ўжо не налаштованы.

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

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

    Прымечанні аператара

    Семантычныя кэшы трэба перазрацаваць з учыткам параметраў TTL і τ; занадта маленькае значэння τ прыводзіць да некоректных адпаведзей. Маршрутызаторы патрабуюць данных пра складнасць з пазначэнням, інакш яны неправильна надаюць складныя запиты маленькім моделям. Для неперывнай групаванне неабходны показателі затрымкі в у черзі, каб «вышыя праўылі обробкі» не масквалі проблемы з інтэрактыўнасцю. Для спекулатывнага декодавання трэбуюць панелі для адзначэння прыемлівасці проектаў — якщо прыемлівасць падупае, вы заплатілі за другую модель без жаднага прыбавлення швальнасці.

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

    Справы

    Асновныя статыяў, якія лежачы ў основе эгэнных механізмаў (чысла апісваюць іх, а не вас):

    1. Orca distributed transformer serving — Yu і іншыя, OSDI 2022 (USENIX).
    2. PagedAttention memory management — Kwon і іншыя, SOSP 2023 (arXiv:2309.06180).
    3. GPTQ post-training quantization — Frantar і іншыя, 2022 (arXiv:2210.17323).
    4. AWQ activation-aware weight quantization — Lin і іншыя, 2023 (arXiv:2306.00978).
    5. FlashAttention IO-aware exact attention — Dao і іншыя, NeurIPS 2022 (arXiv:2205.14135).
    6. Speculative decoding for fast transformer inference — Leviathan, Kalman, Matias, ICML 2023 (arXiv:2211.17192).
  • Sarathi / Sarathi-Serve — частковыя падзеўкі даных з адгэнераваннем пасля декодавання — Agrawal і іншыя, 2023–2024 (arXiv:2308.16369).
  • DistServe — раздзелэнне падзеўкі даных і процеса декодавання — Zhong і іншыя, OSDI 2024 (USENIX).
  • Splitwise — разбіўка фаз для генератыўнага адгэнеравання — Patel і іншыя, ISCA 2024 (arXiv:2311.18677).