Asosiy kontentga o‘tish
AI qo‘llanmalari

Qwen3.8 Flash Next 176B ni ikki DGX Spark’da ishga tushirish

Ushbu qo‘llanmada GB10 yagona xotira cheklovlari va modelning SM121 siyrak diqqat mexanizmi talablariga rioya qilgan holda, repozitoriydagi bitta faylli ko‘rsatma yordamida Qwen3.8-Flash-Next-NVFP4 modelini yuklab olish, moslashtirish va ikkita NVIDIA DGX Spark tugunida ishga tushirish ko‘rsatiladi.

Qwen3.8 Flash Next 176B ni ikki DGX Spark’da ishga tushirish

Umumiy ma’lumot

Ushbu loyiha RadixArk/Qwen3.8-Flash-Next-NVFP4 modelini SGLang yordamida xizmat sifatida taqdim etish uchun ishlab chiqarishga yo‘naltirilgan joylashtirish retseptidir. Model taxminan 176 milliard parametrli, hajmi 135 GB bo‘lgan, NVFP4 yordamida kvantlangan mixture-of-experts modelidir.

Berilgan start.sh skripti tensor parallelligi va TP=2 orqali modelni ikkita NVIDIA DGX Spark tizimiga taqsimlaydi. Tugunlar bevosita ulangan ConnectX-7 200 Gb RoCEv2 liniyasi orqali bog‘lanadi. Ishga tushgach, asosiy tugun OpenAI bilan mos API'ni 0.0.0.0:8888 manzilida taqdim etadi.

Bu retsept oddiy ishga tushirgichdan ko‘proq narsani bajaradi. U og‘irliklarni yuklaydi va tekshiradi, ularni ishchi tugunga sinxronlaydi, ikkala tugunda yamalgan konteyner tasvirini yaratadi, klasterni ishga tushiradi va API tayyor bo‘lishini kutadi. U idempotent tarzda ishlab chiqilgan, shuning uchun uni qayta ishga tushirish uzilib qolgan yuklamalarni davom ettirishi, keshlarni qayta ishlatishi va eskirgan konteynerlarni almashtirishi mumkin.

Retsept nimalarni taqdim etadi

  • Ikki tugunli tensor-parallel xizmat: Bitta DGX Spark 0-rank va SGLang routerini, ikkinchisi esa 1-rankni ishga tushiradi.
  • OpenAI bilan mos endpointlar: API chat, completion, reasoning chiqishi, tool-call tahlili hamda matn va tasvirdan iborat kirishni qo‘llab-quvvatlaydi.
  • Uzun kontekst: Standart kontekst uzunligi 900000 token bo‘lib, modelning tabiiy 262,144 tokenlik kontekstiga YaRN masshtablashini qo‘llaydi.
  • NEXTN spekulyativ dekodlash: Standart spekulyativ sozlamalar 3/1/4 bo‘lib, har ikkala tugunda CUDA-graph dekodlash yoqilgan.
  • SM121 mosligi: Qurilish jarayoni DGX Spark'da kompilyatsiyadan o‘ta olmaydigan Qwen Sparse Attention yo‘li uchun Triton zaxira mexanizmini qo‘llaydi.
  • Operatsion buyruqlar: Skript dastlabki tekshiruvlar, yuklab olish, ishga tushirish, to‘xtatish, holatni ko‘rish, loglar va smoke-testni o‘z ichiga oladi.

README sinovdan o‘tkazilgan ikki tugunli klasterda bitta dekodlash oqimi uchun soniyasiga 64.4 token, ikki oqimda esa jami soniyasiga 116.8 token natijasini ko‘rsatadi. To‘rtta oqimda jami o‘tkazuvchanlik soniyasiga 114.1 token bo‘lgan.

Nima uchun SM121 yadrosi yamog‘i zarur

Qwen4Exp arxitekturasi attention'ni Qwen Sparse Attention backend'i orqali yo‘naltiradi. Uning flash-attention resolver'i avval klassik FA2'ni tanlaydi, aks holda flash-attn-4 CuTe DSL interfeysidan foydalanadi. DGX Spark'ning SM121 arxitekturasida bu zaxira yo‘l kompilyatsiya vaqtida MLIR layout-congruence xatosi bilan muvaffaqiyatsiz tugaydi.

