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

TensorFold کے ساتھ ایک DGX Spark پر Qwen3.8 Flash Next چلائیں

ایک NVIDIA DGX Spark پر Qwen3.8 Flash Next انسٹال، لانچ، ٹیسٹ اور ٹیون کرنے کا طریقہ سیکھیں۔ اس ٹیوٹوریل میں TensorFold کی تعیناتی اسکرپٹس، OpenAI سے مطابقت رکھنے والی چیٹ درخواستیں، تصاویر اور ویڈیو ان پٹ، استدلال کے کنٹرولز، میموری کی تشکیل، نگرانی اور کارکردگی کی جانچ شامل ہیں۔

TensorFold کے ساتھ ایک DGX Spark پر Qwen3.8 Flash Next چلائیں

جائزہ

یہ منصوبہ ایک NVIDIA DGX Spark سے Qwen3.8 Flash Next کو OpenAI-compatible API کے ذریعے فراہم کرتا ہے۔ یہ TensorFold v0.3.6.3، MTP ڈرافٹ ہیڈ والے MLX 4-bit چیک پوائنٹ، اور پرامپٹ پراسیسنگ کو تیز کرنے کے لیے تیار کردہ پیچز کا مجموعہ استعمال کرتا ہے، جبکہ تیار کردہ متن میں کوئی تبدیلی نہیں کرتا۔

پہلے سے طے شدہ کنفیگریشن پانچ بیک وقت درخواستوں کو سپورٹ کرتی ہے، اور ہر درخواست کے لیے ماڈل کی مکمل 262,144 ٹوکن کی کانٹیکسٹ ونڈو دستیاب ہوتی ہے۔ یہ CUDA پر ماڈل کا اپنا وژن ٹاور بھی لوڈ کرتی ہے، جس سے چیٹ پیغامات میں تصاویر اور ویڈیوز شامل کی جا سکتی ہیں۔

  • API ماڈل ID: Qwen3.8-Flash-Next
  • پہلے سے طے شدہ اینڈ پوائنٹ: http://<spark-address>:8888/v1
  • متوازی اسٹریمز: 5
  • ہر اسٹریم کا کانٹیکسٹ: 262,144 ٹوکنز
  • کل KV پول: 1,310,720 ٹوکنز
  • KV کیش: پہلے سے طے شدہ طور پر int8
  • ان پٹ موڈز: متن، تصاویر، اور ویڈیوز

اہم خصوصیات

طویل کانٹیکسٹ کے ساتھ بیک وقت inference

TensorFold ہر اسٹریم کو اس کا اپنا مکمل کانٹیکسٹ کیش فراہم کرتا ہے۔ پہلے سے طے شدہ ترتیبات میں پانچ اسٹریمز میں سے ہر ایک کو 262,144 ٹوکن کی پرامپٹ اور جواب کی ونڈو ملتی ہے۔ اس کے نتیجے میں int8 KV پول تقریباً 23.4 GiB میموری استعمال کرتا ہے۔

OpenAI-compatible سروس

سرور /v1/models اور /v1/chat/completions جیسے اینڈ پوائنٹس فراہم کرتا ہے۔ OpenAI-compatible کلائنٹس اپنا بیس URL تبدیل کرکے اور ماڈل ID Qwen3.8-Flash-Next منتخب کرکے منسلک ہو سکتے ہیں۔

ملٹی موڈل پرامپٹس

صارف کے پیغامات میں OpenAI طرز کے image_url اور video_url مواد کے حصے شامل کیے جا سکتے ہیں۔ معاون تصویری فارمیٹس میں JPEG، PNG، اور WebP شامل ہیں۔ ویڈیوز میں MP4، WebM، MOV، MKV، یا کوئی دوسرا فارمیٹ استعمال کیا جا سکتا ہے جسے FFmpeg ڈی کوڈ کر سکے۔

پیچ شدہ پرامپٹ پراسیسنگ

