Галоўная / Артыкулы / 220 tok/s: Qwen апавядае пра два 3090 — што трэба пераканаліць

220 tok/s: Qwen апавядае пра два 3090 — што трэба пераканаліць

Падкісна групаванне, квантызацыя і запісы памерэння дапамагаюць падтвердзіць тверджэння пра працёздатнасць спяльноты.

1409 слоў

Існавайце гэта як пераклад ідэй з “Community reports 220 tokens/second Qwen3.8–27B on two RTX 3090s. I tried it — and figured out why most people can’t reach it” для аператараў: чыткія этапы, арранжаваныя слоты для коду і прыміткі па вяснаванню, якія застаюцца пасля перадачы. Адзагальны відглед работае лепш, калі яго спрыяваць як мерыемую структуру. Запісаўце адну ідеальную транскрыпцыю, адзін прыклад неудачы і прыміткі па адвярнуццю, перш чым расширваць масштаб. Спрыяйце гэты этап як кантракт між вхіднымі дадзеннямі і паўнастацэннымі выходамі. Дайце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тыхняга частковага завершэння без паведамлення.

Запуск SGLang (гэта значна важлівей, чым llama.cpp)

Ёнколі хочаце запусціць SGLang (што ў дзiesятыя разы складней, чым llama.cpp), перш чым зменяць код, неабходна задаць вхідныя даны, адпаведальнага за кожны крок і критэрыя завершэння. Аперацыі должны магчымае перзапускаты крок з вядомай точкі контролю, не прабуючы здагадвацца пра схованы стан. Запісвайце час выконання і вартасць токеноў або запытак праза разам з функцыйнальнымі рэзултатамі. Відразувыя даны пра вартасці запобегаюць неспакоўным рахункам, калі працэс пераходзіць з дэмавайнага режыма ў спяльныя сераўеры. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны даны з перакананнем ў правільнасці схемы, чым вольныя тэкстовыя описы.

git clone https://github.com/sgl-project/sglang.git
cd sglang
python3.12 -m venv .venv
source .venv/bin/activate
RuntimeError: cargo is required to discover the Rust extension modules
SGLANG_BUILD_RUST_EXTS=none pip install -e "./python[all]"
CUDA_VISIBLE_DEVICES=1,2 python -m sglang.launch_server \
  --model-path /mnt/models/Qwen3.8-27B-AWQ-INT4 \
  --tp 2 \
  --speculative-algorithm DFLASH \
  --speculative-draft-model-path /mnt/models/Qwen3.8-27B-DFlash2 \
  --speculative-num-draft-tokens 8 \
  --mamba-radix-cache-strategy extra_buffer \
  --disable-prefill-cuda-graph \
  --cuda-graph-max-bs-decode 16 \
  --mem-fraction-static 0.85 \
  --context-length 65536 \
  --reasoning-parser qwen3 \
  --host 0.0.0.0 --port 30000

Рэзултаты: тэхнічна працюе, але духоўна разачараваны

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

| Metric                  | Min      | Max       | Average   |
|-------------------------|----------|-----------|-----------|
| Decode speed            | 47 t/s   | ~100 t/s  | ~55 t/s   |
| Prompt prefill          | 342 t/s  | 466 t/s   | ~428 t/s  |
| Accept length (DFlash)  | 3.2      | 6.8       | ~4        |
| Capability              | Advertised limit          | Reality               |
|-------------------------|---------------------------|-----------------------|
| Max context per request | 65,536 (I set it)         | fits, one at a time   |
| Total KV pool           | ~131K tokens max          | 103K at default flags |
| Parallel slots          | 48 concurrent requests    | 3–6 with real prompts |

Чаму рэальнасць заставіла тэорыю ў пылу

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

Setup Custom allreduce failed with CUDART error: peer access is not
supported between these two devices.
/sys/bus/pci/devices/05:00.0/current_link_width → 4   (max 16)
/sys/bus/pci/devices/09:00.0/current_link_width → 4   (max 16)

Жыццё на максімальных скорасцях: ліміты контэксту і адна «темная» перезагрузка

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

Вывад: SGLang ўскрытлівы, і гэта не ваша програма

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

Чэк-ліст для эксплуатацыі

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

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

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

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

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

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

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

Прыметка для пакета 0dcc1bedc39e: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токенав на сесію і зберагачыце транскрыпты празаўсёды з фікстурамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннімі.

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

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

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

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

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

Дзеянне ўзмocнення 2/1002: замерыце час выканання, класію каштоўкаў і витраты токенаў для гэтага запісу, а пасля, на аднойчынных крэтэрыях, а не на асоціяцыях, вынікніце, чы робіцца змяна.

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

Дэталі зміцнення 3/1002: звярніце увагу на час працы стэны, клас паклічання і колькасць токенавытрачання для гэтага запісу, а пасля, на аднойчынку з фіксаваным наборам пытанняў, а не на анекдотах, выявіце, чы хацяце застаўіць гэтыя змяны.