
شنو كيدير هاد المشروع
هاد الوصفة ديال النشر كتشغّل DeepSeek-V4.1-Flash-1017 فوق جوج ديال NVIDIA DGX Sparks، وكل وحدة فيها 128 GB ديال الذاكرة الموحّدة. كتستعمل محرّك TensorFold الأصلي المكتوب بـ Zig، مع التوازي ديال التنسورات بين رتبة وحدة فكل Spark، وكتوفّر API متوافق مع OpenAI فالمنفذ 8888.
هاد الإعداد كيستعمل checkpoint تجريبي EXL3 بدقة 2.9-bit: Mia-AiLab/DeepSeek-V4.1-Flash-1017-EXL3-EAQ-v1-2.9-bpw. كيدعم نافذة السياق الكبيرة ديال الموديل، إدخال الصور، استدعاء الأدوات، التفكير الاختياري، وDSpark speculative decoding انطلاقاً من كتل المسودة الموجودة فـ checkpoint.
المستودع كيأتمت التحضير، وبناء صورة Docker، وتنزيل checkpoints، وإنشاء rank-cache، وتجهيز العمال، وتشغيل السيرفر، واختبارات smoke، والإيقاف. أول Spark كيدير دور الرأس: كيشغّل API، كينسّق الإعداد، وكيبدا الرتبة 0. ثاني Spark كيشغّل الرتبة 1.
البنية والقيود المهمة
TensorFold كيشغّل عائلة BertholomusAI dsv41 مع التوازي ديال التنسورات مضبوط على جوج. الرتبتان كيتواصلو عبر رابط مباشر ConnectX-7. الرأس كيقرا حركة API، بينما جوج Sparks كيحتافظو تقريباً بـ 98 GiB من أوزان الموديل فالذاكرة.
الـ checkpoint الحجم ديالو تقريباً 196 GiB ومقسّم على 39 shard. النشر كيحتاج حتى لجوج الجداول ديال Engram بلا quantization، والحجم ديالهم تقريباً 203 GB. خاص جداول Engram يتنسخو فالقرص المحلي ديال كل Spark. قرايتهم عبر NFS تقدر تنقص بزاف من أداء prefill وdecode، حيث عملية decode كتدير بزاف ديال القراءات العشوائية بحجم 4 KiB.
الموديل يقدر تقنياً يستعمل نافذة ديال 1,048,576 token، ولكن الذاكرة المتوفرة فالرأس هي الحد العملي. فالرأس اللي كيشغّل خدمات أخرى ديال سطح المكتب والتطوير، الـ README كيوصي بخلي CONTEXT فـ 524288 ولا أقل، إلا إلا تحررات ذاكرة إضافية.
متطلبات العتاد والبرمجيات
- جوج NVIDIA DGX Sparks أو أنظمة GB10 مكافئة، وكل وحدة فيها 128 GB ديال الذاكرة الموحّدة.
- وصلة QSFP مباشرة بين منافذ ConnectX-7.
- عناوين IPv4 فالرابط المباشر، مع اتصال خدام وRoCE v2 GID.
- نفس الحد الأقصى لساعة GPU فالنظامين بجوج. الـ README كيوصي بالتأكد من الساعات باستعمال
nvidia-smi -q -d CLOCKواستعمالnvidia-smi -lgc 0,2200ملي يكون مناسب. - SSH بالمفاتيح من الرأس للعامل.
- Docker مع NVIDIA container runtime فالنظامين بجوج، والمستخدم ديالك داخل مجموعة
docker. gitوpython3وHugging Face CLI فالرأس.- مساحة كافية للـ checkpoint، وجداول Engram، وملفات أوزان الرتب، وصورة Docker، والـ caches. الرأس كيحتاج تقريباً 505 GB والعامل تقريباً 310 GB فالإعداد العادي.
الرابط المباشر يقدر يبان كجوج ديال أجهزة الشبكة وجوج ديال أجهزة RoCE فكل Spark. كوّن الجهازين بجوج بعناوين على الرابط واستعمل نفس 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 ولا التخزين المحلي
افتراضياً، العامل كيركّب cache ديال Hugging Face ديال الرأس للقراءة فقط عبر NFS. فالرأس، ركّب سيرفر NFS وصدّر الـ cache:
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 client ديال المضيف، بحال nfs-common فـ Ubuntu. سكريبت التحضير كينشئ volume ديال Docker عبر NFS للقراءة فقط وكيشيك واش العامل يقدر يشوف الملفات المطلوبة.
لعزل أحسن، ولا ملي ما يكونش NFS مناسب، حط نسخة محلية من الـ cache المطلوبة فكل Spark. عيّن HF_CACHE للشجرة المحلية، وعيّن NFS_VOLUME لمسار المضيف المقابل، وخلي HEAD_NFS_SERVER خاوي، وعيّن PREPARE=0. الـ cache المحلية خاصها تحتوي على الملفات الصغيرة ديال checkpoint، وvision shard model-00039-of-00039، والمجلد model/ اللي غادي يتخدم، والـ kit، وخريطة التوكنات، وملف أوزان الرتبة المناسب.
نسخ المستودع وتهيئة الإعداد
نسخ المستودع فالرأس وأنشئ ملف الإعداد المحلي:
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.shعدّل scripts/local.sh وعيّن على الأقل WORKER لهدف SSH ديال العامل. إلا كان مسار SSH ديال العامل مختلف على مسار fabric المباشر، عيّن FABRIC_PEER لعنوان ConnectX-7 ديال العامل.
معظم الإعدادات محددة فـ scripts/config.sh. من بين القيم الشائعة:
MODEL_IDوMODEL_REVISIONللـ checkpoint EXL3 المثبّت.CONTEXT، والقيمة الافتراضية ديالو هي1048576.PARALLEL، والقيمة الافتراضية ديالو هي أربع طلبات متزامنة.HF_TOKEN، إلا كانت مصادقة Hugging Face ضرورية.ABLIT، اللي كيختار بين الوضع العادي ووضع abliterated.
دير فحص تجريبي قبل التشغيل
استعمل وضع dry-run باش تشوف الرابط المكتشف وأوامر Docker بلا ما تدير تغييرات:
DRY_RUN=1 ./start.shالمستودع كيدير حتى فحوصات ديال صياغة الشيل وكيحقّق من الشروط المتوقعة ديال الشبكة، وDocker، وGPU، وSSH، والذاكرة فمرحلة التحضير. الإقلاع كيرفض يكمل إلا ما كانتش الذاكرة الدنيا المتاحة المكوّنة، MIN_AVAIL_GIB، متوفرة فالجوج ديال Sparks.
شغّل السيرفر بجوج الرتب
شغّل النشر كامل من الـhead:
./start.shفأول تشغيل، السكريبت كيبني صورة TensorFold، كيحمّل الـcheckpoint وجداول Engram، كيحضّر جداول RoPE وبيانات توجيه الصور، كينشئ ملفات التوكن والرتب، كيضبط التخزين ديال الـworker، وكيشغّل الرتبتين بجوج. بناء صورة Zig كياخذ تقريباً ست دقايق فـSpark وكيعطي صورة بحوالي 24.9 GB.
من بعد الإقلاع، السكريبت كيتسنى الـAPI وكيشغّل اختباراً سريعاً. التشغيل الناجح كيعطي بأن DeepSeek-V4.1-Flash-1017 خدام فالمنفذ 8888.
من أوامر دورة الحياة المفيدة:
./start.sh restart
./stop.shاستعمل restart من بعد ما تبدّل شي إعداد ديال الخدمة. سكريبت الإيقاف كيحفظ السجلات مضغوطة، وكيخلي أحدث السجلات حسب LOG_KEEP، قبل ما يحيد الحاويات.
عيّط على API المتوافق مع OpenAI
خاص العملاء يستعملو العنوان ديال الـhead مع المسار /v1 ومعرّف النموذج بالضبط DeepSeek-V4.1-Flash-1017. مثلاً، يمكن تهيّأ عميل Python متوافق مع OpenAI بهاد الشكل:
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 للاستدلال والجواب النهائي، أو ضبط إعدادات التفكير والاستدلال المناسبة فالبيئة.
حقّق من النصوص، والأدوات، والصور، والطلبات الطويلة
المستودع فيه أدوات للتحقق من الـendpoint وهو خدام:
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-tfاستعمل الوضع المجرّد
الإعداد الافتراضي كيستعمل checkpoint Mia EAQ 2.9-bit الأصلي. ملي كتضبط ABLIT=1، كيبقى داك الـcheckpoint وكيطبّق عليه Keys overlay المطابق من drowzeys/keys-DeepSeek-V4.1-Flash-1017-Abliterated.
هاد مستودع محمي فـHugging Face. قبل التحضير، وافق على شروط المستودع ودخل بحساب عندو الولوج:
hf auth login
ABLIT=1 ./scripts/prepare.sh
ABLIT=1 ./start.sh restartوبديل آخر، عطِ token بلا ما يتحط فالسجل ديال الشيل:
read -rsp 'Hugging Face read token: ' HF_TOKEN; echo
export HF_TOKEN
ABLIT=1 ./start.sh restart
unset HF_TOKENالـoverlay مربوط بـABLIT_REVISION. التحضير كينشئ مسارات cache منفصلة وcacheات منفصلة للرتب باش ما يتخلطوش بيانات الوضع الأصلي والوضع المجرّد بالغلط. الـshards المعاودة كتابتها تقدر تحتاج مساحة قريبة من مساحة checkpoint آخر، زيادة على الـoverlay وملفات الرتب. رجع للوضع الأصلي بهاد الأمر:
ABLIT=0 ./start.sh restartالـREADME كيصرّح بوضوح بلّي نتائج الأداء والصحة ديال الوضع الأصلي ما كتثبتش الوضع المجرّد على هاد المحرك. وخلي نفس إعداد ABLIT فالتحضير والإقلاع.
إرشادات الأداء والضبط
القياسات المبلّغ عليها باستعمال مطالب فيها نثر حقيقي وكود وصلات تقريباً لـ74.9 token فالثانية لتيار نثري واحد و109.9 token فالثانية لتيار كود واحد. مع أربعة تيارات، الإنتاجية الإجمالية وصلات تقريباً لـ130.0 token فالثانية للنثر و155.5 token فالثانية للكود. الـprefill قاس تقريباً بين 2,000 و2,180 token فالثانية عبر مطالب من 8K حتى 256K token.
النتائج كتتبدّل حسب محتوى الطلب، وسرعة GPU، والأحمال المتزامنة، والتخزين، والضغط على الذاكرة. اختبارات الكلمات العشوائية كتنتج مسودات أقل فعالية من النثر أو الكود العادي، لذلك ما خاصش يتعتابرو أرقام فك الترميز الأقل حدّاً عاماً للمحرك.
- خلي جداول Engram فالقرص المحلي فالجوج ديال Sparks.
- استعمل حدود متطابقة لسرعة GPU حيث رتب tensor-parallel كتتزامن بشكل متكرر.
- خلي
CONTEXTداخل سعة ذاكرة الـhead، خصوصاً ملي كيكون كيشغّل برامج أخرى. - استعمل
PARALLELبحذر ملي كتخدم بمطالب طويلة أو بعدة مستخدمين متزامنين. - استعمل
DRY_RUN=1قبل ما تبدّل إعدادات الشبكة أو النشر.
مفاتيح وتعديلات اختيارية للمحرك
المستودع فيه تعديلات للمحرك تحت zig/patches/. راه مطفّيين افتراضياً وكيتدوزو للرتبتين بجوج عبر start.sh. الـREADME كيذكر بلّي الصورة الافتراضية تجرّبات باش تعطي نفس hashes ديال التوكن عبر مجموعة من سيناريوهات الطلب والتزامن.
TF_DS_ENGRAM_LANES=2 كيمكّن من حلقة I/O تانية لقراية Engram، ولكن القياسات بيّنت باللي كان أبطأ فالتخزين اللي تجرّب. TF_DS_IDX_SPLIT=1 كيفرّق صفوف prefill indexer بين الرتب، ولكن ما بان حتى تحسّن قابل للقياس فالزوج اللي تجرّب. إلا ما توافقوش الرتب على هاد الإعداد، يقدر الزوج يعلّق، وداكشي علاش كيبقى معطّل افتراضياً.
الـ patch 0005 كيحسّن التناوب ديال prompt-pass، باش الـ streams الموجودة تستقبل جولات ديال decode فاش كيتدار prefetch ديال prompt طويل آخر. السلوك ديالو تقدر تعدّلو باستعمال PREFILL_INTERLEAVE_MS. الـ patch 0006 كيحافظ على حالات الـ prompt بالنسبة للمدخلات ديال الصور إلا ما تستعملاتش TF_DS_IMAGE_CACHE=0 لتعطيل هاد السلوك.
راقب الذاكرة وتفادى أحجام السياق غير الآمنة
الذاكرة هي القيد التشغيلي الرئيسي. الـ README كيشير باللي سياق بحجم 512K كان عملي فـ head فيه تقريباً 6 GiB مستعملة من طرف برامج أخرى، بينما إعداد 655K يقدر يهبط تحت حدّ حماية الذاكرة ملي كتزاد المحادثة. كاين watchdog حيث Spark يقدر يجمّد ملي كيتوصل لقاع الذاكرة أثناء prompts طوال ومتزامنين بزاف.
بدا بالقيمة الافتراضية ديال CONTEXT ولا بقيمة محافظة، وجرّب باستعمال workload الحقيقي ديالك، وراقب الذاكرة الحرة خلال السجلّات الطويلة. الذاكرة الحرة تقدر تنقص مع كبر المحادثة المخزّنة مؤقتاً، حتى إلا تشرّج الموديل بنجاح.
الخلاصة
هاد الـ repository كيوفّر طريقة مؤتمتة باش توزّع DeepSeek-V4.1-Flash-1017 على جوج DGX Sparks مربوطين مباشرة. منين كتكون الـ hardware، وشبكة RoCE، وSSH، وDocker، والتخزين، والولوج لـ Hugging Face واجدين، كيتكلف start.sh بالإعداد على مراحل وكيعرّض endpoint مألوف ومتوافق مع OpenAI.
باش يكون النشر موثوق، عطِ الأولوية للتخزين المحلي ديال Engram، ولسرعات GPU متطابقة، ولحجم سياق محافظ، وللتحقق الدقيق من workloads ديال الصور والأدوات والسياق الطويل. الـ overlay والـ engine switches ديال abliterated متوفرين للتجارب، ولكن قياسات الأداء والصحة الموثقة كتطبّق بالأساس على checkpoint الأصلي وإعداد الـ engine الافتراضي.
