Compartilhar via


WinMLRunner

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

Executar um modelo

Abra a ferramenta Python que foi baixada. Navegue até a pasta que contém o WinMLRunner.exe e execute o executável, conforme mostrado abaixo. Certifique-se de substituir o local de instalação pelo seu:

.\WinMLRunner.exe -model SqueezeNet.onnx

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

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

Executar um modelo com sucesso

Abaixo está um exemplo de execução bem-sucedida de modelo. Observe como primeiro o modelo carrega e dá saída os metadados. Em seguida, o modelo é executado na CPU e na GPU separadamente, o que faz com que a associação, a avaliação e a saída do modelo sejam bem-sucedidas.

Sample trace log output for running a good model

Executar um modelo sem sucesso

Veja abaixo um exemplo de execução de modelo com parâmetros incorretos. Observe a saída COM FALHA ao avaliar na GPU.

Sample trace log output for running a bad model

Seleção e otimização de 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. Este é um exemplo de execução de um modelo usando apenas a CPU por três vezes:

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

Dados de desempenho de Log

Use o sinalizador -perf para capturar os dados de desempenho. Este é um exemplo de execução de todos os modelos na pasta de dados na CPU e na GPU por três vezes separadamente e captura dos dados de desempenho:

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

Medidas de desempenho

As seguintes medidas de desempenho serão as saídas para a linha de comando e o arquivo .csv de cada operação de carregamento, associação e avaliação:

  • Hora do relógio (ms): o tempo real decorrido entre o início e o fim de uma operação.
  • Tempo de GPU (ms): tempo para que uma operação passe da CPU para a GPU e seja executada na GPU (observação: o Load() não é executado na GPU).
  • Tempo de CPU (ms): tempo para uma operação ser executada na CPU.
  • Uso de memória dedicada e compartilhada (MB): uso médio de memória no nível do kernel e do usuário (em MB) durante a avaliação na CPU ou na 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 na DRAM pela GPU.

Exemplo de saída de desempenho:

Sample performance output

Testar as entradas de exemplo

Execute um modelo na CPU e na GPU separadamente e associando a entrada à CPU e à GPU também em separado (total de 4 execuções):

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 vai aparecer no mesmo diretório que o WinMLRunner.exe.

Ler os logs de rastreamento

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

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

Em seguida, abra o arquivo logdump.csv.

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

Sample the trace log output using Windows Performance Analyzer

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

Carregamento dinâmico de DLL

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

Problemas conhecidos

  • Ainda não há suporte para entradas de sequência e de mapa (o modelo é apenas ignorado, portanto, ele não bloqueia os outros modelos na pasta);
  • Não é possível executar vários modelos de maneira confiável com o argumento -folder com os dados reais. Como é possível especificar apenas 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.