Repository ushbu ishga tushirish bloklovchi muammoni SM121 bilan mos Triton attention zaxira mexanizmini o‘z ichiga olgan hosila SGLang tasvirini yaratish orqali hal qiladi.

Yaratilgan .patch/ qurilish konteksti modelning QSA chaqiruv shartnomasiga moslashtirilgan, FlashDecoding uslubidagi o‘zgaruvchan uzunlikdagi yadro bo‘lgan qsa_fa_fallback.py faylini o‘z ichiga oladi. U grouped-query attention, 256 gacha bo‘lgan head o‘lchamlarini va online softmax'ni qo‘llab-quvvatlaydi. Shuningdek, cu_seqlens qiymatini qurilmada o‘qiydi, bu backend o‘z sequence jadvalini qayta yozganda CUDA-graph replay'ning to‘g‘ri ishlashini ta’minlaydi.

Docker qurilishi vaqtida retsept qwen_sparse_attn_backend.py fayliga o‘zgartirish kiritadi, shunda is_sm100_supported() false qaytarganida Triton zaxira mexanizmi tanlanadi. Shu sababli standart yo‘l qo‘llab-quvvatlanadigan B100 va B200 datamarkaz GPU'larida o‘z holicha saqlanadi.

Zarur apparat va dasturiy ta’minot

Klaster apparat ta’minoti

  • GB10 GPU'lari, SM121 arxitekturasi va har birida 128 GB yagona xotiraga ega ikkita NVIDIA DGX Spark tizimi.
  • Ikki mashina o‘rtasida switch'siz bevosita ulangan ConnectX-7 portlari.
  • Har ikkala tugunda faol RoCE interfeyslari, masalan, bir tugunda rocep1s0f1/enp1s0f1np1, ikkinchisida esa rocep1s0f0/enp1s0f0np0.
  • Taxminan 135 GB hajmdagi checkpoint, konteyner tasvirlari, keshlar va vaqtinchalik qurilish ma’lumotlari uchun yetarli saqlash joyi.

Asosiy tugun dasturiy ta’minoti

  • Docker.
  • Hugging Face hf CLI.
  • Checkpoint'ga kirish autentifikatsiyani talab qilsa, shell muhitidagi Hugging Face tokeni.
  • Asosiy tugundan ishchi tugunga parolsiz SSH kirishi.

Hugging Face CLI'ni asosiy tugunga quyidagicha o‘rnating:

pip install hf

Standart bo‘yicha ishchi tugunga spark2 nomli SSH alias orqali murojaat qilinadi. Ishchi tugun uchun login start.sh skriptini asosiy tugunda ishga tushirishda foydalanilgan foydalanuvchi nomi bilan bir xil bo‘ladi. Bu taxminlarni .env faylida o‘zgartirish mumkin.

Ikki tugunli klasterni sozlash

Repository'ni asosiy tugunga klonlang, uning katalogiga kiring va mahalliy konfiguratsiya faylingizni yarating:

git clone <this-repo>
cd <this-repo>
cp .env.example .env

.env faylini tahrirlang va kamida asosiy tugunning RoCE IP manzili, ishchi tugunning RoCE IP manzili hamda SSH manzilini tasdiqlang. Standart sozlamalar quyidagi yopiq tarmoq manzillarini kutadi:

HEAD_CX7_IP=10.0.22.1
WORKER_CX7_IP=10.0.22.2
WORKER_HOST=spark2

Agar ishchi tugunda boshqa hisob ishlatilsa, WORKER_USER qiymatini o‘rnating. SSH manzilini to‘liq boshqarish uchun WORKER_SSH qiymatini user@host kabi qiymatga o‘rnating. Shell muhitidagi o‘zgaruvchilar .env faylidagi qiymatlardan ustun turadi.

Kutilayotgan topologiya

Mijozlar asosiy tugunning 8888 portidagi API'siga ulanadi. Asosiy tugun 0-rank, SGLang serveri va routerni ishga tushiradi. 1-rank ishchi tugunda ishlaydi. NCCL trafigi ikki tizim o‘rtasidagi bevosita ConnectX-7 RoCEv2 ulanishiga biriktiriladi.

