Inference Engine
يشغّل محرك الاستدلال النماذج المدرّبة على العتاد المستهدف باستخدام طبقات مدمجة ودقة أقل ونوى محسّنة. ويتناول هذا المفهوم آلية عمله والمحركات الشائعة.
محرك الاستدلال هو البرنامج الذي ينفّذ شبكة عصبية مدرّبة لإنتاج تنبؤات على بيانات جديدة. ويتلقى نموذجًا مُصدّرًا من إطار عمل للتدريب، عادةً في صورة رسم بياني للحسابات مثل ملف ONNX، ثم يحسّن هذا الرسم لمعالج محدد وينفّذه بأقل قدر ممكن من زمن استجابة الاستدلال واستهلاك الذاكرة. وتتوفر محركات لكل فئة من فئات الأجهزة، بدءًا من وحدات GPU في مراكز البيانات ووصولًا إلى الهواتف والمتحكمات الدقيقة، وفي نشر النماذج يكون المحرك هو المكوّن الذي يحسب كل تنبؤ.
كيف تسرّع محركات الاستدلال النماذج#
لا يحدّث النموذج المنشور أوزانه مطلقًا، لذلك يمكن للمحرك الاستغناء عن كل ما يحتاج إليه التدريب، مثل التنشيطات المخزّنة من أجل الانتشار العكسي، وإعادة كتابة الرسم البياني بحرية. ويحسب مسبقًا أي جزء يعتمد على ثوابت فقط، ويدمج سلاسل الطبقات مثل الالتفاف والتطبيع والتنشيط في نوى مفردة، لتبقى النتائج الوسيطة في الذاكرة السريعة على الشريحة، كما يخطط للذاكرة بحيث يعاد استخدام المخازن المؤقتة. ويمكنه خفض الدقة العددية إلى FP16 أو INT8 عبر تكميم النموذج، مع قياس نطاقات التنشيط على بيانات عينات عند استخدام INT8. ثم تقيس محركات مثل TensorRT زمن تنفيذ عدة نوى مرشحة لكل طبقة على الجهاز الفعلي، وتحتفظ بالأسرع، لذا ترتبط النتيجة بذلك الجهاز:
يُعد دمج تطبيع الدفعة في طبقة الالتفاف السابقة من أكثر عمليات إعادة الكتابة شيوعًا. أثناء الاستدلال، لا يفعل التطبيع سوى تغيير مقياس كل قناة وإزاحتها بمقادير ثابتة، لذا يمكن دمج هذه القيم في أوزان الالتفاف وانحيازه. ويتيح PyTorch التحويل نفسه باسم fuse_conv_bn_eval:
import torch
from torch.nn.utils.fusion import fuse_conv_bn_eval
torch.manual_seed(0)
# A trained convolution followed by batch normalization (random statistics here)
conv = torch.nn.Conv2d(16, 32, kernel_size=3, padding=1).eval()
bn = torch.nn.BatchNorm2d(32).eval()
bn.running_mean.uniform_(-1, 1)
bn.running_var.uniform_(0.5, 2.0)
# Fold the normalization's scale and shift into the convolution's weights and bias
fused = fuse_conv_bn_eval(conv, bn)
# One layer now replaces two and produces the same output
x = torch.randn(1, 16, 64, 64)
with torch.inference_mode():
diff = (bn(conv(x)) - fused(x)).abs().max().item()
print(f"Max difference after fusing: {diff:.1e}")تطبع النتيجة فرقًا أقصى مقداره 2.1e-06، وهو ناتج عن التقريب بالفاصلة العائمة: فالطبقة المدمجة المفردة تحسب الدالة نفسها التي تحسبها الطبقتان الأصليتان، بتمريرة واحدة على الذاكرة بدلًا من اثنتين.
محركات الاستدلال الشائعة#
- TensorRT: محرك NVIDIA لوحدات GPU في مراكز البيانات ووحدات Jetson. ينشئ خطة لطراز GPU واحد وإصدار TensorRT محدد، لذا يعاد إنشاء المحركات عند تغيير أي منهما.
- OpenVINO: مجموعة أدوات Intel لوحدات CPU ووحدات GPU المدمجة والمنفصلة ووحدات NPU.
- ONNX Runtime: محرك Microsoft متعدد المنصات لنماذج ONNX، يوجّه العمل إلى واجهات خلفية للأجهزة تُسمى موفّرات التنفيذ، ومنها CUDA وTensorRT وOpenVINO وCore ML.
- LiteRT: بيئة تشغيل Google، المعروفة سابقًا باسم TensorFlow Lite، لأنظمة Android وLinux المضمنة والمتحكمات الدقيقة، مع مفوّضات لوحدات GPU وNPU المحمولة.
- Core ML: إطار عمل Apple على الجهاز، يوزّع العمل على CPU وGPU وNeural Engine.
- vLLM: محرك مفتوح المصدر للنماذج اللغوية الكبيرة، يضيف جدولة الطلبات والذاكرة المقسّمة إلى صفحات لذاكرة التخزين المؤقت للانتباه، لخدمة عدد كبير من المستخدمين في الوقت نفسه.
تختار واجهة Ultralytics YOLO البرمجية المحرك استنادًا إلى الملف الذي تحمّله، لذا ينفّذ استدعاء predict نفسه نقطة تحقق .pt في PyTorch، أو ملف .onnx في ONNX Runtime، أو ملف .engine في TensorRT، أو مجلد OpenVINO في OpenVINO. ويؤدي تصدير Ultralytics YOLO26 إلى OpenVINO وتحميل الناتج إلى تبديل المحركات من دون أي تغييرات أخرى في الشيفرة:
from ultralytics import YOLO
# صدّر نموذج PyTorch إلى تنسيق OpenVINO
model = YOLO("yolo26n.pt")
path = model.export(format="openvino") # creates 'yolo26n_openvino_model/'
# يؤدي تحميل المجلد المُصدّر إلى تنفيذ التنبؤات باستخدام محرك OpenVINO
ov_model = YOLO(path)
results = ov_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_openvino.jpg")محركات الاستدلال مقارنةً بالمصطلحات ذات الصلة#
- PyTorch وأطر التدريب الأخرى: تحافظ على مرونة الرسم البياني وتسجّل العمليات لحساب التدرجات، بحيث يمكن تصميم النماذج وتدريبها. كما تنفّذ الاستدلال، لكن بأعباء إضافية مقارنةً بمحرك مُعدّ لجهاز واحد.
- ONNX: تنسيق ملف يصف الرسم البياني للنموذج وأوزانه. ويقرأ ONNX Runtime وTensorRT هذا التنسيق بوصفهما محركين.
- تقديم النماذج: يغلّف محركًا واحدًا أو أكثر في خدمة شبكية تتضمن واجهة API وتجميع الطلبات وإدارة الإصدارات، كما يفعل NVIDIA Dynamo-Triton، المعروف سابقًا باسم Triton Inference Server، مع نماذج TensorRT وONNX Runtime وPyTorch.
- محرك استدلال الأنظمة الخبيرة: المعنى الأقدم للمصطلح، من الذكاء الاصطناعي القائم على القواعد، حيث يطبّق محرك الاستدلال قواعد الشرط والنتيجة على قاعدة معرفية باستخدام الاستدلال الأمامي أو الخلفي.










