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

Triton خادم الاستدلال مع Ultralytics YOLO11

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



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

ما هو Triton خادم الاستدلال ؟

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

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

المزايا الرئيسية لخادم Triton Inference Server

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

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

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

تأكد من حصولك على المتطلبات الأساسية التالية قبل المتابعة:

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

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

قبل نشر النموذج على Triton ، يجب تصديره إلى تنسيق ONNX . ONNX (Open Neural Network Exchange) وهو تنسيق يسمح بنقل النماذج بين أطر التعلم العميق المختلفة. استخدم صيغة 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 Server:

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 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 Inference Server؟

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

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

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

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

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

  • قابلية التشغيل البيني: يدعم تنسيق ONNX النقل بين أطر عمل التعلم العميق المختلفة (مثل PyTorch ، TensorFlow)، مما يضمن توافقًا أوسع نطاقًا.
  • التحسين: تعمل العديد من بيئات النشر، بما في ذلك 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 وتشغيل الخادم، يمكنك تحميل الاستدلال وتشغيله على نموذجك على النحو التالي:

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 مع وضع النشر على الحافة في الاعتبار، مما يوفر أداءً ممتازًا حتى على الأجهزة محدودة الموارد.

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

📅 تم إنشاؤها منذ 1 سنة مضت ✏️ تم التحديث منذ 8 أيام

التعليقات