İçeriğe geç

Triton Çıkarım Sunucusu ile Ultralytics YOLOv8

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 geniş ölçekte dağıtımını basitleştirir. Ultralytics YOLOv8 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 , PyTorch, ONNX Runtime ve diğerleri dahil olmak üzere çok çeşitli derin öğrenme ve makine öğrenimi çerçevelerini destekler. 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.
  • Ensemble çıkarımı, sonuçlara ulaşmak için birden fazla modelin birlikte kullanılmasına izin verir.
  • A/B testi ve sürekli güncellemeler için model versiyonlama.

Ö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]
    

YOLOv8 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("yolov8n.pt")  # load an official model

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

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

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)

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 YOLOv8 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 YOLOv8 ile NVIDIA Triton Inference Server'ı nasıl kurabilirim?

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

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

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

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

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

Entegrasyon Ultralytics YOLOv8NVIDIA Triton Inference Server ile ç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.

YOLOv8 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 YOLOv8 modelimi ONNX formatına aktarmalıyım?

Sizin için ONNX (Open Neural Network Exchange) formatını kullanma Ultralytics YOLOv8 modeli NVIDIA Triton Inference Server 'da dağıtmadan önce 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.

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

from ultralytics import YOLO

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

İşlemi tamamlamak için dışa aktarma kılavuzundaki adımları takip edebilirsiniz.

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

Evet, aşağıdakileri kullanarak çıkarımı çalıştırabilirsiniz Ultralytics YOLOv8 modelini NVIDIA Triton Çıkarım Sunucusuna yükleyebilirsiniz. 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")

Triton Server'ı YOLOv8 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 YOLOv8 ile TensorFlow ve PyTorch modelleri nasıl karşılaştırılır?

Ultralytics YOLOv8 dağıtım için TensorFlow ve PyTorch modellerine kıyasla çeşitli benzersiz avantajlar sunar:

  • Gerçek Zamanlı Performans: Gerçek zamanlı nesne algılama görevleri için optimize edilen YOLOv8 , son teknoloji ürünü doğruluk ve hız sağlayarak canlı video analizi gerektiren uygulamalar için idealdir.
  • Kullanım Kolaylığı: YOLOv8 , 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: YOLOv8 , ö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.

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



Oluşturma 2023-11-12, Güncelleme 2024-07-05
Yazarlar: glenn-jocher (10)

Yorumlar