مرکزی مواد پر جائیں
اے آئی ٹیوٹوریلز

vLLM اور Pi کے ساتھ دو DGX Spark پر DeepSeek-V4.1-Flash چلائیں

یہ ٹیوٹوریل دو NVIDIA DGX Spark نوڈز پر EXL3-quantized DeepSeek-V4.1-Flash چیک پوائنٹ تعینات کرنے، RoCE tensor parallelism تشکیل دینے، OpenAI-compatible API کی توثیق کرنے اور ماڈل کو Pi coding agent سے مربوط کرنے کا طریقہ بتاتا ہے۔

vLLM اور Pi کے ساتھ دو DGX Spark پر DeepSeek-V4.1-Flash چلائیں

آپ کیا بنائیں گے

یہ منصوبہ vLLM کا استعمال کرتے ہوئے دو NVIDIA DGX Spark نوڈز پر DeepSeek-V4.1-Flash چلانے کے لیے اسکرپٹس فراہم کرتا ہے۔ ٹینسر پیرا لل ازم نوڈز کے درمیان ان کے QSFP/RoCE لنک پر چلتا ہے، جبکہ ہیڈ نوڈ پورٹ 8000 پر OpenAI سے مطابقت رکھنے والی API فراہم کرتا ہے۔

تعیناتی میں 0xSero/DeepSeek-V4.1-Flash-Spark چیک پوائنٹ استعمال ہوتا ہے۔ روٹ کیے گئے بیک بون ایکسپرٹس EXL3 ٹریلس ڈیٹا کے طور پر انکوڈ کیے گئے ہیں، جن کی رپورٹ کردہ اوسط 2.77 بِٹس فی وزن ہے۔ اٹینشن، مشترکہ ایکسپرٹس، روٹرز، Engram ٹیبلز، ڈرافٹ لیئرز، وژن اجزا، ایمبیڈنگز اور آؤٹ پٹ ہیڈ اپ اسٹریم چیک پوائنٹ سے برقرار رہتے ہیں۔

تعیناتی کے بعد آپ ماڈل کو براہِ راست اس کی API کے ذریعے استعمال کر سکتے ہیں یا اسے Pi coding agent سے منسلک کر کے کوڈنگ اور ٹول سے معاونت یافتہ ورک فلو چلا سکتے ہیں۔

کارکردگی اور صلاحیتیں

README میں دو DGX Spark GB10 نوڈز سے حاصل کردہ پیمائشیں رپورٹ کی گئی ہیں، جن میں RoCE پر ٹینسر پیرا لل ازم، FP8 KV کیش، سات ٹوکن والی DSpark speculative decoding، ڈسک پر محفوظ Engram ٹیبلز اور بیک وقت دو سیکوئنسز استعمال کیے گئے ہیں۔

  • 8k پرامپٹ پری فل: تقریباً 2,050 ٹوکن فی سیکنڈ۔
  • 32k پرامپٹ پری فل: تقریباً 2,061 ٹوکن فی سیکنڈ۔
  • کوڈ ڈیکوڈنگ: ایک اسٹریم کے لیے تقریباً 39–41 ٹوکن فی سیکنڈ۔
  • دو اسٹریم کوڈ ڈیکوڈنگ: مجموعی طور پر 60 ٹوکن فی سیکنڈ۔
  • نثری ڈیکوڈنگ: ایک اسٹریم کے لیے تقریباً 29 ٹوکن فی سیکنڈ۔
  • ہر درخواست کا زیادہ سے زیادہ کانٹیکسٹ: 262,144 ٹوکن۔
  • KV کیش پول: 2,023,717 ٹوکن۔
  • وژن ان پٹ، ٹول کالز اور reasoning: کامیابی سے smoke-tested۔
  • 175k ٹوکن کانٹیکسٹ recall: رپورٹ کردہ تمام چھ لیب گیٹس کامیابی سے مکمل۔

پہلی بار بوٹ ہونے میں تقریباً 11–13 منٹ لگتے ہیں، کیونکہ وزن اور EXL3 بینکس لوڈ کیے جاتے ہیں، کرنلز compile کیے جاتے ہیں اور CUDA graphs capture کیے جاتے ہیں۔

