Выкананне Qwen3.8-Flash-Next на картаках RTX 3090 з адпыткамі Tensor Offloading ад llama.cpp
Чаму рыхлы модель па 88 ГБ з 180 мільярда параметраў падходзіць для спожывачскіх GPU, і як такі флагі ля llama.cpp, як -ot, -ncmoe і mmap, дзельнуюць яе межаў VRAM, RAM і NVMe.
Qwen3.8-Flash-Next — это адзёрнае модэль з прыбліжна 180 мільярда параметраў, чыя квантаваныя файлы займаюць 88 ГБ, пры тым людзі паведамляюць, што ўпрынамляюць яе на адной картэ RTX 3090 з 24 ГБ VRAM. На паперы гэта на адзін порядак меньш. Яна працуе завяршваючы архітэктуру модэль, а не завяршваючы хітрае квантаванне чы не звычайна моцную карту графікі: большая частка модэль ніколі не патрэбуеяць знаходзіцца на картэ графікі. У гэтым артыкуле пояснююцца чатыры выборы дизайна, якія гэта можлівяюць, а пасля прадстаўленыя цэлыя настройкі llama.cpp для апаратуры з трыма картамі графікі і для апаратуры з адной картай графікі, уключаючы тое, што робіць кожны важлівы флаг і якую праўдападную працэздатнась можна спакоючыся аспектаваць.
Чаму Flash-Next варта запускаць локальна
Alibaba выклікала Flash-Next у ліпені. На момент напісання цього тэксту яе публікуемыя рэзультаты паказваюць, што ён пераважае Qwen3.8-27B, DeepSeek V4 Flash (0731) і, на калькольніках агентных модэляў, Opus 4.6, пры чым актывацыйся толькі 6 мільярда параметраў на токен. Рэнкінгі калькольнікаў быстра зміняюцца, таму пераканайцеся ў актуальных ацэнках пры тлумачэнні гэтых парадакоў. Болей стабільным фактам є тое, як складзена сама модэль, адтолькі гэтая структура вялічы, які апаратурай можа ёй служыць.
Чатыры архітэктурныя падходы, якія пераносяць вычысленні з GPU
Flash-Next аб’еднае чатыры ідэі. Кожная з іх пераносіць частку дорогіх вычысленняў з дорогай апаратуры на дешавую апаратуру або ж цэлкам ўсуне іх.
УльтраПрамальная сумешанасць экспертаў
Модель складаецца з 48 слоёў, і кожны слой мае 512 спецыялістскіх падсетей. Кожны токен праходзіць через толькі 11 з іх: 10 выбіраецца рутэрам, які аналізуе токен і выбірае найболей падходячых спецыялістаў, плюс 1 спецыяліст, які выкарыстоўваецца всіма токенамі без додатковага маршрутавання. Іншымі словамі, праця над даным токенам виконваецца прыблізна 2% спецыялістаў.
Прыемным аналагам ёст маўзолей з 512 спецыялістаў, якія знаходзяцца на дыжурстве, і адним загальным лекарем, які завжды знаходзіцца ў пакое. Кожны паціѐент атрымвае дзесять кансультацый, якія падходзяць яго сімптомам, а іншыя 501 спецыяліст не беруць участі. Ключовая ідея для локальных вырахункаў закладаецца на тым, што „на дыжурстве“ означае проста „доступны“. Спецыяліст не павінен знаходзіцца на GPU, каб быць доступным.
Спяшчаны эксперт існуе таму, што дизайны, які базуюцься выключна на маршрутах, частаюць втрачаць загальныя знання, якія патрабуе кожны токен. Размешчанне гэтых знанняў у експерце-загальніку, які завжды працуе, дазволяе спяшчаным экспертам болей агрэсіўна спецыялізавацца. Большасць сучасных дизайнаў типу MoE уключаюць такі эксперт, а яго параметры ўскладнююць загальную колькасць актыўных елементаў у розмяре 6 мільярда.
Gated DeltaNet плюс Qwen Sparse Attention
Стандартны трансфармер зберагае записы ключ/значэнне для кожнага обробленага токена. Гэты кеш KV расте лінейна з довжыной контексту і стае вельмі вялікім пры дужа дługіх текстах. Flash-Next у значныяй меры адмовляецца ад гэтага. Тры з кожных чатырох слоёў выкарыстоваюць Gated DeltaNet, які стискае історыю ў маленькі стан фіксаванага розмяру. Падзейны слой у кожной групе выкарыстовае Qwen Sparse Attention, які чытае з фіксаванага ліміту у розмяре 512 блакоў, 2 048 токенав, незалежна ад таго, чы розмір контексту становіць 32 К або мільйон токенав.
Практычныя наследкі здаюцца значнымі: пры 178K контэксте кеш KV у наведзеных выкладках займае апошнё 6GB, тады як адпрацоўваны аналогічны ўпакоўкаванный модель патрабуе прыблізна у дзесяць разоў большае прыемлівасць. Гэта і є прычына, чаму карточка на 24GB узагалі можа падтрымваць длігія размовы.
Закрыты, багатопасяжны залишковы струмэн
Класычныя трансфармэры направляюць усё через адны залишковы струмэн з першага шару да апошняга, і ў глыбокіх сетях ранніе характэрыстыкі часта зменшуюцца па ходу. Flash-Next расширвае гэты шлях да чатыры паралельныя пасекі, пры чым навучаныя вораты керуюць тым, што праходзіць у кожную пасеку і з яе выходзіць. Пад час навчання адна з пасек стала спецыялізавацца як канал дальнейшага распространення, який перадае ранню інфармацыю глыбока ў сеть. Це невялікая архітэктурная змена, якая даўае дадатковыя можлівасці без значных затрат.
Таблыца імбедджаў n-грам
Чэтырты ўзел — это таблыца з 51 мільярдам параметраў, што больш, чым усе іншыя элементы модэлю разам узятые, і якая вогулі не выканае ніяких множэнняў матрыц. Це структура для пошуку, і яна ёсць галоўной прычынай таго, што адна графічная карта для гэмы ўсё ж можа выконваць своія задачы.
Таблыца n-грам: ведамасць, якія не патрабуюць GPU
У звычным мовнам модэлі кожны токен прыкладзаецца да ID, і модэль шукае гэты ID у таблыцы эмбеддінгаў: по адной строчкі на токен. Строчка, якая мае толькі адзін токен, не несе вельмі мало інформацыі пра контэкст. У разе фразы на кшталт "dostoevsky wrote the brothers" эмбеддінг слова "the" нічога не гаворыць пра Карамазоў; модэлю даводзіцца выважваць продазвжэнне за дапамогою своіх дорогіх слоёў, і яму даводзіцца робіць гэта ўсё час, калі такі патерн з’яўляецца.
Flash-Next дадае другую табліцу, у якой рядкі пазначаюцца короткія фразы заместо адзінаковых токенав. Канцэптуальна, электры здаюцца як на скетчы нижэй: хешаваная фраза злева і тое, што кодуецца вэктарам, які ён выучыў, справа.
Drawer "born on october" → hint: 1985, Honolulu, singer
Drawer "dostoevsky brothers" → hint: Karamazov, novel, 1880
Drawer "def main(" → hint: python entry point
Пад час чытання модэль хешуе апошнія калькі токенав, запрашвае адпаведны рядок і фактычна безкоштовна атрымлея прадзейснаваны падказкі. Ніхто не запісваў гэтыя рядкі вручную. У ходзе навучання, калі фраза следавала за певным продажчыкам, яе рядок быў незначна скорэгаваны ў тым напрамку, так што пасля трыльйонав токенав кожны рядок апрыксама відпавядае тому, што зазвычай выйшае далей. Табліца мае прыблізна 20 мільйонаў электраў біграмаў і трыграмаў, а ўсё, што яна выдае, вводзіцца раз, рана, на 2-му шаре. По суты, гэта запамятованне распашчацых фразав, а вельмі большая частка рэальнага тэксту — це распашчацыя фразавы.
Разлік між двума видаў ведамасці ў модэлі і є тым, што дазволяе роздзеліць апаратнае забезпечэння. Наступны параграф стварытае його кантактную сумарацію.
| | Neural network | N-gram table |
|------------------|-------------------------|-------------------------|
| Work per token | Matrix math (expensive) | Drawer lookup (no math) |
| Needs the GPU? | Yes, every millisecond | No — CPU can fetch it |
| Lives in | VRAM | RAM. Even SSD. |
Выніклыяя характэрыстыка — гэта тое, што рядок, які трэба запрашваць, залежыць толькі ад вхіднага тексту, а не ад якога-небудзь схованага стану ў самай сетцы. Як толькі запит токенізуецца, CPU точна ведае, якія рядкі будуць неабходныя, таму ён можа запрашваць іх заздалегідь, пакуль GPU ўсё яшчэ зайняты ранейшымі шарамі.
Гэта дазволяе розместіць модэль у іерархіі памяці відпаведна тому, у чым кожны ўзлок мае сябе перавагі:
- VRAM (шырока, дорога): прыблізна 6 мільярда параметраў, якія фактычна выраховваны для кожнага токена.
- Сістэмная RAM (середняя, дешава): параметры экспертаў у стане вільнасці і таблыця n-gramаў размерам 29 ГБ.
- Зберагач NVMe (медленная, найдешавейшая): дадзеныя, якія переплываюць, запрашваюцца толькі тады, калі ўжо ўжо нехта да іх прыходзіць.
GPU большэй не являецца месцам, дзе зберагаецца весь модель, а становіцца месцам, дзе выконваюцца актыўныя вычысленні.
Конфігурацыя з трыма GPU для ўседзённага выкарыстоўвання
Разглядзім сервер, пабудованы з трох карт RTX 3090 (заўсёды 72 ГБ VRAM), 48 ГБ системнай памяці DDR4 і драйва PCIe Gen3 NVMe, які зберагае вагі модэлю. Нічога з гэтага не ўзначае клас работайнага станка; гэта тып машыны, якую багато разработчыкаў складаюць з старэйшых геймінг-карт.
Файл модэлю, які тут выкарыстоўваецца, — это версія UD-IQ4_XS з рэпазітарыю unsloth's GGUF для гэтага модэлю на Hugging Face, розмерам прыблізна 88 ГБ, распадзеленых на тры часткі: прыблізна 59 ГБ вагаў основнай часткі модэлю плюс 29 ГБ табелі n-gram. Падтрымка гэтай архітектуры ўзнікла не так давэўна, таму перад спробай выкарыстоўваць яе трэба запрашыць найновейшы код llama.cpp і перзбудаваць модэль.
Наведзены выклік запускае llama-server на трох працоўных апаратах з графічнымі процесорамі. Большасць парадактав ёсць стандартныя (хост, порт, параметры выбору дадзенняў, размеры пакетаў, дужына контексту), таму зверніце увагу на парадакты перанесення навантажэння, парадакты разбівкі і режым завантажэння, пра якія пагаворыцца зараз.
CUDA_VISIBLE_DEVICES=0,2,3 CUDA_SCALE_LAUNCH_QUEUES=4x llama-server \
-m /mnt/data_2t/ai_models_all/llm_hf_models/unsloth/Qwen3.8-Flash-Next-GGUF/Qwen3.8-Flash-Next-UD-IQ4_XS-00001-of-00003.gguf \
--alias Qwen3.8-Flash-Next \
--jinja \
--metrics \
--host 0.0.0.0 \
-ngl 99 \
--batch-size 4096 \
--ubatch-size 512 \
--flash-attn on \
--temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.0 --repeat-penalty 1.0 \
--split-mode layer \
--tensor-split 0.9,0.95,1.0 \
--fit off \
--main-gpu 0 \
--ctx-size 178000 \
--parallel 1 \
--image-min-tokens 1024 \
--reasoning-format none \
--timeout 1200 \
--ctx-checkpoints 8 \
--port 8082 \
--load-mode mmap \
--cache-type-k q8_0 --cache-type-v q8_0 \
-ot '^per_layer_token_embd\.weight$=CPU' \
--reasoning-effort low \
-t 14
Фіксацыя табелі n-gram у памяці RAM системы
-ot '^per_layer_token_embd\.weight$=CPU' — гэта настройка паведамляе llama.cpp, што любы тэнзор, назва якога падходзіць пад рэгулярны выраз, должен быть размешаны ў памяці CPU, а не у VRAM. Таблыца n-gram хранится пад назвай тэнзора per_layer_token_embd.weight, таму гэтае адна лінія не дазволяе 29 ГБ даных з таблыцы паляць у графічныя процэсоры. Калі токену патрэбна якая-небудзь роў, CPU ёе запрашвае і перадае рэзультат, што яўляе сабою саме тую процедуру прадзягвання, якая описана вышэй. Сімвалы ^ і $ маюць важлівэ значэнне: яны гарантуюць, што выраз падходзіць толькі да гэтага тэнзора і не спрычынае случайнага перамешчання іншых вэйтаў.
Вывядзенне адпаведальнасці за размешчэння памяці на ОС за дапамою mmap
--load-mode mmap прыкладзеяе файл модэлю як мемарыяныя карты замест таго, каб чытаць яго ў RAM заздалегідь. Аператыўная сістэма пасля таго зберагае часта адкрываемыя сторанцы ў наявным кэшы сторанцаў, а рэдка адкрываемыя сторанцы залічвае на SSD. З 48 ГБ RAM і таблицай размерам 29 ГБ гэта ўзгодны баланс: кернель выбірае, што павінна застацца ў памяці. На апаратзе з великай колькасцю памяці, напрыклад 128 ГБ, болей логічна выбраць none, таму што весь файл чытаецца аднойчы, і пасля таго не бувае працэсаў абыходу сторанцаў.
Раздзелэнне шароў між картамі
--split-mode layer у поўнай суворасці разам з --tensor-split 0.9,0.95,1.0 дзеліць 59 ГБ масива даных на суседзячыя групы слоёў, пры чым кожная група падлягае обробцы адзінам GPU; пропорцыі ў групах адносна неравныя, таму першы GPU залишаецца з запасам для виканання дадатковых задач як --main-gpu. Параметр -ngl 99 розмешчае ўсе 48 слоёў на GPU, прыблізна по 20 ГБ на кожны. KV-кеш, квантаваны до рэжіму q8_0 за дапамогою --cache-type-k і --cache-type-v, знаходзіцца празаўсёды з вагамі даных і можа запісваць 178 К токенав прыблізна 6 ГБ.
Рэзультаты теставання на трох GPU
У данай конфігурацыі показаны наведаны выкладкі.
Decode: 30-50 tokens/second
Prefill: 400-700 tokens/second
Context: 178,000 tokens
Гэта быстрей, чым швальц чытання данных для модэлю з класу frontier-adjacent, калі ён працюе на звычных спожывачскіх GPU у корпусе середньяго размеру.
Конфігурацыя з адним GPU і яе меры
Дастыць адна карта 3090, якщо выпалоеўнае адно ўмова: як мінімум 64 ГБ памяці RAM. Таблыца n-gram і эксперты, якія выважаны за межы памяці, патрэбуюць месца для зберагчыць, і память системы зазвычай ёсць найдешавшым спосабам апгрэйда для локальнага АІ-апарата.
Каманда выкарыстоўвае тую ж GGUF-файл. Значныя разлікі — это новы флаг -ncmoe, адна видныя GPU, параметр --load-mode none заместо mmap, а таксама меншы колькість потаков CPU.
CUDA_VISIBLE_DEVICES=0 llama-server \
-m /mnt/data_2t_3/ai_models_all/unsloth/Qwen3.8-Flash-Next-GGUF/Qwen3.8-Flash-Next-UD-IQ4_XS-00001-of-00003.gguf \
--alias Qwen3.8-Flash-Next \
--jinja \
--metrics \
--host 0.0.0.0 \
-ngl 99 \
-ncmoe 38 \
--batch-size 4096 \
--ubatch-size 1024 \
--flash-attn on \
--temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.0 --repeat-penalty 1.0 \
--ctx-size 178000 \
--parallel 1 \
--image-min-tokens 1024 \
--reasoning-format none \
--timeout 1200 \
--ctx-checkpoints 8 \
--port 8083 \
--load-mode none \
-ot '^per_layer_token_embd\.weight$=CPU' \
--reasoning-effort low \
-t 8
Што робіць -ncmoe 38
-ncmoe 38 заставляе вагі экспертаў першых 38 слоёў зберагчыцься ў памяці RAM CPU, тады як вагі экспертаў апошніх 10 слоёў заставляюцца зберагчыцься ў VRAM. эта дазволяе разместіць або 43 ГБ вагаў экспертаў у памяці системы. Компаненты, адпаведальныя за атэнцыю і спадзеленую работу, у кожным слоі все ўсё рабяць на GPU завдзяк параметру -ngl 99.
Зберагачыць такі велікі об’ёмы дадзеных у RAM застаецца можлівым завдяк ўзрэдкасці. Кожны токен актывае 10 з 512 экспертаў на кожным шары, таму ён зачыпае всьго або блізка да 1,3 ГБ вагаў экспертаў. Эксперты, якія знаходзяцца ў RAM, вырахоўваны на CPU, дзе яны розташаваны, без копіювання іх у GPU, а эксперты ў VRAM працуюць натыўна на самай карце. CPU працюе значна медленней за 3090, таму існуе рэальны недзел, але ён залежыць працэсам ад приблізна 2% вагаў, якія зачыпае кожны токен, а не ад усіх зберагачаных дадзеных.
Паколькі тут RAM можа зберагчыць такі велікі об’ём дадзеных, --load-mode none чытае файл усё цэла пад час запуску, замест таго каб спалагацца на падбіяннях сторанак, і гэта ўжо аднойчы паяснюе, чаму неабходны ўжо 64 ГБ.
Настройкі для іншых карточак
Той самы каманд работае на RTX 4090 або 5090; толькі параметр -ncmoe трэба налаштаваць па доступным VRAM. Рекамендаваныя значэння для пачатку прыведзены нижчэ.
| GPU | VRAM | Suggested -ncmoe | Experts in RAM |
|------------|------|------------------|----------------|
| RTX 3090 | 24GB | 38 | ~43GB |
| RTX 4090 | 24GB | 38 | ~43GB |
| RTX 5090 | 32GB | 28-30 | ~32GB |
Кожным разам, калі вы зменшыяеце значэння -ncmoe, эксперты адпаведнага шару, якія займаюць прыблізна 1,1 ГБ памяці, вяртаюцца на GPU. Пасля завантажэння моделі пераканаўцеся ў nvidia-smi і стараюцца залишыць прыблізна 500 МБ вільнай VRAM; калі памяць карты запоўняецца цэлком, пад час зростання об’ёму данных можу выйсці бяговыя працэсы з адсутнасцю памяці.
Становленне рэалістычных аспактаваў
На адной карте 3090 процэс декодавання вядзецца з 15 да 20 токенав у секунду. Гэта ўжо прыемна, але толькі меркаючы: дасыльна для чытання, але настолькі поволка, што довгі процесы генеравання выглядаюць повольна, таму што частка вычыслаў насправды ведзецца на CPU у системнай памяці. Як доказ ідэі або ў тым, каб скорастыць работу машыны, якая вас вже ўсё ж такі мае, запуск моделі класу 180B з шыбкасцю чытання на адной геймінг-карцы є выдаўным рэзультатам.
Для асистэнта, які працюе цілы дзень для напісання коду та ўседневных задач, тры-чатыры карткі 3090 ўтвараюць умовы для комфортной роботы. Разлік межа прыблізна 18 і 40 токенав на секунду — гэта разлік межа дэмавайшага прыемніка та ўседневнага інструмента. Якщо вы жадаеце выкорыстаць меншыя локальныя моделі Qwen для агентнага кодавання, інструкцыя па стварэнні локальной гры з Qwen3.8-27B паказвае простыя способы налаштавання.
Прогназаванне калькольніка токенав: наступны фактор прышвартовання
Flash-Next выклікаеся з падготавленым мульті-токенным модулем прагнозавання (MTP) — невялікім дадатковым модулем, який адразу пропануе калькі наступных токенав, ў результаты чаго галоўны модель можа іх пераканаць паралельна. Це спекулятивная дэкодавання з компонентам праекту, падготавленым «з канца ў канец» спецыяльна для гэтага моделю. На платформе vLLM ствараліся даны пра тое, што ён дае адпаведна 2,5 раза вышыю швальціну дэкодавання для рэальных запитоў.
У момент напісання тэкста llama.cpp падтрымлее саму архітэктуру Flash-Next, але ў яго проекте MTP яшчэ не прынятыя змяны для ціх моделей. Існуе падтрымка для сяброўскіх модэлей, таму змяны будуць незначнымі, але пераканайцеся ў тэкстах змян у ныяжный версіі llama.cpp прыцем, перш чым вырашваць, што гэта ўжо доступна. Калі змяны будуць прынятыя, швыдкасць обробкі 30–50 токэнаў за секунду у конфігурацыі з трыма GPU магчыма будзе падняць прыбліжна да 60–100 на той жа апаратнай базе, і гэта будзе стварыцца выключна за дапамогою апдэйта програмнага забезпечэння. Вважайце гэта толькі орыентавочным показнікам, пакуль не зможаце яго пераканаць.
Ключовыя выводы
- Flash-Next падходзіць для спожывачскага апарату завдзяк сваёй структуры, а не сіле: ультракасатыя методы MoE, стан атэнцыі фіксаванага розмеру і таблы n-gram, якая выконвае толькі пошук, — усё гэта зменшае кантыент, які павінен быць у VRAM.
-ot разам з жорсткай рэгулярным выразам — гэта спосаб прыстаўлення яго туды.-ncmoe — галоўны параметр для наладжэнняў з адной GPU: зменшыце яго пакуль VRAM не заполніцца майже цэлым, залишаючы невялікі запас безпекі.mmap, калі памяць RAM обмежана і вы хочаце, каб ОС керавала розмешчэнням дадзеных; выберыце none, калі памяць RAM достатня і вы хочаце прыкладнаг часу адпаведзення пасля завантажэння.