Asosiy kontentga o‘tish
AI qo‘llanmalari

TensorFold yordamida GLM-5.3-Flash’ni ikkita DGX Spark’da ishga tushirish

GLM-5.3-Flash EXL3’ni ikkita NVIDIA DGX Spark’da o‘rnatish, sozlash, ishga tushirish, sinash va optimallashtirishni o‘rganing. Ushbu qo‘llanmada RoCE ulanishi, avtomatik sozlash, OpenAI bilan mos so‘rovlar, rasm va video kiritish, fikrlash boshqaruvlari, umumiy KV kesh ishlashi, monitoring va kengaytirilgan konfiguratsiya yoritiladi.

TensorFold yordamida GLM-5.3-Flash’ni ikkita DGX Spark’da ishga tushirish

Bu loyiha nima qiladi

Bu loyiha GLM-5.3-Flash modelini ikkita NVIDIA DGX Spark tizimida TensorFold v0.5.0 yordamida taqdim etadi. Har bir Spark bittadan taqsimlangan rankni ishga tushiradi, birinchi Spark esa OpenAI bilan mos HTTP API'ni ham taqdim etadi.

Standart konfiguratsiya to‘rtta parallel so‘rovni, har bir so‘rov uchun maksimal 1 048 576 tokenlik kontekst oynasini, rasm va video kiritmalarini, vositalardan foydalanishni, tuzilmaviy chiqishni, tokenizatsiya endpointlarini va Prometheus metrikalarini qo‘llab-quvvatlaydi. Ikki tizim o‘rtasidagi aloqa to‘g‘ridan-to‘g‘ri ConnectX-7 RoCE ulanishi orqali amalga oshiriladi.

Joylashtirishda Mia-AiLab GLM-5.3-Flash EXL3 checkpointi ishlatiladi. Yo‘naltiriladigan ekspertlar har bir vazn uchun taxminan to‘rt bitda saqlanadi, checkpointning boshqa vaznlari esa BF16 formatida. To‘liq checkpoint hajmi taxminan 176 GB.

Asosiy imkoniyatlar

  • OpenAI bilan mos API: Chat completions, completions, responses va modellar ro‘yxatini olish endpointlaridan foydalaning.
  • Uzun kontekst: Standart FP8 KV konfiguratsiyasida bitta so‘rov uchun 1 048 576 tagacha prompt va javob tokenlari.
  • Parallel inferens: Standart DFlash2 drafter yordamida bir vaqtning o‘zida to‘rttagacha so‘rovni dekodlang.
  • Umumiy kesh havzasi: Parallel suhbatlar mavjud xotiraga qarab taxminan 2,1–2,7 million tokenni o‘z ichiga olgan yagona FP8 KV havzasidan foydalanadi.
  • Multimodal so‘rovlar: JPEG, PNG, WebP, MP4, WebM, MOV, MKV va FFmpeg dekodlay oladigan boshqa video formatlarini yuboring.
  • Mulohaza yuritishni boshqarish: So‘rov uchun past, yuqori yoki maksimal mulohaza darajasini tanlang yoki fikrlashni o‘chirib qo‘ying.
  • Agent imkoniyatlari: xgrammar orqali vositalardan foydalanish va sxema bilan cheklangan tuzilmaviy chiqishlardan foydalaning.
  • Operatsion endpointlar: Holatni tekshiring, kiritmani tokenlarga ajrating yoki tokenlardan qaytaring va Prometheus metrikalarini to‘plang.
  • Avtomatlashtirilgan joylashtirish: Bitta buyruq ikkala kompyuterni tayyorlaydi, ikkala rankni ishga tushiradi, smoke-testni bajaradi va API manzilini ko‘rsatadi.

Uskuna va dasturiy ta’minot talablari

Sizga ikkita DGX Spark yoki har birida 128 GB umumiy xotiraga ega ikkita GB10 tizimi kerak bo‘ladi. Server ishga tushganda har bir GPU'da taxminan 110 GiB bo‘sh joy bo‘lishi kerak, shuning uchun avval boshqa yirik GPU yuklamalarini to‘xtating.

Tarmoq talablari

ConnectX-7 portlarini QSFP kabeli bilan ulang va har bir endpointga bir xil xususiy subnetdagi IPv4 manzilini tayinlang. Masalan, bosh tugun uchun 192.0.2.1/24, worker uchun esa 192.0.2.2/24 manzilidan foydalanish mumkin. Manzillarga ping orqali kirish mumkin bo‘lishi va RoCE v2 GID mavjud bo‘lishi kerak.