ضروریات

آپ کو DGX OS چلانے والے دو DGX Spark نوڈز درکار ہیں۔ ایک کو head منتخب کریں، جو API فراہم کرے گا، اور دوسرے کو worker بنائیں۔

  • نوڈز کو جوڑنے والی QSFP کیبل، جس پر RoCE فعال ہو۔
  • ہر نوڈ پر کم از کم ایک RDMA پورٹ ACTIVE حالت میں ہو، جس کی تصدیق rdma link سے کی گئی ہو۔
  • ہر نوڈ کے لیے متعلقہ فیبرک نیٹ ورک پر IPv4 ایڈریس، مثلاً 10.10.10.13 اور 10.10.10.11۔
  • ورکر کے فیبرک ایڈریس کے ذریعے ہیڈ سے پاس ورڈ کے بغیر SSH۔
  • دونوں نوڈز پر NVIDIA runtime کے ساتھ Docker نصب ہو۔
  • آپ کا صارف docker گروپ کا رکن ہو۔
  • ہیڈ پر تقریباً 700 GB اور ورکر پر 470 GB خالی NVMe جگہ۔
  • دونوں نوڈز پر python3، rsync اور curl۔
  • اس مشین پر Node.js اور npm جہاں Pi چلایا جائے گا۔

ریپوزٹری کلون کریں اور ورکر متعین کریں

درج ذیل کمانڈز ہیڈ نوڈ پر چلائیں۔ SSH ہدف کو ورکر کے فیبرک ایڈریس سے تبدیل کریں۔

git clone https://github.com/0xSero/DeepSeek-V4.1-Flash-Two-Sparks
cd DeepSeek-V4.1-Flash-Two-Sparks
export WORKER=user@10.10.10.11

اسکرپٹس دوسرے Spark سے منسلک ہونے کے لیے WORKER استعمال کرتی ہیں۔ آگے بڑھنے سے پہلے یقینی بنائیں کہ SSH کلید کے ذریعے تصدیق کام کرتی ہے۔

چیک پوائنٹ ڈاؤن لوڈ اور تقسیم کریں

تقریباً 462 GB کا چیک پوائنٹ ہیڈ کی ڈیفالٹ ماڈل ڈائریکٹری میں ڈاؤن لوڈ کریں:

scripts/download.sh

ڈاؤن لوڈ اسکرپٹ Engram shards کو بھی دوبارہ جوڑتا ہے۔ چونکہ Hugging Face انفرادی فائلوں کو 50 GB تک محدود کرتا ہے، اس لیے دو native shards کو .partNN فائلوں کے طور پر محفوظ کیا جاتا ہے۔ اسکرپٹ انہیں دوبارہ جوڑتا ہے، چھ native shards کی sha256-manifest.txt کے خلاف تصدیق کرتا ہے اور part فائلیں حذف کر دیتا ہے۔ اگر آپ ان parts کو برقرار رکھنا چاہتے ہیں تو KEEP_PARTS=1 سیٹ کریں۔

مکمل ماڈل فیبرک کے ذریعے ورکر پر کاپی کریں:

scripts/copy-to-peer.sh

متبادل طور پر، ورکر پر بھی براہِ راست scripts/download.sh چلائیں۔ ڈیفالٹ ماڈل راستہ ~/models/DeepSeek-V4.1-Flash-Spark ہے۔ اگر ورکر کوئی دوسرا راستہ استعمال کرتا ہے تو لانچ کرنے سے پہلے WORKER_MODEL_DIR تشکیل دیں۔

سرونگ امیج حاصل کریں

یہ منصوبہ ایسی vLLM امیج استعمال کرتا ہے جس میں EXL3 mixture-of-experts راستہ اور B12X Spark کرنلز شامل ہیں۔ دونوں نوڈز پر مخصوص امیج pull کریں:

docker pull ghcr.io/0xsero/deepseek-v4.1-flash-spark@sha256:5668e35e5ee021da4b9ce88a1964caf0e082e8ca01d81d1d64b6213a55c6add5

