خادم Triton للاستدلال مع Ultralytics YOLO26#
يُعد خادم Triton للاستدلال، المعروف سابقًا باسم خادم TensorRT للاستدلال، حلًا برمجيًا مفتوح المصدر طورته NVIDIA. ويوفر حلًا للاستدلال السحابي مُحسّنًا لوحدات GPU من NVIDIA. يسهّل Triton نشر نماذج الذكاء الاصطناعي على نطاق واسع في بيئات الإنتاج. ويتيح دمج Ultralytics YOLO26 مع خادم Triton للاستدلال نشر أعباء عمل التعلم العميق للاستدلال، القابلة للتوسع وعالية الأداء. يقدم هذا الدليل خطوات إعداد التكامل واختباره.
شاهد: البدء باستخدام خادم الاستدلال NVIDIA Triton.
ما خادم Triton للاستدلال؟#
صُمم خادم Triton للاستدلال لنشر مجموعة متنوعة من نماذج الذكاء الاصطناعي في بيئات الإنتاج. وهو يدعم نطاقًا واسعًا من أطر التعلم العميق والتعلم الآلي، بما في ذلك PyTorch وTensorFlow وONNX وOpenVINO وTensorRT وغيرها الكثير. وتشمل حالات الاستخدام الأساسية ما يلي:
- تقديم عدة نماذج من مثيل خادم واحد
- تحميل النماذج وإلغاء تحميلها ديناميكيًا دون إعادة تشغيل الخادم
- الاستدلال التجميعي، الذي يتيح استخدام عدة نماذج معًا لتحقيق النتائج
- إصدار النماذج لاختبارات A/B والتحديثات التدريجية
الفوائد الرئيسية لخادم Triton للاستدلال#
يوفر استخدام خادم Triton للاستدلال مع Ultralytics YOLO26 عدة مزايا:
- التجميع التلقائي للدفعات: يجمع عدة طلبات للذكاء الاصطناعي قبل معالجتها، ما يقلل زمن الاستجابة ويحسن سرعة الاستدلال
- التكامل مع Kubernetes: يعمل التصميم السحابي الأصلي بسلاسة مع Kubernetes لإدارة تطبيقات الذكاء الاصطناعي وتوسيع نطاقها
- تحسينات خاصة بالأجهزة: يستفيد استفادة كاملة من وحدات GPU من 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 للاستدلال#
شغّل كتلة الإعداد الكاملة هذه لتصدير Ultralytics YOLO26 إلى ONNX، وإنشاء مستودع نماذج Triton، وبدء تشغيل خادم Triton للاستدلال:
استخدم خيار التبديل 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
# تحميل نموذج Triton Server
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
# تشغيل الاستدلال على الخادم
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 للاستدلال. TensorRT مُحسِّن عالي الأداء للتعلم العميق، صُمم خصيصًا لوحدات GPU من NVIDIA، ويمكنه زيادة سرعة الاستدلال بدرجة كبيرة.
تشمل الفوائد الرئيسية لاستخدام TensorRT مع Triton ما يلي:
- استدلال أسرع بما يصل إلى 36 مرة مقارنة بالنماذج غير المحسّنة
- تحسينات خاصة بالأجهزة لتحقيق أقصى استفادة من GPU
- دعم تنسيقات الدقة المنخفضة (INT8 وFP16) مع الحفاظ على الدقة
- دمج الطبقات لتقليل العبء الحسابي
يُفعّل config.pbtxt أعلاه بالفعل مُسرّع TensorRT في Triton لنموذج ONNX. ولتشغيل TensorRT مباشرةً مع Ultralytics بدلًا من ذلك، صدّر نموذج Ultralytics YOLO26 إلى تنسيق TensorRT:
from ultralytics import YOLO
# تحميل نموذج YOLO26
model = YOLO("yolo26n.pt")
# صدّر النموذج إلى تنسيق TensorRT
model.export(format="engine") # ينشئ 'yolo26n.engine'لمزيد من المعلومات حول تحسين TensorRT، راجع دليل تكامل TensorRT.
يمكنك الآن نشر نماذج Ultralytics YOLO26 وتشغيلها على خادم Triton للاستدلال، لإجراء استدلال عالي الأداء وقابل للتوسع. لمزيد من التفاصيل، راجع وثائق Triton الرسمية أو اطلب المساعدة من مجتمع Ultralytics.
الأسئلة الشائعة#
يتضمن إعداد Ultralytics YOLO26 مع خادم NVIDIA Triton للاستدلال بضع خطوات أساسية:
-
تصدير YOLO26 إلى تنسيق ONNX:
from ultralytics import YOLO # تحميل نموذج model = YOLO("yolo26n.pt") # حمّل نموذجًا رسميًا # تصدير النموذج إلى تنسيق ONNX onnx_file = model.export(format="onnx", dynamic=True) -
إعداد مستودع نماذج Triton:
from pathlib import Path # تحديد المسارات model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # إنشاء المجلدات (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 للاستدلال، لإجراء استدلال عالي الأداء لنماذج الذكاء الاصطناعي.
-
يوفر دمج Ultralytics YOLO26 مع خادم NVIDIA Triton للاستدلال عدة مزايا:
- استدلال ذكاء اصطناعي قابل للتوسع: يتيح Triton تقديم عدة نماذج من مثيل خادم واحد، مع دعم تحميل النماذج وإلغاء تحميلها ديناميكيًا، ما يجعله قابلًا للتوسع بدرجة كبيرة لتلبية أعباء عمل الذكاء الاصطناعي المتنوعة.
- أداء عالٍ: يضمن خادم Triton للاستدلال، المُحسّن لوحدات GPU من NVIDIA، عمليات استدلال عالية السرعة، وهو مثالي للتطبيقات الفورية مثل كشف الأجسام.
- النماذج التجميعية وإصدار النماذج: يتيح وضع التجميع في Triton دمج عدة نماذج لتحسين النتائج، كما يدعم إصدار النماذج اختبارات A/B والتحديثات التدريجية.
- التجميع التلقائي للدفعات: يجمع Triton تلقائيًا عدة طلبات استدلال معًا، ما يحسن الإنتاجية بدرجة كبيرة ويقلل زمن الاستجابة.
- تبسيط النشر: تحسين تدريجي لسير عمل الذكاء الاصطناعي دون الحاجة إلى إعادة هيكلة الأنظمة بالكامل، ما يسهّل التوسع بكفاءة.
للحصول على تعليمات مفصلة حول إعداد Ultralytics YOLO26 وتشغيله مع Triton، راجع إعداد خادم Triton للاستدلال وتشغيل الاستدلال.
يوفر استخدام تنسيق ONNX (تبادل الشبكات العصبية المفتوح) لنموذج Ultralytics YOLO26 قبل نشره على خادم NVIDIA Triton للاستدلال عدة فوائد أساسية:
- قابلية التشغيل البيني: يدعم تنسيق 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 # تحميل نموذج Triton Server model = YOLO("http://127.0.0.1:8000/yolo", task="detect") # تشغيل الاستدلال على الخادم results = model("path/to/image.jpg")يتيح لك هذا النهج الاستفادة من تحسينات Triton مع استخدام واجهة Ultralytics YOLO المألوفة.
يقدّم Ultralytics YOLO26 العديد من المزايا الفريدة مقارنةً بنماذج TensorFlow وPyTorch عند النشر:
- الأداء في الوقت الفعلي: صُمّم Ultralytics YOLO26 لتحسين أداء مهام اكتشاف الكائنات في الوقت الفعلي، ويوفّر دقة وسرعة بمستوى متقدم، ما يجعله مثاليًا للتطبيقات التي تتطلب تحليلات مباشرة للفيديو.
- سهولة الاستخدام: يتكامل Ultralytics YOLO26 بسلاسة مع Triton Inference Server، ويدعم تنسيقات تصدير متعددة (ONNX، TensorRT)، ما يجعله مرنًا لمختلف سيناريوهات النشر.
- ميزات متقدمة: يضيف تقديم النماذج عبر Triton تحميلًا ديناميكيًا للنماذج، وإدارة إصداراتها، والاستدلال باستخدام مجموعات النماذج، وهي أمور أساسية لعمليات نشر الذكاء الاصطناعي القابلة للتوسع والموثوقة.
- واجهة API مبسطة: توفّر واجهة API من Ultralytics واجهة متسقة عبر أهداف النشر المختلفة، ما يقلّل الوقت اللازم للتعلّم والتطوير.
- تحسين الأداء على الأجهزة الطرفية: صُمّمت نماذج Ultralytics YOLO26 مع مراعاة النشر على الأجهزة الطرفية، وتوفّر أداءً ممتازًا حتى على الأجهزة محدودة الموارد.
لمزيد من التفاصيل، قارن خيارات النشر في دليل تصدير النماذج.