شامل کردہ TensorFold پیچز SSD read-ahead، native threaded reads، بہتر sparse-attention block selection، قابلِ تشکیل پرامپٹ چنکس، copy drafts، لائیو ٹوکن کاؤنٹرز، اور Flash Next وژن سپورٹ شامل کرتے ہیں۔ ریپوزٹری کی پیمائش کے مطابق، پرامپٹ پراسیسنگ کے مقابلے میں لیے گئے بغیر پیچ والے ورژن کی نسبت تقریباً 1.7 گنا تیز ہے، جبکہ آزمودہ متنی جوابات بائٹ کے لحاظ سے یکساں رہتے ہیں۔

سسٹم کے تقاضے

ریپوزٹری کلون کرنے سے پہلے میزبان کو تیار کریں:

  • NVIDIA DGX Spark یا 128 GB unified memory والا کوئی دوسرا GB10 سسٹم۔
  • پہلے سے طے شدہ کنفیگریشن شروع کرتے وقت تقریباً 115 GiB خالی میموری۔
  • NVIDIA container runtime کے ساتھ Docker۔
  • ایسا صارف اکاؤنٹ جو docker گروپ میں شامل ہو۔
  • نئے سسٹم پر تقریباً 160 GB خالی ڈسک اسپیس۔
  • اختیاری: تیز تر resumable downloads کے لیے Hugging Face hf CLI۔
  • اختیاری: ~/.cache/huggingface/token میں Hugging Face ٹوکن یا HF_TOKEN ماحول متغیر۔

پہلے سے طے شدہ deployment ایسے DGX Spark کے لیے ہے جو دیگر کاموں سے خالی ہو۔ unified-memory سسٹمز پر میموری ختم ہونے سے معمول کی allocation error ظاہر ہونے کے بجائے مشین منجمد ہو سکتی ہے۔

انسٹالیشن اور پہلی لانچ

1. ریپوزٹری کلون کریں

git clone https://github.com/MiaAI-Lab/Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold.git
cd Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold

2. سرور شروع کریں

./start.sh

پہلی لانچ مکمل سیٹ اپ انجام دیتی ہے۔ دستیاب ہونے پر یہ پہلے سے تیار کردہ container image حاصل کرتی ہے، تقریباً 106 GiB کا چیک پوائنٹ ڈاؤن لوڈ کرتی ہے، اس کی تصدیق کرتی ہے، اور GB10 کے لیے CUDA kernels مرتب کرتی ہے۔ پہلے سے تیار کردہ image تقریباً 11 GB کی ہے، جبکہ چیک پوائنٹ Hugging Face cache میں تقریباً 114 GB جگہ گھیرتا ہے۔

اسٹارٹ اپ کے دوران اسکرپٹ سیٹ اپ کی پیش رفت، سرور لاگز، weights لوڈ ہونے کی پیش رفت، اور میموری کے تخمینے دکھاتی ہے۔ اس کے بعد یہ smoke test چلاتی ہے۔ کامیاب لانچ کے اختتام پر ایک پیغام ظاہر ہوتا ہے کہ Qwen3.8-Flash-Next پورٹ 8888 پر فعال ہے۔

README کے مطابق، بعد کی لانچز مکمل کیے جا چکے سیٹ اپ کے کام چھوڑ دیتی ہیں اور weights لوڈ کرنے میں تقریباً 2.5 منٹ لیتی ہیں۔

3. لانچ کیے بغیر تیاری کریں

اگر آپ سب کچھ پہلے سے ڈاؤن لوڈ اور build کرنا چاہتے ہیں تو چلائیں:

scripts/prepare.sh

container image کو شروع سے دوبارہ build کرنے کے لیے:

scripts/prepare.sh --rebuild

تیاری کا اسکرپٹ Docker، NVIDIA runtime، اور ڈسک اسپیس چیک کرتا ہے۔ اس کے بعد یہ TensorFold image حاصل یا build کرتا ہے، چیک پوائنٹ کو Hugging Face cache میں ڈاؤن لوڈ کرتا ہے، اور tensorfold info کے ذریعے ماڈل کی توثیق کرتا ہے۔

بنیادی API استعمال

دستیاب ماڈل چیک کریں

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

<spark-address> کی جگہ DGX Spark کا hostname یا IP address درج کریں۔ Spark ہی سے کال کرتے وقت آپ 127.0.0.1 استعمال کر سکتے ہیں۔

