Otimização da inferência do OpenVINO para YOLO#
Introdução#
Ao implementar modelos de deep learning, especialmente modelos de deteção de objetos, como os modelos Ultralytics YOLO, alcançar um desempenho ideal é crucial. Este guia explora como utilizar o kit de ferramentas OpenVINO da Intel para otimizar a inferência, com foco na latência e no throughput. Quer estejas a trabalhar em aplicações para consumidores ou em implementações de grande escala, compreender e aplicar estas estratégias de otimização garantirá que os teus modelos funcionam de forma eficiente em vários dispositivos.
Otimização para latência#
A otimização da latência é essencial para aplicações que exigem uma resposta imediata de um único modelo perante uma única entrada, algo típico em cenários de consumo. O objetivo é minimizar o atraso entre a entrada e o resultado da inferência. No entanto, alcançar uma latência baixa exige uma análise cuidadosa, especialmente ao executar inferências simultâneas ou gerir vários modelos.
Principais Estratégias para Otimização de Latência#
- Uma inferência por dispositivo: A forma mais simples de alcançar uma latência baixa é limitar a execução a uma inferência de cada vez por dispositivo. Uma simultaneidade adicional conduz frequentemente a um aumento da latência.
- Utilização de subdispositivos: Dispositivos como CPUs com vários sockets ou GPUs com vários tiles podem executar vários pedidos com um aumento mínimo da latência, utilizando os respetivos subdispositivos internos.
- Dicas de desempenho do OpenVINO: Utilizar o
ov::LATENCYdo OpenVINO para a propriedadeov::performance_modedurante a compilação do modelo simplifica a afinação do desempenho, oferecendo uma abordagem independente do dispositivo e preparada para o futuro.
Gerenciando a Latência da Primeira Inferência#
- Armazenamento em cache do modelo: Para reduzir o impacto dos tempos de carregamento e compilação do modelo na latência, utiliza o armazenamento em cache do modelo sempre que possível. Nos cenários em que o armazenamento em cache não é viável, as CPUs geralmente oferecem os tempos de carregamento de modelos mais rápidos.
- Mapeamento do modelo vs. leitura: Para reduzir os tempos de carregamento, o OpenVINO substituiu a leitura do modelo pelo mapeamento. No entanto, se o modelo estiver numa unidade amovível ou de rede, considera utilizar
ov::enable_mmap(false)para voltar à leitura. - Seleção automática do dispositivo: Este modo inicia a inferência na CPU e muda para um acelerador assim que este está pronto, reduzindo de forma contínua a latência da primeira inferência.
Otimização para throughput#
A otimização do throughput é crucial em cenários que processam simultaneamente numerosos pedidos de inferência, maximizando a utilização dos recursos sem sacrificar significativamente o desempenho de cada pedido.
Abordagens para Otimização de Vazão#
-
Dicas de desempenho do OpenVINO: Um método de alto nível e preparado para o futuro para melhorar o throughput em vários dispositivos através de dicas de desempenho.
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
Batching explícito e streams: Uma abordagem mais granular que envolve batching explícito e a utilização de streams para uma afinação avançada do desempenho.
Projetando Aplicações Orientadas a Vazão#
Para maximizar o throughput, as aplicações devem:
- Processar as entradas em paralelo, utilizando plenamente as capacidades do dispositivo.
- Decompor o fluxo de dados em pedidos de inferência simultâneos, agendados para execução em paralelo.
- Utilizar a API Async com callbacks para manter a eficiência e evitar que o dispositivo fique sem trabalho.
Execução Multi-Dispositivo#
O modo de vários dispositivos do OpenVINO simplifica o aumento do throughput ao distribuir automaticamente os pedidos de inferência entre dispositivos, sem exigir a gestão dos dispositivos ao nível da aplicação.
Ganhos de desempenho no mundo real#
A implementação de otimizações do OpenVINO com modelos do Ultralytics YOLO pode gerar melhorias significativas de desempenho. Como demonstrado em benchmarks, os usuários podem experimentar velocidades de inferência até 3x mais rápidas em CPUs Intel, com acelerações ainda maiores possíveis em todo o espectro de hardware da Intel, incluindo GPUs integradas, GPUs dedicadas e NPUs.
Por exemplo, ao executar modelos YOLO26 em CPUs Intel Xeon, as versões otimizadas para OpenVINO superam consistentemente as suas equivalentes em PyTorch em termos de tempo de inferência por imagem, sem comprometer a precisão.
Implementação prática#
Para exportar e otimizar o teu modelo Ultralytics YOLO para OpenVINO, podes utilizar a funcionalidade de exportação:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", quantize=16) # Export with FP16 precisionApós a exportação, podes executar a inferência com o modelo otimizado:
# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")
# Run inference (Ultralytics auto-selects OpenVINO LATENCY mode for batch=1)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)Conclusão#
Otimizar os modelos Ultralytics YOLO para latência e throughput com OpenVINO pode melhorar significativamente o desempenho da tua aplicação. Ao aplicar cuidadosamente as estratégias descritas neste guia, os programadores podem garantir que os seus modelos funcionam de forma eficiente, respondendo às exigências de vários cenários de implementação. Lembra-te de que a escolha entre otimizar para latência ou para throughput depende das necessidades específicas da tua aplicação e das características do ambiente de implementação.
Para obteres informações técnicas mais detalhadas e as atualizações mais recentes, consulta a documentação do OpenVINO e o repositório Ultralytics YOLO. Estes recursos fornecem guias detalhados, tutoriais e apoio da comunidade para te ajudarem a tirar o máximo partido dos teus modelos de deep learning.
Garantir que os teus modelos alcançam um desempenho ideal não se resume a ajustar configurações; trata-se de compreender as necessidades da tua aplicação e tomar decisões informadas. Quer estejas a otimizar para respostas em tempo real ou a maximizar o throughput para processamento em grande escala, a combinação dos modelos Ultralytics YOLO com o OpenVINO oferece um conjunto de ferramentas poderoso para os programadores implementarem soluções de IA de alto desempenho.
Perguntas frequentes#
Otimizar os modelos Ultralytics YOLO para obter baixa latência envolve várias estratégias fundamentais:
- Uma inferência por dispositivo: Limita as inferências a uma de cada vez por dispositivo para minimizar os atrasos.
- Utilização de subdispositivos: Utiliza dispositivos como CPUs com vários sockets ou GPUs com vários tiles, capazes de processar vários pedidos com um aumento mínimo da latência.
- Dicas de desempenho do OpenVINO: Utiliza o
ov::LATENCYdurante a compilação do modelo para simplificar a afinação independente do dispositivo.
Para obteres mais dicas práticas sobre a otimização da latência, consulta a secção Otimização da Latência do nosso guia.
O OpenVINO melhora o throughput dos modelos Ultralytics YOLO ao maximizar a utilização dos recursos do dispositivo sem sacrificar o desempenho. Os principais benefícios incluem:
- Dicas de desempenho: Afinação simples e de alto nível do desempenho em vários dispositivos.
- Batching explícito e streams: Afinação detalhada para um desempenho avançado.
- Execução em vários dispositivos: Balanceamento automático da carga de inferência, simplificando a gestão ao nível da aplicação.
Configuração de exemplo:
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)Obtém mais informações sobre a otimização do throughput na secção Otimização do Throughput do nosso guia detalhado.
Para reduzir a latência da primeira inferência, considera estas práticas:
- Armazenamento em cache do modelo: Utiliza o armazenamento em cache do modelo para reduzir os tempos de carregamento e compilação.
- Mapeamento do modelo vs. leitura: Utiliza o mapeamento (
ov::enable_mmap(true)) por predefinição, mas muda para a leitura (ov::enable_mmap(false)) se o modelo estiver numa unidade amovível ou de rede. - Seleção automática do dispositivo: Utiliza o modo AUTO para iniciar a inferência na CPU e mudar continuamente para um acelerador.
Para obteres estratégias detalhadas sobre a gestão da latência da primeira inferência, consulta a secção Gestão da Latência da Primeira Inferência.
Equilibrar a otimização da latência e do throughput exige compreender as necessidades da tua aplicação:
- Otimização da latência: Ideal para aplicações em tempo real que exigem respostas imediatas, como aplicações para consumidores.
- Otimização do throughput: Mais adequada para cenários com muitas inferências simultâneas, maximizando a utilização dos recursos, como implementações de grande escala.
A utilização das dicas de desempenho de alto nível e dos modos de vários dispositivos do OpenVINO pode ajudar a encontrar o equilíbrio certo. Escolhe as dicas de desempenho do OpenVINO adequadas com base nos teus requisitos específicos.
Sim, os modelos Ultralytics YOLO são altamente versáteis e podem ser integrados com vários frameworks de IA. As opções incluem:
- TensorRT: Para otimização em GPUs NVIDIA, segue o guia de integração do TensorRT.
- CoreML: Para dispositivos Apple, consulta as nossas instruções de exportação do CoreML.
- LiteRT.js: Para aplicações web e Node.js, consulta o guia de integração do LiteRT e o runtime web LiteRT.js.
Explora mais integrações na página de integrações da Ultralytics.