İçeriğe geç

Triton Çıkarım Sunucusu ile Ultralytics YOLO11

Triton Inference Server (eski adıyla TensorRT Inference Server) 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 zeka modellerinin üretimde ölçekli olarak dağıtılmasını basitleştirir. Ultralytics YOLO11 ile Triton Inference Server'ı entegre etmek, ölçeklenebilir, yüksek performanslı derin öğrenme çıkarım iş yüklerini dağıtmanıza olanak tanır. Bu kılavuz, entegrasyonu ayarlamak ve test etmek için adımlar sağlar.



İzle: NVIDIA Triton Inference Server ile Başlarken.

Triton Çıkarım Sunucusu nedir?

Triton Inference Server, üretimde çeşitli yapay zeka modellerini dağıtmak için tasarlanmıştır. TensorFlow dahil olmak üzere çok çeşitli derin öğrenme ve makine öğren imi çerçevelerini destekler, PyTorch, ONNX Runtime ve diğerleri. Birincil kullanım alanları şunlardır:

  • Tek bir sunucu örneğinden birden fazla model sunma
  • Sunucu yeniden başlatılmadan dinamik model yükleme ve boşaltma
  • Sonuçlara ulaşmak için birden fazla modelin birlikte kullanılmasına izin veren topluluk çıkarımı
  • A/B testi ve sürekli güncellemeler için model versiyonlama

Triton Çıkarım Sunucusunun Temel Faydaları

Triton Inference Server'ı Ultralytics YOLO11 ile kullanmak çeşitli avantajlar sağlar:

  • Otomatik gruplama: Birden fazla yapay zeka talebini işlemeden önce bir araya getirerek gecikme süresini azaltır ve çıkarım hızını artırır
  • Kubernetes entegrasyonu: Buluta özgü tasarım, yapay zeka uygulamalarını yönetmek ve ölçeklendirmek için Kubernetes ile sorunsuz bir şekilde çalışır
  • Donanıma özel optimizasyonlar: Maksimum performans için NVIDIA GPU'lardan tam olarak yararlanır
  • Çerçeve esnekliği: TensorFlow, PyTorch, ONNX ve TensorRT dahil olmak üzere birden fazla yapay zeka çerçevesini destekler
  • Açık kaynaklı ve özelleştirilebilir: Özel ihtiyaçlara uyacak şekilde değiştirilebilir ve çeşitli yapay zeka uygulamaları için esneklik sağlar

Ön Koşullar

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

  • Makinenizde Docker yüklü
  • Kurulum tritonclient:
    pip install tritonclient[all]
    

YOLO11 adresini ONNX biçimine aktarma

Modeli Triton adresine yerleştirmeden önce ONNX formatına aktarılması gerekir. ONNX (Open Neural Network Exchange), modellerin farklı derin öğrenme çerçeveleri arasında aktarılmasını sağlayan bir formattır. Kullanın export fonksiyonundan YOLO Sınıf:

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 Model Deposunun Kurulması

Triton Model Deposu, Triton adresinin modellere erişebileceği ve yükleyebileceği bir depolama yeridir.

  1. Gerekli dizin yapısını oluşturun:

    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. Dışa aktarılan ONNX modelini Triton deposuna taşıyın:

    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 Çıkarım Sunucusunu Çalıştırma

Docker kullanarak Triton Çıkarım Sunucusunu çalıştırın:

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)

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

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

Konteyneri temizleyin:

# Kill and remove the container at the end of the test
subprocess.call(f"docker kill {container_id}", shell=True)

TensorRT Optimizasyonu (İsteğe Bağlı)

Daha da yüksek performans için şunları kullanabilirsiniz TensorRTTriton Inference Server ile. TensorRT , özellikle NVIDIA GPU'lar için geliştirilmiş ve çıkarım hızını önemli ölçüde artırabilen yüksek performanslı bir derin öğrenme iyileştiricisidir.

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

  • Optimize edilmemiş modellere kıyasla 36 kata kadar daha hızlı çıkarım
  • Maksimum GPU kullanımı için donanıma özel optimizasyonlar
  • Doğruluğu korurken azaltılmış hassasiyet formatları (INT8, FP16) için destek
  • Hesaplama yükünü azaltmak için katman füzyonu

TensorRT 'yi doğrudan kullanmak için YOLO11 modelinizi TensorRT formatına aktarabilirsiniz:

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


Yukarıdaki adımları izleyerek, derin öğrenme çıkarım görevleri için ölçeklenebilir ve yüksek performanslı bir çözüm sağlayan Triton Inference Server üzerinde Ultralytics YOLO11 modellerini verimli bir şekilde dağıtabilir ve çalıştırabilirsiniz. Herhangi bir sorunla karşılaşırsanız veya başka sorularınız varsa, resmi Triton belgelerine bakın veya destek için Ultralytics topluluğuna ulaşın.

SSS

Ultralytics YOLO11 ile NVIDIA Triton Çıkarım Sunucusunu nasıl kurabilirim?

Kurulum Ultralytics YOLO11 NVIDIA Triton Çıkarım Sunucusu ile birkaç temel adımı içerir:

  1. YOLO11 adresini ONNX biçimine aktarın:

    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 Model Deposunu kurun:

    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 Sunucusunu çalıştırın:

    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)
    

Bu kurulum, yüksek performanslı yapay zeka model çıkarımı için Triton Inference Server üzerinde YOLO11 modellerini verimli bir şekilde dağıtmanıza yardımcı olabilir.

