মূল কনটেন্টে যান
এআই টিউটোরিয়াল

দুটি NVIDIA DGX Spark সিস্টেমে GLM-5.3 Flash EXL3 পরিবেশন করুন

দুটি NVIDIA GB10 DGX Spark সিস্টেমে GLM-5.3 Flash EXL3 কীভাবে ইনস্টল, কনফিগার, চালু, পরীক্ষা ও টিউন করতে হয় তা শিখুন। এই টিউটোরিয়ালে দুই-নোড রানটাইম, DFlash2 স্পেকুলেটিভ ডিকোডিং, fp8 MLA KV ক্যাশে, OpenAI-সামঞ্জস্যপূর্ণ রিকোয়েস্ট, প্রিফিক্স ক্যাশিং, বেঞ্চমার্কিং, ঐচ্ছিক অ্যাবলেশন এবং গুরুত্বপূর্ণ কনফিগারেশন সীমাবদ্ধতা আলোচনা করা হয়েছে।

দুটি NVIDIA DGX Spark সিস্টেমে GLM-5.3 Flash EXL3 পরিবেশন

সংক্ষিপ্ত বিবরণ

2x DGX Sparks-এর জন্য GLM-5.3 Flash EXL3 হলো দুইটি NVIDIA GB10 সিস্টেমে GLM-5.3 Flash-এর 4 bpw EXL3/TR3 quantization পরিবেশনের জন্য একটি deployment recipe ও vLLM overlay। এটি 8888 পোর্টে OpenAI-সামঞ্জস্যপূর্ণ API প্রকাশ করে এবং মডেলটি GLM-5.3-Flash-EXL3 শনাক্তকারীর অধীনে পরিবেশন করে।

এই recipe-তে tensor parallelism ব্যবহার করা হয়েছে, যেখানে প্রতিটি মেশিনে একটি করে rank রয়েছে। এতে packed EXL3 routed expert, native sm_121a kernel, fp8 sparse-MLA KV cache, CUDA graph এবং সাতটি draft token-সহ DFlash2 speculative decoding একত্রে ব্যবহার করা হয়েছে।

ডিফল্টে ব্যবহৃত checkpoint হলো Mia-AiLab/GLM-5.3-Flash-EXL3-TR3-4bpw, যা উল্লেখিত Brandon Music snapshot-এর একটি সর্বসাধারণের জন্য উন্মুক্ত, byte-identical mirror। এতে 120টি shard-এ আনুমানিক 164 GiB ডেটা রয়েছে। মডেল repository-র নিজস্ব license আছে, আর serving script ও overlay MIT license-এ প্রকাশিত।

Overlay কেন প্রয়োজন

স্টক ARM64 GLM-5.3 vLLM image এই checkpoint লোড করতে পারে, কিন্তু প্রথম forward pass-এ ব্যর্থ হয়। কারণ GLM-5.3 Flash NoPE MLA ব্যবহার করে, যেখানে উপলভ্য SM12x sparse-MLA backend ভিন্ন packed geometry প্রত্যাশা করে। Overlayটি 512-dimensional NoPE latent-কে FLASHINFER_MLA_SPARSE_SM120-এর প্রয়োজনীয় geometry-তে pad করে, তবে QK dot product পরিবর্তন করে না।

এটি একটি কার্যকর EXL3 quantization method-ও নিবন্ধন করে। ফলে routed expert-গুলোকে BF16-এ প্রসারিত না করে তাদের packed trellis, SUH, SVH এবং MCG representation-এই রাখা যায়। Fused path সক্রিয় থাকলে প্রতিটি layer একটি exllamav3_ext.exl3_moe launch ব্যবহার করে।

Overlayটি DFlash2-এর জন্য GLM-নির্দিষ্ট integration-ও সরবরাহ করে। এর মধ্যে রয়েছে EAGLE3 auxiliary hidden-state capture, target MLA KV slot শেয়ার করা draft sliding-window attention এবং speculative draft block-এর ভেতরে non-causal attention।