چیٹ completion درخواست بھیجیں

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

ماڈل پہلے سے جواب دینے سے قبل سوچتا ہے، اور اس کی reasoning جواب کے ٹوکن الاؤنس میں شمار ہوتی ہے۔ max_tokens کو اتنا زیادہ مقرر کریں کہ reasoning اور حتمی جواب دونوں کی گنجائش ہو۔ reasoning reasoning_content میں واپس کی جاتی ہے، جبکہ حتمی جواب content میں ظاہر ہوتا ہے۔

OpenAI-compatible کلائنٹ سے منسلک ہوں

کلائنٹ کو درج ذیل اقدار کے ساتھ کنفیگر کریں:

  • بیس URL: http://<spark-address>:8888/v1
  • ماڈل: Qwen3.8-Flash-Next

API اسٹریمنگ، ٹائپ شدہ ٹول کالز، استدلالی مواد، تصویری ان پٹ، اور ویڈیو ان پٹ کو سپورٹ کرتی ہے۔ ارے جیسے ٹول پیرامیٹرز ان کی متعلقہ JSON اقسام کے ساتھ واپس کیے جاتے ہیں۔

تصاویر بھیجنا

بطور ڈیفالٹ، میڈیا ڈیٹا URLs کے طور پر فراہم کیا جانا ضروری ہے۔ درج ذیل شیل مثال JPEG کو انکوڈ کرتی ہے اور ماڈل سے اس کی وضاحت کرنے کو کہتی ہے:

IMG=$(base64 -w0 photo.jpg)
curl -s http://<spark-address>:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "Qwen3.8-Flash-Next",
    "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
  }'

ایک درخواست میں زیادہ سے زیادہ چار تصاویر شامل ہو سکتی ہیں۔ ہر تصویر زیادہ سے زیادہ 10 MB کی ہو سکتی ہے، جبکہ مجموعی حد 20 MB ہے۔ تمام تصاویر مجموعی طور پر زیادہ سے زیادہ 4,096 ٹوکن استعمال کر سکتی ہیں۔ "detail": "low" مقرر کرنے سے ایک تصویر 256 ٹوکن تک محدود ہو جاتی ہے۔

ویڈیوز بھیجنا

ویڈیوز میں video_url مواد کا حصہ استعمال ہوتا ہے:

{
  "type": "video_url",
  "video_url": {
    "url": "data:video/mp4;base64,..."
  }
}

ہر درخواست میں زیادہ سے زیادہ دو ویڈیوز شامل ہو سکتی ہیں۔ ایک ویڈیو زیادہ سے زیادہ 64 MB کی ہو سکتی ہے، جبکہ مجموعی درخواست کی حد 96 MB اور فوٹیج کی حد ایک گھنٹہ ہے۔ بطور ڈیفالٹ، سرور ہر سیکنڈ میں دو فریم نمونہ لیتا ہے، پوری ویڈیو میں زیادہ سے زیادہ 256 فریم تک، اور ہر درخواست میں زیادہ سے زیادہ 16,384 ویڈیو ٹوکن کی اجازت دیتا ہے۔

تصویری اور ویڈیو پرامپٹس کو سابقہ دوبارہ استعمال کے لیے محفوظ نہیں کیا جاتا۔ وژن فعال کرنے سے عام متنی درخواستیں متاثر نہیں ہوتیں۔

عوامی HTTPS میڈیا URLs کی اجازت دیں

ڈیٹا URLs بطور ڈیفالٹ استعمال ہوتے ہیں۔ سرور کو عوامی HTTPS تصویری اور ویڈیو URLs حاصل کرنے کی اجازت دینے کے لیے اسے درج ذیل کمانڈ کے ساتھ دوبارہ شروع کریں:

VISION_URLS=1 ./start.sh restart

ریموٹ فِچنگ صرف اسی وقت فعال کریں جب یہ آپ کی تعیناتی کی سکیورٹی اور نیٹ ورک پالیسی کے لیے موزوں ہو۔

صرف متنی موڈ چلائیں

