Chuyển đến nội dung

Triton Inference Server với Ultralytics YOLO11

Triton Inference Server (trước đây gọi là TensorRT Inference Server) là một giải pháp phần mềm mã nguồn mở được phát triển bởi NVIDIA. Nó cung cấp một giải pháp suy luận đám mây được tối ưu hóa cho NVIDIA GPU. Triton đơn giản hóa việc triển khai các mô hình AI ở quy mô lớn trong sản xuất. Tích hợp Ultralytics YOLO11 với Triton Inference Server cho phép bạn triển khai các khối lượng công việc suy luận deep learning có khả năng mở rộng và hiệu suất cao. Hướng dẫn này cung cấp các bước để thiết lập và kiểm tra 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 mô hình AI trong sản xuất. Nó hỗ trợ nhiều framework học sâu và máy học, bao gồm TensorFlow, PyTorch, ONNX Runtime và nhiều framework khác. Các trường hợp sử dụng chính của nó là:

  • Phục vụ nhiều mô hình từ một phiên bản máy chủ duy nhất
  • Tải và dỡ mô hình động mà không cần khởi động lại máy chủ
  • Suy luận tập hợp, cho phép sử dụng nhiều mô hình cùng nhau để đạt được kết quả
  • Kiểm soát phiên bản mô hình để thử nghiệm A/B và cập nhật liên tục

Các lợi ích chính của Triton Inference Server

Sử dụng Triton Inference Server với Ultralytics YOLO11 mang lại một số lợi thế:

  • Tự động gom lô: Nhóm nhiều yêu cầu AI lại với nhau trước khi xử lý chúng, giảm độ trễ và cải thiện tốc độ suy luận
  • Tích hợp Kubernetes: Thiết kế gốc trên đám mây hoạt động liền mạch với Kubernetes để quản lý và mở rộng quy mô các ứng dụng AI
  • Tối ưu hóa cụ thể cho phần cứng: Tận dụng tối đa sức mạnh của GPU NVIDIA để đạt hiệu suất tối đa
  • Tính linh hoạt của Framework: Hỗ trợ nhiều framework AI bao gồm TensorFlow, PyTorch, ONNX và TensorRT
  • Mã nguồn mở và có thể tùy chỉnh: Có thể được sửa đổi để phù hợp với các nhu cầu cụ thể, đảm bảo tính linh hoạt cho các ứng dụng AI khác nhau

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

  • Docker đã được cài đặt trên máy của bạn
  • Cài đặt tritonclient:
    pip install tritonclient[all]
    

Xuất YOLO11 sang định dạng ONNX

Trước khi triển khai mô hình trên Triton, nó phải được xuất sang định dạng ONNX. ONNX (Open Neural Network Exchange) là một định dạng cho phép các mô hình được chuyển giao giữa các framework deep learning khác nhau. Sử dụng export function từ YOLO lớp:

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)

Thiết lập Kho lưu trữ Mô hình Triton

Triton Model Repository là một vị trí lưu trữ nơi Triton có thể truy cập và tải các mô hình.

  1. Tạo cấu trúc thư mục cần thiết:

    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. Di chuyển mô hình ONNX đã xuất sang kho lưu trữ Triton:

    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)
    

Chạy Triton Inference Server

Chạy Triton Inference Server bằng Docker:

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)

Sau đó, chạy suy luận bằng mô hình Triton Server:

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

Dọn dẹp container:

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

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

Để có hiệu suất cao hơn nữa, bạn có thể sử dụng TensorRT với Triton Inference Server. TensorRT là một trình tối ưu hóa học sâu hiệu suất cao được xây dựng đặc biệt cho GPU NVIDIA, có thể tăng đáng kể tốc độ suy luận.

Các lợi ích chính của việc sử dụng TensorRT với Triton bao gồm:

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

Để sử dụng TensorRT trực tiếp, bạn có thể xuất mô hình YOLO11 của mình sang định dạng TensorRT:

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'

Để 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.


Bằng cách làm theo các bước trên, bạn có thể triển khai và chạy các mô hình Ultralytics YOLO11 một cách hiệu quả trên Triton Inference Server, cung cấp một giải pháp có khả năng mở rộng và hiệu suất cao cho các tác vụ suy luận deep learning. Nếu bạn gặp bất kỳ vấn đề nào hoặc có thêm thắc mắc, hãy tham khảo tài liệu chính thức của Triton hoặc liên hệ với cộng đồng Ultralytics để được hỗ trợ.

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

Làm cách nào để thiết lập Ultralytics YOLO11 với NVIDIA Triton Inference Server?

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

  1. Xuất YOLO11 sang định dạng ONNX:

    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. Thiết lập Kho lưu trữ mô hình Triton:

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

Thiết lập này có thể giúp bạn triển khai hiệu quả các mô hình YOLO11 ở quy mô lớn trên Triton Inference Server để suy luận mô hình AI hiệu suất cao.