প্রধান বৈশিষ্ট্য

  • OpenAI-সামঞ্জস্যপূর্ণ service: vLLM head node-এ /v1/chat/completions এবং সংশ্লিষ্ট endpoint প্রকাশ করে।
  • দুই-node tensor parallelism: deployment-এ --nnodes 2 এবং --tensor-parallel-size 2 ব্যবহার করা হয়েছে।
  • কমপ্যাক্ট EXL3 weight: 4 bpw checkpoint ডাউনলোড করতে আনুমানিক 164 GiB প্রয়োজন এবং উল্লেখিত quality panel-এ এটি 176 GB হিসেবে দেখানো হয়েছে।
  • DFlash2 speculative decoding: ডিফল্ট draft model হলো incoai/GLM-5.3-Flash-DFlash2, যার k=7।
  • দীর্ঘ context: ডিফল্ট সর্বোচ্চ model length হলো 900,000 token; নথিভুক্ত memory configuration-এ fp8 MLA pool 982,612 token সমর্থন করে বলে উল্লেখ করা হয়েছে।
  • Multimodal support: image ও video input সক্রিয় রয়েছে; প্রতি prompt-এ ডিফল্ট সীমা চারটি image এবং একটি video।
  • Tool ও reasoning parsing: launcher স্বয়ংক্রিয় tool selection এবং GLM-সামঞ্জস্যপূর্ণ tool-call ও reasoning parser সক্রিয় করে।
  • Prefix caching: সংশ্লিষ্ট hash cache-এ থাকা অবস্থায় block-aligned prefix পুনরায় ব্যবহার করা যায়।
  • ঐচ্ছিক refusal-direction ablation: ABLIT=1 load-এর সময় নির্বাচিত native BF16 output-projection weight-এ memory-র ভেতর edit প্রয়োগ করে।

হার্ডওয়্যার ও সফটওয়্যার প্রয়োজনীয়তা

এই recipeটি নথিভুক্ত CX7 fabric-এর মাধ্যমে সংযুক্ত দুইটি NVIDIA GB10 DGX Spark-শ্রেণির সিস্টেমের জন্য বিশেষভাবে তৈরি। এটি সাধারণ single-GPU deployment নয়।

  • দুইটি NVIDIA GB10 system; প্রাথমিক setup-এর জন্য প্রতিটি node-এ আনুমানিক 180 GiB খালি storage।
  • উভয় system-এ sudo ছাড়াই Docker ব্যবহারের সুবিধা।
  • head node থেকে worker-এ passwordless SSH।
  • head node-এ hf বা huggingface-cli, curl এবং rsync ইনস্টল করা।
  • উভয় machine-এ সঠিক CX7 network interface ও RDMA device।
  • 120-shard checkpoint এবং আনুমানিক 2.3 GiB DFlash2 model ধারণ করতে সক্ষম Hugging Face cache location।

আপনার physical cabling ভিন্ন না হলে repository-র CX7 interface ও HCA settings অপরিবর্তিত রাখুন। README সতর্ক করে যে NCCL 10.0.0.x loopback alias ব্যবহার করতে পারে না এবং fabric pin ভুল হলে ncclCommInitRank-এর সময় আটকে যেতে পারে।

Deployment ইনস্টল ও কনফিগার করুন

1. Repository clone করুন

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. Environment file তৈরি করুন

cp .env.example .env

Machine-গুলো recipe-র ডিফল্ট address বা account name ব্যবহার না করলে .env সম্পাদনা করুন। সবচেয়ে গুরুত্বপূর্ণ setting-গুলো হলো:

  • head node ও vLLM master-এর জন্য HEAD_IP=10.0.0.1।
  • দ্বিতীয় Spark-এর জন্য WORKER_IP=10.0.0.2।
  • node-গুলোর SSH account আলাদা হলে WORKER_USER।
  • worker-এর home বা Hugging Face cache location ভিন্ন হলে WORKER_HOME।
  • API listener-এর জন্য PORT=8888।