Agar ikkala CX7 porti ulangan va manzillangan bo‘lsa, loyiha ikkala kanal — rail'dan ham foydalanishi mumkin. README o‘lchovlariga ko‘ra, ikki rail bilan prompt qismining all-gather amali taxminan 1,8 marta tezroq bajariladi.

SSH va tizim talablari

  • Bosh Spark'dan worker'ga kalit asosidagi SSH ulanishi.
  • Ikkala tizimda NVIDIA container runtime bilan Docker.
  • Ikkala tizimda ham hisobingiz docker guruhida bo‘lishi.
  • Ikkala tizimda rsync o‘rnatilgan bo‘lishi.
  • Har bir Spark'da taxminan 205 GB disk maydoni.
  • Ixtiyoriy ravishda, bosh tugunda Hugging Face hf CLI va Hugging Face tokeni.

Zarur bo‘lsa, SSH kalitini yarating, uni worker'ga nusxalang va interaktiv bo‘lmagan ulanishni tekshiring:

ssh-keygen -t ed25519
ssh-copy-id user@192.0.2.2
ssh -o BatchMode=yes user@192.0.2.2 true

DFlash2 drafter'i CC BY-NC-ND 4.0 litsenziyasiga ega va faqat notijorat foydalanish uchun mo‘ljallangan. DFlash2'ni yuklab olish yoki undan foydalanishdan qochishingiz kerak bo‘lsa, dastlabki sozlashdan oldin checkpointning MTP drafter'ini tanlang.

Loyihani o‘rnatish va sozlash

1. Repozitoriyni bosh tugunda klonlang

git clone https://github.com/MiaAI-Lab/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold.git
cd GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold
cp scripts/local.sh.example scripts/local.sh

Worker'ga alohida checkout kerak emas. Sozlash skriptlari kerakli container image va model fayllarini bosh tugundan uzatadi.

2. Worker manzilini belgilang

scripts/local.sh faylini tahrirlang va WORKER qiymatini worker'ning SSH target manziliga o‘rnating:

WORKER=user@192.0.2.2

Taqsimlangan ranklar worker'ga chiqish uchun ishlatiladigan marshrut orqali aloqa qiladi. Agar WORKER boshqa tarmoqdagi manzilga ishora qilsa, FABRIC_PEER qiymatini worker'ning xususiy CX7 manziliga o‘rnating:

WORKER=user@worker-hostname
FABRIC_PEER=192.0.2.2

3. Zarur bo‘lsa, drafter'ni tanlang

Standart qiymat — DRAFTER=dflash2. U to‘rttagacha parallel so‘rovga imkon beradi va o‘lchangan dekodlash tezligini taxminan 5–10 foizga oshiradi. Buning o‘rniga checkpointning MTP head'idan foydalanish uchun uni birinchi ishga tushirishdan oldin sozlang:

DRAFTER=mtp

MTP DFlash2 litsenziyasi va yuklab olish talabini bekor qiladi, ammo standart holatda bir vaqtning o‘zida faqat bitta so‘rovga xizmat ko‘rsatadi.

4. Ikkala rankni ishga tushiring

./start.sh

Birinchi ishga tushirishda skript ikkala tizimni tekshiradi, taxminan 25 GB hajmdagi container image'ni oladi yoki yaratadi, checkpoint va drafter'ni bosh tugunga yuklab oladi, ularni worker'ga nusxalaydi hamda CUDA kernel'larini ~/.cache/tensorfold-glm53 ichiga kompilyatsiya qiladi.

Keyingi ishga tushirishlarda odatda har bir Spark'ga taxminan 80 GiB vaznlarni yuklash uchun ikki-olti daqiqa sarflanadi. Launcher 0-rank jurnalini kuzatadi, yuklash jarayonini ko‘rsatadi, taqsimlangan smoke-testni bajaradi va 8888-portdagi faol endpointni chiqaradi.

API'ni ishga tushirmasdan ikkala tizimni tayyorlash uchun quyidagini bajaring:

scripts/prepare.sh

Image'ni toza holatda qayta yaratishni majburlash uchun quyidagidan foydalaning:

scripts/prepare.sh --rebuild

Birinchi API so‘rovingizni yuboring

Standart model identifikatori GLM-5.3-Flash-EXL3, asosiy URL esa http://<head-address>:8888/v1.

Mavjud modellarni ro‘yxatlash

curl -s http://<head-address>:8888/v1/models

Chat yakunlanishini yuborish

