چیت‌شیت

مقصدهای استنتاج روی لبه

Edge Inference Targets

انتخاب مقصد لبه و فرمت کوانتیزه‌سازی. سقف پهنای باند، فرمت‌ها، مراحل خروجی گرفتن و اندازه‌گیری روی دستگاه.

  • ۱۱ بخش
  • ۳ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. مقایسه‌ی چهار مقصد لبه در کنار هم
  2. چه زمانی از هر مقصد استفاده کنیم
  3. سقف مرحله‌ی decode
  4. محاسبات پهنای باند
  5. فرمت‌های کوانتیزه‌سازی، Llama 3 70B
  6. کوانتیزه‌سازی و واکوانتیزه‌سازی
  7. وظایف
  8. مسیر استقرار مدل‌های بینایی ماشین
  9. عیب‌یابی
  10. واژه‌نامه‌ی فرمت‌ها
  11. پرسش و پاسخ

مقایسه‌ی چهار مقصد لبه در کنار هم

مقایسه
عاملApple ANEQualcomm HexagonWebGPU / WebLLMNVIDIA Jetson
اوج توان پردازشی (Peak)38 TOPS در M4 / A1845 TOPS در X Elite / 8 Gen 4GPU مرورگر، بدون نیاز به نصبOrin Nano Super، AGX Orin، Thor
حافظهیکپارچه، بدون کپیدامنه‌ی حافظه‌ی مجزاافت کارایی در مرورگر ~25%متکی به پهنای باند حافظه روی Nano
دسترسیCore ML یا MPSQNN SDK، AI Hubسایه‌زن‌های محاسباتی WebGPUvLLM، TensorRT Edge-LLM
فرمتوزن‌های INT4 + اکتیویشن‌های FP16QNN INT8 / INT4Q4 MLC (q4f16_1)Q4 GGUF، TRT-LLM INT4، NVFP4
مشاهده‌شدهتخمین 8 tok/s در A18 با 8B Q47 tok/s در 8 Gen 3 با 8B Q4~41 tok/s در M3 Max با 8B Q4~40 tok/s در AGX Orin با gpt-oss-20b
محدودیتANE بومی نیازمند Core ML استتبدیل از PyTorch یا ONNX~70-75% پوشش موبایلNano مناسب مدل‌های 3B است

چه زمانی از هر مقصد استفاده کنیم

مفهوم‌ها
Apple ANE
اپلیکیشن iOS. تبدیل با Core ML. وزن‌های INT4 به همراه اکتیویشن‌های FP16.
Qualcomm Hexagon
گوشی‌های اسنپ‌دراگون و لپ‌تاپ‌های ویندوزی ARM. تبدیل با QNN یا AI Hub.
WebGPU / WebLLM
اپلیکیشن مرورگر بدون نیاز به نصب. یک طرح پشتیبان سروری روی همان API سازگار با OpenAI نگه دارید.
Jetson Orin Nano Super
اجرای Llama 3.2 3B یا Phi-3 روی 8GB.
Jetson AGX / Thor
مدل‌های بزرگ‌تر، NVFP4 به همراه FP8 KV و EAGLE-3.
GGUF Q4_K_M
لپ‌تاپ‌های مبتنی بر CPU و Apple Silicon.
GPTQ or AWQ INT4
استنتاج روی GPU با CUDA یا ROCm.

سقف مرحله‌ی decode

کد
python
def ceiling(target: Target, model_gb: float) -> float:
    seconds_per_token = model_gb / target.bandwidth_gb_s       # تمام وزن‌ها به ازای هر توکن
    return 1 / seconds_per_token                               # حد بالای tok/s
model_gb = 4.7                                                 # Llama 3.1 8B Q4
Target("Apple A18 (iPhone 16)",   60,   8,  "phone with ANE")  # GB/s، مقدار tok/s مشاهده‌شده
Target("Snapdragon 8 Gen 3",      77,   7,  "mid/high Android")
Target("WebGPU on M3 Max",       400,  41,  "browser penalty ~25%")
Target("Jetson AGX Orin",        205,  45,  "edge-datacenter bridge")

