Ultralytics YOLO27:

Triton Inference Server với Ultralytics YOLO26#

Triton Inference Server (trước đây có tên là TensorRT Inference Server) là một giải pháp phần mềm mã nguồn mở do NVIDIA phát triển. Giải pháp này cung cấp khả năng inference trên cloud được tối ưu hóa cho GPU NVIDIA. Triton đơn giản hóa việc triển khai các model AI ở quy mô lớn trong môi trường production. Việc tích hợp Ultralytics YOLO26 với Triton Inference Server cho phép bạn triển khai các workload inference deep learning có khả năng mở rộng và hiệu năng cao. Hướng dẫn này cung cấp các bước để thiết lập và kiểm thử quá trình tích hợp.



Watch: Getting Started with NVIDIA Triton Inference Server.

Triton Inference Server là gì?#

Triton Inference Server được thiết kế để triển khai nhiều loại model AI trong môi trường production. Server hỗ trợ nhiều framework deep learning và machine learning, bao gồm PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT và nhiều framework khác. Các trường hợp sử dụng chính gồm:

  • Phục vụ nhiều model từ một instance server duy nhất
  • Load và unload model động mà không cần khởi động lại server
  • Inference ensemble, cho phép sử dụng nhiều model cùng nhau để đạt được kết quả
  • Versioning model cho kiểm thử A/B và cập nhật rolling

Lợi ích chính của Triton Inference Server#

Sử dụng Triton Inference Server với Ultralytics YOLO26 mang lại một số lợi ích:

  • Batching tự động: Gom nhiều request AI lại trước khi xử lý, giúp giảm latency và tăng tốc độ inference
  • Tích hợp Kubernetes: Thiết kế cloud-native hoạt động liền mạch với Kubernetes để quản lý và scale các ứng dụng AI
  • Tối ưu hóa theo phần cứng: Tận dụng tối đa GPU NVIDIA để đạt hiệu năng cao nhất
  • Tính linh hoạt về framework: Hỗ trợ nhiều framework AI, bao gồm PyTorch, TensorFlow, ONNX, OpenVINOTensorRT
  • Mã nguồn mở và có thể tùy chỉnh: Có thể được sửa đổi để đáp ứng các nhu cầu cụ thể, đảm bảo tính linh hoạt cho nhiều ứng dụng AI

Điều kiện tiên quyết#

Đảm bảo bạn đã có các điều kiện tiên quyết sau trước khi tiếp tục:

  • Đã cài đặt Docker (>= 28.2.0, với NVIDIA Container Toolkit >= 1.18 để truy cập GPU qua CDI) hoặc Podman trên máy của bạn
  • Cài đặt ultralytics:
    pip install ultralytics
  • Cài đặt tritonclient:
    pip install tritonclient[all]

Thiết lập Triton Inference Server#

Chạy block thiết lập đầy đủ này để export Ultralytics YOLO26 sang ONNX, xây dựng model repository của Triton và khởi động Triton Inference Server:

Lưu ý

Sử dụng switch runtime trong script để chọn container engine của bạn:

  • Đặt runtime = "docker" cho Docker
  • Đặt runtime = "podman" cho 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"
  }
}

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

Chạy Inference#

Chạy inference bằng model Triton Server:

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

Dọn dẹp container:

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)

Tối ưu hóa TensorRT (Tùy chọn)#

Để đạt hiệu năng cao hơn nữa, bạn có thể sử dụng TensorRT với Triton Inference Server. TensorRT là optimizer deep learning hiệu năng cao được xây dựng riêng cho GPU NVIDIA, có thể tăng đáng kể tốc độ inference.

Các lợi ích chính khi sử dụng TensorRT với Triton gồm:

  • Inference nhanh hơn tới 36 lần so với các model chưa được tối ưu hóa
  • Tối ưu hóa theo phần cứng để tận dụng GPU tối đa
  • Hỗ trợ các định dạng precision thấp hơn (INT8, FP16) trong khi vẫn duy trì độ chính xác
  • Fusion layer để giảm overhead tính toán

Để sử dụng TensorRT trực tiếp, bạn có thể export model Ultralytics YOLO26 sang định dạng 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'

Để biết thêm thông tin về tối ưu hóa TensorRT, hãy xem hướng dẫn tích hợp TensorRT.

Giờ đây, bạn có thể triển khai và chạy các model Ultralytics YOLO26 trên Triton Inference Server để thực hiện inference có khả năng mở rộng và hiệu năng cao. Để biết thêm chi tiết, hãy xem tài liệu Triton chính thức hoặc yêu cầu trợ giúp từ cộng đồng Ultralytics.

