Ultralytics YOLO27:

Ultralytics YOLO26 ile Triton Inference Server#

Triton Inference Server (önceden TensorRT Inference Server olarak biliniyordu), NVIDIA tarafından geliştirilen açık kaynaklı bir yazılım çözümüdür. NVIDIA GPU'ları için optimize edilmiş bir bulut çıkarım çözümü sunar. Triton, yapay zekâ modellerinin üretim ortamında büyük ölçekte dağıtımını kolaylaştırır. Ultralytics YOLO26 ile Triton Inference Server'ı entegre ederek ölçeklenebilir, yüksek performanslı derin öğrenme çıkarım iş yüklerini dağıtabilirsin. Bu kılavuzda entegrasyonu kurup test etmeye yönelik adımlar açıklanmaktadır.



Watch: Getting Started with NVIDIA Triton Inference Server.

Triton Inference Server nedir?#

Triton Inference Server, çeşitli yapay zekâ modellerini üretim ortamında dağıtmak için tasarlanmıştır. PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT ve diğer birçok çözüm dâhil olmak üzere çok çeşitli derin öğrenme ve makine öğrenmesi framework'ünü destekler. Başlıca kullanım alanları şunlardır:

  • Tek bir sunucu örneğinden birden çok model sunma
  • Sunucuyu yeniden başlatmadan modelleri dinamik olarak yükleme ve kaldırma
  • Sonuçları iyileştirmek için birden çok modelin birlikte kullanılmasını sağlayan ensemble çıkarımı
  • A/B testleri ve aşamalı güncellemeler için model sürümleme

Triton Inference Server'ın temel avantajları#

Triton Inference Server'ı Ultralytics YOLO26 ile kullanmak çeşitli avantajlar sunar:

  • Otomatik batch oluşturma: Birden çok yapay zekâ isteğini işlenmeden önce gruplandırarak gecikmeyi azaltır ve çıkarım hızını artırır
  • Kubernetes entegrasyonu: Bulut-yerel tasarımı, yapay zekâ uygulamalarını yönetmek ve ölçeklendirmek için Kubernetes ile sorunsuz şekilde çalışır
  • Donanıma özgü optimizasyonlar: En yüksek performans için NVIDIA GPU'larının tüm kapasitesinden yararlanır
  • Framework esnekliği: PyTorch, TensorFlow, ONNX, OpenVINO ve TensorRT dâhil olmak üzere birden çok yapay zekâ framework'ünü destekler
  • Açık kaynaklı ve özelleştirilebilir: Belirli ihtiyaçlara uyacak şekilde değiştirilebilir ve çeşitli yapay zekâ uygulamalarında esneklik sağlar

Ön koşullar#

Devam etmeden önce aşağıdaki ön koşullara sahip olduğundan emin ol:

  • Makinenizde Docker (>= 28.2.0, CDI GPU erişimi için NVIDIA Container Toolkit >= 1.18 ile) veya Podman kurulu olmalı
  • ultralytics'ı kur:
    pip install ultralytics
  • tritonclient'ı kur:
    pip install tritonclient[all]

Triton Inference Server'ı kurma#

Ultralytics YOLO26 modelini ONNX biçimine aktarmak, Triton model deposunu oluşturmak ve Triton Inference Server'ı başlatmak için bu tam kurulum bloğunu çalıştır:

Not

Kapsayıcı motorunu seçmek için betikte runtime anahtarını kullan:

  • Docker için runtime = "docker" değerini ayarla
  • Podman için runtime = "podman" değerini ayarla
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"
  }
}

# Enable TensorRT acceleration (requires a GPU and TensorRT-enabled Triton; remove this block for CPU-only serving)
# The 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)

# CDI GPU request works identically on Docker and Podman
gpu_flags = "--device nvidia.com/gpu=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)

Çıkarımı çalıştırma#

Triton Server modelini kullanarak çıkarım çalıştır:

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")

Kapsayıcıyı temizle:

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 optimizasyonu (İsteğe bağlı)#

Daha yüksek performans için Triton Inference Server ile TensorRT kullanabilirsin. TensorRT, özellikle NVIDIA GPU'ları için geliştirilmiş, çıkarım hızını önemli ölçüde artırabilen yüksek performanslı bir derin öğrenme optimizer'ıdır.

TensorRT'ı Triton ile kullanmanın temel avantajları şunlardır:

  • Optimize edilmemiş modellere kıyasla 36 kata kadar daha hızlı çıkarım
  • GPU kullanımını en üst düzeye çıkaran donanıma özgü optimizasyonlar
  • Doğruluğu korurken düşük hassasiyetli biçimler (INT8, FP16) için destek
  • Hesaplama yükünü azaltmak için katman birleştirme

TensorRT'yi doğrudan kullanmak için Ultralytics YOLO26 modelini TensorRT biçimine aktarabilirsin:

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 optimizasyonu hakkında daha fazla bilgi için TensorRT entegrasyon kılavuzuna bak.

Artık ölçeklenebilir, yüksek performanslı çıkarım için Ultralytics YOLO26 modellerini Triton Inference Server üzerinde dağıtıp çalıştırabilirsin. Daha fazla ayrıntı için resmî Triton belgelerine bakabilir veya yardım almak üzere Ultralytics topluluğuna sorabilirsin.