صرف متن فراہم کرنے کے لیے وژن ٹاور کو غیر فعال کریں:

VISION=0 ./start.sh restart

صرف متنی موڈ 0.84 GiB وژن ٹاور لوڈ نہیں کرتا اور وژن فعال ہونے کی ڈیفالٹ 2,048 قطاروں کے بجائے 4,096 قطاروں کے پرامپٹ حصے استعمال کرتا ہے۔

سرور کا نظم

معمول کی کارروائیوں کے لیے ریپوزٹری کی ریپر اسکرپٹس استعمال کریں:

./start.sh restart
./stop.sh
docker logs -f qwen38-flash-next-tf
curl -s http://<spark-address>:8888/health
  • ./start.sh restart چلتے ہوئے سرور کو تبدیل کرنے سے پہلے سیٹ اپ اور دلائل کی توثیق کرتا ہے۔
  • ./stop.sh کنٹینر روکتا اور GPU میموری آزاد کرتا ہے۔ فعال درخواستیں منقطع ہو جاتی ہیں۔
  • docker logs -f TensorFold سرور لاگ کی مسلسل نگرانی کرتا ہے۔
  • /health مصروف حالت اور موجودہ ٹوکن کے مجموعے بتاتا ہے۔

اگر سرور پہلے ہی چل رہا ہو تو سادہ ./start.sh اسے برقرار رکھتا ہے۔ systemd جیسے پراسیس مینیجر کے لیے فرنٹ گراؤنڈ موڈ استعمال کریں:

FOREGROUND=1 ./start.sh

کانٹیکسٹ، ہم وقتیت، اور KV درستگی ترتیب دیں

ڈیفالٹس scripts/config.sh میں محفوظ ہیں۔ انہیں ماحولیاتی متغیرات کے ذریعے اووررائیڈ کریں یا start.sh کے بعد TensorFold فلیگز فراہم کریں۔

زیادہ گنجائش کے لیے ہم وقتیت کم کریں

PARALLEL=4 ./start.sh restart

چار int8 اسٹریمز 1,048,576 ٹوکن کا KV پول فراہم کرتی ہیں اور ان کے آغاز کا رپورٹ شدہ تخمینہ تقریباً 97.7 GiB ہے۔

مختصر کانٹیکسٹ ونڈو استعمال کریں

./start.sh restart --context 131072

اضافی کمانڈ لائن دلائل ڈیفالٹس کے بعد tensorfold serve کو منتقل کیے جاتے ہیں، اس لیے انہیں ترجیح حاصل ہوتی ہے۔ دستیاب اختیارات دیکھنے کے لیے ./start.sh --help چلائیں۔

دوسری KV کیش قسم منتخب کریں

KV_DTYPE میں bf16، int8، یا int4 قبول کیے جاتے ہیں:

PARALLEL=6 KV_DTYPE=int4 ./start.sh restart

README کے مطابق int4 آؤٹ پٹس میں معمولی تبدیلی لاتا ہے اور معیار کی پیمائش فراہم نہیں کرتا۔ جب آپ پروجیکٹ کا ڈیفالٹ توازن چاہتے ہوں تو int8 استعمال کریں۔ جب مکمل درستگی والی KV اسٹوریج اسٹریمز کی تعداد سے زیادہ اہم ہو تو bf16 استعمال کریں۔

آغاز کے تحفظ کو سمجھیں

TensorFold دستیاب میموری میں سے RAM کے دسویں حصے کے برابر میزبان ریزرو منہا کر کے اپنا بجٹ شمار کرتا ہے۔ اگر مطلوبہ ترتیب دستیاب گنجائش میں نہ آئے تو وزن لوڈ ہونے سے پہلے آغاز مسترد کر دیا جاتا ہے، اور خرابی ایسے کانٹیکسٹ ونڈو کی نشاندہی کرتی ہے جو موزوں ہونی چاہیے۔

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

ڈیفالٹ سوچ موڈ کی سیمپلنگ قدریں temperature 1.0، top-p 0.95، اور top-k 20 ہیں۔ درخواستیں temperature، top_p، top_k، اور seed کو اووررائیڈ کر سکتی ہیں۔ temperature کو 0 مقرر کرنے سے greedy decoding فعال ہوتی ہے۔