FAQ#

  • Việc thiết lập Ultralytics YOLO26 với NVIDIA Triton Inference Server gồm một số bước chính:

    1. Export YOLO26 sang định dạng 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)
    2. Thiết lập Triton Model Repository:

      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. Chạy Triton Server:

      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)

    Thiết lập này giúp bạn triển khai hiệu quả các model Ultralytics YOLO26 ở quy mô lớn trên Triton Inference Server để thực hiện inference model AI hiệu năng cao.

  • Việc tích hợp Ultralytics YOLO26 với NVIDIA Triton Inference Server mang lại một số lợi ích:

    • Inference AI có khả năng mở rộng: Triton cho phép phục vụ nhiều model từ một instance server duy nhất, hỗ trợ load và unload model động, nhờ đó có khả năng mở rộng cao cho nhiều workload AI khác nhau.
    • Hiệu năng cao: Được tối ưu hóa cho GPU NVIDIA, Triton Inference Server đảm bảo các tác vụ inference tốc độ cao, phù hợp với các ứng dụng thời gian thực như phát hiện đối tượng.
    • Ensemble và versioning model: Chế độ ensemble của Triton cho phép kết hợp nhiều model để cải thiện kết quả, còn versioning model hỗ trợ kiểm thử A/B và cập nhật rolling.
    • Batching tự động: Triton tự động gom nhiều request inference lại với nhau, cải thiện đáng kể throughput và giảm latency.
    • Đơn giản hóa triển khai: Cho phép tối ưu hóa dần các workflow AI mà không cần đại tu toàn bộ hệ thống, giúp scale hiệu quả dễ dàng hơn.

    Để xem hướng dẫn chi tiết về cách thiết lập và chạy Ultralytics YOLO26 với Triton, hãy xem Thiết lập Triton Inference ServerChạy Inference.

  • Việc sử dụng định dạng ONNX (Trao đổi Mạng Nơ-ron Mở (ONNX)) cho model Ultralytics YOLO26 trước khi triển khai trên NVIDIA Triton Inference Server mang lại một số lợi ích chính:

    • Khả năng tương tác: Định dạng ONNX hỗ trợ chuyển đổi giữa các framework deep learning khác nhau (chẳng hạn như PyTorch, TensorFlow), đảm bảo khả năng tương thích rộng hơn.
    • Tối ưu hóa: Nhiều môi trường triển khai, bao gồm Triton, được tối ưu hóa cho ONNX, giúp inference nhanh hơn và đạt hiệu năng tốt hơn.
    • Dễ triển khai: ONNX được hỗ trợ rộng rãi trên nhiều framework và nền tảng, đơn giản hóa quy trình triển khai trên nhiều hệ điều hành và cấu hình phần cứng.
    • Độc lập framework: Sau khi được chuyển đổi sang ONNX, model không còn phụ thuộc vào framework ban đầu, giúp model có tính portability cao hơn.
    • Tiêu chuẩn hóa: ONNX cung cấp một biểu diễn được tiêu chuẩn hóa, giúp giải quyết các vấn đề tương thích giữa những framework AI khác nhau.

    Để export model, hãy sử dụng:

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

    Bạn có thể làm theo các bước trong hướng dẫn tích hợp ONNX để hoàn tất quy trình.

  • Có, bạn có thể chạy inference bằng model Ultralytics YOLO26 trên NVIDIA Triton Inference Server. Sau khi model được thiết lập trong Triton Model Repository và server đang chạy, bạn có thể load và chạy inference trên model như sau:

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

    Cách tiếp cận này cho phép bạn tận dụng các tối ưu hóa của Triton trong khi vẫn sử dụng interface Ultralytics YOLO quen thuộc.

  • Ultralytics YOLO26 mang lại một số lợi thế riêng so với các model TensorFlow và PyTorch khi triển khai:

    • Hiệu năng thời gian thực: Được tối ưu hóa cho các tác vụ phát hiện đối tượng thời gian thực, Ultralytics YOLO26 cung cấp độ chính xác và tốc độ tiên tiến nhất, phù hợp với các ứng dụng yêu cầu phân tích video trực tiếp.
    • Dễ sử dụng: Ultralytics YOLO26 tích hợp liền mạch với Triton Inference Server và hỗ trợ nhiều định dạng export (ONNX, TensorRT), mang lại sự linh hoạt cho nhiều kịch bản triển khai.
    • Tính năng Nâng cao: Việc phục vụ mô hình thông qua Triton bổ sung tính năng tải mô hình động, quản lý phiên bản mô hình và suy luận tập hợp, những yếu tố cốt lõi cho các hệ thống triển khai AI có khả năng mở rộng và độ tin cậy cao.
    • API đơn giản hóa: Ultralytics API cung cấp interface nhất quán trên các target triển khai khác nhau, rút ngắn thời gian làm quen và phát triển.
    • Tối ưu hóa edge: Các model Ultralytics YOLO26 được thiết kế hướng đến việc triển khai trên edge, mang lại hiệu năng xuất sắc ngay cả trên các thiết bị có tài nguyên hạn chế.

    Để biết thêm chi tiết, hãy so sánh các tùy chọn triển khai trong hướng dẫn export model.

Bình luận