Otimização de Inferência OpenVINO para YOLO
Introdução
Ao implementar modelos de aprendizado profundo, particularmente aqueles para detecção de objetos como os modelos Ultralytics YOLO, alcançar o desempenho ideal é crucial. Este guia se aprofunda no aproveitamento do kit de ferramentas OpenVINO da Intel para otimizar a inferência, com foco na latência e na taxa de transferência. Esteja você trabalhando em aplicações de nível de consumidor ou em implementações de grande escala, entender e aplicar essas estratégias de otimização garantirá que seus modelos sejam executados de forma eficiente em vários dispositivos.
Otimizando para Latência
A otimização da latência é vital para aplicações que exigem resposta imediata de um único modelo, dada uma única entrada, 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 baixa latência envolve consideração cuidadosa, especialmente ao executar inferências simultâneas ou gerenciar vários modelos.
Estratégias Chave para Otimização da Latência:
- Inferência Única por Dispositivo: A maneira mais simples de obter baixa latência é limitar a uma inferência por vez por dispositivo. Concorrência adicional geralmente leva ao aumento da latência.
- Aproveitando Subdispositivos: Dispositivos como CPUs multi-socket ou GPUs multi-tile podem executar várias solicitações com aumento mínimo de latência, utilizando seus subdispositivos internos.
- Dicas de Desempenho OpenVINO: Utilizando o OpenVINO
ov::hint::PerformanceMode::LATENCY
para oov::hint::performance_mode
A propriedade durante a compilação do modelo simplifica o ajuste de desempenho, oferecendo uma abordagem independente do dispositivo e à prova de futuro.
Gerenciando a Latência da Primeira Inferência:
- Cache de Modelo: Para mitigar o impacto do tempo de carregamento e compilação do modelo na latência, use o cache de modelo sempre que possível. Para cenários onde o cache não é viável, as CPUs geralmente oferecem os tempos de carregamento de modelo mais rápidos.
- Mapeamento vs. Leitura de Modelos: Para reduzir os tempos de carregamento, o OpenVINO substituiu a leitura do modelo pelo mapeamento. No entanto, se o modelo estiver em uma unidade removível ou de rede, considere usar
ov::enable_mmap(false)
para voltar à leitura. - Seleção Automática de Dispositivo: Este modo inicia a inferência na CPU, mudando para um acelerador assim que estiver pronto, reduzindo perfeitamente a latência da primeira inferência.
Otimizando para Throughput
A otimização do throughput é crucial para cenários que atendem a inúmeras solicitações de inferência simultaneamente, maximizando a utilização de recursos sem sacrificar significativamente o desempenho de cada solicitação.
Abordagens para Otimização de Throughput:
-
Dicas de Desempenho OpenVINO: Um método de alto nível e à prova de futuro para melhorar o throughput em dispositivos usando dicas de desempenho.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)
-
Batching e Streams Explícitos: Uma abordagem mais granular envolvendo batching explícito e o uso de streams para ajuste avançado de desempenho.
Projetando Aplicações Orientadas ao Rendimento:
Para maximizar a taxa de transferência, as aplicações devem:
- Processe as entradas em paralelo, aproveitando ao máximo os recursos do dispositivo.
- Decomponha o fluxo de dados em solicitações de inferência simultâneas, agendadas para execução paralela.
- Utilize a API Async com callbacks para manter a eficiência e evitar a exaustão do dispositivo.
Execução Multi-Dispositivo:
O modo multi-dispositivo do OpenVINO simplifica o escalonamento do throughput, equilibrando automaticamente as solicitações de inferência entre os dispositivos, sem exigir gerenciamento de dispositivos no nível do aplicativo.
Ganhos de Desempenho no Mundo Real
A implementação das otimizações OpenVINO com os modelos Ultralytics YOLO pode gerar melhorias significativas no desempenho. Conforme demonstrado em benchmarks, os usuários podem experimentar velocidades de inferência até 3 vezes 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 VPUs.
Por exemplo, ao executar modelos YOLOv8 em CPUs Intel Xeon, as versões otimizadas para OpenVINO superam consistentemente as suas contrapartes PyTorch em termos de tempo de inferência por imagem, sem comprometer a precisão.
Implementação Prática
Para exportar e otimizar seu modelo Ultralytics YOLO para OpenVINO, você pode usar a funcionalidade de exportação:
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision
Após a exportação, você pode executar a inferência com o modelo otimizado:
# Load the OpenVINO model
ov_model = YOLO("yolov8n_openvino_model/")
# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)
Conclusão
Otimizar os modelos Ultralytics YOLO para latência e throughput com OpenVINO pode melhorar significativamente o desempenho do seu aplicativo. Ao aplicar cuidadosamente as estratégias descritas neste guia, os desenvolvedores podem garantir que seus modelos sejam executados de forma eficiente, atendendo às demandas de vários cenários de implementação. Lembre-se de que a escolha entre otimizar para latência ou throughput depende das necessidades específicas do seu aplicativo e das características do ambiente de implementação.
Para obter informações técnicas mais detalhadas e as últimas atualizações, consulte a documentação do OpenVINO e o repositório YOLO da Ultralytics. Estes recursos fornecem guias detalhados, tutoriais e suporte da comunidade para ajudá-lo a tirar o máximo proveito dos seus modelos de aprendizagem profunda.
Garantir que seus modelos alcancem o desempenho ideal não se trata apenas de ajustar configurações; trata-se de entender as necessidades do seu aplicativo e tomar decisões informadas. Esteja você otimizando para respostas em tempo real ou maximizando a taxa de transferência para processamento em larga escala, a combinação de modelos Ultralytics YOLO e OpenVINO oferece um kit de ferramentas poderoso para que os desenvolvedores implementem soluções de IA de alto desempenho.
FAQ
Como otimizar modelos Ultralytics YOLO para baixa latência usando OpenVINO?
A otimização de modelos Ultralytics YOLO para baixa latência envolve várias estratégias-chave:
- Inferência Única por Dispositivo: Limite as inferências a uma por vez por dispositivo para minimizar atrasos.
- Aproveitando Subdispositivos: Utilize dispositivos como CPUs multi-socket ou GPUs multi-tile que podem lidar com várias solicitações com aumento mínimo de latência.
- Dicas de Desempenho OpenVINO: Use o OpenVINO
ov::hint::PerformanceMode::LATENCY
durante a compilação do modelo para ajuste simplificado e independente do dispositivo.
Para obter dicas mais práticas sobre como otimizar a latência, consulte a seção de Otimização de Latência do nosso guia.
Por que devo usar o OpenVINO para otimizar a taxa de transferência do Ultralytics YOLO?
O OpenVINO melhora a taxa de transferência do modelo Ultralytics YOLO, maximizando a utilização dos recursos do dispositivo sem sacrificar o desempenho. Os principais benefícios incluem:
- Dicas de Desempenho: Ajuste de desempenho simples e de alto nível em todos os dispositivos.
- Batching e Streams Explícitos: Ajuste fino para desempenho avançado.
- Execução em Vários Dispositivos: Balanceamento de carga de inferência automatizado, facilitando o gerenciamento no nível do aplicativo.
Exemplo de configuração:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
Saiba mais sobre a otimização de throughput na seção Otimização de Throughput do nosso guia detalhado.
Qual é a melhor prática para reduzir a latência da primeira inferência no OpenVINO?
Para reduzir a latência da primeira inferência, considere estas práticas:
- Cache de Modelo: Use o cache de modelo para diminuir os tempos de carregamento e compilação.
- Mapeamento vs. Leitura de Modelos: Use o mapeamento (
ov::enable_mmap(true)
) por padrão, mas mude para leitura (ov::enable_mmap(false)
) se o modelo estiver em uma unidade removível ou de rede. - Seleção Automática de Dispositivo: Utilize o modo AUTO para começar com a inferência na CPU e fazer a transição para um acelerador de forma integrada.
Para estratégias detalhadas sobre como gerenciar a latência da primeira inferência, consulte a seção Gerenciando a Latência da Primeira Inferência.
Como equilibro a otimização para latência e taxa de transferência com Ultralytics YOLO e OpenVINO?
O equilíbrio entre a otimização de latência e taxa de transferência requer a compreensão das necessidades do seu aplicativo:
- Otimização de Latência: Ideal para aplicações em tempo real que exigem respostas imediatas (por exemplo, aplicativos de nível de consumidor).
- Otimização de Throughput: Ideal para cenários com muitas inferências simultâneas, maximizando o uso de recursos (por exemplo, implantações em larga escala).
Usar dicas de desempenho de alto nível e modos multi-dispositivo do OpenVINO pode ajudar a encontrar o equilíbrio certo. Escolha as dicas de desempenho do OpenVINO apropriadas com base em seus requisitos específicos.
Posso usar modelos Ultralytics YOLO com outras estruturas de IA além do OpenVINO?
Sim, os modelos YOLO da Ultralytics são altamente versáteis e podem ser integrados a várias estruturas de IA. As opções incluem:
- TensorRT: Para otimização de GPU NVIDIA, siga o guia de integração do TensorRT.
- CoreML: Para dispositivos Apple, consulte as nossas instruções de exportação para CoreML.
- TensorFlow.js: Para aplicações web e Node.js, consulte o guia de conversão do TF.js.
Explore mais integrações na página de Integrações da Ultralytics.