انتقل إلى المحتوى

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

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



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

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

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

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

المتطلبات المسبقه

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

  • عامل ميناء مثبت على جهازك.
  • أقام tritonclient:
    pip install tritonclient[all]
    

تصدير YOLOv8 ل ONNX تنسيق

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

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load an official model

# 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()
    

تشغيل 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:23.09-py3"  # 6.4 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 -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)

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

الأسئلة المتداولة

كيف أقوم بإعداد Ultralytics YOLOv8 مع NVIDIA Triton Inference Server؟

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

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

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolov8n.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:23.09-py3"
    
    subprocess.call(f"docker pull {tag}", shell=True)
    
    container_id = (
        subprocess.check_output(
            f"docker run -d --rm -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)
    

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

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

التكامل Ultralytics YOLOv8 مع NVIDIA Triton Inference Server العديد من المزايا:

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

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

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

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

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

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

from ultralytics import YOLO

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

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

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

نعم، يمكنك تشغيل الاستدلال باستخدام Ultralytics YOLOv8 النموذج على 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 الخادم مع YOLOv8 ، راجع قسم تشغيل خادم الاستدلال triton .

كيف يمكن مقارنة Ultralytics YOLOv8 بنموذجي TensorFlow و PyTorch للنشر؟

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

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

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



تم الإنشاء 2023-11-12-2023، تم التحديث 2024-07-05
المؤلفون: جلين-جوتشر (10)

التعليقات