اگر امیج پہلے سے دستیاب نہ ہو تو لانچ اسکرپٹ اسے خودکار طور پر pull کر لیتا ہے، اس لیے یہ مرحلہ startup کے دوران بھی مکمل کیا جا سکتا ہے۔

دونوں ٹینسر پیرا لل رینکس لانچ کریں

ہیڈ سے دو نوڈ والا سرور شروع کریں:

scripts/launch.sh

لانچر فعال فیبرک انٹرفیسز کا پتا لگاتا ہے، ~/.dsv41-two-sparks/api_key پر API کلید بناتا ہے، دونوں نوڈز پر میموری گارڈز شروع کرتا ہے، ورکر پر rank 1 لانچ کرتا ہے اور ہیڈ پر rank 0 شروع کرتا ہے۔ یہ API کے دستیاب ہونے کا انتظار کرتا ہے اور startup کے لیے 45 منٹ تک کی اجازت دیتا ہے۔

تعیناتی کا معائنہ یا انتظام کرنے کے لیے یہی اسکرپٹ استعمال کریں:

scripts/launch.sh status
scripts/launch.sh logs r0
scripts/launch.sh logs r1
scripts/launch.sh stop

سرور ہیڈ پر مقامی طور پر http://127.0.0.1:8000 پر سنتا ہے۔ کلائنٹس ہیڈ کے قابلِ رسائی ایڈریس کا استعمال کر سکتے ہیں، جبکہ rank-to-rank ٹریفک کے لیے QSFP/RoCE فیبرک استعمال ہونا ضروری ہے۔

Smoke tests چلائیں

متن کی تخلیق، ٹول کالز اور وژن ان پٹ کی توثیق اس کمانڈ سے کریں:

python3 scripts/smoke.py http://127.0.0.1:8000

ہر جانچ PASS یا FAIL رپورٹ کرتی ہے۔ آپ اختیاری benchmark بھی چلا سکتے ہیں:

python3 scripts/bench.py --out bench.json --conc 1 2

یہ بینچ مارک آؤٹ پٹ کی حد مقرر کیے بغیر پری فل، ڈیکوڈ، اور طویل سیاق و سباق کی رفتار کا احاطہ کرتا ہے۔

OpenAI سے مطابقت رکھنے والے اینڈ پوائنٹ کا استعمال کریں

سرور درج ذیل API تفصیلات فراہم کرتا ہے:

  • بیس URL: http://<head-ip>:8000/v1
  • ماڈل کا نام: deepseek-v4.1-flash
  • تصدیق: ~/.dsv41-two-sparks/api_key سے حاصل کردہ بیئرر ٹوکن

مثال کے طور پر، ہیڈ سے کلید یوں حاصل کریں:

ssh <head> cat ~/.dsv41-two-sparks/api_key

اس کے بعد آپ بیس URL، ماڈل نام، اور بیئرر کلید ترتیب دے کر کسی بھی OpenAI سے مطابقت رکھنے والے کلائنٹ کے ساتھ اینڈ پوائنٹ استعمال کر سکتے ہیں۔

Pi کو ماڈل سے مربوط کریں

Node.js اور npm والی مشین پر Pi فراہم کنندہ انسٹال اور رجسٹر کریں۔ کمانڈ آخری ماڈل پاتھ کے بغیر API بیس URL قبول کرتی ہے:

pi/install.sh http://<head-ip>:8000/v1

Pi شروع کرنے والے شیل میں API کلید سیٹ کریں:

export DSV41_API_KEY=$(ssh <head> cat ~/.dsv41-two-sparks/api_key)
pi --model dsv41-sparks/deepseek-v4.1-flash

انسٹالر، اگر Pi پہلے سے آپ کے PATH میں موجود نہ ہو، تو اسے انسٹال کرتا ہے، پھر Pi کی ماڈل کنفیگریشن میں صرف dsv41-sparks فراہم کنندہ شامل یا تبدیل کرتا ہے۔ یہ پہلے ٹائم اسٹیمپ والا بیک اپ بناتا ہے اور دیگر فراہم کنندگان کو برقرار رکھتا ہے۔

