Ultralytics YOLO27:

Triton Inference Server com Ultralytics YOLO26#

O Triton Inference Server (anteriormente conhecido como TensorRT Inference Server) é uma solução de software de código aberto desenvolvida pela NVIDIA. Ele fornece uma solução de inferência na nuvem otimizada para GPUs NVIDIA. O Triton simplifica a implementação de modelos de IA em escala na produção. A integração do Ultralytics YOLO26 com o Triton Inference Server permite implementar cargas de trabalho de inferência de deep learning escaláveis e de alto desempenho. Este guia apresenta as etapas para configurar e testar a integração.



Watch: Getting Started with NVIDIA Triton Inference Server.

O que é o Triton Inference Server?#

O Triton Inference Server foi concebido para implementar vários modelos de IA em produção. Ele é compatível com uma ampla variedade de frameworks de deep learning e machine learning, incluindo PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT e muitos outros. Os principais casos de uso são:

  • Disponibilização de vários modelos a partir de uma única instância do servidor
  • Carregamento e descarregamento dinâmicos de modelos sem reiniciar o servidor
  • Inferência de conjuntos, permitindo usar vários modelos em conjunto para obter resultados
  • Versionamento de modelos para testes A/B e atualizações graduais

Principais benefícios do Triton Inference Server#

Usar o Triton Inference Server com o Ultralytics YOLO26 oferece várias vantagens:

  • Agrupamento automático: Agrupa várias solicitações de IA antes de processá-las, reduzindo a latência e melhorando a velocidade de inferência
  • Integração com Kubernetes: O design nativo da nuvem funciona perfeitamente com Kubernetes para gerir e dimensionar aplicações de IA
  • Otimizações específicas do hardware: Aproveita ao máximo as GPUs NVIDIA para obter o máximo desempenho
  • Flexibilidade de frameworks: É compatível com vários frameworks de IA, incluindo PyTorch, TensorFlow, ONNX, OpenVINO e TensorRT
  • Código aberto e personalizável: Pode ser modificado para atender a necessidades específicas, garantindo flexibilidade para várias aplicações de IA

Pré-requisitos#

Certifica-te de que tens os seguintes pré-requisitos antes de continuar:

  • Docker (>= 28.2.0, com o NVIDIA Container Toolkit >= 1.18 para acesso a GPUs via CDI) ou Podman instalado na tua máquina
  • Instala ultralytics:
    pip install ultralytics
  • Instala tritonclient:
    pip install tritonclient[all]

Configurar o Triton Inference Server#

Executa este bloco completo de configuração para exportar o Ultralytics YOLO26 para ONNX, criar o repositório de modelos do Triton e iniciar o Triton Inference Server:

Nota

Usa a opção runtime no script para escolher o teu mecanismo de contentores:

  • Define runtime = "docker" para Docker
  • Define runtime = "podman" para 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)

Executar a inferência#

Executa a inferência usando o modelo do 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")

Limpa o contentor:

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)

Otimização com TensorRT (opcional)#

Para obter um desempenho ainda melhor, podes usar TensorRT com o Triton Inference Server. O TensorRT é um otimizador de deep learning de alto desempenho desenvolvido especificamente para GPUs NVIDIA, que pode aumentar significativamente a velocidade de inferência.

Os principais benefícios de usar TensorRT com o Triton incluem:

  • Inferência até 36 vezes mais rápida em comparação com modelos não otimizados
  • Otimizações específicas do hardware para maximizar a utilização da GPU
  • Suporte para formatos de precisão reduzida (INT8, FP16), mantendo a precisão
  • Fusão de camadas para reduzir a sobrecarga computacional

Para usar o TensorRT diretamente, podes exportar o teu modelo Ultralytics YOLO26 para o formato 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'

Para obter mais informações sobre a otimização do TensorRT, consulta o guia de integração do TensorRT.

Agora podes implementar e executar modelos Ultralytics YOLO26 no Triton Inference Server para obter uma inferência escalável e de alto desempenho. Para mais detalhes, consulta a documentação oficial do Triton ou pede ajuda à comunidade Ultralytics.