Ultralytics YOLO11 adresini NVIDIA Triton Inference Server ile kullanmak ne gibi avantajlar sağlar?

Ultralytics YOLO11 ' inNVIDIA Triton Inference Server ile entegre edilmesi çeşitli avantajlar sağlar:

  • Ölçeklenebilir Yapay Zeka Çıkarsaması: Triton , tek bir sunucu örneğinden birden fazla modelin sunulmasına izin verir, dinamik model yükleme ve boşaltmayı destekler, bu da onu çeşitli yapay zeka iş yükleri için yüksek oranda ölçeklenebilir hale getirir.
  • Yüksek Performans: NVIDIA GPU'lar için optimize edilen Triton Inference Server, nesne algılama gibi gerçek zamanlı uygulamalar için mükemmel olan yüksek hızlı çıkarım işlemleri sağlar.
  • Topluluk ve Model Versiyonlama: Triton'un topluluk modu, sonuçları iyileştirmek için birden fazla modelin birleştirilmesini sağlar ve model versiyonlama, A/B testini ve sürekli güncellemeleri destekler.
  • Otomatik Gruplama: Triton , birden fazla çıkarım talebini otomatik olarak bir araya getirerek verimi önemli ölçüde artırır ve gecikmeyi azaltır.
  • Basitleştirilmiş Dağıtım: Komple sistem revizyonu gerektirmeden yapay zeka iş akışlarının kademeli optimizasyonu, verimli bir şekilde ölçeklendirmeyi kolaylaştırır.

YOLO11 adresinin Triton ile kurulumu ve çalıştırılması hakkında ayrıntılı talimatlar için kurulum kılavuzuna başvurabilirsiniz.

Triton Inference Server'ı kullanmadan önce neden YOLO11 modelimi ONNX formatına aktarmalıyım?

Ultralytics YOLO11 modelinizi NVIDIA Triton Inference Server 'da dağıtmadan önce ONNX (Open Neural Network Exchange) formatını kullanmak birkaç önemli avantaj sunar:

  • Birlikte çalışabilirlik: ONNX formatı, farklı derin öğrenme çerçeveleri ( PyTorch, TensorFlow gibi) arasında aktarımı destekleyerek daha geniş uyumluluk sağlar.
  • Optimizasyon: Triton dahil olmak üzere birçok dağıtım ortamı, ONNX için optimize edilerek daha hızlı çıkarım ve daha iyi performans sağlar.
  • Dağıtım Kolaylığı: ONNX , çeşitli işletim sistemleri ve donanım yapılandırmalarında dağıtım sürecini basitleştiren çerçeveler ve platformlar arasında yaygın olarak desteklenmektedir.
  • Çerçeve Bağımsızlığı: ONNX'e dönüştürüldükten sonra, modeliniz artık orijinal çerçevesine bağlı değildir, bu da onu daha taşınabilir hale getirir.
  • Standardizasyon: ONNX , farklı yapay zeka çerçeveleri arasındaki uyumluluk sorunlarının üstesinden gelmeye yardımcı olan standartlaştırılmış bir temsil sağlar.

Modelinizi dışa aktarmak için şunu kullanın:

from ultralytics import YOLO

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

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

Ultralytics YOLO11 modelini kullanarak Triton Çıkarım Sunucusu üzerinde çıkarım yapabilir miyim?

Evet, NVIDIA Triton Çıkarım Sunucusunda Ultralytics YOLO11 modelini kullanarak çıkarım çalıştırabilirsiniz. Modeliniz Triton Model Deposunda kurulduktan ve sunucu çalıştıktan sonra, modelinize aşağıdaki şekilde çıkarım yükleyebilir ve çalıştırabilirsiniz:

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

Bu yaklaşım, tanıdık Ultralytics YOLO arayüzünü kullanırken Triton'un optimizasyonlarından yararlanmanıza olanak tanır. Triton Server'ı YOLO11 ile kurma ve çalıştırma hakkında ayrıntılı bir kılavuz için triton çıkarım sunucusunu çalıştırma bölümüne bakın.

Dağıtım için Ultralytics YOLO11 ile TensorFlow ve PyTorch modelleri nasıl karşılaştırılır?

Ultralytics YOLO11 ile karşılaştırıldığında birçok benzersiz avantaj sunar. TensorFlow ve dağıtım için PyTorch modelleri:

  • Gerçek Zamanlı Performans: Gerçek zamanlı nesne algılama görevleri için optimize edilen YOLO11 , son teknoloji ürünü doğruluk ve hız sağlayarak canlı video analizi gerektiren uygulamalar için idealdir.
  • Kullanım Kolaylığı: YOLO11 , Triton Inference Server ile sorunsuz bir şekilde entegre olur ve çeşitli dışa aktarma formatlarını destekler (ONNX, TensorRT, CoreML), bu da onu çeşitli dağıtım senaryoları için esnek hale getirir.
  • Gelişmiş Özellikler: YOLO11 , ö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ı gibi özellikler içerir.
  • Basitleştirilmiş API: Ultralytics API, farklı dağıtım hedefleri arasında tutarlı bir arayüz sağlayarak öğrenme eğrisini ve geliştirme süresini azaltır.
  • Uç Optimizasyonu: YOLO11 modelleri, kaynak kısıtlaması olan cihazlarda bile mükemmel performans sunan uç dağıtımı düşünülerek tasarlanmıştır.

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

📅1 yıl önce oluşturuldu ✏️ 8 gün önce güncellendi

Yorumlar