محاسبات پهنای باند

مفهوم‌ها
قاعده
مرحله‌ی decode تمام وزن‌ها را به ازای هر توکن می‌خواند.
7B Q4
حجم 3.5 GB. در پهنای باند 50 GB/s هر توکن 70 ms زمان می‌برد، ~14 tok/s.
موبایل پرچمدار
پهنای باند 90 GB/s سرعتی حدود ~25 tok/s می‌دهد.
HBM3 در 3 TB/s
زمان 1.2 ms برای هر توکن، سقف 830 tok/s.
شکاف
اختلاف 30 تا 50 برابری میان دیتاسنتر و DRAM موبایل.
کانتکست طولانی
مدل 4 GB به اضافه‌ی 2 GB برای KV در طول 32K روی گوشی 8 GB منجر به خطای OOM می‌شود.
کانتکست روی لبه
کانتکست را روی 4K-8K نگه دارید مگر اینکه Q4 KV را بپذیرید.

فرمت‌های کوانتیزه‌سازی، Llama 3 70B

مقایسه
عاملFP16FP8AWQ INT4GGUF Q4_K_M
حجم140GB70GB35GB40GB
پرپلکسیتی3.123.144.184.25
MMLU79.5%79.3%78.1%77.9%
توکن بر ثانیه38، A10055، A10075، A10028، CPU
بهترین کاربردخط مبنااستقرار روی H100استنتاج روی GPUCPU، Metal

کوانتیزه‌سازی و واکوانتیزه‌سازی

کد
python
scale = max(abs(tensor)) / 127                  # INT8 متقارن
quantized = clamp(round(tensor / scale), -128, 127)
reconstructed = quantized * scale               # خطا حداکثر برابر scale / 2
quantized = round(tensor / scale) + zero_point  # نامتقارن، برای خروجی‌های ReLU

وظایف

کار و کد
وظیفهکد
سقف‌های decode روی لبه، درس 12code/main.py
اندازه‌گیری p50، p95 و p99 روی دستگاهmeasure_latency(model, input_shape, device="cpu", warmup=10, iters=50)
زمان‌بندی دقیق پردازش‌های GPU`torch.cuda.synchronize()` before and after the timed block
پیکربندی PTQ ایستا برای INT8model.qconfig = tq.get_default_qconfig(backend)
خروجی گرفتن به فرمت ONNXtorch.onnx.export(model, sample_input, path, opset_version=17)
GPTQ INT4GPTQConfig(bits=4, group_size=128)
GGUF Q4_K_Mllama.cpp/build/bin/llama-quantize llama-8b-f16.gguf llama-8b-q4km.gguf Q4_K_M
وزن‌های WebLLM`mlc_llm convert_weight` plus a compiled `.wasm`

مسیر استقرار مدل‌های بینایی ماشین

گام‌به‌گام
  1. انتخاب بک‌بونزیر 3M پارامتر، MobileNetV3-Small. بین 3 تا 10M، مدل EfficientNet-Lite-B0.
  2. اندازه‌گیریگرم‌کردن اولیه با 5-10 بار اجرا. ابعاد ورودی را روی رزولوشن محیط عملیاتی ثابت کنید.
  3. کوانتیزه‌سازیکوانتیزه‌سازی پس از آموزش (PTQ) ایستا به INT8. بررسی کنید افت دقت زیر 1% باشد.
  4. خروجی گرفتناز PyTorch به ONNX. گزینه‌ی dynamic_axes امکان پذیرش هر اندازه دسته را فراهم می‌کند.
  5. محیط اجراTensorRT روی Jetson. ابزار Core ML روی iOS. پلتفرم TFLite روی Android.
  6. تصمیم‌گیریبر اساس جدول مقایسه‌ی مدل، تاخیر، مصرف حافظه و دقت اندازه‌گیری‌شده روی دستگاه.