Perguntas frequentes#

  • A configuração do Ultralytics YOLO26 com o NVIDIA Triton Inference Server envolve algumas etapas importantes:

    1. Exportar o YOLO26 para o formato 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. Configurar o repositório de modelos do 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. Executar o 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)

    Esta configuração pode ajudar-te a implementar eficientemente modelos Ultralytics YOLO26 em escala no Triton Inference Server para obter inferência de modelos de IA de alto desempenho.

  • A integração do Ultralytics YOLO26 com o NVIDIA Triton Inference Server oferece várias vantagens:

    • Inferência de IA escalável: O Triton permite disponibilizar vários modelos a partir de uma única instância do servidor, com suporte para carregamento e descarregamento dinâmicos de modelos, tornando-o altamente escalável para diversas cargas de trabalho de IA.
    • Alto desempenho: Otimizado para GPUs NVIDIA, o Triton Inference Server garante operações de inferência de alta velocidade, perfeitas para aplicações em tempo real, como a deteção de objetos.
    • Conjuntos e versionamento de modelos: O modo de conjuntos do Triton permite combinar vários modelos para melhorar os resultados, enquanto o versionamento de modelos é compatível com testes A/B e atualizações graduais.
    • Agrupamento automático: O Triton agrupa automaticamente várias solicitações de inferência, melhorando significativamente o débito e reduzindo a latência.
    • Implementação simplificada: Permite otimizar gradualmente os fluxos de trabalho de IA sem exigir reformulações completas do sistema, facilitando o dimensionamento eficiente.

    Para obter instruções detalhadas sobre como configurar e executar o Ultralytics YOLO26 com o Triton, consulta Configurar o Triton Inference Server e Executar a inferência.

  • Usar o formato ONNX (Intercâmbio de Redes Neurais Abertas) no teu modelo Ultralytics YOLO26 antes de o implementar no NVIDIA Triton Inference Server oferece vários benefícios importantes:

    • Interoperabilidade: O formato ONNX permite a transferência entre diferentes frameworks de deep learning, como PyTorch e TensorFlow, garantindo uma compatibilidade mais ampla.
    • Otimização: Muitos ambientes de implementação, incluindo o Triton, são otimizados para ONNX, permitindo uma inferência mais rápida e um desempenho melhor.
    • Facilidade de implementação: O ONNX é amplamente compatível com frameworks e plataformas, simplificando o processo de implementação em vários sistemas operativos e configurações de hardware.
    • Independência de frameworks: Depois de convertido para ONNX, o teu modelo deixa de estar vinculado ao framework original, tornando-se mais portátil.
    • Padronização: O ONNX fornece uma representação padronizada que ajuda a ultrapassar problemas de compatibilidade entre diferentes frameworks de IA.

    Para exportar o teu modelo, usa:

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

    Podes seguir as etapas do guia de integração do ONNX para concluir o processo.

  • Sim, podes executar inferência usando o modelo Ultralytics YOLO26 no NVIDIA Triton Inference Server. Depois de configurares o teu modelo no repositório de modelos do Triton e iniciares o servidor, podes carregar e executar a inferência no teu modelo da seguinte forma:

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

    Esta abordagem permite aproveitar as otimizações do Triton enquanto usas a interface familiar do Ultralytics YOLO.

  • O Ultralytics YOLO26 oferece várias vantagens únicas em comparação com modelos TensorFlow e PyTorch para implementação:

    • Desempenho em tempo real: Otimizado para tarefas de deteção de objetos em tempo real, o Ultralytics YOLO26 oferece precisão e velocidade de última geração, sendo ideal para aplicações que exigem análise de vídeo ao vivo.
    • Facilidade de utilização: O Ultralytics YOLO26 integra-se perfeitamente com o Triton Inference Server e é compatível com diversos formatos de exportação (ONNX, TensorRT), oferecendo flexibilidade para vários cenários de implementação.
    • Recursos Avançados: A disponibilização através do Triton adiciona carregamento dinâmico de modelos, versionamento de modelos e inferência em conjunto, que são cruciais para implementações de IA escaláveis e confiáveis.
    • API simplificada: A API da Ultralytics fornece uma interface consistente em diferentes destinos de implementação, reduzindo a curva de aprendizagem e o tempo de desenvolvimento.
    • Otimização para edge: Os modelos Ultralytics YOLO26 são concebidos a pensar na implementação em edge, oferecendo um excelente desempenho mesmo em dispositivos com recursos limitados.

    Para obter mais detalhes, compara as opções de implementação no guia de exportação de modelos.

Comentários