Triton Inference Server مع Ultralytics YOLO26#
يُعد Triton Inference Server (المعروف سابقاً باسم TensorRT Inference Server) حل برمجياً مفتوح المصدر تم تطويره بواسطة NVIDIA. وهو يوفر حل استدلال سحابي محسّن لوحدات معالجة الرسومات NVIDIA. يعمل Triton على تبسيط نشر نماذج الذكاء الاصطناعي على نطاق واسع في بيئة الإنتاج. يتيح لك دمج Ultralytics YOLO26 مع Triton Inference Server نشر أعباء عمل استدلال التعلم العميق القابلة للتوسيع وعالية الأداء. يوفر هذا الدليل خطوات إعداد واختبار هذا التكامل.
Watch: Getting Started with NVIDIA Triton Inference Server.
ما هو Triton Inference Server؟#
تم تصميم Triton Inference Server لنشر مجموعة متنوعة من نماذج الذكاء الاصطناعي في بيئة الإنتاج. وهو يدعم نطاقاً واسعاً من أطر عمل التعلم العميق والتعلم الآلي، بما في ذلك PyTorch، وTensorFlow، وONNX، وOpenVINO، وTensorRT وغيرها الكثير. حالات الاستخدام الأساسية هي:
- خدمة نماذج متعددة من مثيل خادم واحد
- تحميل وتفريغ النماذج بشكل ديناميكي دون الحاجة إلى إعادة تشغيل الخادم
- الاستنتاج المجمّع (Ensemble inference)، مما يسمح باستخدام نماذج متعددة معاً لتحقيق النتائج
- إصدار النماذج لاختبار A/B والتحديثات المتتابعة
الفوائد الرئيسية لـ Triton Inference Server#
يوفر استخدام Triton Inference Server مع Ultralytics YOLO26 عدة مزايا:
- التجميع التلقائي (Automatic batching): يجمع طلبات الذكاء الاصطناعي المتعددة معاً قبل معالجتها، مما يقلل من زمن الاستجابة ويحسن سرعة الاستنتاج
- تكامل Kubernetes: تصميم سحابي أصيل يعمل بسلاسة مع Kubernetes لإدارة وتوسيع نطاق تطبيقات الذكاء الاصطناعي
- تحسينات خاصة بالأجهزة: يستفيد بالكامل من وحدات معالجة الرسومات NVIDIA لتحقيق أقصى قدر من الأداء
- مرونة أطر العمل: يدعم أطر عمل متعددة للذكاء الاصطناعي تشمل PyTorch، وTensorFlow، وONNX، وOpenVINO، وTensorRT
- مفتوح المصدر وقابل للتخصيص: يمكن تعديله ليناسب احتياجات محددة، مما يضمن المرونة لمختلف تطبيقات الذكاء الاصطناعي
المتطلبات الأساسية#
تأكد من توفر المتطلبات الأساسية التالية قبل المتابعة:
- تثبيت Docker (الإصدار >= 28.2.0، مع NVIDIA Container Toolkit الإصدار >= 1.18 للوصول إلى وحدة معالجة الرسومات عبر CDI) أو Podman على جهازك
- تثبيت
ultralytics:pip install ultralytics - تثبيت
tritonclient:pip install tritonclient[all]
إعداد Triton Inference Server#
قم بتشغيل كتلة الإعداد الكاملة هذه لتصدير Ultralytics YOLO26 إلى ONNX، وبناء مستودع نماذج Triton، وبدء تشغيل Triton Inference Server:
استخدم مفتاح runtime في البرنامج النصي لاختيار محرك الحاويات الخاص بك:
- تعيين
runtime = "docker"لـ Docker - تعيين
runtime = "podman"لـ Podman
import contextlib
import subprocess
import time
from pathlib import Path
from tritonclient.http import InferenceServerClient
from ultralytics import YOLO
runtime = "docker" # set to "podman" to use Podman
# 1) Exporting YOLO26 to ONNX Format
# Load a model
model = YOLO("yolo26n.pt") # load an official model
# Retrieve metadata during export. Metadata needs to be added to config.pbtxt. See next section.
metadata = []
def export_cb(exporter):
metadata.append(exporter.metadata)
model.add_callback("on_export_end", export_cb)
# Export the model
onnx_file = model.export(format="onnx", dynamic=True)
# 2) Setting Up Triton Model Repository
# Define paths
model_name = "yolo"
triton_repo_path = Path("tmp") / "triton_repo"
triton_model_path = triton_repo_path / model_name
# Create directories
(triton_model_path / "1").mkdir(parents=True, exist_ok=True)
# Move ONNX model to Triton Model path
Path(onnx_file).rename(triton_model_path / "1" / "model.onnx")
# Create config file
(triton_model_path / "config.pbtxt").touch()
data = """
# Add metadata
parameters {
key: "metadata"
value {
string_value: "%s"
}
}
# Enable TensorRT acceleration (requires a GPU and TensorRT-enabled Triton; remove this block for CPU-only serving)
# The first run will be slow due to TensorRT engine conversion
optimization {
execution_accelerators {
gpu_execution_accelerator {
name: "tensorrt"
parameters {
key: "precision_mode"
value: "FP16"
}
parameters {
key: "max_workspace_size_bytes"
value: "3221225472"
}
parameters {
key: "trt_engine_cache_enable"
value: "1"
}
parameters {
key: "trt_engine_cache_path"
value: "/models/yolo/1"
}
}
}
}
""" % metadata[0] # noqa
with open(triton_model_path / "config.pbtxt", "w") as f:
f.write(data)
# 3) Running Triton Inference Server
# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver
tag = "nvcr.io/nvidia/tritonserver:26.02-py3" # 16.17 GB (Compressed Size)
subprocess.call(f"{runtime} pull {tag}", shell=True)
# CDI GPU request works identically on Docker and Podman
gpu_flags = "--device nvidia.com/gpu=all"
container_name = "triton_server"
# Note: The :z flag on the volume mount is necessary for systems with SELinux (like Fedora/RHEL)
subprocess.call(
f"{runtime} run -d --rm --name {container_name} {gpu_flags} -v {triton_repo_path.absolute()}:/models:z -p 8000:8000 {tag} tritonserver --model-repository=/models",
shell=True,
)
# Wait for the Triton server to start
triton_client = InferenceServerClient(url="127.0.0.1:8000", verbose=False, ssl=False)
# Wait until model is ready
for _ in range(10):
with contextlib.suppress(Exception):
assert triton_client.is_model_ready(model_name)
break
time.sleep(1)تشغيل الاستنتاج#
قم بتشغيل الاستنتاج باستخدام نموذج Triton Server:
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")تنظيف الحاوية:
import subprocess
runtime = "docker" # set to "podman" to use Podman
container_name = "triton_server" # Kill the named container
subprocess.call(f"{runtime} kill {container_name}", shell=True)تحسين TensorRT (اختياري)#
لتحقيق أداء أكبر، يمكنك استخدام TensorRT مع Triton Inference Server. يُعد TensorRT مُحسِّناً عالي الأداء للتعلم العميق مصم خصيصاً لوحدات معالجة الرسومات NVIDIA ويمكنه زيادة سرعة الاستدلال بشكل كبير.
الفوائد الرئيسية لاستخدام TensorRT مع Triton تشمل:
- استنتاج أسرع بما يصل إلى 36 ضعفاً مقارنة بالنماذج غير المُحسّنة
- تحسينات خاصة بالأجهزة لتحقيق أقصى استفادة من وحدة معالجة الرسومات
- دعم صيغ الدقة المنخفضة (INT8, FP16) مع الحفاظ على الدقة
- دمج الطبقات لتقليل العبء الحسابي
لإستخدام TensorRT مباشرة، يمكنك تصدير نموذج Ultralytics YOLO26 الخاص بك إلى تنسيق TensorRT:
from ultralytics import YOLO
# Load the YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo26n.engine'لمزيد من المعلومات حول تحسين TensorRT، راجع دليل تكامل TensorRT.
يمكنك الآن نشر وتشغيل نماذج Ultralytics YOLO26 على Triton Inference Server للاستدلال القابل للتوسيع وعالي الأداء. لمزيد من التفاصيل، راجع وثائق Triton الرسمية أو اطلب المساعدة من مجتمع Ultralytics.
الأسئلة الشائعة#
يتضمن إعداد Ultralytics YOLO26 مع NVIDIA Triton Inference Server عدة خطوات رئيسية:
-
تصدير YOLO26 إلى صيغة ONNX:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # load an official model # Export the model to ONNX format onnx_file = model.export(format="onnx", dynamic=True) -
إعداد مستودع نماذج Triton:
from pathlib import Path # Define paths model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # Create directories (triton_model_path / "1").mkdir(parents=True, exist_ok=True) Path(onnx_file).rename(triton_model_path / "1" / "model.onnx") (triton_model_path / "config.pbtxt").touch() -
تشغيل خادم Triton:
import contextlib import subprocess import time from tritonclient.http import InferenceServerClient # Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver tag = "nvcr.io/nvidia/tritonserver:26.02-py3" runtime = "docker" # set to "podman" to use Podman subprocess.call(f"{runtime} pull {tag}", shell=True) # CDI GPU request works identically on Docker and Podman gpu_flags = "--device nvidia.com/gpu=all" container_name = "triton_server" subprocess.call( f"{runtime} run -d --rm --name {container_name} {gpu_flags} -v {triton_repo_path.absolute()}:/models:z -p 8000:8000 {tag} tritonserver --model-repository=/models", shell=True, ) triton_client = InferenceServerClient(url="127.0.0.1:8000", verbose=False, ssl=False) for _ in range(10): with contextlib.suppress(Exception): assert triton_client.is_model_ready(model_name) break time.sleep(1)
يمكن أن يساعدك هذا الإعداد في نشر نماذج Ultralytics YOLO26 بكفاءة على نطاق واسع على Triton Inference Server لاستدلال نماذج الذكاء الاصطناعي عالي الأداء.
-
يوفر دمج Ultralytics YOLO26 مع NVIDIA Triton Inference Server عدة مزايا:
- استنتاج ذكاء اصطناعي قابل للتطوير: يتيح Triton خدمة نماذج متعددة من مثيل خادم واحد، مع دعم التحميل والتفريغ الديناميكي للنماذج، مما يجعله قابلاً للتطوير بشكل كبير لأعباء عمل الذكاء الاصطناعي المتنوعة.
- أداء عالٍ: يضمن Triton Inference Server المحسّن لوحدات معالجة الرسومات NVIDIA عمليات استدلال عالية السرعة، وهو مثالي للتطبيقات في الوقت الفعلي مثل اكتشاف الكائنات.
- الاستنتاج المجمّع وإصدار النماذج: يتيح وضع التجميع في Triton الجمع بين نماذج متعددة لتحسين النتائج، كما يدعم إصدار النماذج اختبار A/B والتحديثات المتتابعة.
- التجميع التلقائي: يقوم Triton تلقائياً بتجميع طلبات استنتاج متعددة معاً، مما يحسن الإنتاجية بشكل كبير ويقلل من زمن الاستجابة.
- تبسيط النشر: تحسين تدريجي لسير عمل الذكاء الاصطناعي دون الحاجة إلى إصلاحات شاملة للنظام، مما يسهل عملية التوسع بكفاءة.
للحصول على إرشادات تفصيلية حول إعداد وتشغيل Ultralytics YOLO26 مع Triton، راجع إعداد Triton Inference Server وتشغيل الاستدلال.
يوفر استخدام تنسيق ONNX (Open Neural Network Exchange) لنموذج Ultralytics YOLO26 الخاص بك قبل نشره على NVIDIA Triton Inference Server عدة فوائد رئيسية:
- التوافقية: تدعم صيغة ONNX النقل بين أطر عمل تعلم عميق مختلفة (مثل PyTorch و TensorFlow)، مما يضمن توافقاً أوسع.
- التحسين: تعمل العديد من بيئات النشر، بما في ذلك Triton، على تحسين أداء ONNX، مما يتيح استنتاجاً أسرع وأداءً أفضل.
- سهولة النشر: تحظى ONNX بدعم واسع عبر أطر العمل والمنصات، مما يبسط عملية النشر في مختلف أنظمة التشغيل وتكوينات الأجهزة.
- استقلالية إطار العمل: بمجرد تحويله إلى ONNX، لم يعد نموذجك مرتبطاً بإطار عمله الأصلي، مما يجعله أكثر قابلية للنقل.
- التوحيد القياسي: توفر ONNX تمثيلاً موحداً يساعد في التغلب على مشكلات التوافق بين أطر عمل الذكاء الاصطناعي المختلفة.
لتصدير نموذجك، استخدم:
from ultralytics import YOLO model = YOLO("yolo26n.pt") onnx_file = model.export(format="onnx", dynamic=True)يمكنك اتباع الخطوات الواردة في دليل تكامل ONNX لإكمال العملية.
نعم، يمكنك تشغيل الاستدلال باستخدام نموذج Ultralytics YOLO26 على NVIDIA Triton Inference Server. بمجرد إعداد نموذجك في مستودع نماذج Triton وتشغيل الخادم، يمكنك تحميل وتشغيل الاستدلال على نموذجك على النحو التالي:
from ultralytics import YOLO # Load the Triton Server model model = YOLO("http://127.0.0.1:8000/yolo", task="detect") # Run inference on the server results = model("path/to/image.jpg")يسمح لك هذا النهج بالاستفادة من تحسينات Triton مع استخدام واجهة Ultralytics YOLO المألوفة.
يقدم Ultralytics YOLO26 العديد من المزايا الفريدة مقارنة بنماذج TensorFlow وPyTorch للنشر:
- أداء في الوقت الفعلي: تم تحسين Ultralytics YOLO26 لمهام اكتشاف الكائنات في الوقت الفعلي، ويوفر دقة وسرعة متطورتين، مما يجعله مثالياً للتطبيقات التي تتطلب تحليلات الفيديو الحية.
- سهولة الاستخدام: يتكامل Ultralytics YOLO26 بسلاسة مع Triton Inference Server ويدعم تنسيقات تصدير متنوعة (ONNX، TensorRT)، مما يجعله مرناً لمختلف سيناريوهات النشر.
- ميزات متقدمة: يتضمن Ultralytics YOLO26 ميزات مثل التحميل الديناميكي للنماذج، وإصدارات النماذج، والاستدلال المجمع، والتي تعتبر حاسمة لعمليات نشر الذكاء الاصطناعي القابلة للتوسيع والموثوقة.
- واجهة برمجة تطبيقات مبسطة: توفر واجهة Ultralytics API واجهة متسقة عبر أهداف نشر مختلفة، مما يقلل من منحنى التعلم ووقت التطوير.
- تحسين الحافة: تم تصميم نماذج Ultralytics YOLO26 مع وضع نشر الحافة في الاعتبار، مما يوفر أداءً ممتازاً حتى على الأجهزة المحدودة الموارد.
لمزيد من التفاصيل، قارن خيارات النشر في دليل تصدير النماذج.