Việc sử dụng Ultralytics YOLO11 với NVIDIA Triton Inference Server mang lại những lợi ích gì?

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

  • Suy luận AI có khả năng mở rộng: Triton cho phép phục vụ nhiều mô hình từ một phiên bản máy chủ duy nhất, hỗ trợ tải và dỡ mô hình động, giúp nó có khả năng mở rộng cao cho các khối lượng công việc AI khác nhau.
  • Hiệu suất cao: Được tối ưu hóa cho NVIDIA GPU, Triton Inference Server đảm bảo các hoạt động suy luận tốc độ cao, hoàn hảo cho các ứng dụng thời gian thực như phát hiện đối tượng.
  • Tập hợp và kiểm soát phiên bản mô hình: Chế độ tập hợp của Triton cho phép kết hợp nhiều mô hình để cải thiện kết quả và tính năng kiểm soát phiên bản mô hình của nó hỗ trợ thử nghiệm A/B và cập nhật luân phiên.
  • Tự động gom lô: Triton tự động nhóm nhiều yêu cầu suy luận lại với nhau, cải thiện đáng kể thông lượng và giảm độ trễ.
  • Triển Khai Đơn Giản Hóa: Tối ưu hóa dần dần các quy trình làm việc AI mà không yêu cầu đại tu toàn bộ hệ thống, giúp dễ dàng mở rộng quy mô một cách hiệu quả.

Để biết hướng dẫn chi tiết về cách thiết lập và chạy YOLO11 với Triton, bạn có thể tham khảo hướng dẫn thiết lập.

Tại sao tôi nên xuất mô hình YOLO11 của mình sang định dạng ONNX trước khi sử dụng Triton Inference Server?

Sử dụng định dạng ONNX (Open Neural Network Exchange) cho mô hình Ultralytics YOLO11 của bạn trước khi triển khai nó 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ợ truyền dữ liệu 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 cả Triton, tối ưu hóa cho ONNX, cho phép suy luận nhanh hơn và hiệu suất tốt hơn.
  • Dễ dàng triển khai: ONNX được hỗ trợ rộng rãi trên các 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 khác nhau.
  • Tính độc lập của Framework: Sau khi được chuyển đổi sang ONNX, mô hình của bạn sẽ không còn bị ràng buộc với framework ban đầu, giúp mô hình trở nên dễ dàng di chuyển hơn.
  • Tiêu 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 đề về khả năng tương thích giữa các framework AI khác nhau.

Để xuất mô hình của bạn, hãy sử dụng:

from ultralytics import YOLO

model = YOLO("yolo11n.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.

Tôi có thể chạy suy luận bằng mô hình Ultralytics YOLO11 trên Triton Inference Server không?

Có, bạn có thể chạy suy luận bằng mô hình Ultralytics YOLO11 trên NVIDIA Triton Inference Server. Sau khi mô hình của bạn được thiết lập trong Kho lưu trữ mô hình Triton và máy chủ đang chạy, bạn có thể tải và chạy suy luận trên mô hình của mình như sau:

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

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 sử dụng giao diện Ultralytics YOLO quen thuộc. Để có hướng dẫn chuyên sâu về thiết lập và chạy Triton Server với YOLO11, hãy tham khảo phần chạy máy chủ suy luận triton.

Ultralytics YOLO11 so sánh với các mô hình TensorFlow và PyTorch để triển khai như thế nào?

Ultralytics YOLO11 cung cấp một số lợi thế độc đáo so với các mô hình TensorFlow và PyTorch để triển khai:

  • Hiệu suất theo thời gian thực: Được tối ưu hóa cho các tác vụ phát hiện đối tượng theo thời gian thực, YOLO11 cung cấp độ chính xác và tốc độ hiện đại, khiến nó trở nên lý tưởng cho các ứng dụng yêu cầu phân tích video trực tiếp.
  • Dễ sử dụng: YOLO11 tích hợp liền mạch với Triton Inference Server và hỗ trợ nhiều định dạng xuất khác nhau (ONNX, TensorRT, CoreML), giúp nó linh hoạt cho nhiều tình huống triển khai khác nhau.
  • Tính năng nâng cao: YOLO11 bao gồm các tính năng như tải mô hình động, quản lý phiên bản mô hình và suy luận tập hợp, rất quan trọng cho việc triển khai AI có khả năng mở rộng và đáng tin cậy.
  • API Đơn Giản Hóa: Ultralytics API cung cấp một giao diện nhất quán trên các mục tiêu triển khai khác nhau, giảm thời gian học và thời gian phát triển.
  • Tối ưu hóa cho thiết bị biên: Các mô hình YOLO11 được thiết kế chú trọng đến việc triển khai trên thiết bị biên, mang lại hiệu suất tuyệt vời ngay cả trên các thiết bị bị hạn chế về tài nguyên.

Để 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 xuất mô hình.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 5 tháng trước

Bình luận