Ultralytics YOLO27:
Get Started

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 dịch vụ suy luận đám mây được tối ưu hóa cho GPU NVIDIA. Triton đơn giản hóa việc triển khai model AI ở quy mô lớn trong môi trường production. Tích hợp Ultralytics YOLO26 với Triton Inference Server cho phép bạn triển khai các workload suy luận deep learning có khả năng mở rộng và hiệu năng cao. Hướng dẫn này trình bày các bước thiết lập và kiểm thử tích hợp.



Xem: Bắt đầu với 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 này 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 phiên bản server duy nhất
  • Tải và gỡ tải model linh hoạt mà không cần khởi động lại server
  • Suy luận ensemble, cho phép kết hợp nhiều model để đạt kết quả tốt hơn
  • Quản lý phiên bản model để kiểm thử A/B và cập nhật cuốn chiếu

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 yêu cầu AI trước khi xử lý, giúp giảm độ trễ và tăng tốc độ suy luận
  • Tích hợp Kubernetes: Thiết kế cloud-native hoạt động liền mạch với Kubernetes để quản lý và mở rộng ứng dụng AI
  • Tối ưu hóa theo phần cứng: Khai thác tối đa GPU NVIDIA để đạt hiệu năng cao nhất
  • Linh hoạt về framework: Hỗ trợ nhiều framework AI, bao gồm PyTorch, TensorFlow, ONNX, OpenVINO và TensorRT
  • Mã nguồn mở và có thể tùy chỉnh: Có thể sửa đổi để đáp ứng 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#

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

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

Thiết lập Triton Inference Server#

Chạy toàn bộ khối thiết lập này để export Ultralytics YOLO26 sang ONNX, tạo Triton model repository và khởi động Triton Inference Server:

Lưu ý

Dùng tùy chọn runtime trong script để chọn container engine:

  • Đặ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 suy luận#

Chạy suy luận bằng model Triton Server:

from ultralytics import YOLO

# # Tải model Triton Server
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")

# # Chạy suy luận trên 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ể dùng TensorRT với Triton Inference Server. TensorRT là trình tối ưu hóa deep learning hiệu năng cao được thiết kế riêng cho GPU NVIDIA, có thể tăng đáng kể tốc độ suy luận.

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

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

config.pbtxt ở trên đã bật bộ tăng tốc TensorRT của Triton cho model ONNX. Nếu muốn chạy TensorRT trực tiếp với Ultralytics, hãy export model Ultralytics YOLO26 sang định dạng TensorRT:

from ultralytics import YOLO

# Tải model YOLO26
model = YOLO("yolo26n.pt")

# Export model sang định dạng TensorRT
model.export(format="engine")  # # tạo '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 model Ultralytics YOLO26 trên Triton Inference Server để suy luận 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 nhờ cộng đồng Ultralytics hỗ trợ.

Câu hỏi thường gặp#

  • Thiết lập Ultralytics YOLO26 với NVIDIA Triton Inference Server gồm một vài bước chính:

    1. Export YOLO26 sang định dạng ONNX:

      from ultralytics import YOLO
      
      # Tải model
      model = YOLO("yolo26n.pt")  # tải model chính thức
      
      # # Xuất model sang định dạng ONNX
      onnx_file = model.export(format="onnx", dynamic=True)
    2. Thiết lập Triton Model Repository:

      from pathlib import Path
      
      # # Xác định đường dẫn
      model_name = "yolo"
      triton_repo_path = Path("tmp") / "triton_repo"
      triton_model_path = triton_repo_path / model_name
      
      # # Tạo thư mục
      (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 có thể giúp bạn triển khai hiệu quả các model Ultralytics YOLO26 ở quy mô lớn trên Triton Inference Server để suy luận model AI hiệu năng cao.

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

    • Suy luận AI có khả năng mở rộng: Triton cho phép phục vụ nhiều model từ một phiên bản server duy nhất, hỗ trợ tải và gỡ tải model linh hoạt, 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 hoạt động suy luận tốc độ cao, phù hợp với các ứng dụng thời gian thực như object detection.
    • Ensemble và quản lý phiên bản 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 tính năng quản lý phiên bản model hỗ trợ kiểm thử A/B và cập nhật cuốn chiếu.
    • Batching tự động: Triton tự động gom nhiều yêu cầu suy luận, giúp cải thiện đáng kể throughput và giảm độ trễ.
    • Đơn giản hóa triển khai: Tối ưu hóa dần workflow AI mà không cần cải tổ toàn bộ hệ thống, giúp mở rộng quy mô hiệu quả hơn.

    Để biết 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 Server và Chạy suy luận.

  • Sử dụng định dạng 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, tối ưu hóa cho ONNX, giúp suy luận nhanh hơn và hiệu năng tốt hơn.
    • Triển khai dễ dàng: ONNX được hỗ trợ rộng rãi trên nhiều framework và nền tảng, giúp đơn giản hóa quá 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 với framework: Sau khi chuyển đổi sang ONNX, model không còn phụ thuộc vào framework ban đầu, giúp model dễ dàng chuyển đổi giữa các môi trường hơn.
    • Chuẩn hóa: ONNX cung cấp một biểu diễn tiêu chuẩn giúp khắc phục các vấn đề tương thích giữa những framework AI khác nhau.

    Để export model, hãy 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 thiết lập model trong Triton Model Repository và khởi chạy server, bạn có thể tải model và chạy inference như sau:

    from ultralytics import YOLO
    
    # # Tải model Triton Server
    model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
    
    # # Chạy suy luận trên server
    results = model("path/to/image.jpg")

    Phương pháp 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 giao diện Ultralytics YOLO quen thuộc.

  • Ultralytics YOLO26 có một số ưu điểm 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 cho các tác vụ phát hiện đối tượng thời gian thực, Ultralytics YOLO26 mang lại độ chính xác và tốc độ tiên tiến, phù hợp với các ứng dụng cần 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), giúp model linh hoạt trong nhiều kịch bản triển khai.
    • Tính năng nâng cao: Phục vụ model qua Triton bổ sung khả năng tải model động, quản lý phiên bản model và inference kết hợp, những tính năng thiết yếu để triển khai AI có khả năng mở rộng và độ tin cậy cao.
    • API đơn giản hóa: API Ultralytics cung cấp giao diện nhất quán trên các môi trường triển khai khác nhau, giảm thời gian làm quen và phát triển.
    • Tối ưu hóa cho edge: Các model Ultralytics YOLO26 được thiết kế hướng đến triển khai edge, mang lại hiệu năng xuất sắc ngay cả trên 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