.env অনুপস্থিত থাকলে launcher স্বয়ংক্রিয়ভাবে .env.example থেকে এটি তৈরি করে। কোনো command-এর আগে সরাসরি দেওয়া value file-এর value-কে অগ্রাধিকার দেয়।

3. ঐচ্ছিকভাবে weight প্রস্তুত করুন

./download.sh

এই commandটি head node-এর Hugging Face cache-এ EXL3 checkpoint ও DFlash2 model ডাউনলোড করে। এটি Docker চালায় না, worker-এ সংযোগ করে না এবং file synchronize করে না। Worker প্রস্তুত হওয়ার আগে আনুমানিক 164 GiB model download সম্পন্ন করতে চাইলে এটি ব্যবহার করুন।

Cache করা file-গুলো স্পষ্টভাবে refresh করতে চালান:

REFRESH_WEIGHTS=1 ./download.sh

অপ্রয়োজনীয়ভাবে রিফ্রেশ করা এড়িয়ে চলুন। download.sh এবং start.sh—দুটিই ইতিমধ্যে সম্পূর্ণ হওয়া রিপোজিটরি এড়িয়ে চলে।

৪. উভয় র‍্যাঙ্ক এবং API চালু করুন

./start.sh

স্টার্টআপ স্ক্রিপ্টটি নিম্নলিখিত ক্রমে কাজ করে:

  1. উভয় নোডে Docker, SSH এবং উপলভ্য ডিস্ক স্পেস পরীক্ষা করে।
  2. হেড নোডে পাবলিক ghcr.io/miaai-lab/glm-5.3-flash-2x-dgx-sparks:exl3 ইমেজটি পুল করে।
  3. ইমেজের ডাইজেস্ট পরিবর্তিত হলে কনটেইনার ইমেজটি ওয়ার্কারে স্থানান্তর করে।
  4. হেড নোডের Hugging Face ক্যাশে অনুপস্থিত মডেল ফাইল ডাউনলোড করে।
  5. rsync ব্যবহার করে ক্যাশটি ওয়ার্কারে সিঙ্ক্রোনাইজ করে।
  6. ওয়ার্কারে হেডলেস মোডে র‍্যাঙ্ক ১ চালু করে।
  7. হেড নোডে র‍্যাঙ্ক ০ এবং OpenAI-সামঞ্জস্যপূর্ণ API চালু করে।
  8. মডেল লোডিং এবং ওয়ার্মআপ শেষ না হওয়া পর্যন্ত হেলথ এন্ডপয়েন্ট পোল করে।

ডিফল্ট রেডিনেস টাইমআউট ৩,৬০০ সেকেন্ড, কারণ ওজন লোড করা এবং CUDA গ্রাফ ক্যাপচার করতে যথেষ্ট সময় লাগতে পারে।

৫. স্ট্যাটাস এবং লগ পরীক্ষা করুন

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

উভয় কনটেইনার বন্ধ করতে চালান:

./start.sh stop

আপনি ./stop.sh-ও ব্যবহার করতে পারেন।

একটি সাধারণ চ্যাট অনুরোধ পাঠান

হেড নোডে বেস API URL হলো http://127.0.0.1:8888/v1। নথিভুক্ত LAN ঠিকানা ব্যবহার করে অন্যান্য মেশিন 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
    }
  }'

অনুরোধের model মানটি পরিবেশিত নামের সঙ্গে মিলতে হবে, যার ডিফল্ট মান GLM-5.3-Flash-EXL3। থিংকিং ডিফল্টভাবে সক্রিয় থাকে। এটি নিষ্ক্রিয় করতে উপরে দেখানো অনুযায়ী JSON অনুরোধের শীর্ষ স্তরে chat_template_kwargs রাখুন।

র’ HTTP-র মাধ্যমে আক্ষরিক নেস্টেড extra_body অবজেক্ট পাঠাবেন না। OpenAI Python SDK-তে extra_body একটি SDK অপশন, যার বিষয়বস্তু শীর্ষ-স্তরের অনুরোধের সঙ্গে একীভূত হয়।