SSS#

  • Ultralytics YOLO26'yı NVIDIA Triton Inference Server ile kurmak birkaç temel adım içerir:

    1. YOLO26'yı ONNX biçimine aktar:

      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)
    2. Triton Model Repository'yi kur:

      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 Server'ı çalıştır:

      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)
      
      # CDI GPU request works identically on Docker and Podman
      gpu_flags = "--device nvidia.com/gpu=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)

    Bu kurulum, yüksek performanslı yapay zekâ modeli çıkarımı için Ultralytics YOLO26 modellerini Triton Inference Server üzerinde büyük ölçekte verimli şekilde dağıtmana yardımcı olabilir.

  • Ultralytics YOLO26'yı NVIDIA Triton Inference Server ile entegre etmek çeşitli avantajlar sunar:

    • Ölçeklenebilir yapay zekâ çıkarımı: Triton, tek bir sunucu örneğinden birden çok model sunmana ve modelleri dinamik olarak yükleyip kaldırmana olanak tanır; bu da onu çeşitli yapay zekâ iş yükleri için son derece ölçeklenebilir hâle getirir.
    • Yüksek performans: NVIDIA GPU'ları için optimize edilen Triton Inference Server, yüksek hızlı çıkarım işlemleri sunar ve nesne tespiti gibi gerçek zamanlı uygulamalar için idealdir.
    • Ensemble ve model sürümleme: Triton'un ensemble modu, sonuçları iyileştirmek için birden çok modeli birleştirmene olanak tanır; model sürümleme özelliği ise A/B testlerini ve aşamalı güncellemeleri destekler.
    • Otomatik batch oluşturma: Triton, birden çok çıkarım isteğini otomatik olarak birlikte gruplandırarak throughput'u önemli ölçüde artırır ve gecikmeyi azaltır.
    • Basitleştirilmiş dağıtım: Yapay zekâ iş akışlarını tamamen yeniden yapılandırmaya gerek kalmadan kademeli olarak optimize etmeyi sağlayarak verimli ölçeklendirmeyi kolaylaştırır.

    Ultralytics YOLO26'yı Triton ile kurup çalıştırma hakkında ayrıntılı talimatlar için Triton Inference Server'ı kurma ve Çıkarımı çalıştırma bölümlerine bak.

  • Ultralytics YOLO26 modelin için NVIDIA Triton Inference Server üzerinde dağıtımdan önce ONNX (Açık Sinir Ağı Değişimi) biçimini kullanmak çeşitli önemli avantajlar sunar:

    • Birlikte çalışabilirlik: ONNX biçimi, farklı derin öğrenme framework'leri (PyTorch ve TensorFlow gibi) arasında aktarımı destekleyerek daha geniş uyumluluk sağlar.
    • Optimizasyon: Triton dâhil birçok dağıtım ortamı ONNX için optimize edilmiştir; bu da daha hızlı çıkarım ve daha iyi performans sağlar.
    • Dağıtım kolaylığı: ONNX, framework'ler ve platformlar genelinde geniş ölçüde desteklenir; bu da çeşitli işletim sistemleri ve donanım yapılandırmalarında dağıtım sürecini basitleştirir.
    • Framework bağımsızlığı: ONNX'e dönüştürüldükten sonra modelin artık özgün framework'üne bağlı kalmaz ve daha taşınabilir hâle gelir.
    • Standartlaştırma: ONNX, farklı yapay zekâ framework'leri arasındaki uyumluluk sorunlarının aşılmasına yardımcı olan standartlaştırılmış bir gösterim sunar.

    Modelini aktarmak için şunu kullan:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    onnx_file = model.export(format="onnx", dynamic=True)

    İşlemi tamamlamak için ONNX entegrasyon kılavuzundaki adımları izleyebilirsin.

  • Evet, NVIDIA Triton Inference Server üzerinde Ultralytics YOLO26 modelini kullanarak çıkarım çalıştırabilirsin. Modelin Triton Model Repository'ye kurulduktan ve sunucu çalışmaya başladıktan sonra modelini aşağıdaki şekilde yükleyip çıkarım çalıştırabilirsin:

    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")

    Bu yaklaşım, tanıdık Ultralytics YOLO arayüzünü kullanırken Triton'un optimizasyonlarından yararlanmanı sağlar.

  • Ultralytics YOLO26, dağıtım açısından TensorFlow ve PyTorch modellerine kıyasla çeşitli benzersiz avantajlar sunar:

    • Gerçek zamanlı performans: Gerçek zamanlı nesne tespiti görevleri için optimize edilen Ultralytics YOLO26, en son teknoloji doğruluk ve hız sunarak canlı video analizi gerektiren uygulamalar için ideal hâle gelir.
    • Kullanım kolaylığı: Ultralytics YOLO26, Triton Inference Server ile sorunsuz şekilde entegre olur ve çeşitli dışa aktarma biçimlerini (ONNX, TensorRT) destekleyerek farklı dağıtım senaryolarında esneklik sağlar.
    • Gelişmiş Özellikler: Triton aracılığıyla sunum yapmak; ölçeklenebilir ve güvenilir yapay zeka dağıtımları için çok önemli olan dinamik model yükleme, model sürümleme ve topluluk çıkarımı ekler.
    • Basitleştirilmiş API: Ultralytics API'si farklı dağıtım hedefleri arasında tutarlı bir arayüz sunarak öğrenme eğrisini ve geliştirme süresini azaltır.
    • Uç optimizasyonu: Ultralytics YOLO26 modelleri uç cihazlarda dağıtım göz önünde bulundurularak tasarlanmıştır ve kaynakları sınırlı cihazlarda bile mükemmel performans sunar.

    Daha fazla ayrıntı için model dışa aktarma kılavuzunda dağıtım seçeneklerini karşılaştır.

Yorumlar