Retsept NCCL_NET=IB qiymatidan foydalanadi, InfiniBand bilan mos RoCE transportini yoqadi hamda ushbu sozlama uchun NVLS va CUMEM'ni o‘chiradi. Shuningdek, u oldindan tayyorlangan host NCCL 2.30.7 qurilmasini yuklashi mumkin. Bu xatti-harakat standart bo‘yicha USE_HOST_NCCL=1 orqali yoqilgan.

Muhitni tekshirish

Modelni yuklab olishdan oldin o‘rnatilgan preflight tekshiruvini ishga tushiring:

./start.sh doctor

doctor buyrug‘i fabric, GPU’lar, RAM, disk sig‘imi, SSH ulanishi, portlar va deployment cheklovlarini tekshiradi. Katta hajmdagi yuklab olish va image yaratishni boshlashdan oldin aniqlangan tarmoq, autentifikatsiya, saqlash yoki resurs muammolarini bartaraf eting.

Modelni yuklab olish va sinxronlashtirish

Checkpoint’ni bosh tugunga yuklab oling, uni tekshiring va worker’ga sinxronlashtiring:

./start.sh download

Standart DOWNLOAD_MODE=rsync rejimi head tugun fayllarni yuklab olishi va keyin worker’ga nusxalashini ta’minlaydi. Amalni davom ettirib bajarish mumkin. Agar har bir mashina Hugging Face’dan mustaqil ravishda yuklab olishini xohlasangiz, quyidagini o‘rnating:

DOWNLOAD_MODE=direct

GB10’da ushbu modelni SGLang’ning --load-format dummy parametri bilan sinamang. Repozitoriyning nosozlik tahliliga ko‘ra, dummy initializatori fp8 parametrlarini vaqtincha fp16’ga aylantiradi. Natijada modelning 51.2 GB hajmdagi fp8 PLE n-gram jadvali 150 GB’dan yuqori vaqtinchalik xotira talabini yuzaga keltirishi va taxminan 121.7 GB foydalanish mumkin bo‘lgan yagona DRAM’ga ega tizimni butunlay muzlatib qo‘yishi mumkin.

Patchlangan image’ni yaratish va xizmatni ishga tushirish

Ikki tugunli deployment’ni quyidagicha ishga tushiring:

./start.sh serve

Bu buyruq preflight tekshiruvini bajaradi, weight’lar va image’lar mavjudligini tasdiqlaydi, har ikkala tugunda SM121 patch’langan image’ni yaratadi, TP2 klasterini ishga tushiradi va API tayyor bo‘lguncha kutadi. Yaratilgan lokal image nomi qwen38-flashnext-dspark:local.

Dastlabki ishga tushirish taxminan o‘n daqiqa davom etadi, chunki u 135 GB weight’larni yuklash, JIT kompilyatsiyasi va CUDA-graph capture jarayonlarini o‘z ichiga oladi. Skript sukut bo‘yicha WAIT_TIMEOUT_MIN=90 qiymatigacha kutadi.

Birinchi ishga tushirishni to‘liq avtomatlashtirish uchun quyidagidan foydalaning:

./start.sh

Subcommand ko‘rsatilmasa, skript doctor, download va serve buyruqlarini ketma-ket bajaradi.

Oddiy chat so‘rovini yuborish

Server tayyor bo‘lgach, uning OpenAI bilan mos chat endpoint’iga murojaat qiling:

curl http://127.0.0.1:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "Qwen3.8-Flash-Next-NVFP4",
    "messages": [
      {
        "role": "user",
        "content": "Explain RoCEv2 in one paragraph."
      }
    ]
  }'

Mulohaza yuritish sukut bo‘yicha yoqilgan va mulohaza mazmuni alohida oqimda uzatiladi. Bitta so‘rov uchun fikrlashni o‘chirish maqsadida JSON tanasiga chat_template_kwargs ni qo‘shing:

{
  "model": "Qwen3.8-Flash-Next-NVFP4",
  "messages": [
    {"role": "user", "content": "Summarize tensor parallelism."}
  ],
  "chat_template_kwargs": {
    "enable_thinking": false
  }
}

Standart OpenAI bilan mos image_url kontent qismi orqali rasm kiritish qo‘llab-quvvatlanadi. README matn va rasmni birgalikda kiritish ishlayotganini tasdiqlaydi, biroq to‘liq rasm so‘rovi misolini taqdim etmaydi.

