
یہ منصوبہ کیا کرتا ہے
یہ تعیناتی نسخہ DeepSeek-V4.1-Flash-1017 کو دو NVIDIA DGX Sparks سے پیش کرتا ہے، جن میں سے ہر ایک میں 128 GB کی متحد میموری ہے۔ یہ TensorFold کا مقامی Zig انجن استعمال کرتا ہے، جس میں ہر Spark پر ایک رینک کے ذریعے ٹینسر متوازی کاری کی جاتی ہے، اور پورٹ 8888 پر OpenAI سے مطابقت رکھنے والی API فراہم کرتا ہے۔
اس سیٹ اپ میں تجرباتی 2.9-bit EXL3 چیک پوائنٹ Mia-AiLab/DeepSeek-V4.1-Flash-1017-EXL3-EAQ-v1-2.9-bpw استعمال ہوتا ہے۔ یہ ماڈل کی بڑی کانٹیکسٹ ونڈو، تصویری ان پٹ، ٹول کالنگ، اختیاری تھنکنگ، اور چیک پوائنٹ کے ڈرافٹ بلاکس سے DSpark قیاسی ڈیکوڈنگ کو سپورٹ کرتا ہے۔
یہ ریپوزٹری تیاری، Docker امیج کی تعمیر، چیک پوائنٹ ڈاؤن لوڈ، رینک کیش کی تخلیق، ورکر سیٹ اپ، سرور اسٹارٹ اپ، اسموک ٹیسٹس، اور شٹ ڈاؤن کو خودکار بناتی ہے۔ پہلا Spark ہیڈ کے طور پر کام کرتا ہے: یہ API چلاتا، سیٹ اپ کو مربوط کرتا، اور رینک 0 شروع کرتا ہے۔ دوسرا Spark رینک 1 چلاتا ہے۔
آرکیٹیکچر اور اہم پابندیاں
TensorFold BertholomusAI dsv41 فیملی کو دو کی ٹینسر متوازی کاری کے ساتھ چلاتا ہے۔ دونوں رینکس براہِ راست ConnectX-7 لنک کے ذریعے رابطہ کرتے ہیں۔ ہیڈ API ٹریفک پڑھتا ہے، جبکہ دونوں Sparks تقریباً 98 GiB ماڈل وزن میموری میں رکھتے ہیں۔
چیک پوائنٹ تقریباً 196 GiB کا ہے اور اسے 39 شارڈز میں تقسیم کیا گیا ہے۔ تعیناتی کے لیے Engram کی دو غیر کوانٹائزڈ ٹیبلز بھی درکار ہیں، جو تقریباً 203 GB جگہ لیتی ہیں۔ Engram ٹیبلز کو دونوں Sparks کی مقامی ڈسک پر کاپی کرنا چاہیے۔ انہیں NFS کے ذریعے پڑھنے سے پری فل اور ڈیکوڈ کارکردگی نمایاں طور پر کم ہو سکتی ہے، کیونکہ ڈیکوڈنگ میں بہت سی بے ترتیب 4 KiB ریڈز ہوتی ہیں۔
ماڈل تکنیکی طور پر 1,048,576 ٹوکن ونڈو استعمال کر سکتا ہے، لیکن ہیڈ پر دستیاب میموری عملی حد ہے۔ دوسرے ڈیسک ٹاپ اور ڈویلپمنٹ سروسز چلانے والے ہیڈ پر README تجویز کرتی ہے کہ CONTEXT کو 524288 یا اس سے کم رکھا جائے، جب تک مزید میموری خالی نہ کی جائے۔
ہارڈویئر اور سافٹ ویئر کے تقاضے
- دو NVIDIA DGX Sparks یا مساوی GB10 سسٹمز، جن میں سے ہر ایک میں 128 GB متحد میموری ہو۔
- ConnectX-7 پورٹس کے درمیان براہِ راست QSFP کنکشن۔
- براہِ راست لنک پر IPv4 پتے، فعال رابطہ، اور کام کرنے والا RoCE v2 GID۔
- دونوں سسٹمز پر GPU کلاک کی ایک جیسی حد۔ README کلاک چیک کرنے کے لیے
nvidia-smi -q -d CLOCKاور ضرورت کے مطابقnvidia-smi -lgc 0,2200استعمال کرنے کی تجویز دیتی ہے۔ - ہیڈ سے ورکر تک کلید پر مبنی SSH۔
- دونوں سسٹمز پر NVIDIA کنٹینر رن ٹائم کے ساتھ Docker، اور آپ کا صارف
dockerگروپ میں شامل ہو۔ - ہیڈ پر
git،python3، اور Hugging Face CLI۔ - چیک پوائنٹ، Engram ٹیبلز، رینک وزن فائلوں، Docker امیج، اور کیشز کے لیے کافی اسٹوریج۔ معیاری ترتیب میں ہیڈ کو تقریباً 505 GB اور ورکر کو تقریباً 310 GB درکار ہیں۔
براہِ راست لنک ہر Spark پر دو نیٹ ورک ڈیوائسز اور دو RoCE ڈیوائسز کے طور پر ظاہر ہو سکتا ہے۔ دونوں ریلز کو لنک پر پتے دے کر دونوں سسٹمز پر ایک ہی MTU استعمال کریں۔
نیٹ ورک اور SSH کنکشن تیار کریں
ConnectX-7 انٹرفیسز کو نجی سب نیٹ کے پتے دیں۔ مثال کے طور پر، README میں 192.0.2.1/24 اور 192.0.2.2/24 جیسے پتے استعمال کیے گئے ہیں۔ تصدیق کریں کہ دونوں سسٹمز مطلوبہ لنک کے ذریعے ایک دوسرے کو ping کر سکتے ہیں۔
ہیڈ پر ورکر کے لیے SSH کلید انسٹال کریں اور غیر تعاملی رسائی کی تصدیق کریں:
ssh-copy-id user@<worker>
ssh -o BatchMode=yes user@<worker> trueمقامی کنفیگریشن فائل میں ورکر کا SSH ہدف اور fabric ایڈریس مقرر کریں۔ ورکر کو اس ریپوزٹری کی نقل درکار نہیں۔
NFS یا مقامی اسٹوریج ترتیب دیں
بطور ڈیفالٹ، ورکر ہیڈ کے Hugging Face کیشے کو NFS کے ذریعے صرف پڑھنے کے لیے ماؤنٹ کرتا ہے۔ ہیڈ پر NFS سرور انسٹال کریں اور کیش برآمد کریں:
sudo apt install nfs-kernel-server
echo "$HOME/.cache/huggingface <worker-CX7-address>(ro,no_subtree_check)" | sudo tee -a /etc/exports
sudo exportfs -raورکر کو میزبان کا NFS کلائنٹ مددگار، مثلاً Ubuntu پر nfs-common، درکار ہو سکتا ہے۔ تیاری اسکرپٹ صرف پڑھنے کے لیے Docker NFS والیوم بناتی ہے اور جانچتی ہے کہ ورکر مطلوبہ فائلیں دیکھ سکتا ہے۔
بہتر علیحدگی کے لیے، یا جب NFS موزوں نہ ہو، ہر Spark پر مطلوبہ کیش کی مقامی نقل رکھیں۔ HF_CACHE کو مقامی ٹری پر مقرر کریں، NFS_VOLUME کو متعلقہ میزبان پاتھ پر مقرر کریں، HEAD_NFS_SERVER کو خالی رہنے دیں، اور PREPARE=0 مقرر کریں۔ مقامی کیش میں چیک پوائنٹ کی چھوٹی فائلیں، وژن شارڈ model-00039-of-00039، پیش کیا جانے والا model/ فولڈر، کٹ، ٹوکن میپ، اور مناسب رینک وزن فائل شامل ہونی چاہیے۔
ریپوزٹری کلون اور ترتیب دیں
ہیڈ پر ریپوزٹری کلون کریں اور مقامی کنفیگریشن فائل بنائیں:
git clone https://github.com/MiaAI-Lab/DeepSeek-v4.1-Flash-1017-2x-DGX-Sparks.git
cd DeepSeek-v4.1-Flash-1017-2x-DGX-Sparks
cp scripts/local.sh.example scripts/local.shscripts/local.sh میں کم از کم WORKER کو ورکر کے SSH ہدف پر مقرر کریں۔ اگر ورکر کا SSH راستہ براہِ راست fabric راستے سے مختلف ہو تو FABRIC_PEER کو ورکر کے ConnectX-7 پتے پر مقرر کریں۔
زیادہ تر ترتیبات scripts/config.sh میں متعین ہیں۔ عام اقدار میں شامل ہیں:
- پِن کیے گئے EXL3 چیک پوائنٹ کے لیے
MODEL_IDاورMODEL_REVISION۔ CONTEXT، جس کی ڈیفالٹ قدر1048576ہے۔PARALLEL، جو بیک وقت چار درخواستوں پر ڈیفالٹ ہے۔HF_TOKEN، اگر Hugging Face توثیق درکار ہو۔ABLIT، جو اسٹاک یا abliterated موڈ منتخب کرتا ہے۔
شروع کرنے سے پہلے ڈرائی رن چیک کریں
تبدیلیاں کیے بغیر معلوم شدہ لنک اور Docker کمانڈز کا معائنہ کرنے کے لیے ڈرائی رن موڈ استعمال کریں:
DRY_RUN=1 ./start.shریپوزٹری تیاری کے دوران شیل سنٹیکس چیکس بھی انجام دیتی ہے اور متوقع نیٹ ورک، Docker، GPU، SSH اور میموری کی شرائط کی توثیق کرتی ہے۔ اسٹارٹ اپ اس وقت تک جاری نہیں ہوتا جب تک دستیاب میموری کی تشکیل شدہ کم از کم مقدار، MIN_AVAIL_GIB، دونوں Sparks پر دستیاب نہ ہو۔
دو رینک والا سرور شروع کریں
ہیڈ سے مکمل ڈپلائمنٹ شروع کریں:
./start.shپہلی بار اسکرپٹ TensorFold امیج بناتا ہے، چیک پوائنٹ اور Engram ٹیبلز ڈاؤن لوڈ کرتا ہے، RoPE ٹیبلز اور امیج روٹنگ ڈیٹا تیار کرتا ہے، ٹوکن اور رینک فائلیں بناتا ہے، ورکر کی اسٹوریج ترتیب دیتا ہے، اور دونوں رینکس شروع کرتا ہے۔ Spark پر Zig امیج بنانے میں تقریباً چھ منٹ لگتے ہیں اور اس سے تقریباً 24.9 GB کی امیج تیار ہوتی ہے۔
اسٹارٹ اپ کے بعد اسکرپٹ API کا انتظار کرتا ہے اور اسموک ٹیسٹ چلاتا ہے۔ کامیاب لانچ پر اطلاع ملتی ہے کہ DeepSeek-V4.1-Flash-1017 پورٹ 8888 پر فعال ہے۔
مفید لائف سائیکل کمانڈز میں شامل ہیں:
./start.sh restart
./stop.shسرونگ کی کوئی ترتیب تبدیل کرنے کے بعد restart استعمال کریں۔ کنٹینرز ہٹانے سے پہلے اسٹاپ اسکرپٹ کمپریسڈ لاگز محفوظ کرتا ہے اور LOG_KEEP کے مطابق تازہ ترین لاگز برقرار رکھتا ہے۔
OpenAI-compatible API کو کال کریں
کلائنٹس کو ہیڈ کا ایڈریس، /v1 پاتھ اور عین ماڈل شناخت کنندہ DeepSeek-V4.1-Flash-1017 استعمال کرنا چاہیے۔ مثال کے طور پر، OpenAI-compatible Python کلائنٹ کو یوں ترتیب دیا جا سکتا ہے:
from openai import OpenAI
client = OpenAI(
base_url="http://<head-address>:8888/v1",
api_key="unused"
)
response = client.chat.completions.create(
model="DeepSeek-V4.1-Flash-1017",
messages=[
{"role": "user", "content": "Explain tensor parallelism briefly."}
],
max_tokens=512
)
print(response.choices[0].message.content)درخواست کے ذریعے سوچنے کی صلاحیت غیر فعال نہ کی جائے تو ماڈل جواب دینے سے پہلے سوچتا ہے۔ استدلال اور حتمی جواب کے لیے کافی max_tokens مختص کریں، یا ماحول میں متعلقہ thinking اور reasoning ترتیبات تشکیل دیں۔
متن، ٹولز، تصاویر اور طویل پرامپٹس کی توثیق کریں
ریپوزٹری میں چلنے والے اینڈ پوائنٹ کی جانچ کے لیے توثیقی یوٹیلیٹیز شامل ہیں:
python3 tools/validate.py http://<head-address>:8888 --model DeepSeek-V4.1-Flash-1017
API_URL=http://<head-address>:8888 python3 tools/toolcheck.pyتوثیقی سوٹ متن، سوچنے کی صلاحیت، ٹولز، امیج ان پٹ اور طویل پرامپٹس کا احاطہ کرتا ہے۔ README میں بتایا گیا ہے کہ رپورٹ کیے گئے ہارڈویئر جوڑے پر امیج ان پٹ اور توثیقی ٹول کی مکمل جانچ نہیں ہوئی، اس لیے ان ٹیسٹس کو ضمانت کے بجائے ڈپلائمنٹ چیکس سمجھیں۔
مزید تشخیص کے لیے رینک لاگز دیکھیں:
docker logs -f dsv41-1017-exl3-tf
ssh <worker> docker logs -f dsv41-1017-exl3-tfAbliterated موڈ استعمال کریں
پہلے سے طے شدہ ترتیب اسٹاک Mia EAQ 2.9-bit چیک پوائنٹ استعمال کرتی ہے۔ ABLIT=1 ترتیب دینے سے یہی چیک پوائنٹ برقرار رہتا ہے اور drowzeys/keys-DeepSeek-V4.1-Flash-1017-Abliterated سے مطابقت رکھنے والا Keys اوورلے لاگو ہوتا ہے۔
یہ ایک محدود رسائی والا Hugging Face ریپوزٹری ہے۔ تیاری سے پہلے ریپوزٹری کی شرائط قبول کریں اور ایسے اکاؤنٹ سے تصدیق کریں جسے رسائی حاصل ہو:
hf auth login
ABLIT=1 ./scripts/prepare.sh
ABLIT=1 ./start.sh restartمتبادل طور پر، ٹوکن کو شیل ہسٹری میں محفوظ کیے بغیر فراہم کریں:
read -rsp 'Hugging Face read token: ' HF_TOKEN; echo
export HF_TOKEN
ABLIT=1 ./start.sh restart
unset HF_TOKENاوورلے کو ABLIT_REVISION کے ذریعے پن کیا گیا ہے۔ تیاری کے دوران الگ کیش پاتھز اور رینک کیشز بنائے جاتے ہیں تاکہ اسٹاک اور abliterated ڈیٹا غیر ارادی طور پر نہ ملے۔ دوبارہ لکھی گئی shards کے لیے اوورلے اور رینک فائلوں کے علاوہ ایک اور چیک پوائنٹ جتنی جگہ درکار ہو سکتی ہے۔ اسٹاک موڈ پر واپس آنے کے لیے یہ چلائیں:
ABLIT=0 ./start.sh restartREADME واضح طور پر بیان کرتی ہے کہ اسٹاک کی کارکردگی اور درستگی کے نتائج اس انجن پر abliterated موڈ کی توثیق نہیں کرتے۔ تیاری اور اسٹارٹ اپ کے لیے ایک ہی ABLIT ترتیب برقرار رکھیں۔
کارکردگی اور ٹیوننگ کی رہنمائی
حقیقی نثر اور کوڈ پرامپٹس کے ساتھ رپورٹ کی گئی پیمائشوں میں ایک نثری اسٹریم کے لیے تقریباً 74.9 ٹوکن فی سیکنڈ اور ایک کوڈ اسٹریم کے لیے 109.9 ٹوکن فی سیکنڈ حاصل ہوئے۔ چار اسٹریمز کے ساتھ مجموعی تھروپٹ نثر کے لیے تقریباً 130.0 ٹوکن فی سیکنڈ اور کوڈ کے لیے 155.5 ٹوکن فی سیکنڈ تک پہنچا۔ 8K سے 256K ٹوکن تک کے پرامپٹس میں پری فل تقریباً 2,000 سے 2,180 ٹوکن فی سیکنڈ رہا۔
نتائج کا انحصار پرامپٹ کے مواد، GPU کلاک، بیک وقت چلنے والے کاموں، اسٹوریج اور میموری کے دباؤ پر ہوتا ہے۔ بے ترتیب الفاظ کے بینچ مارکس عام نثر یا کوڈ کے مقابلے میں کم مؤثر ڈرافٹ تیار کرتے ہیں، اس لیے ان کے کم ڈیکوڈ اعداد کو عمومی انجن کی حد نہ سمجھیں۔
- دونوں Sparks پر Engram ٹیبلز مقامی ڈسک پر رکھیں۔
- مطابقت رکھنے والی GPU کلاک حدود استعمال کریں کیونکہ ٹینسر متوازی رینکس بار بار ہم وقت ساز ہوتے ہیں۔
CONTEXTکو ہیڈ کی میموری گنجائش کے اندر رکھیں، خاص طور پر جب وہاں دوسرا سافٹ ویئر چل رہا ہو۔- طویل پرامپٹس یا کئی بیک وقت صارفین کو سروس دیتے وقت
PARALLELکا محتاط استعمال کریں۔ - نیٹ ورکنگ یا ڈپلائمنٹ کی ترتیبات تبدیل کرنے سے پہلے
DRY_RUN=1استعمال کریں۔
اختیاری انجن سوئچز اور پیچز
ریپوزٹری میں zig/patches/ کے تحت انجن پیچز شامل ہیں۔ یہ پہلے سے غیر فعال ہوتے ہیں اور start.sh کے ذریعے دونوں رینکس کو فراہم کیے جاتے ہیں۔ README کے مطابق پہلے سے طے شدہ امیج کو مختلف پرامپٹ اور کنکرنسی منظرناموں میں یکساں ٹوکن ہیشز کے لیے ٹیسٹ کیا گیا ہے۔
TF_DS_ENGRAM_LANES=2 Engram ریڈز کے لیے دوسری I/O رِنگ فعال کرتا ہے، لیکن پیمائش سے ظاہر ہوا کہ آزمودہ اسٹوریج پر یہ زیادہ سست تھا۔ TF_DS_IDX_SPLIT=1 پری فِل انڈیکسر کی قطاروں کو رینکس کے درمیان تقسیم کرتا ہے، لیکن آزمودہ جوڑے پر کوئی قابلِ پیمائش فائدہ نہیں دکھا سکا۔ اگر رینکس اس ترتیب پر متفق نہ ہوں تو جوڑا ہینگ ہو سکتا ہے، اس لیے یہ ڈیفالٹ طور پر غیر فعال رہتا ہے۔
پیچ 0005 پرامپٹ پاس انٹرلیونگ کو بہتر بناتا ہے تاکہ کسی دوسرے طویل پرامپٹ کی پری فِچنگ کے دوران موجودہ اسٹریمز کو ڈی کوڈ راؤنڈز ملتے رہیں۔ اس کے رویے کو PREFILL_INTERLEAVE_MS کے ذریعے ایڈجسٹ کیا جا سکتا ہے۔ پیچ 0006 امیج اِن پٹس کے لیے پرامپٹ اسٹیٹس محفوظ رکھتا ہے، بشرطیکہ TF_DS_IMAGE_CACHE=0 استعمال کرکے اس رویے کو غیر فعال نہ کیا گیا ہو۔
میموری کی نگرانی کریں اور غیر محفوظ کانٹیکسٹ سائز سے گریز کریں
میموری بنیادی عملی رکاوٹ ہے۔ README کے مطابق، ایسے ہیڈ پر 512K کانٹیکسٹ قابلِ عمل تھا جس پر تقریباً 6 GiB میموری دوسرے سافٹ ویئر کے زیرِ استعمال تھی، جبکہ 655K کنفیگریشن میں گفتگو بڑھنے کے ساتھ میموری گارڈ سے نیچے جانے کا امکان تھا۔ واچ ڈاگ شامل کیا گیا ہے، کیونکہ بھاری اور بیک وقت طویل پرامپٹس کے دوران میموری کی کم از کم حد تک پہنچنے پر Spark منجمد ہو سکتا ہے۔
ڈیفالٹ یا محتاط CONTEXT قدر سے آغاز کریں، اپنے حقیقی ورک لوڈ کے ساتھ جانچ کریں، اور طویل ہسٹریز کے دوران خالی میموری کی نگرانی کریں۔ کیش کی گئی گفتگو بڑھنے کے ساتھ خالی میموری کم ہو سکتی ہے، چاہے ماڈل کامیابی سے لوڈ ہو گیا ہو۔
نتیجہ
یہ ریپوزٹری DeepSeek-V4.1-Flash-1017 کو براہِ راست منسلک دو DGX Sparks پر تقسیم کرنے کا خودکار طریقہ فراہم کرتی ہے۔ ہارڈویئر، RoCE نیٹ ورکنگ، SSH، Docker، اسٹوریج اور Hugging Face تک رسائی تیار ہونے کے بعد، start.sh متعدد مراحل پر مشتمل سیٹ اپ سنبھالتا ہے اور مانوس OpenAI-compatible اینڈ پوائنٹ فراہم کرتا ہے۔
قابلِ اعتماد تعیناتی کے لیے مقامی Engram اسٹوریج، یکساں GPU کلاک، محتاط کانٹیکسٹ سائز، اور امیج، ٹول اور طویل کانٹیکسٹ ورک لوڈز کی احتیاط سے توثیق کو ترجیح دیں۔ ابلیٹریٹڈ اوورلے اور انجن سوئچز تجربات کے لیے دستیاب ہیں، لیکن دستاویزی کارکردگی اور درستگی کی پیمائشیں بنیادی طور پر اسٹاک چیک پوائنٹ اور ڈیفالٹ انجن کنفیگریشن پر لاگو ہوتی ہیں۔