ایک درخواست کے لیے سوچ غیر فعال کریں

{
  "model": "Qwen3.8-Flash-Next",
  "messages": [
    {"role": "user", "content": "Answer in one sentence."}
  ],
  "chat_template_kwargs": {
    "enable_thinking": false
  },
  "max_tokens": 200
}

استدلال کی کوشش مقرر کریں

{
  "chat_template_kwargs": {
    "reasoning_effort": "low"
  }
}

ٹیمپلیٹ "xhigh" بھی قبول کرتا ہے۔ اگر استدلال کی کوشش نہ دی جائے تو ٹیمپلیٹ اپنا medium ڈیفالٹ استعمال کرتا ہے۔ اعلیٰ سطح کا OpenAI طرز کا reasoning_effort فیلڈ نظر انداز کر دیا جاتا ہے، اس لیے اسے chat_template_kwargs کے اندر رکھیں۔

اعلیٰ کارکردگی کی تجاویز

n-gram ٹیبلز SSD پر رکھیں

ڈیفالٹ PLE_ON_SSD=1 کے تحت n-gram ٹیبلز کے 29.8 GiB کو متحدہ میموری میں رکھنے کے بجائے SSD پر رکھا جاتا ہے۔ اس سے KV کیش کے لیے میموری محفوظ رہتی ہے۔ لہٰذا ڈیفالٹ ترتیب کے لیے تیز رفتار مقامی اسٹوریج اہم ہے۔

پرامپٹ حصے کا سائز احتیاط سے ترتیب دیں

ویژن فعال ہونے پر، TENSORFOLD_PREFILL_ROWS کی ڈیفالٹ قدر 2048 ہوتی ہے تاکہ ویژن ٹاور کے لیے جگہ باقی رہے۔ صرف متن والے موڈ میں ڈیفالٹ قدر 4096 ہے۔ README کے مطابق، تقریباً 3,000 ٹوکنز والے پرامپٹس کے لیے 4,096 قطاریں پرامپٹ پراسیسنگ میں تقریباً 2–5% بہتری لا سکتی ہیں، لیکن اس کے لیے تقریباً 0.94 GiB اضافی میموری درکار ہوتی ہے۔

TENSORFOLD_PREFILL_ROWS=4096 ./start.sh restart

اس قدر میں صرف اسی وقت اضافہ کریں جب میموری میں کافی گنجائش دستیاب ہو۔

MTP اور کاپی ڈرافٹس کو کنٹرول کریں

ڈیفالٹ MTP کنفیگریشن ہر راؤنڈ میں زیادہ سے زیادہ چھ ڈرافٹس تیار کرتی ہے اور جب کسی ڈرافٹ کا اعتماد 60% سے کم ہو جائے تو سلسلہ روک دیتی ہے۔ کاپی ڈرافٹ آپٹیمائزیشن TENSORFOLD_MTP_COPY=1 سے فعال ہوتی ہے اور اس کے لیے کم از کم دو متوازی اسٹریمز درکار ہیں۔ اس کا مقصد ان جوابات کو بہتر بنانا ہے جو پہلے کے پرامپٹ متن کو نقل یا ترمیم کرتے ہیں۔

سیریل ریفرنس ڈیکوڈنگ کی درخواست کریں

کسی ایک درخواست کے لیے ڈرافٹنگ کو نظرانداز کرنے اور TensorFold کا ایک وقت میں ایک ٹوکن والے ریفرنس راستے کو استعمال کرنے کے لیے یہ شامل کریں:

{
  "draft": false
}

یہ قیاسی ڈیکوڈنگ کا سیریل ریفرنس سے موازنہ کرتے وقت مفید ہے۔

تیاری کو لازمی یا نظرانداز کریں