চেকপয়েন্টের জেনারেশন কনফিগারেশন temperature=1.0 এবং top_p=0.95 সরবরাহ করতে পারে। ভিন্ন আচরণ প্রয়োজন হলে প্রতিটি অনুরোধে স্যাম্পলিং মান নির্ধারণ করুন।

ডিফল্ট রানটাইম বুঝে নিন

ডিপ্লয়মেন্টের ডিফল্টগুলো ইচ্ছাকৃতভাবে সমন্বিত। একটি কম্পোনেন্ট পরিবর্তন করলে কার্নেলের সমন্বয় অবৈধ হয়ে যেতে পারে বা স্পেকুলেটিভ গ্রহণযোগ্যতা কমে যেতে পারে।

  • ওজন: Mia-AiLab/GLM-5.3-Flash-EXL3-TR3-4bpw; মিরর অনুপলভ্য বা অসম্পূর্ণ হলে Brandon Music রিপোজিটরিতে ফলব্যাক করে।
  • প্যারালেলিজম: মাল্টিপ্রসেসিং এক্সিকিউটার ব্যবহার করে দুটি নোড এবং দুই আকারের টেনসর-প্যারালেল।
  • কোয়ান্টাইজেশন: exl3; প্যাকড রাউটেড এক্সপার্ট এবং নেটিভ ডেন্স, শেয়ার্ড-এক্সপার্ট, অ্যাটেনশন, এমবেডিং ও আউটপুট-হেড ওজনসহ।
  • টার্গেট KV ক্যাশ: fp8, যা অভ্যন্তরীণভাবে প্যাকড fp8_ds_mla হিসেবে উপস্থাপিত।
  • স্পেকুলেশন: সাতটি স্পেকুলেটিভ টোকেনসহ DFlash2 এবং ড্রাফট টেনসর প্যারালেলিজম এক সেট করা।
  • ড্রাফট KV ক্যাশ: স্বয়ংক্রিয় নির্বাচন; ফলে টার্গেটের MLA লেআউটের পরিবর্তে ডেন্স ড্রাফট মডেলের জন্য BF16 ব্যবহৃত হয়।
  • অ্যাটেনশন: টার্গেটের জন্য স্পার্স MLA এবং DFlash2 ড্রাফট অ্যাটেনশনের জন্য স্বয়ংক্রিয়ভাবে নির্বাচিত FLASH_ATTN।
  • কনটেক্সট: MAX_MODEL_LEN=900000।
  • সমসাময়িকতা: MAX_NUM_SEQS=4।
  • প্রিফিল: MAX_NUM_BATCHED_TOKENS=1024।
  • মেমরি ব্যবহার: GPU_MEM_UTIL=0.87।

স্পেকুলেটিভ ডিকোডিং মোড পরিবর্তন করুন

DFlash2 ডিফল্ট এবং এটি incoai/GLM-5.3-Flash-DFlash2 ব্যবহার করে। দুটি স্পেকুলেটিভ টোকেনসহ চেকপয়েন্টের MTP পথে ফলব্যাক করতে পুনরায় চালু করুন:

SPEC_METHOD=mtp ./start.sh restart

পরিবেশটি SPEC_METHOD=none-ও সমর্থন করে। DFlash2-এর ডিফল্ট ড্রাফট টেনসর প্যারালেলিজম এক, ফলে ছোট ড্রাফট মডেলটি র‍্যাঙ্ক ০-তে থাকে এবং প্রতিটি ড্রাফট ধাপে CX7 যোগাযোগ এড়ানো যায়।

DFlash2-এর জন্য TRITON_ATTN জোর করে ব্যবহার করবেন না। README-এর পরিমাপ অনুযায়ী, ওই ব্যাকএন্ড ড্রাফট ব্লকের মধ্যে অ্যাটেনশনকে কারণগত করে তুলেছিল এবং পরবর্তী স্পেকুলেটিভ অবস্থানগুলোতে গ্রহণযোগ্যতা ভেঙে পড়েছিল। ড্রাফট অ্যাটেনশন অনির্ধারিত রাখুন, যাতে SM121 FLASH_ATTN নির্বাচন করে।