OpenAI bilan mos klientni ulash

Maxsus OpenAI endpoint’larini qo‘llab-quvvatlaydigan ilovalar quyidagi base URL’dan foydalanishi mumkin:

http://127.0.0.1:8888/v1

Model identifikatori:

Qwen3.8-Flash-Next-NVFP4

Agar klient lokal endpoint so‘rovlarni autentifikatsiya qilmasa ham API key maydonini talab qilsa, repozitoriyning misolida dummy ishlatiladi va autentifikatsiya sarlavhasi o‘chiriladi. Tegishli model imkoniyatlari va moslik sozlamalari quyidagilarni o‘z ichiga oladi:

  • Mulohaza yuritish yoqilgan.
  • Matn va rasm kiritish.
  • 900000 tokenli kontekst oynasi.
  • Namuna klient konfiguratsiyasida ko‘pi bilan 32768 ta chiqish tokeni.
  • Chiqish tokenlari maydoni sifatida max_tokens.
  • Namuna moslik konfiguratsiyasida developer roli qo‘llab-quvvatlanmaydi.
  • Reasoning-effort parametri qo‘llab-quvvatlanmaydi.

Serverni boshqarish

Yagona launcher asosiy ma’muriy buyruqlarni taqdim etadi:

  • ./start.sh serve preflight tekshiruvlarini bajaradi, image va weight’lar mavjudligini ta’minlaydi, TP2’ni ishga tushiradi va tayyorlikni kutadi.
  • ./start.sh download serverni ishga tushirmasdan weight’larni yuklab oladi, tekshiradi va sinxronlashtiradi.
  • ./start.sh stop har ikkala konteynerni olib tashlaydi va log kuzatuvchilarini to‘xtatadi.
  • ./start.sh status ikkala tugundagi konteyner holatini ko‘rsatadi.
  • ./start.sh logs [N] head va worker loglaridan oxirgi N qatorni ko‘rsatadi.
  • ./start.sh smoke ishlayotgan API’ga tezkor greedy completion so‘rovini yuboradi.
  • ./start.sh doctor muhit va recipe bo‘yicha to‘liq preflight tekshiruvini qayta ishga tushiradi.

Ishga tushirish muammolarini aniqlashda .serve.log, .sglang.log va .sglang-worker.log fayllarini tekshiring. Birinchisi launcher chiqishini, qolgan ikkitasi esa head va worker konteynerlari loglarini saqlaydi.

GB10 xotira byudjetini tushunish

Har bir DGX Spark CUDA ajratmalari, pinned host xotirasi, Docker va operatsion tizim o‘rtasida taqsimlanadigan yagona fizik xotira havzasini taqdim etadi. Shu sababli recipe host va GPU xotirasini mustaqil resurslar sifatida ko‘rish o‘rniga ehtiyotkor statik xotira ulushidan foydalanadi.

Har bir tugun uchun ko‘rsatilgan joylashuv taxminan 62.5 GB NVFP4 expert, dense, MTP va vision weight’lari uchun; fp8 PLE jadvali uchun qariyb 11 GB pinned host xotirasi; taxminan 956,800 tokenni saqlaydigan 9 GB bf16 KV cache; Mamba/GDN holati uchun qariyb 3.6 GB; CUDA graph’lari va NCCL yoki cuBLAS workspace’lari uchun esa taxminan 8 GB xotirani o‘z ichiga oladi.

Natijada CUDA ko‘ra oladigan xotira ajratmasi taxminan 95.6 GB ni tashkil etadi, qo‘shimcha ishlar uchun esa qariyb 17.5 GB mavjud bo‘ladi. Mahkamlangan PLE jadvali nvidia-smi da har bir jarayon qurilmasi ajratmasi sifatida ko‘rinmaydi, ammo u baribir xuddi shu jismoniy DRAM’dan foydalanadi. Haqiqiy zaxira hajmini baholashda SGLang’ning available_gpu_mem jurnal qiymatini yoki free -h buyrug‘idagi available ustunini kuzating.

PLE offloading’ni yoqilgan holda qoldiring