curl -s http://<head-address>:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "GLM-5.3-Flash-EXL3",
    "messages": [
      {"role": "user", "content": "Write a Python fibonacci function."}
    ],
    "max_tokens": 2000
  }'

Model sukut bo‘yicha javob berishdan oldin fikrlaydi. Mulohaza reasoning_content ichida qaytariladi, yakuniy javob esa content ichida bo‘ladi. Har ikki bosqich uchun yetarli chiqish tokenlarini ajrating. Agar content bo‘sh bo‘lsa, model fikrlash paytida chiqish limitini sarflagan bo‘lishi mumkin.

Mulohaza va tanlashni boshqarish

reasoning_effort qiymatini low, high yoki max qilib belgilang. Fikrlamasdan to‘g‘ridan-to‘g‘ri javob olish uchun none qiymatidan foydalaning:

curl -s http://<head-address>:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "GLM-5.3-Flash-EXL3",
    "messages": [{"role": "user", "content": "Summarize TCP in two sentences."}],
    "reasoning_effort": "low",
    "temperature": 0,
    "max_tokens": 1000
  }'

API shuningdek temperature, top_p, top_k, min_p va seed parametrlarini qabul qiladi. Aniq seed berilmasa, sampler o‘z kalitini prompt asosida hosil qiladi, shuning uchun bir xil so‘rovlar bir xil javob beradi.

Rasm va videolarni yuborish

GLM ko‘rish minorasi sukut bo‘yicha 0-darajada ishlaydi. Rasmlar va videolar foydalanuvchi xabaridagi OpenAI uslubidagi kontent qismlari sifatida ifodalanadi.

Mahalliy rasmni tahlil qilish

IMG=$(base64 -w0 photo.jpg)
curl -s http://<head-address>:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "GLM-5.3-Flash-EXL3",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,'"$IMG"'"}},
        {"type": "text", "text": "What is in this picture?"}
      ]
    }],
    "max_tokens": 2000
  }'

Sukut bo‘yicha server media ma’lumotlarini data URL orqali qabul qiladi. Server ommaviy HTTPS URL manzillarini ham yuklashi kerak bo‘lsa, VISION_URLS=1 ni belgilang.

Qo‘llab-quvvatlanadigan media cheklovlari

  • Har bir so‘rovda 50 tagacha rasm, har bir rasm uchun 10 MB va barcha rasmlar ma’lumotlari uchun jami 64 MB limit.
  • Har bir so‘rovda 4 tagacha video, har bir video uchun 64 MB va barcha videolar ma’lumotlari uchun jami 96 MB limit.
  • Har bir videoda ko‘pi bilan bir soatlik tasvir bo‘lishi mumkin.
  • So‘rov tanasi 96 MiB gacha bo‘lishi mumkin; bu base64 formatidagi media uchun taxminan 70 MB qoldiradi.
  • Bitta rasmga ko‘pi bilan 2 048 token ajratiladi, bitta so‘rovdagi barcha rasmlar esa sukut bo‘yicha 16 384 tokenlik umumiy limitdan foydalanadi.
  • Videoni tanlash sukut bo‘yicha soniyasiga ikki kadr va klip bo‘ylab ko‘pi bilan 128 kadrdan foydalanadi.

Video uchun rasm kontenti qismini data:video/mp4;base64,... kabi data URL saqlovchi video_url qismiga almashtiring.

Agar sizga faqat matn kerak bo‘lsa, VISION=0 ni belgilang. Bu ko‘rish minorasini yuklashning oldini oladi va 0-darajadagi kesh uchun taxminan 1.8 GiB qo‘shimcha xotira qoldiradi.

Serverni ishlatish va kuzatish

Qayta ishga tushirish va to‘xtatish

./start.sh restart
./stop.sh

Doimiy sozlamalarni o‘zgartirgandan so‘ng qayta ishga tushirish talab etiladi. Xizmatni to‘xtatish har ikki kompyuterdagi GPU xotirasini bo‘shatadi.

Jurnallarni tekshirish

docker logs -f glm53-flash-tf
ssh <worker> docker logs -f glm53-flash-tf

Birinchi buyruq head qurilmasidagi 0-daraja jurnalini kuzatadi. Ikkinchisi 1-darajani kuzatadi va worker kutilmaganda chiqib ketganda ayniqsa foydalidir.

Holat va metrikalarni tekshirish

curl -s http://<head-address>:8888/health
curl -s http://<head-address>:8888/metrics