اگر آپ enabledModels فہرست استعمال کرتے ہیں تو انسٹالر فراہم کردہ ماڈل کو اس میں شامل کر دیتا ہے۔ اس ماڈل کو Pi کا ابتدائی ماڈل بنانے کے لیے SET_DEFAULT=1 سیٹ کریں۔

انسٹال شدہ ایکسٹینشن اس فراہم کنندہ کے لیے Pi کی آؤٹ پٹ ٹوکن حد ہٹا دیتی ہے، جس سے جوابات قدرتی طور پر ختم ہو سکتے ہیں۔ یہ ہر درخواست کے وقت DSV41_API_KEY پڑھتی ہے اور کلید Pi کی کنفیگریشن میں محفوظ نہیں کرتی۔

پہلے سے طے شدہ کنفیگریشن کو سمجھیں

scripts/launch.sh ناپی گئی سرونگ کنفیگریشن کو دوبارہ نافذ کرتا ہے۔ اہم ترتیبات میں شامل ہیں:

  • KV_BYTES=2700000000 کے ساتھ FP8 KV کیش۔
  • 262144 ٹوکنز کی زیادہ سے زیادہ سیاقی لمبائی۔
  • زیادہ سے زیادہ دو بیک وقت سلسلے۔
  • زیادہ سے زیادہ بیچ شدہ ٹوکنز 2048 مقرر ہیں۔
  • سات ڈرافٹ ٹوکنز اور موافق تصدیق کے ساتھ DSpark قیاسی ڈیکوڈنگ۔
  • ڈسک پر محفوظ Engram ٹیبلز۔
  • B12X اٹینشن، لینیئر، اور MoE کرنلز۔
  • ST_EXL3_PREFILL=st کے ساتھ EXL3 روٹ کیے گئے ماہرین۔
  • FULL_DECODE_ONLY CUDA گرافس۔
  • B12X RoCE ون شاٹ آل ریڈیوس اور باقی تقسیم شدہ آپریشنز کے لیے NCCL اوور RoCE۔
  • ملٹی موڈل پرامپٹ کے لیے ایک تصویر۔
  • deepseek_v41 ریasoning اور ٹول کال پارسرز۔

زیادہ تر ترتیبات کو ماحولیاتی متغیرات کے ذریعے تبدیل کیا جا سکتا ہے۔ ماڈل ڈائریکٹری MODEL_DIR، ورکر کی ماڈل ڈائریکٹری WORKER_MODEL_DIR، اور مستقل رن ٹائم ڈیٹا STATE_DIR کے ذریعے کنٹرول ہوتا ہے۔ پہلے سے طے شدہ اسٹیٹ ڈائریکٹری ~/.dsv41-two-sparks ہے۔

لانچر ماڈل کو /model پر صرف پڑھنے کے لیے ماؤنٹ کرتا ہے۔ یہ EXL3 الاٹمنٹ پلان کو اسٹیٹ ڈائریکٹری میں نقل کرتا ہے اور اس کے بینک پاتھز کو ماؤنٹ شدہ EXL3 ڈائریکٹریز کی طرف دوبارہ لکھتا ہے۔

ٹریفک کو درست نیٹ ورک پر رکھیں

vLLM، NCCL، اور Gloo پراسیسز کو Wi-Fi، ایتھرنیٹ، یا Tailscale انٹرفیس کے بجائے QSFP/RoCE پتوں سے بائنڈ ہونا چاہیے۔ لانچر عموماً فعال RoCE پورٹس کا پتا لگا کر درج ذیل جیسے متغیرات سیٹ کرتا ہے:

  • VLLM_HOST_IP
  • NCCL_SOCKET_IFNAME
  • GLOO_SOCKET_IFNAME
  • NCCL_IB_HCA

اگر خودکار پتا لگانے سے غلط انٹرفیس منتخب ہو تو HEAD_IP، WORKER_IP، HEAD_IFNAME، WORKER_IFNAME، HEAD_HCAS، یا WORKER_HCAS واضح طور پر سیٹ کریں۔ درست پتوں اور RDMA ڈیوائسز کی شناخت کے لیے ip -br a اور rdma link استعمال کریں۔

میموری کا محفوظ انتظام کریں

