Ruka hadi maudhui makuu
Mafunzo ya AI

Endesha GLM-5.3 Flash EXL3 Kwenye Mifumo Miwili ya NVIDIA DGX Spark

Jifunze jinsi ya kusakinisha, kusanidi, kuanzisha, kujaribu na kuboresha GLM-5.3 Flash EXL3 kwenye mifumo miwili ya NVIDIA GB10 DGX Spark. Mafunzo haya yanaangazia runtime ya nodi mbili, decoding ya kubashiri ya DFlash2, akiba ya MLA KV ya fp8, maombi yanayooana na OpenAI, uhifadhi wa akiba wa prefix, ulinganishaji wa utendaji, ablation ya hiari na vikwazo muhimu vya usanidi.

Endesha GLM-5.3 Flash EXL3 Kwenye Mifumo Miwili ya NVIDIA DGX Spark

Muhtasari

GLM-5.3 Flash EXL3 kwa DGX Sparks 2x ni kichocheo cha usambazaji na vLLM overlay ya kuendesha quantization ya 4 bpw EXL3/TR3 ya GLM-5.3 Flash kwenye mifumo miwili ya NVIDIA GB10. Hutoa API inayooana na OpenAI kwenye porti 8888 na huendesha modeli kwa kitambulisho GLM-5.3-Flash-EXL3.

Kichocheo hiki hutumia tensor parallelism yenye rank moja kwenye kila mashine. Huchanganya routed experts za EXL3 zilizopakiwa, kernels asilia za sm_121a, akiba ya fp8 sparse-MLA KV, CUDA graphs, na speculative decoding ya DFlash2 yenye tokeni saba za rasimu.

Checkpoint inayotumika kwa chaguo-msingi ni Mia-AiLab/GLM-5.3-Flash-EXL3-TR3-4bpw, mirror ya umma iliyo sawa kwa kila byte na snapshot ya Brandon Music iliyorejelewa. Ina takriban GiB 164 katika shards 120. Hifadhi ya modeli ina leseni yake, huku script za uendeshaji na overlay zikiwa na leseni ya MIT.

Kwa nini overlay inahitajika

Image ya kawaida ya ARM64 GLM-5.3 vLLM inaweza kupakia checkpoint hii, lakini hushindwa kwenye forward pass ya kwanza kwa sababu GLM-5.3 Flash hutumia NoPE MLA, ilhali backend ya SM12x sparse-MLA inayopatikana hutazamia jiometri tofauti iliyopakiwa. Overlay huongeza latent ya NoPE yenye vipimo 512 hadi kwenye jiometri inayohitajika na FLASHINFER_MLA_SPARSE_SM120 bila kubadilisha bidhaa ya nukta ya QK.

Pia husajili mbinu inayofanya kazi ya quantization ya EXL3. Hii huweka routed experts katika uwakilishi wao wa trellis, SUH, SVH, na MCG uliopakiwa badala ya kuupanua hadi BF16. Njia iliyounganishwa ikiwezeshwa, kila layer hutumia launch moja ya exllamav3_ext.exl3_moe.

Overlay pia hutoa ujumuishaji mahususi wa GLM kwa DFlash2, ukiwemo kunasa hidden state saidizi ya EAGLE3, draft sliding-window attention inayoshiriki slots za MLA KV za target, na attention isiyo ya causal ndani ya block ya draft ya kubashiri.

Vipengele muhimu

  • Huduma inayoendana na OpenAI: vLLM hutoa /v1/chat/completions na endpoint zinazohusiana kwenye head node.
  • Tensor parallelism ya nodes mbili: usambazaji hutumia --nnodes 2 na --tensor-parallel-size 2.
  • Weights za EXL3 zilizoshikiliwa kwa ufupi: checkpoint ya 4 bpw ina takriban GiB 164 za kupakua na huripotiwa kuwa GB 176 kwenye paneli ya ubora iliyorejelewa.
  • Speculative decoding ya DFlash2: modeli ya draft ya chaguo-msingi ni incoai/GLM-5.3-Flash-DFlash2 yenye k=7.
  • Context ndefu: urefu wa juu wa modeli kwa chaguo-msingi ni tokeni 900,000, ukiungwa mkono na pool ya fp8 MLA inayoripotiwa kuwa na tokeni 982,612 chini ya usanidi wa kumbukumbu ulioandikwa.
  • Usaidizi wa multimodal: pembejeo za picha na video zimewezeshwa, zikiwa na kikomo cha chaguo-msingi kwa kila prompt cha picha nne na video moja.
  • Uchanganuzi wa zana na reasoning: launcher huwezesha uteuzi wa zana kiotomatiki pamoja na parser za tool-call na reasoning zinazoendana na GLM.
  • Uhifadhi wa prefix: prefix zilizopangiliwa kwa block zinaweza kutumiwa tena wakati hashes husika bado ziko kwenye cache.
  • Uondoaji wa hiari wa mwelekeo wa refusal: ABLIT=1 hutumia marekebisho ya ndani ya kumbukumbu kwenye weights teule za native BF16 output-projection wakati wa kupakia.

