Meet YOLO26: next-gen vision AI.

Link to this sectionTriton 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.

Link to this sectionما هو Triton Inference Server؟#

تم تصميم Triton Inference Server لنشر مجموعة متنوعة من نماذج الذكاء الاصطناعي في بيئات الإنتاج. وهو يدعم نطاقاً واسعاً من أطر عمل التعلم العميق وتعلم الآلة، بما في ذلك PyTorch وTensorFlow وONNX وOpenVINO وTensorRT والعديد غيرها. حالات الاستخدام الأساسية له هي:

  • خدمة نماذج متعددة من مثيل خادم واحد
  • تحميل وتفريغ النماذج بشكل ديناميكي دون الحاجة إلى إعادة تشغيل الخادم
  • الاستنتاج المجمّع (Ensemble inference)، مما يسمح باستخدام نماذج متعددة معاً لتحقيق النتائج
  • إصدار النماذج لاختبار A/B والتحديثات المتتابعة

Link to this sectionالفوائد الرئيسية لـ Triton Inference Server#

يوفر استخدام Triton Inference Server مع Ultralytics YOLO26 العديد من المزايا:

  • التجميع التلقائي (Automatic batching): يجمع طلبات الذكاء الاصطناعي المتعددة معاً قبل معالجتها، مما يقلل من زمن الاستجابة ويحسن سرعة الاستنتاج
  • تكامل Kubernetes: تصميم سحابي أصيل يعمل بسلاسة مع Kubernetes لإدارة وتوسيع نطاق تطبيقات الذكاء الاصطناعي
  • تحسينات خاصة بالأجهزة: يستفيد بالكامل من وحدات معالجة الرسومات NVIDIA لتحقيق أقصى قدر من الأداء
  • مرونة أطر العمل: يدعم أطر ذكاء اصطناعي متعددة بما في ذلك PyTorch وTensorFlow وONNX وOpenVINO وTensorRT
  • مفتوح المصدر وقابل للتخصيص: يمكن تعديله ليناسب احتياجات محددة، مما يضمن المرونة لمختلف تطبيقات الذكاء الاصطناعي

Link to this sectionالمتطلبات الأساسية#

تأكد من توفر المتطلبات الأساسية التالية قبل المتابعة:

  • تثبيت Docker أو Podman على جهازك
  • تثبيت ultralytics:
    pip install ultralytics
  • تثبيت tritonclient:
    pip install tritonclient[all]

Link to this sectionإعداد 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)

# GPU flags differ between Docker and Podman
gpu_flags = "--device nvidia.com/gpu=all" if runtime == "podman" else "--runtime=nvidia --gpus 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)

Link to this sectionتشغيل الاستنتاج#

قم بتشغيل الاستنتاج باستخدام نموذج 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)

Link to this sectionتحسين 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.

Link to this sectionالأسئلة الشائعة#

Link to this sectionكيف يمكنني إعداد Ultralytics YOLO26 مع NVIDIA Triton Inference Server؟#

يتضمن إعداد Ultralytics YOLO26 مع NVIDIA Triton Inference Server بضع خطوات رئيسية:

  1. تصدير 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)
  2. إعداد مستودع نماذج 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()
  3. تشغيل خادم 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)
    
    # GPU flags differ between Docker and Podman
    gpu_flags = "--device nvidia.com/gpu=all" if runtime == "podman" else "--runtime=nvidia --gpus 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 لاستنتاج نماذج ذكاء اصطناعي عالي الأداء.

Link to this sectionما الفوائد التي يوفرها استخدام Ultralytics YOLO26 مع NVIDIA Triton Inference Server؟#

يوفر دمج Ultralytics YOLO26 مع NVIDIA Triton Inference Server العديد من المزايا:

  • استنتاج ذكاء اصطناعي قابل للتطوير: يتيح Triton خدمة نماذج متعددة من مثيل خادم واحد، مع دعم التحميل والتفريغ الديناميكي للنماذج، مما يجعله قابلاً للتطوير بشكل كبير لأعباء عمل الذكاء الاصطناعي المتنوعة.
  • أداء عالٍ: تم تحسين Triton Inference Server لوحدات معالجة الرسومات NVIDIA، مما يضمن عمليات استنتاج عالية السرعة، وهو مثالي للتطبيقات في الوقت الفعلي مثل اكتشاف الكائنات.
  • الاستنتاج المجمّع وإصدار النماذج: يتيح وضع التجميع في Triton الجمع بين نماذج متعددة لتحسين النتائج، كما يدعم إصدار النماذج اختبار A/B والتحديثات المتتابعة.
  • التجميع التلقائي: يقوم Triton تلقائياً بتجميع طلبات استنتاج متعددة معاً، مما يحسن الإنتاجية بشكل كبير ويقلل من زمن الاستجابة.
  • تبسيط النشر: تحسين تدريجي لسير عمل الذكاء الاصطناعي دون الحاجة إلى إصلاحات شاملة للنظام، مما يسهل عملية التوسع بكفاءة.

للحصول على تعليمات مفصلة حول إعداد وتشغيل Ultralytics YOLO26 باستخدام Triton، راجع إعداد Triton Inference Server و تشغيل الاستنتاج.

Link to this sectionلماذا يجب علي تصدير نموذج YOLO26 الخاص بي إلى صيغة ONNX قبل استخدام 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 لإكمال العملية.

Link to this sectionهل يمكنني تشغيل الاستنتاج باستخدام نموذج Ultralytics YOLO26 على Triton Inference Server؟#

نعم، يمكنك تشغيل الاستنتاج باستخدام نموذج 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 المألوفة.

Link to this sectionكيف يقارن Ultralytics YOLO26 بنماذج TensorFlow و PyTorch للنشر؟#

يوفر Ultralytics YOLO26 العديد من المزايا الفريدة مقارنة بنماذج TensorFlow و PyTorch للنشر:

  • أداء الوقت الفعلي: تم تحسين Ultralytics YOLO26 لمهام اكتشاف الكائنات في الوقت الفعلي، حيث يوفر دقة وسرعة رائدتين، مما يجعله مثالياً للتطبيقات التي تتطلب تحليلات فيديو مباشرة.
  • سهولة الاستخدام: يتكامل Ultralytics YOLO26 بسلاسة مع Triton Inference Server ويدعم صيغ تصدير متنوعة (ONNX، TensorRT)، مما يجعله مرناً لسيناريوهات النشر المختلفة.
  • ميزات متقدمة: يتضمن Ultralytics YOLO26 ميزات مثل التحميل الديناميكي للنماذج، وإصدار النماذج، والاستنتاج المجمّع، وهي ضرورية لنشر الذكاء الاصطناعي القابل للتطوير والموثوق.
  • واجهة برمجة تطبيقات مبسطة: توفر واجهة Ultralytics API واجهة متسقة عبر أهداف نشر مختلفة، مما يقلل من منحنى التعلم ووقت التطوير.
  • التحسين للحافة (Edge Optimization): تم تصميم نماذج Ultralytics YOLO26 مع وضع النشر عند الحافة في الاعتبار، مما يوفر أداءً ممتازاً حتى على الأجهزة ذات الموارد المحدودة.

لمزيد من التفاصيل، قارن خيارات النشر في دليل تصدير النموذج.

التعليقات