تخطي إلى المحتوى

خادم استنتاج Triton مع Ultralytics YOLO11

إن خادم الاستدلال Triton (المعروف سابقًا باسم خادم الاستدلال TensorRT) هو حل برمجي مفتوح المصدر تم تطويره بواسطة NVIDIA. وهو يوفر حل استدلال سحابي مُحسَّن لوحدات معالجة الرسوميات NVIDIA. يبسط Triton نشر نماذج الذكاء الاصطناعي على نطاق واسع في الإنتاج. يتيح لك دمج Ultralytics YOLO11 مع خادم الاستدلال Triton نشر أحمال عمل استدلال التعلم العميق عالية الأداء وقابلة للتطوير. يوفر هذا الدليل خطوات لإعداد التكامل واختباره.



شاهد: الشروع في العمل مع خادم NVIDIA Triton Inference.

ما هو خادم استنتاج Triton؟

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

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

الفوائد الرئيسية لخادم استنتاج Triton

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

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

المتطلبات الأساسية

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

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

تصدير YOLO11 إلى تنسيق ONNX

قبل نشر النموذج على Triton، يجب تصديره إلى تنسيق ONNX. ONNX (تبادل الشبكة العصبية المفتوحة) هو تنسيق يسمح بنقل النماذج بين أطر عمل التعلم العميق المختلفة. استخدم export الدالة من YOLO فئة:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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)

إعداد مستودع نموذج Triton

مستودع نموذج Triton هو موقع تخزين حيث يمكن لـ Triton الوصول إلى النماذج وتحميلها.

  1. إنشاء هيكل الدليل الضروري:

    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)
    
  2. انقل نموذج ONNX الذي تم تصديره إلى مستودع Triton:

    from pathlib import Path
    
    # 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"
      }
    }
    
    # (Optional) Enable TensorRT for GPU inference
    # 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)
    

تشغيل خادم الاستدلال Triton

تشغيل خادم الاستدلال Triton باستخدام Docker:

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:24.09-py3"  # 8.57 GB

# Pull the image
subprocess.call(f"docker pull {tag}", shell=True)

# Run the Triton server and capture the container ID
container_id = (
    subprocess.check_output(
        f"docker run -d --rm --gpus 0 -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models",
        shell=True,
    )
    .decode("utf-8")
    .strip()
)