GB10’da --no-ple-offload-embedding parametrini qo‘shmang. SGLang’ning avtomatik qoidasi PLE embedding jadvalini CPU’ga offload qilingan holda saqlaydi. Bu qoidani bekor qilish har bir rank uchun taxminan 26 GB mahkamlangan xost xotirasini GPU tomoniga joylashtirib, mashina xotirasini ortiqcha band qilishi mumkin.

Vaqtinchalik prefill zaxirasini saqlang

QSA indeksatori hajmi chunk × history ga bog‘liq bo‘lgan fp32 logits ish maydonini yaratadi. Chunk hajmi 4096 va tarix 300,000 token bo‘lganda, tegishli gather va top-k nusxalari hisobga olingach, bu vaqtinchalik xotira taxminan 8–10 GB talab qilishi mumkin.

Yetkazib berilgan qiymatlar ataylab ehtiyotkorona tanlangan:

MEM_FRACTION_STATIC=0.82
CHUNKED_PREFILL_SIZE=1024
MAMBA_FULL_MEMORY_RATIO=0.3

900,000 tokenli kontekst uchun mavjud yagona xotira byudjetiga nisbatan vaqtinchalik xotiraning eng yuqori sarfini profillamasdan, CHUNKED_PREFILL_SIZE qiymatini 1024 dan oshirmang. Repozitoriy hisobotiga ko‘ra, chunk hajmi 4096 va MEM_FRACTION_STATIC=0.85 birgalikda mashinalarni ishlamay qolishiga yetarli bo‘lgan.

Allocator tajribalaridan saqlaning

Retsept PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True ni o‘rnatmaslikni aniq tavsiya qiladi. Ushbu konfiguratsiya mazkur deployment uchun sinovdan o‘tmagan va mualliflar foydalangan, yaxshi ishlashi ma’lum bo‘lgan DGX Spark retseptlarida mavjud bo‘lmagan.

Muhim sozlanadigan parametrlarni o‘zgartiring

Sozlanadigan parametrlarni .env faylida belgilang yoki shell’da eksport qiling. Shell qiymatlari ustunlik qiladi. Eng ko‘p o‘zgartirish talab qilishi mumkin bo‘lgan sozlamalar:

  • PORT: Standart qiymati 8888 bo‘lib, API’ni barcha interfeyslarga bog‘laydi.
  • CONTEXT_LENGTH: Standart qiymati 900000.
  • MAX_RUNNING_REQUESTS: Standart qiymati 16, biroq Mamba konfiguratsiyasi standart nisbatda amaliy parallel ishlashni 14 ta slot bilan cheklaydi.
  • SPEC_STEPS, SPEC_TOPK va SPEC_DRAFT: NEXTN spekulyativ dekodlashi uchun mos ravishda 3, 1 va 4 qiymatlariga ega.
  • KERNEL_PATCH: Standart qiymati 1, shuning uchun SM121 fallback image’i quriladi va ishlatiladi.
  • IMAGE: Ko‘rsatilgan image’dan bevosita foydalanadi va patchlashni o‘tkazib yuboradi.
  • CPUSET: GB10’dagi yirikroq CPU yadrolari uchun standart qiymati 5-9,15-19. Pinning’ni o‘chirish uchun uni bo‘sh qiymatga o‘rnating.
  • EXTRA_ARGS: Qo‘shimcha SGLang argumentlarini oxirida qo‘shadi va oxirgi qiymat ustun bo‘lishi orqali parametrlarni qayta belgilashga imkon beradi.

Thinking va tool-call sikllarini boshqaring

Ma’lum SGLang muammosi standart thinking’ni OpenAI vositalari va qwen3_coder tool-call parser’i bilan birlashtiradigan sessiyalarga ta’sir qilishi mumkin. Server token ID 0 ni qayta-qayta chiqarishi mumkin; ushbu tokenizer uni ! sifatida ko‘rsatadi va bu max_tokens chegarasiga yetguncha davom etadi.

Tavsiya etiladigan vaqtinchalik yechim vositalar yuboriladigan so‘rovlardagina thinking’ni o‘chirishdir:

"chat_template_kwargs": {"enable_thinking": false}

Tool parser’dan foydalanayotganda thinking’ni server miqyosida o‘chirish uchun deployment’ni to‘xtating va override bilan qayta ishga tushiring:

./start.sh stop
EXTRA_ARGS='--tool-call-parser qwen3_coder --default-chat-template-kwargs {"enable_thinking":false}' ./start.sh serve

