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

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

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



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

ما هو 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(f"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 المجتمع للحصول على الدعم.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (8)

التعليقات