Holat javobida bandlik holati, faol oqimlar va umumiy pool sig‘imi, jumladan pool_tokens va pool_free_tokens ko‘rsatiladi. Metrikalar endpointi Prometheus so‘rovlar, kechikish, birinchi tokenni olishgacha bo‘lgan vaqt va holat ko‘rsatkichlarini taqdim etadi.

Kontekst va umumiy KV xotirasini tushunish

Standart konfiguratsiya FP8 KV keshidan foydalanadi va har bir so‘rovga maksimal 1 048 576 tokenlik oyna beradi. To‘rtta so‘rov bitta pooldan foydalanadi; hujjatlashtirilgan ishga tushirishlardan birida uning hajmi 2 684 928 token edi, ammo aniq sig‘im bo‘sh xotiraga bog‘liq.

Bitta so‘rov to‘liq oynadan foydalanishi mumkin, biroq barcha faol va saqlangan suhbatlar umumiy poolga sig‘ishi kerak. Masalan, ikkita suhbatning har biri bir million token hajmiga yaqinlashishi mumkin, qisqaroq parallel suhbatlar esa qolgan sig‘imdan birgalikda foydalanishi mumkin. Hali joylashtirib bo‘lmaydigan so‘rov boshqa so‘rovlar tugashini kutadi.

Sig‘adigan eng katta oynani hisoblash uchun CONTEXT=0 dan foydalaning, ammo bu boshqa suhbatlarning prompt holatlarini saqlash uchun xotira qoldirmaydi. Aniq BF16 KV saqlashga o‘tish mavjud oynani sezilarli darajada kamaytiradi.

Umumiy xotiraning tugashi Spark qurilmasini aniq xotira ajratish xatosi o‘rniga qotirib qo‘yishi mumkin. Xotira almashiladigan mashinalarda standart zaxirani saqlang va MEMORY_RESERVE_GIB qiymatini oshiring.

Ilg‘or konfiguratsiya

Sozlamalarni muhit, scripts/local.sh yoki start.sh yonidagi .env fayli orqali berish mumkin. Ustuvorlik tartibi: muhit, keyin scripts/local.sh, so‘ng .env va oxirida repository standartlari.

Bitta ishga tushirish uchun parallel ishlashni o‘zgartirish

PARALLEL=2 ./start.sh restart

PARALLEL DFlash2 yoqilganda birdan to‘rtgacha qiymatga o‘rnatilishi mumkin. MTP sukut bo‘yicha bir vaqtda bitta so‘rovni qayta ishlaydi.

Kontekst oynasini o‘zgartirish

CONTEXT=524288 ./start.sh restart

To‘liq million tokenli oyna kerak bo‘lmaganda, kichikroq kontekst kesh bosimini kamaytirishi mumkin.

Sukut bo‘yicha chiqish limitini oshirish

./start.sh restart --max-tokens 16384

Qo‘shimcha buyruq satri argumentlari sozlangan sukut bo‘yicha qiymatlardan keyin tensorfold serve ga uzatiladi, shuning uchun ular ustuvor hisoblanadi. Qo‘llab-quvvatlanadigan argumentlarni ko‘rish uchun ./start.sh --help buyrug‘ini ishga tushiring.

Tayyorlashni majburlash yoki o‘tkazib yuborish

PREPARE=1 ./start.sh restart
PREPARE=0 ./start.sh restart

Birinchi buyruq sozlash tekshiruvi va tayyorlash jarayonini majburan ishga tushiradi. Ikkinchisi esa bu jarayonni o‘tkazib yuboradi.

Promptlardan samarali qayta foydalanish

Umumiy prefiksdan qayta foydalanish sukut bo‘yicha SHARED_PREFIX=1 bilan yoqilgan. Takroriy tizim promptlari va bir xil saqlab qolingan promptlar qayta oldindan yuklanish o‘rniga keshlangan holatdan davom ettirilishi mumkin. Hujjatlashtirilgan o‘lchovlarda takroriy 64K-tokenli prompt 34 soniyadan 0,07 soniyadan kam vaqtgacha qisqargan, 7,9K-tokenli tizim promptidan qayta foydalanish esa ishga tushirish vaqtini 4,24 soniyadan 0,13 soniyagacha kamaytirgan.

Kesh va og‘irlik aniqligini tanlash

  • KV=fp8 sukut bo‘yicha tanlanadi va eng katta kontekst oynasini yoqadi.
  • KV=bf16 aniq kesh saqlashdan foydalanadi, biroq mavjud oynani sezilarli darajada qisqartiradi.
  • DENSE=q4 zich checkpoint komponentlari uchun sukut bo‘yicha tanlanadi.
  • DENSE=fp8 va DENSE=bf16 turli xotira talablari bilan mavjud muqobil variantlardir.