Mahitaji ya maunzi na programu

Kichocheo hiki kimeundwa mahsusi kwa mifumo miwili ya NVIDIA GB10 ya daraja la DGX Spark iliyounganishwa kupitia CX7 fabric iliyoandikwa. Si usambazaji wa jumla wa GPU moja.

  • Mifumo miwili ya NVIDIA GB10 yenye takriban GiB 180 za hifadhi iliyo wazi kwa kila node kwa usanidi wa awali.
  • Docker inayopatikana bila sudo kwenye mifumo yote miwili.
  • SSH isiyohitaji nenosiri kutoka head node hadi worker.
  • hf au huggingface-cli, curl, na rsync zilizosakinishwa kwenye head.
  • Kiolesura sahihi cha mtandao cha CX7 na vifaa vya RDMA kwenye mashine zote mbili.
  • Mahali pa Hugging Face cache panapoweza kuhifadhi checkpoint ya shards 120 na modeli ya DFlash2 yenye takriban GiB 2.3.

Weka mipangilio ya kiolesura cha CX7 na HCA ya hifadhi isipokuwa kama uwekaji wa nyaya zako unatofautiana. README inaonya kwamba NCCL haiwezi kutumia aliases za loopback za 10.0.0.x na inaweza kuganda wakati wa ncclCommInitRank ikiwa mipangilio ya fabric si sahihi.

Sakinisha na usanidi usambazaji

1. Clone hifadhi

git clone https://github.com/MiaAI-Lab/GLM-5.3-Flash-EXL3-2x-DGX-Sparks.git
cd GLM-5.3-Flash-EXL3-2x-DGX-Sparks

2. Unda faili la mazingira

cp .env.example .env

Hariri .env ikiwa mashine hazitumii anwani au majina ya akaunti ya chaguo-msingi ya kichocheo. Mipangilio muhimu zaidi ni:

  • HEAD_IP=10.0.0.1 kwa head node na vLLM master.
  • WORKER_IP=10.0.0.2 kwa Spark ya pili.
  • WORKER_USER wakati akaunti ya SSH inatofautiana kati ya nodes.
  • WORKER_HOME wakati eneo la home au Hugging Face cache la worker linatofautiana.
  • PORT=8888 kwa msikilizaji wa API.

Launcher huunda .env kutoka .env.example kiotomatiki ikiwa haipo. Thamani zinazotolewa moja kwa moja kabla ya amri huwa na kipaumbele kuliko thamani zilizo kwenye faili.

3. Weka weights kwa hiari

./download.sh

Amri hii hupakua checkpoint ya EXL3 na modeli ya DFlash2 kwenye Hugging Face cache ya head node. Haiendeshi Docker, haiunganishi na worker, wala haisawazishi faili. Itumie unapotaka kukamilisha upakuaji wa modeli ya takriban GiB 164 kabla worker kuwa tayari.

Ili kuhuisha faili zilizowekwa kwenye cache kwa uwazi, endesha:

REFRESH_WEIGHTS=1 ./download.sh

Epuka kuhuisha bila sababu. download.sh na start.sh zote huruka hazina ambazo tayari zimekamilika.

4. Anzisha ranks zote mbili na API

./start.sh