Agar EXTRA_ARGS allaqachon .env faylida sozlangan bo‘lsa, parametrlarni mavjud sozlamaga qo‘shib birlashtiring. Vositalar taqdim etilgan ayni so‘rovda thinking’ni qayta yoqmang. Parser’siz thinking ishlashi mumkin, ammo tool call’lar tuzilgan message.tool_calls o‘rniga oddiy kontent ichida <tool_call> XML ko‘rinishida paydo bo‘ladi. README shuningdek, ushbu vaqtinchalik yechimdan foydalanishda agent temperature qiymatini 0.7 yoki undan pastda saqlashni tavsiya qiladi.

Ilg‘or ishonchlilik va unumdorlik bo‘yicha maslahatlar

O‘tkazuvchanlik uchun spekulyativ dekodlashdan foydalaning

NEXTN spekulyativ dekodlashi o‘lchangan konfiguratsiyadagi asosiy o‘tkazuvchanlik omilidir. Standart 3/1/4 zanjirida har bir dekodlash bosqichi bitta forward pass’da to‘rtta draft tokenni tekshiradi. Sinovdan o‘tkazilgan klaster ikki oqim bilan qariyb soniyasiga 117 ta jami token tezligiga chiqdi, keyin esa ko‘proq oqimlar qolgan xotira uchun raqobatlashgani sababli o‘sish to‘xtadi.

Zarur bo‘lganda deterministik rejimni tanlang

Standart konfiguratsiyada greedy dekodlash bit darajasida qayta ishlab bo‘lmaydi. Bir-biriga yaqin ehtimolli tokenlar ishga tushirishlar orasida vaqti-vaqti bilan o‘zgarishi mumkin; bunga SM121’dagi NVFP4 MoE GEMM’larida suzuvchi nuqtali reduksiya tafovuti sabab bo‘lishi ehtimol. Sekinroq, ammo deterministik ishlash uchun quyidagicha qayta ishga tushiring:

EXTRA_ARGS="--moe-runner-backend triton" ./start.sh serve

TileLang ogohlantirishini to‘g‘ri talqin qiling

JIT kompilyatsiyasi vaqtida TileLang Logits(bx, position) bir nechta oqim tomonidan yozilayotganini bildirishi mumkin. Repozitoriy buni noto‘g‘ri ijobiy natija deb belgilaydi, chunki hisoblangan pozitsiyalar bir-biridan ajratilgan; biroq group runtime qiymat bo‘lganda tekshiruvchi bu xususiyatni isbotlay olmaydi. Zarur bo‘lsa, uni PassKey.TL_DISABLE_DATA_RACE_CHECK bilan o‘chirib qo‘yish mumkin.

Tashqi ulanishni himoyalang

API 0.0.0.0 ga bog‘lanadi, shu sababli ruxsat berilgan istalgan interfeys orqali unga kirish mumkin. README LAN yoki Tailscale mijozlaridan foydalanishni tasvirlaydi, ammo autentifikatsiya qatlamini qo‘shmaydi. Endpoint umumiy foydalanishga ochiq bo‘lmasligi kerak bo‘lsa, mos host firewall, xususiy tarmoq yoki proxy boshqaruvlarini qo‘llang.

Xulosa

Ushbu repository ikki tugunli murakkab joylashtirish jarayonini takrorlanadigan ish jarayoniga aylantiradi. Uning asosiy hissasi SM121 bilan mos Qwen Sparse Attention zaxira mexanizmi, sinchkovlik bilan cheklangan GB10 yagona xotira sozlamalari, to‘g‘ridan-to‘g‘ri RoCEv2 tensor parallelizmi va idempotent operatsiyalar uchun yagona skriptning uyg‘unligidan iborat.

Taqdim etilgan standart sozlamalardan boshlang, joylashtirishdan oldin ./start.sh doctor buyrug‘ini ishga tushiring hamda soxta og‘irliklar, o‘chirilgan PLE offloading, haddan tashqari katta prefill bloklari va eksperimental allocator sozlamalaridan saqlaning. Klaster tayyor bo‘lgach, ilovalar tanish OpenAI bilan mos chat va completion interfeyslari orqali mahalliy serverdan foydalanishi mumkin.