KV ক্যাশ এবং দীর্ঘ-কনটেক্সট কনফিগারেশন

টার্গেট KV ক্যাশ অবশ্যই fp8 থাকতে হবে। এই আর্কিটেকচারে স্পার্স-MLA কার্নেল প্যাকড fp8_ds_mla গ্রহণ করে; BF16-এর সঙ্গে কোনো সামঞ্জস্যপূর্ণ স্পার্স কার্নেল নেই, এবং NVFP4 KV কার্নেল স্পার্স MLA-এর পরিবর্তে ডেন্স MHA-তে প্রযোজ্য।

DFlash2, ভিশন সাপোর্ট, ০.৮৭ মেমরি ব্যবহার এবং সর্বোচ্চ ৯০০,০০০ মডেল দৈর্ঘ্যসহ README-তে fp8 MLA-এর জন্য প্রায় ১৫.৬৭ GiB ব্যবহার করে ৯৮২,৬১২-টোকেনের পুলের কথা বলা হয়েছে। এটি একটি পূর্ণ ৯০০,০০০-টোকেন অনুরোধের সক্ষমতার প্রায় ১.০৯ গুণ প্রদান করে। নথিভুক্ত সেটআপে নেটিভ এক-মিলিয়ন-টোকেন কনফিগারেশন এখনও বরাদ্দ হয় না।

ইচ্ছাকৃত রানটাইম পরিবর্তন পরীক্ষা না করলে এই সেটিংগুলো বজায় রাখুন:

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 গুরুত্বপূর্ণ, কারণ সর্বোচ্চ আকারের ছবি এবং ভিডিওর ডামি ইনপুট প্রোফাইল করলে ইউনিফায়েড মেমরি শেষ হয়ে যেতে পারে। README আরও সতর্ক করেছে যে ব্যাচড-টোকেন সীমা ৮,১৯২-এ বাড়ালে দীর্ঘ-কনটেক্সট অপারেশনের সময় GB10 ইনডেক্সার top-k পথ ওভারসাবস্ক্রাইব হয়।

প্রিফিক্স ক্যাশিং কীভাবে কাজ করে

Prefix caching সক্রিয় থাকলেও OpenAI API stateless থাকে। প্রতিটি টার্নে একটি ক্লায়েন্টকে সম্পূর্ণ কথোপকথনের ইতিহাস আবার পাঠাতে হয়। vLLM জমা দেওয়া prefix-এর hash তৈরি করে এবং সেগুলো তখনও উপলভ্য থাকলে ক্যাশ করা ব্লক পুনরায় ব্যবহার করতে পারে।

  • নথিভুক্ত MLA cache manager-এর অধীনে শুধুমাত্র block-aligned token-ই hit হিসেবে গণ্য হয়।
  • MAX_NUM_SEQS=4 একই সময়ে চলমান চারটি generation অনুমোদন করে; এটি চারটি স্থায়ী chat session সংরক্ষণ করে না।
  • নিষ্ক্রিয় কথোপকথন ক্যাশে থাকবেই, এমন নিশ্চয়তা নেই।
  • একটি কথোপকথনের activation অন্য কথোপকথনের সঙ্গে মেশানো হয় না।
  • অন্য কোনো workload তার prefix সরিয়ে দিলে পুরোনো chat-এর জন্য নতুন করে prefill প্রয়োজন হতে পারে।

README-এর লাইভ টেস্টে 7,760-token follow-up-এর মধ্যে 3,584 token পুনরায় ব্যবহার করা হয়েছিল, অর্থাৎ prompt-এর প্রায় 46 শতাংশ। Prefix caching-কে স্থায়ী session storage নয়, বরং সুযোগসাপেক্ষ acceleration হিসেবে বিবেচনা করুন।

Decode performance পরিমাপ

