خادم الاستدلال Triton مع Ultralytics YOLO26
يُعد خادمTriton (المعروف سابقًا باسم خادم TensorRT ) حلاً برمجيًا مفتوح المصدر طورته NVIDIA. ويوفر هذا الخادم حلاً للاستدلال السحابي مُحسَّنًا NVIDIA . Triton نشر نماذج الذكاء الاصطناعي على نطاق واسع في بيئات الإنتاج. ويتيح لك دمج Ultralytics مع خادم Triton نشر أحمال عمل استدلال التعلم العميق القابلة للتوسع وعالية الأداء. يقدم هذا الدليل الخطوات اللازمة لإعداد واختبار عملية الدمج.
شاهد: الشروع في العمل مع خادم NVIDIA Triton Inference.
ما هو خادم استنتاج Triton؟
تم تصميم خادم Triton لنشر مجموعة متنوعة من نماذج الذكاء الاصطناعي في بيئة الإنتاج. وهو يدعم مجموعة واسعة من أطر عمل التعلم العميق والتعلم الآلي، بما في ذلك PyTorchو TensorFlowو ONNX، OpenVINO، TensorRT وغيرها الكثير. وتتمثل حالات الاستخدام الرئيسية لها في:
- خدمة نماذج متعددة من مثيل خادم واحد.
- تحميل وتفريغ النموذج الديناميكي بدون إعادة تشغيل الخادم
- الاستدلال الجماعي، مما يسمح باستخدام نماذج متعددة معًا لتحقيق النتائج
- إصدار النموذج لاختبار A/B والتحديثات المتداولة
الفوائد الرئيسية لخادم استنتاج Triton
يوفر استخدام خادم Triton Server مع Ultralytics عدة مزايا:
- تجميع الدفعات تلقائيًا: يقوم بتجميع طلبات الذكاء الاصطناعي المتعددة معًا قبل معالجتها، مما يقلل من زمن الوصول ويحسن سرعة الاستدلال
- تكامل Kubernetes: تصميم أصيل للخدمات السحابية يعمل بسلاسة مع Kubernetes لإدارة وتوسيع نطاق تطبيقات الذكاء الاصطناعي
- تحسينات خاصة بالأجهزة: يستفيد بشكل كامل من وحدات معالجة الرسومات NVIDIA لتحقيق أقصى أداء.
- مرونة الأطر: يدعم العديد من أطر عمل الذكاء الاصطناعي، بما في ذلك PyTorchو TensorFlowو ONNX، OpenVINO و TensorRT
- مفتوح المصدر وقابل للتخصيص: يمكن تعديله ليناسب الاحتياجات المحددة، مما يضمن المرونة لمختلف تطبيقات الذكاء الاصطناعي.
المتطلبات الأساسية
تأكد من توفر المتطلبات الأساسية التالية قبل المتابعة:
- تثبيت Docker أو Podman على جهازك
- تثبيت
ultralytics:pip install ultralytics - تثبيت
tritonclient:pip install tritonclient[all]
إعداد خادم Triton
قم بتشغيل كتلة الإعداد الكاملة هذه لتصدير Ultralytics إلى ONNX، وإنشاء مستودع Triton وبدء تشغيل خادم Triton :
ملاحظة
استخدم 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"
}
}
# (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)
# 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)
تشغيل الاستدلال
قم بإجراء الاستدلال باستخدام نموذج 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")
تنظيف الحاوية (runtime و container_name (تم تعريفها في كتلة الإعداد أعلاه):
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)
تحسين TensorRT (اختياري)
للحصول على أداء أفضل، يمكنك استخدام TensorRT مع Triton Inference Server. TensorRT هو مُحسِّن للتعلم العميق عالي الأداء مصمم خصيصًا لوحدات معالجة الرسومات NVIDIA التي يمكن أن تزيد بشكل كبير من سرعة الاستدلال.
المزايا الرئيسية لاستخدام TensorRT مع Triton :
- استدلال أسرع بما يصل إلى 36 مرة مقارنة بالنماذج غير المحسنة
- تحسينات خاصة بالأجهزة لتحقيق أقصى استفادة من وحدة معالجة الرسومات GPU
- دعم تنسيقات الدقة المنخفضة (INT8، FP16) مع الحفاظ على الدقة
- دمج الطبقات لتقليل النفقات الحسابية
لاستخدام TensorRT ، يمكنك تصدير نموذج Ultralytics الخاص بك إلى 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 وتشغيلها بكفاءة على خادم Triton Server، مما يوفر حلاً قابلاً للتوسع وعالي الأداء لمهام الاستدلال في مجال التعلم العميق. إذا واجهت أي مشكلات أو كان لديك أي استفسارات أخرى، يرجى الرجوع إلى Triton الرسمية Triton أو التواصل مع Ultralytics للحصول على الدعم.
الأسئلة الشائعة
كيف أقوم بإعداد Ultralytics YOLO26 مع خادم الاستدلال NVIDIA Triton Inference Server؟
يتضمن إعداد Ultralytics YOLO26 مع خادم الاستدلال NVIDIA Triton Inference Server عدة خطوات رئيسية:
تصدير 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)إعداد مستودع نماذج 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()تشغيل خادم 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 بكفاءة وعلى نطاق واسع على خادم Triton Server من أجل استدلال نماذج الذكاء الاصطناعي عالية الأداء.
ما الفوائد التي يقدمها استخدام Ultralytics YOLO26 مع خادم الاستدلال NVIDIA Triton Inference Server؟
يوفر دمج Ultralytics مع NVIDIA Triton Server العديد من المزايا:
- الاستدلال القابل للتطوير للذكاء الاصطناعي: يتيح Triton خدمة نماذج متعددة من مثيل خادم واحد، ويدعم التحميل والتفريغ الديناميكي للنماذج، مما يجعله قابلاً للتطوير بدرجة كبيرة لأحمال عمل الذكاء الاصطناعي المتنوعة.
- أداء عالي: مُحسَّن لوحدات معالجة الرسوميات NVIDIA، يضمن خادم Triton Inference Server عمليات استدلال عالية السرعة، وهو مثالي للتطبيقات في الوقت الفعلي مثل الكشف عن الأجسام.
- تجميع النماذج وإصدارها: يتيح وضع التجميع في Triton دمج نماذج متعددة لتحسين النتائج، ويدعم إصدار النموذج اختبار A/B والتحديثات المتجددة.
- تجميع الدفعات تلقائيًا: يقوم Triton تلقائيًا بتجميع طلبات الاستدلال المتعددة معًا، مما يحسن الإنتاجية ويقلل زمن الوصول بشكل كبير.
- نشر مبسط: التحسين التدريجي لسير عمل الذكاء الاصطناعي دون الحاجة إلى إصلاحات شاملة للنظام، مما يسهل التوسع بكفاءة.
للحصول على إرشادات تفصيلية حول إعداد وتشغيل Ultralytics مع Triton يرجى الرجوع إلى "إعداد خادم Triton وتشغيل الاستدلال".
لماذا يجب علي تصدير نموذج YOLO26 الخاص بي إلى تنسيق ONNX قبل استخدام خادم الاستدلال Triton Inference Server؟
يوفر استخدام تنسيق ONNX Open Neural Network Exchange) لنموذج Ultralytics الخاص بك قبل نشره على خادمNVIDIA Triton Server عدة مزايا رئيسية:
- إمكانية التشغيل البيني: يدعم تنسيق ONNX النقل بين أطر عمل التعلم العميق المختلفة (مثل PyTorch و TensorFlow)، مما يضمن توافقًا أوسع.
- Optimization: تعمل العديد من بيئات النشر، بما في ذلك Triton، على التحسين لـ ONNX، مما يتيح استدلالًا أسرع وأداءً أفضل.
- سهولة النشر: يتم دعم ONNX على نطاق واسع عبر الأطر والمنصات، مما يبسط عملية النشر في مختلف أنظمة التشغيل وتكوينات الأجهزة.
- الاستقلالية عن الإطار: بمجرد التحويل إلى ONNX، لن يعود النموذج الخاص بك مرتبطًا بإطاره الأصلي، مما يجعله أكثر قابلية للنقل.
- التوحيد القياسي: يوفر ONNX تمثيلًا موحدًا يساعد في التغلب على مشكلات التوافق بين أطر عمل الذكاء الاصطناعي المختلفة.
لتصدير النموذج الخاص بك، استخدم:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
onnx_file = model.export(format="onnx", dynamic=True)
يمكنك اتباع الخطوات الواردة في دليل تكامل ONNX لإكمال العملية.
هل يمكنني تشغيل الاستدلال باستخدام نموذج Ultralytics YOLO26 على خادم الاستدلال Triton Inference Server؟
نعم، يمكنك إجراء عملية الاستدلال باستخدام نموذج Ultralytics على خادمNVIDIA Triton 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 مع الاستمرار في استخدامYOLO Ultralytics YOLO المألوفة.
كيف تقارن Ultralytics YOLO26 بنماذج TensorFlow و PyTorch للنشر؟
تقدم Ultralytics YOLO26 العديد من المزايا الفريدة مقارنة بنماذج TensorFlow و PyTorch للنشر:
- الأداء في الوقت الفعلي: تم تحسين Ultralytics خصيصًا لمهام الكشف عن الكائنات في الوقت الفعلي، وهو يوفر دقة وسرعة على أحدث مستوى، مما يجعله الخيار المثالي للتطبيقات التي تتطلب تحليل الفيديو المباشر.
- سهولة الاستخدام: يتكامل Ultralytics بسلاسة مع خادم Triton ويدعم تنسيقات تصدير متنوعة (ONNXو TensorRT)، مما يجعله مرنًا لمختلف سيناريوهات النشر.
- الميزات المتقدمة: يتضمن Ultralytics ميزات مثل التحميل الديناميكي للنماذج، وإدارة إصدارات النماذج، والاستدلال التجميعي، وهي ميزات أساسية لنشر أنظمة الذكاء الاصطناعي القابلة للتوسع والموثوقة.
- واجهة برمجة تطبيقات مبسطة: توفر واجهة برمجة تطبيقات Ultralytics واجهة متسقة عبر أهداف نشر مختلفة، مما يقلل من منحنى التعلم ووقت التطوير.
- تحسين الأداء على الأجهزة الطرفية: صُممت نماذج Ultralytics خصيصًا للنشر على الأجهزة الطرفية، حيث توفر أداءً ممتازًا حتى على الأجهزة ذات الموارد المحدودة.
لمزيد من التفاصيل، قارن خيارات النشر في دليل تصدير النموذج.