PREPARE=1 ./start.sh restart
PREPARE=0 ./start.sh restart
PULL=0 scripts/prepare.sh
  • PREPARE=1 دوبارہ شروع کرنے سے پہلے تیاری کی جانچ لازمی کرتا ہے۔
  • PREPARE=0 تیاری کو نظرانداز کرتا ہے۔
  • PULL=0 پہلے سے تیار رجسٹری امیج آزمانے کے بجائے امیج مقامی طور پر بناتا ہے۔

patches/ میں فائلیں تبدیل کرنے کے بعد امیج دوبارہ بنائیں تاکہ وہ پیچز TensorFold میں شامل ہو جائیں۔

توثیق اور بینچ مارکنگ

ریپوزٹری میں ایسی یوٹیلیٹیز شامل ہیں جو چلتے ہوئے سرور کو کال کرتی ہیں۔ ان کا API URL ڈیفالٹ طور پر http://127.0.0.1:8888 ہے۔

tools/bench.py local-test
tools/needle.py
tools/toolcheck.py
tools/visioncheck.py
  • tools/bench.py کئی پرامپٹ سائزز کی پیمائش کرتا ہے اور ڈیکوڈ کی مختصر جانچ کرتا ہے۔
  • tools/needle.py تقریباً 195,000 ٹوکنز والے پرامپٹ میں پاس فریز چھپاتا ہے اور اس کی بازیابی کی تصدیق کرتا ہے۔
  • tools/toolcheck.py جانچتا ہے کہ ارے ویلیو والا ٹول پیرامیٹر JSON ارے کے طور پر واپس کیا جاتا ہے۔
  • tools/visioncheck.py ایک تیار کردہ تصویر بھیجتا ہے جس میں سرخ دائرہ اور نیلا مربع ہوتا ہے، پھر جانچتا ہے کہ آیا دونوں کو پہچانا گیا ہے۔

کسی دوسری مشین سے جانچنے کے لیے API_URL سیٹ کریں:

API_URL=http://<spark-address>:8888 tools/bench.py remote-test

متوقع کارکردگی

ریپوزٹری ایک DGX Spark پر int8 KV کیشنگ، SSD سے چلنے والی n-gram ٹیبلز، اور MTP ڈرافٹنگ کے ساتھ درج ذیل ڈیکوڈ نتائج رپورٹ کرتی ہے:

  • ایک درخواست: 62.4 ٹوکنز فی سیکنڈ، جبکہ پہلے ٹوکن تک وقت 152 ms ہے۔
  • دو درخواستیں: مجموعی طور پر 90.5 ٹوکنز فی سیکنڈ۔
  • چار درخواستیں: مجموعی طور پر 106.7 ٹوکنز فی سیکنڈ۔
  • پانچ درخواستیں: مجموعی طور پر 119.3 ٹوکنز فی سیکنڈ، یا فی درخواست 27.0 ٹوکنز فی سیکنڈ۔

رپورٹ کردہ پری فل رفتار تقریباً 8,229 ٹوکنز والے پرامپٹ کے لیے 2,503 ٹوکنز فی سیکنڈ سے لے کر 131,110 ٹوکنز والے پرامپٹ کے لیے 2,200 ٹوکنز فی سیکنڈ تک ہے۔ یہ اعداد و شمار ضمانتیں نہیں بلکہ پروجیکٹ کی پیمائشیں ہیں، اور کنفیگریشن، پرامپٹ کی ساخت، میڈیا ان پٹ، اسٹوریج، اور دستیاب میموری کے ساتھ تبدیل ہو سکتے ہیں۔

نتیجہ

یہ ریپوزٹری Qwen3.8 Flash Next کو ایک DGX Spark پر چلانے کے لیے درکار ماڈل، TensorFold رن ٹائم، CUDA سے متعلق سیٹ اپ، کارکردگی کے پیچز، اور آپریشنل اسکرپٹس فراہم کرتی ہے۔ ڈیفالٹ int8، پانچ اسٹریم والی کنفیگریشن سے آغاز کریں، OpenAI کے موافق API کے ذریعے سروس کی تصدیق کریں، پھر اپنے ورک لوڈ اور میموری کی دستیاب گنجائش کے مطابق ہم زمانی، کانٹیکسٹ سائز، ویژن، اور KV پریسیژن کو ایڈجسٹ کریں۔