# Wait for the Triton server to start
triton_client = InferenceServerClient(url="localhost: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:

from ultralytics import YOLO

# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")

# Run inference on the server
results = model("path/to/image.jpg")

تنظيف الحاوية:

# Kill and remove the container at the end of the test
subprocess.call(f"docker kill {container_id}", shell=True)

تحسين TensorRT (اختياري)

للحصول على أداء أفضل، يمكنك استخدام TensorRT مع Triton Inference Server. ‏TensorRT هو مُحسِّن للتعلم العميق عالي الأداء مصمم خصيصًا لوحدات معالجة الرسومات NVIDIA التي يمكن أن تزيد بشكل كبير من سرعة الاستدلال.

تشمل الفوائد الرئيسية لاستخدام TensorRT مع Triton ما يلي:

  • استدلال أسرع بما يصل إلى 36 مرة مقارنة بالنماذج غير المحسنة
  • تحسينات خاصة بالأجهزة لتحقيق أقصى استفادة من وحدة معالجة الرسومات GPU
  • دعم تنسيقات الدقة المنخفضة (INT8، FP16) مع الحفاظ على الدقة
  • دمج الطبقات لتقليل النفقات الحسابية

لاستخدام TensorRT مباشرةً، يمكنك تصدير نموذج YOLO11 الخاص بك إلى تنسيق TensorRT:

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo11n.engine'

لمزيد من المعلومات حول تحسين TensorRT، راجع دليل تكامل TensorRT.


باتباع الخطوات المذكورة أعلاه، يمكنك نشر وتشغيل نماذج Ultralytics YOLO11 بكفاءة على Triton Inference Server، مما يوفر حلاً قابلاً للتطوير وعالي الأداء لمهام استدلال التعلم العميق. إذا واجهت أي مشكلات أو كانت لديك استفسارات أخرى، فارجع إلى وثائق Triton الرسمية أو تواصل مع مجتمع Ultralytics للحصول على الدعم.

الأسئلة الشائعة

كيف يمكنني إعداد Ultralytics YOLO11 مع NVIDIA Triton Inference Server؟

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

  1. تصدير YOLO11 إلى تنسيق ONNX:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo11n.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:24.09-py3"
    
    subprocess.call(f"docker pull {tag}", shell=True)
    
    container_id = (
        subprocess.check_output(
            f"docker run -d --rm --gpus 0 -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models",
            shell=True,
        )
        .decode("utf-8")
        .strip()
    )
    
    triton_client = InferenceServerClient(url="localhost: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)
    

يمكن أن يساعدك هذا الإعداد في نشر نماذج YOLO11 بكفاءة على نطاق واسع على خادم Triton Inference Server للاستدلال على نموذج الذكاء الاصطناعي عالي الأداء.

ما الفوائد التي يوفرها استخدام Ultralytics YOLO11 مع NVIDIA Triton Inference Server؟

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

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

للحصول على إرشادات مفصلة حول إعداد وتشغيل YOLO11 مع Triton، يمكنك الرجوع إلى دليل الإعداد.

لماذا يجب عليّ تصدير نموذج YOLO11 الخاص بي إلى تنسيق ONNX قبل استخدام خادم استنتاج Triton؟

يوفر استخدام تنسيق ONNX (تبادل الشبكة العصبية المفتوحة) لنموذج Ultralytics YOLO11 الخاص بك قبل نشره على NVIDIA Triton Inference Server العديد من المزايا الرئيسية:

  • إمكانية التشغيل البيني: يدعم تنسيق ONNX النقل بين أطر عمل التعلم العميق المختلفة (مثل PyTorch و TensorFlow)، مما يضمن توافقًا أوسع.
  • Optimization: تعمل العديد من بيئات النشر، بما في ذلك Triton، على التحسين لـ ONNX، مما يتيح استدلالًا أسرع وأداءً أفضل.
  • سهولة النشر: يتم دعم ONNX على نطاق واسع عبر الأطر والمنصات، مما يبسط عملية النشر في مختلف أنظمة التشغيل وتكوينات الأجهزة.
  • الاستقلالية عن الإطار: بمجرد التحويل إلى ONNX، لن يعود النموذج الخاص بك مرتبطًا بإطاره الأصلي، مما يجعله أكثر قابلية للنقل.
  • التوحيد القياسي: يوفر ONNX تمثيلًا موحدًا يساعد في التغلب على مشكلات التوافق بين أطر عمل الذكاء الاصطناعي المختلفة.

لتصدير النموذج الخاص بك، استخدم:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
onnx_file = model.export(format="onnx", dynamic=True)

يمكنك اتباع الخطوات الواردة في دليل تكامل ONNX لإكمال العملية.

هل يمكنني تشغيل الاستدلال باستخدام نموذج Ultralytics YOLO11 على Triton Inference Server؟

نعم، يمكنك تشغيل الاستدلال باستخدام نموذج Ultralytics YOLO11 على NVIDIA Triton Inference Server. بمجرد إعداد النموذج الخاص بك في Triton Model Repository وتشغيل الخادم، يمكنك تحميل وتشغيل الاستدلال على النموذج الخاص بك على النحو التالي:

from ultralytics import YOLO

# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")

# Run inference on the server
results = model("path/to/image.jpg")

يتيح لك هذا الأسلوب الاستفادة من تحسينات Triton مع استخدام واجهة Ultralytics YOLO المألوفة. للحصول على دليل متعمق حول إعداد وتشغيل Triton Server مع YOLO11، راجع قسم تشغيل خادم استدلال Triton.

كيف تتم مقارنة Ultralytics YOLO11 بنماذج TensorFlow و PyTorch من حيث النشر؟

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

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

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



📅 أُنشئ منذ سنة واحدة ✏️ تم التحديث منذ 3 أشهر

تعليقات