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 وغيرها الكثير. وتشمل حالات استخدامه الرئيسية ما يلي:
- تقديم نماذج متعددة من مثيل خادم واحد
- تحميل النماذج وإلغاء تحميلها ديناميكيًا دون إعادة تشغيل الخادم
- الاستدلال التجميعي، بما يتيح استخدام نماذج متعددة معًا لتحقيق النتائج
- إدارة إصدارات النماذج لاختبار A/B والتحديثات التدريجية
الفوائد الرئيسية لـ Triton Inference Server#
يوفر استخدام Triton Inference Server مع Ultralytics YOLO26 عدة مزايا:
- التجميع التلقائي: يجمع عدة طلبات للذكاء الاصطناعي معًا قبل معالجتها، مما يقلل زمن الاستجابة ويحسن سرعة الاستدلال
- التكامل مع Kubernetes: يعمل التصميم السحابي الأصلي بسلاسة مع Kubernetes لإدارة تطبيقات الذكاء الاصطناعي وتوسيع نطاقها
- تحسينات خاصة بالعتاد: يستفيد استفادة كاملة من وحدات معالجة الرسومات NVIDIA لتحقيق أقصى أداء
- مرونة أطر العمل: يدعم أطر عمل متعددة للذكاء الاصطناعي، بما في ذلك PyTorch وTensorFlow وONNX وOpenVINO وTensorRT
- مفتوح المصدر وقابل للتخصيص: يمكن تعديله ليلائم احتياجات محددة، مما يضمن المرونة لمختلف تطبيقات الذكاء الاصطناعي
المتطلبات الأساسية#
تأكد من توفر المتطلبات الأساسية التالية قبل المتابعة:
- تثبيت Docker (>= 28.2.0، مع NVIDIA Container Toolkit >= 1.18 للوصول إلى GPU عبر 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 مرة مقارنة بالنماذج غير المحسّنة
- تحسينات خاصة بالعتاد لتحقيق أقصى استفادة من GPU
- دعم تنسيقات الدقة المخفضة (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 Server:
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 (تنسيق تبادل الشبكات العصبية المفتوح) لنموذج 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)، مما يجعله مرنًا لمختلف سيناريوهات النشر.
- الميزات المتقدمة: يضيف تقديم النماذج عبر Triton تحميل النماذج الديناميكي، وإصدارات النماذج، والاستدلال الجماعي، وهي أمور بالغة الأهمية لنشر الذكاء الاصطناعي القابل للتوسع والموثوق.
- واجهة API مبسطة: توفر واجهة Ultralytics API متسقة عبر أهداف النشر المختلفة، مما يقلل منحنى التعلم ووقت التطوير.
- تحسين الحافة: صُممت نماذج Ultralytics YOLO26 مع مراعاة النشر على الحافة، وتوفر أداءً ممتازًا حتى على الأجهزة محدودة الموارد.
لمزيد من التفاصيل، قارن خيارات النشر في دليل تصدير النماذج.