Compartilhar via


WinMLRunner

O WinMLRunner é uma ferramenta para testar se um modelo é executado com êxito quando avaliado com as APIs do Windows ML. Você também pode capturar o tempo de avaliação e o uso da memória na GPU e/ou na CPU. Modelos no formato .onnx ou .pb podem ser avaliados em que as variáveis de entrada e saída são tensores ou imagens. Há duas maneiras de usar o WinMLRunner:

Executar um modelo

Primeiro, abra a ferramenta python baixada. Navegue até a pasta que contém WinMLRunner.exee execute o executável, conforme mostrado abaixo. Substitua o local de instalação pelo que corresponde ao seu:

.\WinMLRunner.exe -model SqueezeNet.onnx

Você também pode executar uma pasta de modelos, com um comando como o seguinte.

WinMLRunner.exe -folder c:\data -perf -iterations 3 -CPU`\

Executar um modelo com sucesso

Veja abaixo um exemplo de como executar um modelo com êxito. Observe como primeiro o modelo carrega e gera metadados do modelo. Em seguida, o modelo é executado na CPU e na GPU separadamente, gerando o sucesso da associação, o sucesso da avaliação e a saída do modelo.

Saída de log de rastreamento de exemplo para executar um bom modelo

Executar um modelo sem sucesso

Veja abaixo um exemplo de como executar um modelo com parâmetros incorretos. Observe a saída COM FALHA ao avaliar na GPU.

Saída de log de rastreamento de exemplo para executar um modelo incorreto

Seleção e otimização do dispositivo

Por padrão, o modelo é executado na CPU e na GPU separadamente, mas você pode especificar um dispositivo com um sinalizador -CPU ou -GPU. Aqui está um exemplo de como executar um modelo três vezes usando apenas a CPU:

WinMLRunner.exe -model c:\data\concat.onnx -iterations 3 -CPU

Registrar dados de desempenho

Use o sinalizador -perf para capturar dados de desempenho. Aqui está um exemplo de como executar todos os modelos na pasta de dados na CPU e GPU separadamente três vezes e capturar dados de desempenho:

WinMLRunner.exe -folder c:\data iterations 3 -perf

Medidas de desempenho

As seguintes métricas de desempenho serão enviadas para a linha de comando e para o arquivo .csv para cada operação de carga, vinculação e avaliação.

  • Tempo do relógio de parede (ms): o tempo real decorrido entre o início e o fim de uma operação.
  • Tempo de GPU (ms): tempo para uma operação ser passada da CPU para a GPU e executar na GPU (observação: Load() não é executado na GPU).
  • Hora da CPU (ms): hora de uma operação ser executada na CPU.
  • Uso dedicado e compartilhado de memória (MB): Uso médio de kernel e memória no nível do usuário (em MB) durante a avaliação na CPU ou GPU.
  • Memória do conjunto de trabalho (MB): A quantidade de memória DRAM necessária durante a avaliação do processo na CPU. Memória dedicada (MB) – a quantidade de memória que foi usada na VRAM da GPU dedicada.
  • Memória Compartilhada (MB): A quantidade de memória que foi usada no DRAM pela GPU.

Exemplo de saída de desempenho:

Saída de desempenho de exemplo

Testar as entradas de exemplo

Execute-se um modelo na CPU e GPU separadamente, vinculando a entrada à CPU e à GPU separadamente (4 execuções totais):

WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPU -CPUBoundInput -GPUBoundInput

Execute um modelo na CPU com a entrada associada à GPU e carregada como uma imagem RGB:

WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPUBoundInput -RGB

Capturar os logs de rastreamento

Para capturar os logs de rastreamento usando a ferramenta, use os comandos logman junto com o sinalizador de depuração:

logman start winml -ets -o winmllog.etl -nb 128 640 -bs 128logman update trace  winml -p {BCAD6AEE-C08D-4F66-828C-4C43461A033D} 0xffffffffffffffff 0xff -ets         WinMLRunner.exe -model C:\Repos\Windows-Machine-Learning\SharedContent\models\SqueezeNet.onnx -debuglogman stop winml -ets

O arquivo winmllog.etl será exibido no mesmo diretório que o WinMLRunner.exe.

Lendo os logs de rastreamento

Usando o traceprt.exe, execute o comando a seguir na linha de comando.

tracerpt.exe winmllog.etl -o logdump.csv -of CSV

Em seguida, abra o logdump.csv arquivo.

Como alternativa, você pode usar o Analisador de Desempenho do Windows (do Visual Studio). Inicie o Analisador de Desempenho do Windows e abra winmllog.etl.

Exemplo da saída do log de rastreamento usando o Analisador de Desempenho do Windows

Observe que -CPU, -GPU, -GPUHighPerformance, -GPUMinPower -BGR, -RGB, -tensor, -CPUBoundInput, -GPUBoundInput não são mutuamente exclusivos (ou seja, você pode combinar quantos desejar executar o modelo com configurações diferentes).

Carregamento de DLL dinâmico

Se você quiser executar o WinMLRunner com outra versão do WinML (por exemplo, comparar o desempenho com uma versão mais antiga ou testar uma versão mais recente), basta colocar os arquivos windows.ai.machinelearning.dll e directml.dll na mesma pasta que WinMLRunner.exe. O WinMLRunner procurará por essas DLLs primeiro e retornará ao C:/Windows/System32 se não as encontrar.

Problemas conhecidos

  • As entradas de sequência/mapa ainda não têm suporte (o modelo é apenas ignorado, portanto, ele não bloqueia outros modelos em uma pasta);
  • Não é possível executar de forma confiável vários modelos com o argumento -folder com dados reais. Como só podemos especificar 1 entrada, o tamanho da entrada seria incompatível com a maioria dos modelos. No momento, o argumento -folder só funciona bem com os dados de lixo;
  • Atualmente, não há suporte para a geração de entrada de lixo como GRAY ou YUV. Idealmente, o pipeline de dados de lixo do WinMLRunner deve dar suporte a todos os tipos de entradas dadas ao winml.