DGX Spark CPU اور GPU کے درمیان 128 GB میموری پول مشترک رکھتا ہے۔ اگر دستیاب میموری صفر تک پہنچ جائے تو کنٹینر کو صاف طور پر ختم کرنے کے بجائے میزبان غیر جواب دہ ہو سکتا ہے۔ لانچر دونوں نوڈز پر scripts/memguard.sh شروع کرتا ہے تاکہ دستیاب میموری ترتیب دی گئی حد سے کم ہونے پر dsv41-r* کنٹینرز روک دے۔

میموری گارڈ لاگ یہاں دیکھیں:

~/.dsv41-two-sparks/memguard.log

پہلے سے طے شدہ کنفیگریشن میں، مستحکم حالت کی دستیاب میموری تقریباً 2–3 GiB رپورٹ ہوتی ہے۔ اگر گارڈ فعال ہو جائے تو MEMGUARD_GIB بڑھانے سے پہلے KV_BYTES یا GPU_UTIL کم کریں۔

عام مسائل حل کریں

آغاز سست ہے

پہلی بار بوٹ ہونے میں تقریباً 12 منٹ لگ سکتے ہیں، کیونکہ وزن لوڈ ہوتے ہیں، EXL3 بینکس تیار کیے جاتے ہیں، B12X کرنلز کمپائل ہوتے ہیں، اور CUDA گرافس محفوظ کیے جاتے ہیں۔ کرنل کیشز STATE_DIR/cache کے تحت محفوظ ہوتی ہیں، اس لیے بعد کے لانچ تیز ہو سکتے ہیں۔

Engram فائلیں غائب ہیں

اگر آغاز میں model-00005-of-00006.safetensors جیسی غائب فائل کی اطلاع ملے تو غالباً Engram شارڈز دوبارہ جوڑے نہیں گئے۔ scripts/download.sh دوبارہ چلائیں۔ یہ نامکمل کام جاری رکھتا ہے اور مکمل مراحل چھوڑ دیتا ہے۔

Fabric کی شناخت غلط انٹرفیس منتخب کرتی ہے

ip -br a سے پتے اور rdma link سے RDMA کی حالت چیک کریں۔ پھر اوپر بیان کردہ واضح head اور worker انٹرفیس، IP، اور HCA متغیرات فراہم کریں۔

ڈاؤن لوڈ سست ہیں

اگر کسی Spark کو انٹرنیٹ تک رسائی صرف Wi-Fi کے ذریعے حاصل ہو تو بہترین اپ لنک والے نوڈ پر چیک پوائنٹ ڈاؤن لوڈ کریں اور fabric کے ذریعے scripts/copy-to-peer.sh استعمال کریں۔

Pi ماڈل نہیں دیکھ سکتا

یقینی بنائیں کہ DSV41_API_KEY اسی شیل میں ایکسپورٹ کی گئی ہے جس سے Pi شروع کیا جا رہا ہے۔ ماڈل فہرست دوبارہ لوڈ کرنے کے لیے Pi کے اندر /model چلائیں۔

Pi پرنٹ موڈ میں غیر معینہ مدت تک انتظار کرتا ہے

جب معیاری اِن پٹ ٹرمینل نہ ہو تو pi -p، stdin سے بھی ڈیٹا پڑھتا ہے۔ اسکرپٹس میں stdin کو /dev/null سے ری ڈائریکٹ کریں:

pi -p < /dev/null

نتیجہ

یہ ریپوزٹری DeepSeek-V4.1-Flash کو دو DGX Sparks پر چلانے کے لیے درکار ماڈل، سرونگ امیج، تقسیم شدہ لانچ اسکرپٹس، میموری تحفظ، توثیقی ٹولز اور Pi انٹیگریشن فراہم کرتی ہے۔ RoCE فیبرک تیار کریں، دونوں نوڈز پر چیک پوائنٹ ڈاؤن لوڈ کرکے اس کی تصدیق کریں، دونوں رینکس لانچ کریں، اسموک ٹیسٹس چلائیں، پھر مطابقت رکھنے والے کلائنٹس یا Pi کو ہیڈ نوڈ کے OpenAI-مطابق اینڈ پوائنٹ کی طرف بھیج دیں۔