چیتشیت
مقصدهای استنتاج روی لبه
Edge Inference Targets
انتخاب مقصد لبه و فرمت کوانتیزهسازی. سقف پهنای باند، فرمتها، مراحل خروجی گرفتن و اندازهگیری روی دستگاه.
فهرست مطالب
مقایسهی چهار مقصد لبه در کنار هم
مقایسه| عامل | Apple ANE | Qualcomm Hexagon | WebGPU / WebLLM | NVIDIA Jetson |
|---|---|---|---|---|
| اوج توان پردازشی (Peak) | 38 TOPS در M4 / A18 | 45 TOPS در X Elite / 8 Gen 4 | GPU مرورگر، بدون نیاز به نصب | Orin Nano Super، AGX Orin، Thor |
| حافظه | یکپارچه، بدون کپی | دامنهی حافظهی مجزا | افت کارایی در مرورگر ~25% | متکی به پهنای باند حافظه روی Nano |
| دسترسی | Core ML یا MPS | QNN SDK، AI Hub | سایهزنهای محاسباتی WebGPU | vLLM، TensorRT Edge-LLM |
| فرمت | وزنهای INT4 + اکتیویشنهای FP16 | QNN INT8 / INT4 | Q4 MLC (q4f16_1) | Q4 GGUF، TRT-LLM INT4، NVFP4 |
| مشاهدهشده | تخمین 8 tok/s در A18 با 8B Q4 | 7 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
مقایسه| عامل | FP16 | FP8 | AWQ INT4 | GGUF Q4_K_M |
|---|---|---|---|---|
| حجم | 140GB | 70GB | 35GB | 40GB |
| پرپلکسیتی | 3.12 | 3.14 | 4.18 | 4.25 |
| MMLU | 79.5% | 79.3% | 78.1% | 77.9% |
| توکن بر ثانیه | 38، A100 | 55، A100 | 75، A100 | 28، CPU |
| بهترین کاربرد | خط مبنا | استقرار روی H100 | استنتاج روی GPU | CPU، 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 روی لبه، درس 12 | code/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 ایستا برای INT8 | model.qconfig = tq.get_default_qconfig(backend) |
| خروجی گرفتن به فرمت ONNX | torch.onnx.export(model, sample_input, path, opset_version=17) |
| GPTQ INT4 | GPTQConfig(bits=4, group_size=128) |
| GGUF Q4_K_M | llama.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` |
مسیر استقرار مدلهای بینایی ماشین
گامبهگام- انتخاب بکبونزیر 3M پارامتر، MobileNetV3-Small. بین 3 تا 10M، مدل EfficientNet-Lite-B0.
- اندازهگیریگرمکردن اولیه با 5-10 بار اجرا. ابعاد ورودی را روی رزولوشن محیط عملیاتی ثابت کنید.
- کوانتیزهسازیکوانتیزهسازی پس از آموزش (PTQ) ایستا به INT8. بررسی کنید افت دقت زیر 1% باشد.
- خروجی گرفتناز PyTorch به ONNX. گزینهی
dynamic_axesامکان پذیرش هر اندازه دسته را فراهم میکند. - محیط اجراTensorRT روی Jetson. ابزار Core ML روی iOS. پلتفرم TFLite روی Android.
- تصمیمگیریبر اساس جدول مقایسهی مدل، تاخیر، مصرف حافظه و دقت اندازهگیریشده روی دستگاه.
عیبیابی
عیبیابیسرعت 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%.