Skripti ya kuanzisha hufanya mlolongo ufuatao:

  1. Hukagua Docker, SSH, na nafasi ya diski inayopatikana kwenye nodi zote mbili.
  2. Huvuta image ya umma ghcr.io/miaai-lab/glm-5.3-flash-2x-dgx-sparks:exl3 kwenye head.
  3. Huhamisha image ya kontena kwenda kwa worker digest yake inapobadilika.
  4. Hupakua faili za modeli zinazokosekana kwenye akiba ya Hugging Face ya head.
  5. Husawazisha akiba hiyo na worker kwa kutumia rsync.
  6. Huanzisha rank 1 katika hali isiyo na kiolesura kwenye worker.
  7. Huanzisha rank 0 na API inayooana na OpenAI kwenye head.
  8. Hukagua endpoint ya afya hadi upakiaji wa modeli na warmup vikamilike.

Muda chaguo-msingi wa kusubiri utayari ni sekunde 3,600 kwa sababu kupakia weights na kunasa grafu za CUDA kunaweza kuchukua muda mrefu.

5. Kagua hali na kumbukumbu

./start.sh status
./start.sh logs
./start.sh logs worker

Simamisha makontena yote mawili kwa:

./start.sh stop

Pia unaweza kutumia ./stop.sh.

Tuma ombi la msingi la mazungumzo

Kwenye nodi ya head, URL ya msingi ya API ni http://127.0.0.1:8888/v1. Kwa anwani za LAN zilizoandikwa, mashine nyingine zinaweza kutumia http://10.0.0.1:8888/v1.

curl -s http://127.0.0.1:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "GLM-5.3-Flash-EXL3",
    "messages": [
      {"role": "user", "content": "Explain tensor parallelism briefly."}
    ],
    "chat_template_kwargs": {
      "enable_thinking": false
    }
  }'

Thamani ya model katika ombi lazima ilingane na jina linalotolewa, ambalo chaguo-msingi ni GLM-5.3-Flash-EXL3. Kufikiri kumewashwa kwa chaguo-msingi. Ili kukizima, weka chat_template_kwargs kwenye kiwango cha juu cha ombi la JSON kama ilivyoonyeshwa hapo juu.

Usitume kitu halisi cha extra_body kilichowekwa ndani kupitia HTTP ghafi. Kwenye OpenAI Python SDK, extra_body ni chaguo la SDK ambalo maudhui yake huunganishwa kwenye ombi la kiwango cha juu.

Usanidi wa uzalishaji wa checkpoint unaweza kutoa temperature=1.0 na top_p=0.95. Weka thamani za sampling katika kila ombi unapohitaji tabia tofauti.

Elewa runtime chaguo-msingi

Chaguo-msingi za deployment zimepangwa kwa makusudi. Kubadilisha kipengele kimoja kunaweza kufanya mchanganyiko wa kernels usiwe halali au kupunguza ukubali wa speculation.

  • Weights: Mia-AiLab/GLM-5.3-Flash-EXL3-TR3-4bpw, pamoja na fallback kwenda kwenye hazina ya Brandon Music mirror isipopatikana au ikiwa haijakamilika.
  • Parallelism: nodi mbili na ukubwa wa tensor-parallel wa mbili kwa kutumia multiprocessing executor.
  • Quantization: exl3, ikiwa na routed experts waliopakiwa pamoja na weights za native dense, shared-expert, attention, embedding, na output-head.
  • Akiba lengwa ya KV: fp8, inayowakilishwa ndani kama fp8_ds_mla iliyopakiwa.
  • Speculation: DFlash2 ikiwa na tokeni saba za speculation na draft tensor parallelism iliyowekwa kuwa moja.
  • Akiba ya KV ya draft: uteuzi wa kiotomatiki, unaosababisha BF16 kwa modeli dense ya draft badala ya mpangilio wa MLA wa target.
  • Attention: sparse MLA kwa target na FLASH_ATTN iliyochaguliwa kiotomatiki kwa attention ya draft ya DFlash2.
  • Context: MAX_MODEL_LEN=900000.
  • Concurrency: MAX_NUM_SEQS=4.
  • Prefill: MAX_NUM_BATCHED_TOKENS=1024.
  • Matumizi ya kumbukumbu: GPU_MEM_UTIL=0.87.

Badilisha hali za speculative decoding

DFlash2 ndiyo chaguo-msingi na hutumia incoai/GLM-5.3-Flash-DFlash2. Ili kurudi kwenye njia ya MTP ya checkpoint ikiwa na tokeni mbili za speculation, anzisha upya kwa:

SPEC_METHOD=mtp ./start.sh restart

Mazingira pia yanaunga mkono SPEC_METHOD=none. Draft tensor parallelism chaguo-msingi ya DFlash2 ni moja, hivyo modeli ndogo ya draft hubaki kwenye rank 0 na kuzuia mawasiliano ya CX7 kwa kila hatua ya draft.

Usilazimishe TRITON_ATTN kwa DFlash2. Kulingana na vipimo vya README, backend hiyo ilifanya attention iwe causal ndani ya draft block na kusababisha ukubali katika nafasi za baadaye za speculation kuporomoka. Acha draft attention bila kuwekwa ili SM121 ichague FLASH_ATTN.

Usanidi wa akiba ya KV na muktadha mrefu

Akiba lengwa ya KV lazima ibaki fp8. Kwenye usanifu huu, kernel ya sparse-MLA inakubali fp8_ds_mla iliyopakiwa; BF16 haina sparse kernel inayooana, na kernels za NVFP4 KV hutumika kwa dense MHA badala ya sparse MLA.

Pamoja na DFlash2, usaidizi wa vision, matumizi ya kumbukumbu ya 0.87, na urefu wa juu wa modeli wa 900,000, README inaripoti pool ya tokeni 982,612 inayotumia takriban GiB 15.67 kwa fp8 MLA. Hii hutoa takriban mara 1.09 ya uwezo wa ombi moja kamili la tokeni 900,000. Usanidi wa asili wa tokeni milioni moja bado hautengei kumbukumbu chini ya usanidi ulioandikwa.

Hifadhi mipangilio hii isipokuwa unapojaribu mabadiliko ya makusudi ya runtime:

KV_CACHE_DTYPE=fp8
GPU_MEM_UTIL=0.87
MAX_MODEL_LEN=900000
MAX_NUM_BATCHED_TOKENS=1024
SKIP_MM_PROFILING=1
LIMIT_MM={"image":4,"video":1}

SKIP_MM_PROFILING=1 ni muhimu kwa sababu kuprofile ingizo dummy la picha na video lenye ukubwa wa juu kunaweza kumaliza kumbukumbu iliyounganishwa. README pia inaonya kuwa kuongeza kikomo cha tokeni zilizopangwa kwa batches hadi 8,192 hupakia kupita uwezo njia ya GB10 indexer top-k wakati wa uendeshaji wa muktadha mrefu.

Jinsi caching ya prefix inavyofanya kazi

Uakibishaji wa kiambishi awali umewezeshwa, lakini API ya OpenAI bado haina hali ya kudumu. Mteja lazima atume tena historia kamili ya mazungumzo katika kila zamu. vLLM huhesabu heshi ya kiambishi awali kilichowasilishwa na inaweza kutumia tena vizuizi vilivyowekwa akiba ikiwa bado vinapatikana.

  • Ni tokeni zilizopangwa kwa mipaka ya vizuizi pekee zinazohesabiwa kama mafanikio chini ya msimamizi wa akiba wa MLA aliyewasilishwa.
  • MAX_NUM_SEQS=4 inaruhusu uzalishaji wa kazi nne kwa wakati mmoja; haihifadhi vipindi vinne vya mazungumzo vinavyoendelea.
  • Hakuna hakikisho kwamba mazungumzo yasiyotumika yataendelea kubaki kwenye akiba.
  • Uamilishaji wa mazungumzo moja hauchanganywi na wa mazungumzo mengine.
  • Gumzo la zamani linaweza kuhitaji ujazaji wa awali upya baada ya mzigo mwingine kuondoa kiambishi chake awali kwenye akiba.

Jaribio la moja kwa moja la README lilitumia tena tokeni 3,584 kati ya tokeni 7,760 za ufuatiliaji, sawa na takriban asilimia 46 ya prompti. Chukulia uakibishaji wa kiambishi awali kama uharakishaji wa fursa, badala ya hifadhi ya vipindi vya kudumu.

Pima utendaji wa usimbaji wa majibu

Hifadhi ya msimbo inajumuisha tests/bench_decode.py kwa usimbaji wa majibu unaotiririshwa na ukaguzi wa uwiano. Endesha jaribio la hesabu lililopangwa kwa:

python3 tests/bench_decode.py \
  --phase structured \
  --structured \
  --runs 5 \
  --max-tokens 400 \
  --skip-coherence \
  --out /tmp/glm53-structured.json

Endesha jaribio la maelezo ya ramani ya heshi kwa nathari kwa:

python3 tests/bench_decode.py \
  --phase prose \
  --runs 5 \
  --max-tokens 400 \
  --skip-coherence \
  --out /tmp/glm53-prose.json

Kwa kutumia itifaki ya README iliyowasilishwa ya mazingira ya joto na KV tupu, mzigo uliopangwa ulifikia tokeni 62.9 kwa sekunde katika mshikamano wa moja, tokeni 103.3 kwa sekunde kwa jumla katika mshikamano wa mbili, na tokeni 146.5 kwa sekunde kwa jumla katika mshikamano wa nne. Utendaji hutegemea sana kiwango cha kukubalika kwa utabiri wa awali: wastani wa maabara ulikuwa tokeni 61.7 kwa sekunde kwa matokeo yaliyopangwa, lakini 26.9 kwa nathari. Majaribio mchanganyiko au yenye muktadha mrefu, yenye takriban tokeni 60,000 hadi 100,000 zilizowekwa akiba, yaliripotiwa kufikia tokeni 24 hadi 27 kwa sekunde.

Takwimu hizi zinaelezea usanidi mahususi wa GB10 mbili, aina za prompti, usanidi wa halijoto sifuri, fikra zilizozimwa, DFlash2 k=7, na uzalishaji wa tokeni 400 katika README. Hazipaswi kutafsiriwa kama hakikisho la jumla la upitishaji.

Uondoaji wa hiari wa mwelekeo wa ukataaji

Hifadhi ya msimbo inaweza kutumia uondoaji wa mwelekeo wa ukataaji wakati wa kupakia uzani bila kuandika upya au kukadiria upya checkpoint ya EXL3. Uwezeshaji wake:

ABLIT=1 ./start.sh restart
./start.sh logs | grep ablit

Muundo chaguo-msingi huhariri kila self_attn.o_proj asilia ya BF16 katika tabaka 15 hadi 45. Tabaka 0 hadi 14 hubaki bila kubadilishwa kama nanga za usalama. Skeli chaguo-msingi ni ABLIT_ALPHA=3.0; kuiweka kuwa 1.0 hutumia projeksheni ya kawaida inayoondoa sehemu iliyo kwenye mwelekeo uliotolewa.

Vidhibiti muhimu ni pamoja na:

  • ABLIT=0 au thamani isiyowekwa ili kuacha uzani wa kawaida bila kubadilishwa.
  • ABLIT_DIRECTION=dealign kwa mwelekeo chaguo-msingi uliochapishwa.
  • ABLIT_LAYERS=15-45 kwa masafa jumuishi ya tabaka zitakazohaririwa.
  • ABLIT_ALPHA=3.0 kwa skeli ya projeksheni.
  • ABLIT_INCLUDE_MTP=1 ili kujumuisha kizuizi cha MTP cha checkpoint wakati MTP inatumika.

Matokeo ya ubora wa KLD katika README yalipimwa bila uondoaji. Kuiwezesha hubadilisha tabia ya ukataaji na kunaweza kuathiri uwiano au kiwango cha kukubalika kwa utabiri wa awali kwa sababu mtabiri wa DFlash2 hubaki bila kubadilishwa huku matokeo lengwa yakibadilika. Uwiano ukipungua, README inapendekeza kupunguza ABLIT_ALPHA kwanza.

Mtiririko wa juu wa uanzishaji

Pindi picha na akiba ya modeli zinapopatikana kwenye mashine zote mbili, unaweza kuruka uhamishaji unaorudiwa:

SKIP_DOWNLOAD=1 SKIP_SYNC=1 ./start.sh

Ili kuhifadhi picha ya kontena ya ndani na kuruka uvutaji, upakuaji na ulandanishaji wote:

SKIP_PULL=1 SKIP_DOWNLOAD=1 SKIP_SYNC=1 ./start.sh restart

Ili kujenga upya overlay kutoka kwenye hifadhi ya msimbo ya sasa badala ya kutumia picha ya umma:

BUILD=1 SKIP_DOWNLOAD=1 SKIP_SYNC=1 ./start.sh restart

Unaweza pia kujenga Dockerfile moja kwa moja:

docker build -t glm53-flash-sm121:local .

Kwa kawaida hati ya uanzishaji huendesha ukaguzi wa ndani wa overlay ya GPU kabla ya kutuma picha kwa worker. Weka SKIP_OVERLAY_VERIFY=1 tu unapokusudia kuruka ukaguzi huo.

Maonyo muhimu ya usanidi

  • Usipitishie --moe-backend marlin. Usambazaji huu hutumia uzani wa EXL3 na mbinu yake ya kupakia wataalamu iliyopangwa.
  • Usiweke akiba ya KV ya lengo kuwa NVFP4 au BF16. Weka KV_CACHE_DTYPE=fp8.
  • Usifunge umakini wa rasimu ya utabiri wa awali kwenye TRITON_ATTN.
  • Usibadilishe picha kwa glm53-flash-sm121:v8 ya zamani ya usambazaji wa NVFP4/Ray.
  • Usibadilishe kwa uzembe usambamba wa tenzori, idadi ya nodi, pini za CX7 au USE_HOST_NCCL. Ni sehemu muhimu za muundo wa nodi mbili.
  • Usifute au kukadiria upya akiba ya checkpoint ya Hugging Face isipokuwa ukikusudia kupakua tena modeli kamili.
  • Usizime ulinzi wa uwekaji wasifu wa multimodali bila kuzingatia matumizi ya kumbukumbu iliyounganishwa.
  • Usielekeze ABLIT_DIRECTION kwenye vekta ya checkpoint isiyohusiana bila kuthibitisha ukubwa wake wa hali fiche.

Kutatua matatizo

Huduma haiji katika hali ya afya

Kagua kumbukumbu zote mbili kwa ./start.sh logs na ./start.sh logs worker. Angalia SSH isiyohitaji nenosiri, nafasi ya diski inayopatikana, ruhusa za Docker, ukamilifu wa akiba na majina ya violesura vya CX7. Upakiaji wa awali wa uzani na kunasa grafu ni taratibu, kwa hiyo ruhusu muda chaguo-msingi wa kusubiri utayari uishe baada tu ya kukagua maendeleo kwenye kumbukumbu.

NCCL inakwama wakati wa uanzishaji wa rank

Thibitisha HEAD_CX7_IF, WORKER_CX7_IF, HEAD_CX7_IB, na WORKER_CX7_IB. Chaguo-msingi zilizoandikwa zinahusishwa na milango halisi ya maabara na huenda zikahitaji kurekebishwa ikiwa uunganishaji wa nyaya zako unatofautiana.

Worker haiwezi kufikia GHCR

Worker haihitaji ufikiaji wa moja kwa moja wa GHCR. Head hupakua image ya umma na kuihamisha kupitia SSH. Ikiwa head itakumbana na vikomo vya matumizi bila uthibitishaji, sanidi GHCR_USER na GHCR_TOKEN.

Usimbaji wa kubashiri ni wa polepole bila kutarajiwa

Thibitisha kuwa SPEC_METHOD=dflash, DFLASH_TOKENS=7, na attention ya rasimu hailazimishwi kuwa TRITON_ATTN. Pia kumbuka kuwa utendaji wa usimbaji wa kubashiri hutofautiana kulingana na aina ya matokeo: mfuatano wenye muundo madhubuti unaweza kuwa na kiwango cha juu zaidi cha kukubalika kuliko nathari isiyo na vizuizi.

Hitimisho

Mradi huu hubadilisha mifumo miwili ya NVIDIA GB10 kuwa seva ya GLM-5.3 Flash yenye uoanifu wa OpenAI na ranki mbili, kwa kutumia uzani wa EXL3 ulioshinikizwa, uhifadhi wa fp8 sparse-MLA, na usimbaji wa kubashiri wa DFlash2. Njia ya haraka zaidi ni kuhifadhi chaguo-msingi za mtandao, KV, attention, na quantization zilizotolewa, kuanzisha kwa ./start.sh, kisha kuthibitisha uwekaji kupitia endpoint ya afya, API ya gumzo, kumbukumbu, na vipimo vya decode vilivyojumuishwa.