রিপোজিটরিতে streaming decode এবং coherence check-এর জন্য tests/bench_decode.py রয়েছে। Structured count test চালান:

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

Prose hash-map explanation test চালান:

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

README-তে নথিভুক্ত warm, empty-KV protocol-এর অধীনে structured workload concurrency one-এ প্রতি সেকেন্ডে 62.9 token, concurrency two-এ aggregate প্রতি সেকেন্ডে 103.3 token এবং concurrency four-এ aggregate প্রতি সেকেন্ডে 146.5 token অর্জন করেছে। Performance speculative acceptance-এর ওপর ব্যাপকভাবে নির্ভরশীল: structured output-এর জন্য lab median ছিল প্রতি সেকেন্ডে 61.7 token, কিন্তু prose-এর জন্য 26.9। প্রায় 60,000 থেকে 100,000 cached token-সহ mixed বা long-context test-এ প্রতি সেকেন্ডে 24 থেকে 27 token রিপোর্ট করা হয়েছে।

এই পরিসংখ্যানগুলো README-তে বর্ণিত নির্দিষ্ট two-GB10 setup, prompt type, temperature-zero configuration, disabled thinking, DFlash2 k=7 এবং 400-token generation-এর ফল। এগুলোকে সর্বজনীন throughput guarantee হিসেবে ব্যাখ্যা করা উচিত নয়।

ঐচ্ছিক refusal-direction ablation

রিপোজিটরি EXL3 checkpoint পুনর্লিখন বা requantize না করেই weight-load time-এ refusal-direction ablation প্রয়োগ করতে পারে। এটি সক্রিয় করুন:

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

ডিফল্ট recipe-টি layer 15 থেকে 45 পর্যন্ত প্রতিটি native BF16 self_attn.o_proj সম্পাদনা করে। Layer 0 থেকে 14 safety anchor হিসেবে অপরিবর্তিত থাকে। ডিফল্ট scale হলো ABLIT_ALPHA=3.0; এটিকে 1.0 নির্ধারণ করলে plain projection প্রয়োগ হয়, যা সরবরাহ করা direction বরাবর component সরিয়ে দেয়।

উপযোগী control-গুলোর মধ্যে রয়েছে:

  • ABLIT=0 অথবা unset value stock weight অপরিবর্তিত রাখে।
  • ABLIT_DIRECTION=dealign প্রকাশিত ডিফল্ট direction ব্যবহার করে।
  • ABLIT_LAYERS=15-45 inclusive edited range নির্ধারণ করে।
  • ABLIT_ALPHA=3.0 projection scale নির্ধারণ করে।
  • MTP ব্যবহৃত হলে checkpoint MTP block অন্তর্ভুক্ত করতে ABLIT_INCLUDE_MTP=1 ব্যবহার করুন।

README-এর KLD quality result ablation ছাড়া পরিমাপ করা হয়েছিল। এটি সক্রিয় করলে refusal behavior পরিবর্তিত হয় এবং coherence বা speculative acceptance প্রভাবিত হতে পারে, কারণ DFlash2 drafter অপরিবর্তিত থাকে, কিন্তু target output পরিবর্তিত হয়। Coherence কমে গেলে README প্রথমে ABLIT_ALPHA কমানোর পরামর্শ দেয়।

উন্নত launch workflow

দুই মেশিনেই image এবং model cache বিদ্যমান থাকলে পুনরাবৃত্ত transfer কাজ এড়িয়ে যেতে পারেন:

SKIP_DOWNLOAD=1 SKIP_SYNC=1 ./start.sh

স্থানীয় container image রেখে সব pull, download এবং synchronization এড়াতে:

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

public image ব্যবহার না করে বর্তমান repository থেকে overlay পুনর্নির্মাণ করতে:

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

আপনি সরাসরি Dockerfile-ও build করতে পারেন:

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

Startup script সাধারণত worker-এ image পাঠানোর আগে GPU overlay self-check চালায়। ইচ্ছাকৃতভাবে সেই check এড়াতে চাইলে তবেই SKIP_OVERLAY_VERIFY=1 নির্ধারণ করুন।

