
Muhtasari
Mradi huu ni mwongozo wa utumiaji unaolenga mazingira ya uzalishaji kwa kuendesha RadixArk/Qwen3.8-Flash-Next-NVFP4 kwa kutumia SGLang. Modeli hii ina takribani vigezo bilioni 176, ukubwa wa GB 135, na ni modeli ya wataalamu wengi iliyopunguzwa kwa NVFP4.
Hati ya start.sh iliyotolewa inasambaza modeli kwenye mifumo miwili ya NVIDIA DGX Spark kwa kutumia usambamba wa tenzori na TP=2. Nodi hizi huwasiliana kupitia kiunganishi cha moja kwa moja cha ConnectX-7 200 Gb RoCEv2. Baada ya kuanza, nodi kuu hutoa API inayooana na OpenAI kwenye 0.0.0.0:8888.
Mapishi haya si kizindua pekee. Hupakua na kuthibitisha uzani, husawazisha uzani huo na nodi ya kufanya kazi, hujenga picha ya kontena iliyorekebishwa kwenye nodi zote mbili, huanzisha klasta, na husubiri API iwe tayari. Yameundwa kuwa salama kuendeshwa tena, hivyo kuyaendesha upya kunaweza kuendelea na upakuaji uliokatizwa, kutumia tena akiba, na kubadilisha makontena yaliyopitwa na wakati.
Mapishi Haya Yanatoa Nini
- Utoaji wa huduma kwa usambamba wa tenzori kwenye nodi mbili: DGX Spark moja huendesha rank 0 na rauta ya SGLang, huku nyingine ikiendesha rank 1.
- Vituo vya mwisho vinavyoendana na OpenAI: API inaauni mazungumzo, ukamilishaji, matokeo ya hoja, uchanganuzi wa miito ya zana, na ingizo la maandishi pamoja na picha.
- Muktadha mrefu: Urefu wa msingi wa muktadha ni tokeni
900000, kwa kutumia upanuzi wa YaRN kutoka muktadha asilia wa modeli wa tokeni 262,144. - Usimbaji wa kubashiri wa NEXTN: Mipangilio ya msingi ya kubashiri ni
3/1/4, ikiwa na usimbaji wa grafu ya CUDA kwenye nodi zote mbili. - Uoani wa SM121: Ujenzi huu hutumia mbadala wa Triton kwa njia ya Qwen Sparse Attention ambayo vinginevyo hushindwa kutungwa kwenye DGX Spark.
- Amri za kiutendaji: Hati hii inajumuisha ukaguzi wa awali, upakuaji, uanzishaji, usitishaji, hali, kumbukumbu, na majaribio mepesi.
README inaripoti tokeni 64.4 kwa sekunde kwa mkondo mmoja wa usimbaji na jumla ya tokeni 116.8 kwa sekunde kwa mikondo miwili kwenye klasta ya nodi mbili iliyojaribiwa. Kwa mikondo minne, kasi ya jumla ilikuwa tokeni 114.1 kwa sekunde.
Kwa Nini Kiraka cha Kernel ya SM121 Ni Muhimu
Usanifu wa Qwen4Exp hupitisha umakini kupitia mfumo wa Qwen Sparse Attention. Kitatuzi chake cha flash-attention hupendelea FA2 ya kawaida na vinginevyo hutumia kiolesura cha flash-attn-4 CuTe DSL. Kwenye usanifu wa SM121 wa DGX Spark, mbadala huo hushindwa wakati wa utungaji kwa hitilafu ya MLIR ya ulinganifu wa mpangilio.
Hifadhi hii hutatua kizuizi hicho cha uanzishaji kwa kujenga picha ya SGLang inayotokana nayo na iliyo na mbadala wa umakini wa Triton unaooana na SM121.
Muktadha wa ujenzi wa .patch/ unaozalishwa unajumuisha qsa_fa_fallback.py, kernel ya urefu unaobadilika ya mtindo wa FlashDecoding iliyolengwa kwa mkataba wa mwito wa QSA wa modeli. Inaauni umakini wa maswali yaliyopangwa katika vikundi, vipimo vya vichwa hadi 256, na softmax ya mtandaoni. Pia husoma cu_seqlens kwenye kifaa, jambo linalodumisha uhalali wa marudio ya grafu ya CUDA wakati mfumo wa nyuma unapoandika upya jedwali lake la mfuatano.
Wakati wa ujenzi wa Docker, mapishi haya hurekebisha qwen_sparse_attn_backend.py ili mbadala wa Triton uchaguliwe wakati wowote is_sm100_supported() ikiwa si kweli. Kwa hiyo, njia ya kawaida hubaki bila mabadiliko kwenye GPU za kituo cha data za B100 na B200 zinazoungwa mkono.
Vifaa na Programu Zinazohitajika
Vifaa vya klasta
- Mifumo miwili ya NVIDIA DGX Spark yenye GPU za GB10, usanifu wa SM121, na kumbukumbu iliyounganishwa ya GB 128 kila mmoja.
- Milango ya ConnectX-7 iliyounganishwa moja kwa moja kati ya mashine hizo mbili bila swichi.
- Kiolesura husika cha RoCE kiwe hai kwenye nodi zote mbili, kama vile
rocep1s0f1/enp1s0f1np1kwenye nodi moja narocep1s0f0/enp1s0f0np0kwenye nyingine. - Hifadhi ya kutosha kwa checkpoint ya takribani GB 135, picha za makontena, akiba, na data ya muda ya ujenzi.
Programu ya nodi kuu
- Docker.
- CLI ya Hugging Face
hf. - Tokeni ya Hugging Face katika mazingira ya gamba ikiwa ufikiaji wa checkpoint unahitaji uthibitishaji.
- Ufikiaji wa SSH usiohitaji nenosiri kutoka nodi kuu hadi nodi ya kufanya kazi.
Sakinisha CLI ya Hugging Face kwenye nodi kuu kwa:
pip install hfKwa msingi, nodi ya kufanya kazi hufikiwa kupitia lakabu ya SSH iitwayo spark2. Kuingia kwa mtumiaji wa nodi ya kufanya kazi kwa msingi hutumia jina lilelile la mtumiaji linalotumika kuendesha start.sh kwenye nodi kuu. Dhana hizi zinaweza kubadilishwa kwenye .env.
Sanidi Klasta ya Nodi Mbili
Clone hifadhi kwenye nodi kuu, ingia kwenye saraka yake, na unda faili lako la usanidi wa ndani:
git clone <this-repo>
cd <this-repo>
cp .env.example .envHariri .env na uthibitishe angalau IP ya RoCE ya nodi kuu, IP ya RoCE ya nodi ya kufanya kazi, na lengwa la SSH. Misingi inatarajia anwani zifuatazo za mtandao wa faragha:
HEAD_CX7_IP=10.0.22.1
WORKER_CX7_IP=10.0.22.2
WORKER_HOST=spark2Ikiwa nodi ya kufanya kazi inatumia akaunti tofauti, weka WORKER_USER. Kwa udhibiti kamili wa lengwa la SSH, weka WORKER_SSH kwa thamani kama user@host. Vigezo vya mazingira vya gamba vina kipaumbele kuliko thamani zilizo kwenye .env.
Topolojia inayotarajiwa
Wateja huunganishwa na API ya nodi kuu kupitia mlango 8888. Nodi kuu huendesha rank 0, seva ya SGLang, na rauta. Rank 1 huendeshwa kwenye nodi ya kufanya kazi. Trafiki ya NCCL imeelekezwa kwenye muunganisho wa moja kwa moja wa ConnectX-7 RoCEv2 kati ya mifumo hiyo miwili.
Mapishi haya hutumia NCCL_NET=IB, huwezesha usafirishaji wa RoCE unaooana na InfiniBand, na huzima NVLS na CUMEM kwa usanidi huu. Pia yanaweza kupakia mapema ujenzi wa NCCL 2.30.7 uliowekwa kwenye mwenyeji. Tabia hii imewezeshwa kwa msingi kupitia USE_HOST_NCCL=1.
Thibitisha Mazingira
Endesha ukaguzi wa awali uliojengwa ndani kabla ya kupakua modeli:
./start.sh doctorAmri ya doctor hukagua fabric, GPU, RAM, nafasi ya diski, muunganisho wa SSH, porti, na masharti ya deployment. Rekebisha matatizo yoyote ya mtandao, uthibitishaji, hifadhi, au rasilimali yaliyoripotiwa kabla ya kuanza upakuaji mkubwa na ujenzi wa image.
Pakua na Landanisha Modeli
Pakua checkpoint kwenye nodi kuu, ithibitishe, kisha ilandanishe na worker:
./start.sh downloadThamani chaguo-msingi ya DOWNLOAD_MODE=rsync hufanya nodi kuu ipakue faili kisha izinakili kwenye worker. Operesheni inaweza kuendelea baada ya kukatizwa. Ikiwa unapendelea kila mashine ijipakilie moja kwa moja kutoka Hugging Face, weka:
DOWNLOAD_MODE=directUsijaribu modeli hii kwa chaguo la SGLang --load-format dummy kwenye GB10. Kulingana na uchanganuzi wa kuanguka wa repository, kianzilishi dummy hubadilisha kwa muda vigezo vya fp8 kuwa fp16. Jedwali la modeli la PLE n-gram la fp8 lenye GB 51.2 linaweza hivyo kusababisha mahitaji ya muda ya kumbukumbu yanayozidi GB 150 na kugandisha kabisa mfumo wenye takriban GB 121.7 za DRAM unified inayoweza kutumika.
Jenga Image Iliyorekebishwa na Anza Kuhudumia
Anzisha deployment ya nodi mbili kwa:
./start.sh serveAmri hii huendesha ukaguzi wa awali, huthibitisha kuwa weights na images zinapatikana, hujenga image iliyorekebishwa kwa SM121 kwenye nodi zote mbili, huanzisha cluster ya TP2, na kusubiri API iwe tayari. Image ya ndani inayozalishwa huitwa qwen38-flashnext-dspark:local.
Uanzishaji wa kwanza huchukua takriban dakika kumi kwa sababu unajumuisha kupakia GB 135 za weights, uundaji wa JIT, na kunasa CUDA graph. Kwa chaguo-msingi, script huruhusu hadi WAIT_TIMEOUT_MIN=90.
Kwa uendeshaji wa kwanza uliojiendesha kikamilifu, tumia:
./start.shBila subcommand, script hutekeleza doctor, download, na serve kwa mpangilio huo.
Tuma Ombi Rahisi la Chat
Baada ya seva kuwa tayari, ita endpoint yake ya chat inayooana na OpenAI:
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."
}
]
}'Uwezo wa reasoning huwashwa kwa chaguo-msingi, na maudhui ya reasoning hutumwa kando. Ili kuzima thinking kwa ombi moja, ongeza chat_template_kwargs kwenye mwili wa JSON:
{
"model": "Qwen3.8-Flash-Next-NVFP4",
"messages": [
{"role": "user", "content": "Summarize tensor parallelism."}
],
"chat_template_kwargs": {
"enable_thinking": false
}
}Ingizo la picha linaungwa mkono kupitia sehemu ya kawaida ya maudhui ya OpenAI-compatible image_url. README inathibitisha kuwa ingizo linalochanganya maandishi na picha linafanya kazi, ingawa haitoi mfano kamili wa ombi la picha.
Unganisha Mteja Anayeendana na OpenAI
Programu zinazotumia endpoint maalum za OpenAI zinaweza kutumia base URL ifuatayo:
http://127.0.0.1:8888/v1Kitambulisho cha modeli ni:
Qwen3.8-Flash-Next-NVFP4Ikiwa mteja anahitaji sehemu ya API key hata wakati endpoint ya ndani haithibitishi maombi, mfano wa repository hutumia dummy na kuzima kichwa cha uthibitishaji. Uwezo unaohusika wa modeli na mipangilio ya uoanifu ni pamoja na:
- Reasoning imewashwa.
- Ingizo la maandishi na picha.
- Dirisha la muktadha la tokeni
900000. - Hadi tokeni
32768za matokeo katika usanidi wa mfano wa mteja. max_tokenskama sehemu ya tokeni za matokeo.- Hakuna usaidizi wa developer-role katika usanidi wa mfano wa uoanifu.
- Hakuna usaidizi wa kigezo cha reasoning-effort.
Endesha Seva
Kizindua kimoja kinatoa amri kuu za kiutawala:
./start.sh servehufanya ukaguzi wa awali, huhakikisha images na weights zinapatikana, huanzisha TP2, na kusubiri utayari../start.sh downloadhupakua, kuthibitisha, na kulandanisha weights bila kuanzisha seva../start.sh stophuondoa kontena zote mbili na kusitisha vifuatiliaji vya logi../start.sh statushuripoti hali ya kontena kwenye nodi zote mbili../start.sh logs [N]huonyesha mistari N ya mwisho kutoka kwenye logi za nodi kuu na worker../start.sh smokehutuma completion ya haraka ya greedy kwenye API inayoendesha../start.sh doctorhuendesha tena ukaguzi kamili wa awali wa mazingira na recipe.
Unapochunguza matatizo ya uanzishaji, kagua .serve.log, .sglang.log, na .sglang-worker.log. Ya kwanza huhifadhi matokeo ya kizindua, huku mbili za mwisho zikiwa na logi za kontena kuu na worker.
Elewa Bajeti ya Kumbukumbu ya GB10
Kila DGX Spark hutoa pool ya kumbukumbu halisi iliyounganishwa inayoshirikiwa na mgao wa CUDA, kumbukumbu ya host iliyobandikwa, Docker, na mfumo wa uendeshaji. Kwa hiyo recipe hutumia sehemu tuli ya kumbukumbu iliyo ya tahadhari badala ya kuchukulia kumbukumbu ya host na GPU kuwa rasilimali zinazojitegemea.
Muundo wa kila nodi ulioripotiwa unajumuisha takriban GB 62.5 kwa weights za NVFP4 expert, dense, MTP, na vision; karibu GB 11 za kumbukumbu ya host iliyobandikwa kwa jedwali la PLE la fp8; cache ya KV ya bf16 ya GB 9 inayohifadhi takriban tokeni 956,800; karibu GB 3.6 kwa hali ya Mamba/GDN; na takriban GB 8 kwa CUDA graphs na workspaces za NCCL au cuBLAS.
Mgao unaoonekana kwa CUDA ni takriban GB 95.6, huku karibu GB 17.5 zikiwa zinapatikana kwa kazi za ziada. Jedwali la PLE lililowekwa kwenye kumbukumbu (pinned) halionekani kama mgao wa kifaa kwa kila mchakato katika nvidia-smi, lakini bado linatumia DRAM ileile ya kimwili. Fuatilia thamani ya kumbukumbu ya available_gpu_mem kwenye logi ya SGLang au safu wima ya available kutoka free -h unapokadiria nafasi halisi iliyobaki.
Washa uhamishaji wa PLE
Usiongeze --no-ple-offload-embedding kwenye GB10. Kanuni ya kiotomatiki ya SGLang huweka jedwali la uwekaji la PLE kwenye CPU. Kuibatilisha kunaweza kuweka takriban GB 26 kwa kila rank ya kumbukumbu ya mwenyeji iliyobandikwa (pinned) upande wa GPU na kusababisha mashine kutumia kumbukumbu kupita kiasi.
Hifadhi nafasi ya muda ya prefill
Kiweka faharasa cha QSA huunda eneo la kazi la logits la fp32 ambalo ukubwa wake huongezeka kulingana na chunk × history. Kwa ukubwa wa kipande wa 4096 na historia ya tokeni 300,000, eneo hili la muda linaweza kuhitaji takriban GB 8 hadi 10 baada ya kuzingatia nakala zinazohusiana za gather na top-k.
Thamani zilizotolewa zimewekwa kwa tahadhari kimakusudi:
MEM_FRACTION_STATIC=0.82
CHUNKED_PREFILL_SIZE=1024
MAMBA_FULL_MEMORY_RATIO=0.3Usiongeze CHUNKED_PREFILL_SIZE zaidi ya 1024 kwa muktadha wa tokeni 900,000 bila kupima kilele cha kumbukumbu ya muda dhidi ya bajeti inayopatikana ya kumbukumbu iliyounganishwa. Hazina inaripoti kwamba ukubwa wa kipande wa 4096 ukiunganishwa na MEM_FRACTION_STATIC=0.85 ulitosha kuzifanya mashine zigande.
Epuka majaribio ya allocator
Maelekezo yanashauri wazi dhidi ya kuweka PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True. Mipangilio hii haijathibitishwa kwa utumiaji huu na haikuwepo katika mapishi yanayojulikana kuwa mazuri ya DGX Spark yaliyotumiwa na waandishi.
Rekebisha Vigezo Muhimu
Weka vigezo katika .env au vitue kwenye shell. Thamani za shell ndizo hutumika. Mipangilio inayoweza kuhitaji kurekebishwa zaidi ni:
PORT: Chaguo-msingi ni8888na hufunga API kwenye violesura vyote.CONTEXT_LENGTH: Chaguo-msingi ni900000.MAX_RUNNING_REQUESTS: Chaguo-msingi ni16, ingawa usanidi wa Mamba huweka ukomo wa kiutendaji wa nafasi 14 za wakati mmoja kwa uwiano wa chaguo-msingi.SPEC_STEPS,SPEC_TOPK, naSPEC_DRAFT: Chaguo-msingi ni3,1, na4kwa usimbuaji wa kubashiri wa NEXTN.KERNEL_PATCH: Chaguo-msingi ni1ili picha ya akiba ya SM121 ijengwe na kutumiwa.IMAGE: Hutumia picha iliyobainishwa moja kwa moja na kuruka uwekaji wa patch.CPUSET: Chaguo-msingi ni5-9,15-19kwa core kubwa za CPU za GB10. Weka thamani tupu ili kuzima upangaji wa core.EXTRA_ARGS: Huongeza hoja za ziada za SGLang mwishoni, hivyo kuruhusu thamani ya mwisho kushinda.
Dhibiti Mizunguko ya Thinking na Miito ya Zana
Hitilafu inayojulikana ya SGLang inaweza kuathiri vipindi vinavyounganisha thinking ya chaguo-msingi na zana za OpenAI pamoja na kichanganuzi cha miito ya zana cha qwen3_coder. Seva inaweza kutoa tena na tena tokeni yenye kitambulisho 0, ambayo tokenizer hii huonyesha kama !, hadi max_tokens ifikiwe.
Njia inayopendelewa ya muda ni kuzima thinking kwa maombi yanayotuma zana pekee:
"chat_template_kwargs": {"enable_thinking": false}Ili kuzima thinking kwenye seva nzima unapotumia kichanganuzi cha zana, simamisha utumiaji kisha uanzishe tena kwa ubatilishaji:
./start.sh stop
EXTRA_ARGS='--tool-call-parser qwen3_coder --default-chat-template-kwargs {"enable_thinking":false}' ./start.sh serveIkiwa EXTRA_ARGS tayari imesanidiwa katika .env, unganisha chaguo hizo kwenye mpangilio uliopo. Usiwashe tena thinking katika ombi lilelile linalotoa zana. Bila kichanganuzi, thinking inaweza kufanya kazi, lakini miito ya zana huonekana kama XML ya <tool_call> katika maudhui ya kawaida badala ya message.tool_calls yenye muundo. README pia inashauri kuweka joto la wakala kuwa 0.7 au chini unapotumia njia hii ya muda.
Vidokezo vya Juu vya Kutegemewa na Utendaji
Tumia usimbuaji wa kubashiri kwa upitishaji
Usimbuaji wa kubashiri wa NEXTN ndio kichocheo kikuu cha upitishaji katika usanidi uliopimwa. Kwa mnyororo chaguo-msingi wa 3/1/4, kila hatua ya usimbuaji huthibitisha tokeni nne za rasimu katika upitishaji mmoja wa mbele. Kundi lililopimwa lilifikia kilele cha karibu tokeni 117 kwa sekunde kwa jumla likiwa na mitiririko miwili, kisha likafikia kiwango cha juu huku mitiririko zaidi ikishindania kumbukumbu iliyobaki.
Chagua uamuzi wa moja kwa moja inapohitajika
Usimbuaji wa greedy hauwezi kutoa matokeo yanayozalishwa tena kwa biti kwa biti katika usanidi chaguo-msingi. Tokeni zilizo karibu kufungana zinaweza kubadilika mara kwa mara kati ya uendeshaji, huenda kutokana na tofauti za upunguzaji wa namba za floating-point katika GEMM za NVFP4 MoE kwenye SM121. Kwa tabia ya polepole lakini inayoweza kubainishwa, anzisha upya kwa:
EXTRA_ARGS="--moe-runner-backend triton" ./start.sh serveTafsiri onyo la TileLang kwa usahihi
Wakati wa ukusanyaji wa JIT, TileLang inaweza kuripoti kwamba Logits(bx, position) inaandikwa na nyuzi nyingi. Hazina inatambua hili kama taarifa chanya isiyo sahihi kwa sababu nafasi zilizokokotolewa hazipishani, ingawa kikagua hakiwezi kuthibitisha sifa hiyo wakati group ni thamani ya wakati wa utekelezaji. Linaweza kunyamazishwa kwa PassKey.TL_DISABLE_DATA_RACE_CHECK inapohitajika.
Linda ufikiaji wa nje
API hufunga kwenye 0.0.0.0, hivyo kuifanya ipatikane kupitia kiolesura chochote kinachoruhusiwa. README inaeleza ufikiaji kutoka kwa wateja wa LAN au Tailscale lakini haiongezi safu ya uthibitishaji. Tumia vidhibiti vinavyofaa vya ngome ya mwenyeji, mtandao binafsi au proksi wakati endpoint haipaswi kufikiwa kwa ujumla.
Hitimisho
Hifadhi hii inabadilisha uwekaji wa nodi mbili ulio mgumu kuwa mchakato unaoweza kurudiwa. Mchango wake mkuu ni kuunganisha njia mbadala ya Qwen Sparse Attention inayooana na SM121, mipangilio iliyowekewa vikwazo kwa ujenzi wa kumbukumbu iliyounganishwa ya GB10, usambazaji wa tensor wa moja kwa moja kupitia RoCEv2, na hati moja ya uendeshaji isiyotekeleza mabadiliko yasiyo ya lazima inapokimbizwa tena.
Anza na chaguo-msingi zilizotolewa, endesha ./start.sh doctor kabla ya uwekaji, na epuka uzani wa kubuni, kuzimwa kwa uhamishaji wa PLE, vipande vikubwa kupita kiasi vya kujaza awali, na mipangilio ya majaribio ya mgao wa kumbukumbu. Baada ya klasta kuwa tayari, programu zinaweza kutumia seva ya ndani kupitia violesura vya kawaida vya mazungumzo na ukamilishaji vinavyooana na OpenAI.