عیب‌یابی

عیب‌یابی
  • سرعت 3 tok/s برای 8B Q4 روی iPhone 16 Pro

    علت
    محدودیت پهنای باند موبایل
    راه‌حل
    مدل کوچک‌تر یا بیت‌های کمتر
  • خطای OOM در کانتکست‌های طولانی روی گوشی

    علت
    حجم 2 GB کش کلید-مقدار (KV cache) برای 32K
    راه‌حل
    کانتکست را روی 4K-8K نگه دارید یا از Q4 KV استفاده کنید
  • رد شدن فایل GGUF توسط WebLLM

    علت
    فرمت GGUF پشتیبانی نمی‌شود
    راه‌حل
    تبدیل به Q4 MLC (q4f16_1)
  • استفاده نکردن llama.cpp از ANE در iOS

    علت
    بک‌اند Metal از MPS استفاده می‌کند
    راه‌حل
    تبدیل با Core ML
  • عدم پشتیبانی از WebGPU در مرورگر قدیمی اندروید

    علت
    نیازمند کروم نسخه‌ی 121 به بالا
    راه‌حل
    استفاده از طرح پشتیبان با API سرور
  • اعداد بسیار بالای تاخیر در دفعات اول

    علت
    کش‌های سرد و کامپایل JIT
    راه‌حل
    گرم‌کردن اولیه با 5-10 اجرای آزمایشی
  • خروجی نامفهوم کوانتیزه‌سازی ساده‌ی INT4

    علت
    انباشت خطاهای گرد کردن
    راه‌حل
    استفاده از GPTQ یا AWQ با داده‌های کالیبراسیون
  • تغییر پرپلکسیتی بیش از 2.0

    علت
    مشکلی در فرآیند رخ داده است
    راه‌حل
    بررسی مجدد؛ تغییرات زیر 0.5 عالی است

واژه‌نامه‌ی فرمت‌ها

اصطلاح‌ها
BF16
8 بیت نما (توان)، 7 بیت مانتیس. بازه‌ی عددی یکسان با FP32.
FP8 E4M3
برای وزن‌ها و اکتیویشن‌ها در استنتاج.
FP8 E5M2
برای گرادیان‌ها در آموزش. بازه‌ی عددی وسیع‌تر.
INT8
شامل 256 مقدار از 128- تا 127. نیازمند ضریب مقیاس.
INT4
شامل 16 سطح. برای حفظ کیفیت نیازمند GPTQ یا AWQ است.
GGUF
فرمت فایل llama.cpp با لایه‌های دقت ترکیبی.
PTQ
کوانتیزه‌سازی پس از آموزش با 128-1024 نمونه‌ی کالیبراسیون.
QAT
آموزش مبتنی بر کوانتیزه‌سازی (شبیه‌سازی کوانتیزه). کیفیت بهتر در INT4 و INT2.

پرسش و پاسخ

پرسش و پاسخ
چرا قدرت پردازشی روی لبه در اولویت دوم است؟
چون decode متکی به پهنای باند حافظه است؛ پهنای باند سقف کارایی را تعیین می‌کند.
سرعت WebLLM در مقایسه با پیاده‌سازی بومی چقدر است؟
حدود 70 تا 80 درصد کد بومی روی همان بک‌اند.
معیار FLOPs یا تاخیر؟
برای جستجوی معماری مدل FLOPs؛ برای استقرار نهایی، تاخیر روی دستگاه.
برای بینایی ماشین PTQ بهتر است یا QAT؟
روش PTQ ایستا 95% نتیجه را با صرف 5% زحمت فراهم می‌کند.
آیا فرمت FP8 ایمن است؟
بله روی H100؛ سرعت را 30 تا 50 درصد افزایش می‌دهد با افت کیفیت زیر 0.1%.