API’ning qo‘shimcha imkoniyatlari

Chat completion’laridan tashqari, server /v1/completions, /v1/responses, /v1/models, /tokenize, /detokenize, /health va /metrics endpointlarini taqdim etadi. Tokenizatsiya yo‘nalishlari /v1/ ostida ham mavjud. Server Anthropic bilan mos keluvchi /v1/messages endpointini taqdim etmaydi.

Vositalarni chaqirish tools va oqimli tool_calls ni qo‘llab-quvvatlaydi; argumentlar taqdim etilgan sxemaga muvofiq tiplanadi. Tuzilmali generatsiya json_object, json_schema, yo‘naltirilgan JSON, muntazam ifodalar, tanlovlar, grammatikalar va boshqa tuzilmali chiqish maydonlarini qo‘llab-quvvatlaydi; ular fikrlash yakunlangandan so‘ng xgrammar orqali majburan tekshiriladi.

Agar prompt va max_tokens yig‘indisi sozlangan oynadan oshib ketsa, API OpenAI uslubidagi context_length_exceeded xato kodi bilan HTTP 400 javobini qaytaradi.

Ishga tushirishdagi keng tarqalgan muammolarni bartaraf etish

  • Xotira yetarli emas: Agar ishga tushirish vaqtida faqat cheklangan miqdordagi GiB mavjudligi haqida xabar chiqsa, docker ps buyrug‘i chiqishini tekshiring va ikkala Spark’dagi boshqa GPU yuklamalarini to‘xtating.
  • RoCE qurilmasi yoki yo‘nalishi mavjud emas: ip -4 addr yordamida CX7 interfeyslarida IPv4 manzillari mavjudligini tasdiqlang. Agar SSH boshqa tarmoqdan foydalansa, FABRIC_PEER ni worker’ning CX7 manzili bilan sozlang.
  • Worker keshi yozilmayapti: Agar avvalgi konteyner uni root egasida qoldirgan bo‘lsa, worker’ning Hugging Face keshiga tegishli egalikni to‘g‘rilang.
  • Bir rank chiqib ketadi: Ikkala mashinadagi jurnallarni tekshiring. Tomonlardan biri ishlamay qolsa, launcher odatda qolgan rankni ham to‘xtatadi.
  • Sozlash o‘zgardi: Patch’larni o‘zgartirgandan yoki TensorFold, asosiy image yoxud tegishli build kiritmalarini almashtirgandan so‘ng scripts/prepare.sh --rebuild buyrug‘ini ishga tushiring.

Unumdorlik kutilmalari

README’dagi sukut bo‘yicha ikki Spark o‘lchovlarida oddiy matn dekodlash bir so‘rov uchun soniyasiga 60,4 tokendan to‘rtta parallel so‘rov uchun jami soniyasiga 108,8 tokengacha bo‘lgan. Tuzilmali generatsiya jami soniyasiga 114,7 dan 227,9 tokengacha natija bergan. Prefill 8 219 tokenli prompt uchun taxminan soniyasiga 1 952 tokenni, needle topilgan 981 841 tokenli needle-in-a-haystack prompt uchun esa soniyasiga 1 015 tokenni tashkil etgan.

Bu raqamlar to‘rtta oqim, FP8 KV keshi, to‘rt bitli zich og‘irliklar, DFlash2 va copy draft’lari, yoqilgan vision hamda 2 200 MHz bilan cheklangan GPU chastotalarida o‘lchangan. Ularni har bir muhit uchun kafolat sifatida emas, balki aynan shu konfiguratsiya uchun ma’lumotnoma natijalari sifatida qabul qiling.

Xulosa

Bu deploy ikki tugunli murakkab TensorFold konfiguratsiyasini amaliy ishga tushirish jarayoni va OpenAI bilan mos API ortiga joylaydi. CX7 ulanishi, SSH kirishi, Docker runtime’i, saqlash joyi va worker manzili tayyor bo‘lgach, ./start.sh tayyorlash, taqsimlangan ishga tushirish, tekshirish va xizmat ko‘rsatish jarayonlarini boshqaradi. Shundan so‘ng standart API mijozlaridan foydalanib, ish yuklamangiz uchun parallellik, kontekst, fikrlash, multimodal limitlar va xotira sarfini sozlashingiz mumkin.