গুরুত্বপূর্ণ configuration সতর্কতা

  • --moe-backend marlin পাঠাবেন না। এই deployment EXL3 weight এবং নিজস্ব packed expert method ব্যবহার করে।
  • Target KV cache-কে NVFP4 বা BF16 নির্ধারণ করবেন না। KV_CACHE_DTYPE=fp8 রাখুন।
  • Speculative draft attention-কে TRITON_ATTN-এ pin করবেন না।
  • Image-কে পুরোনো glm53-flash-sm121:v8 NVFP4/Ray deployment দিয়ে প্রতিস্থাপন করবেন না।
  • T针对 two-node recipe-এর অবিচ্ছেদ্য অংশ হওয়ায় tensor parallelism, node count, CX7 pin বা USE_HOST_NCCL অনায়াসে পরিবর্তন করবেন না।
  • আবার সম্পূর্ণ model download করার ইচ্ছা না থাকলে Hugging Face checkpoint cache মুছবেন বা requantize করবেন না।
  • Unified-memory usage বিবেচনা না করে multimodal profiling safeguard নিষ্ক্রিয় করবেন না।
  • Hidden size যাচাই না করে ABLIT_DIRECTION-এ সম্পর্কহীন checkpoint-এর vector নির্দেশ করবেন না।

Troubleshooting

Service কখনো healthy হয় না

./start.sh logs এবং ./start.sh logs worker দিয়ে উভয় log পরিদর্শন করুন। Passwordless SSH, উপলভ্য disk space, Docker permission, cache completeness এবং CX7 interface name পরীক্ষা করুন। Initial weight loading এবং graph capture ধীর, তাই log-এ অগ্রগতি পর্যালোচনা করার পরই default readiness timeout শেষ হতে দিন।

Rank initialization-এর সময় NCCL hang করে

HEAD_CX7_IF, WORKER_CX7_IF, HEAD_CX7_IB এবং WORKER_CX7_IB যাচাই করুন। নথিভুক্ত ডিফল্টগুলো ল্যাবের ভৌত পোর্টগুলোর সঙ্গে সংযুক্ত এবং আপনার কেবলের বিন্যাস ভিন্ন হলে এগুলো সমন্বয় করতে হতে পারে।

worker GHCR অ্যাক্সেস করতে পারছে না

worker-এর সরাসরি GHCR অ্যাক্সেসের প্রয়োজন নেই। head পাবলিক ইমেজটি টেনে নিয়ে SSH-এর মাধ্যমে স্থানান্তর করে। head-এ অ্যানোনিমাস রেট লিমিট দেখা দিলে GHCR_USER এবং GHCR_TOKEN কনফিগার করুন।

Speculative decoding অপ্রত্যাশিতভাবে ধীর

নিশ্চিত করুন যে SPEC_METHOD=dflash, DFLASH_TOKENS=7 সেট করা আছে এবং draft attention জোর করে TRITON_ATTN-এ সেট করা হয়নি। আরও মনে রাখুন, speculative performance আউটপুটের ধরনের ওপর নির্ভর করে: অত্যন্ত কাঠামোবদ্ধ সিকোয়েন্সে শর্তহীন গদ্যের তুলনায় গ্রহণযোগ্যতা অনেক বেশি হতে পারে।

উপসংহার

এই প্রকল্পটি এক জোড়া NVIDIA GB10 সিস্টেমকে compact EXL3 weights, fp8 sparse-MLA caching এবং DFlash2 speculative decoding ব্যবহার করে একটি two-rank OpenAI-compatible GLM-5.3 Flash সার্ভারে রূপান্তর করে। দ্রুততম পদ্ধতি হলো সরবরাহ করা network, KV, attention এবং quantization ডিফল্টগুলো অপরিবর্তিত রাখা, ./start.sh দিয়ে চালু করা এবং health endpoint, chat API, logs ও অন্তর্ভুক্ত decode benchmark-এর মাধ্যমে deployment যাচাই করা।