Partilhar via


WinMLRunner

WinMLRunner é uma ferramenta para testar se um modelo é executado com êxito quando avaliado com as APIs de ML do Windows. Você também pode capturar o tempo de avaliação e o uso de memória na GPU e/ou CPU. Modelos em formato .onnx ou .pb podem ser avaliados onde as variáveis de entrada e saída são tensores ou imagens. Existem 2 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. Certifique-se de substituir 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`\

Executando um bom modelo

Abaixo está um exemplo de execução bem-sucedida de um modelo. Observe como primeiro o modelo carrega e produz metadados do modelo. Em seguida, o modelo é executado na CPU e GPU separadamente, emitindo o sucesso da ligação, o sucesso da avaliação e a saída do modelo.

Exemplo de saída de log de rastreamento para executar um bom modelo

Executando um modelo inadequado

Abaixo está um exemplo de execução de um modelo com parâmetros incorretos. Observe a saída FAILED ao avaliar na GPU.

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

Seleção e otimização de dispositivos

Por padrão, o modelo é executado na CPU e GPU separadamente, mas você pode especificar um dispositivo com um sinalizador -CPU ou -GPU. Aqui está um exemplo de execução de um modelo 3 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 execução de todos os modelos na pasta de dados na CPU e GPU separadamente 3 vezes e captura de dados de desempenho:

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

Medições de desempenho

As seguintes medições de desempenho serão enviadas para a linha de comando e para o arquivo .csv para cada operação de carga, associação e avaliação.

  • Tempo de relógio de parede (ms): o tempo real decorrido entre o início e o fim de uma operação.
  • Tempo da GPU (ms): tempo para que uma operação seja passada da CPU para a GPU e executada na GPU (nota: Load() não é executado na GPU).
  • Tempo da CPU (ms): tempo para uma operação ser executada na CPU.
  • Uso de memória dedicada e compartilhada (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 que o processo na CPU exigiu durante a avaliação. Memória dedicada (MB) - A quantidade de memória que foi usada na VRAM da GPU dedicada.
  • Memória partilhada (MB): A quantidade de memória que foi usada na DRAM pela GPU.

Exemplo de resultado de desempenho.

Exemplo de saída de desempenho

Entradas de amostras de teste

Execute um modelo na CPU e GPU separadamente e ligando a entrada à CPU e à GPU separadamente (4 execuções no total):

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

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

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

Capturando registos de rastreio

Se quiser capturar logs de rastreamento usando a ferramenta, você pode usar comandos logman em conjunto 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 aparecerá no mesmo diretório que o WinMLRunner.exe.

Lendo os logs de rastreamento

Usando o traceprt.exe, execute o seguinte comando 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 o winmllog.etl.

Analisar a saída do log de rastreamento usando 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 quiser para executar o modelo com diferentes configurações).

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 WinMLRunner.exe. WinMLRunner irá procurar estes ficheiros DLL primeiro e recorrer ao C:/Windows/System32 se não os encontrar.

Problemas conhecidos

  • As entradas de sequência/mapa ainda não são suportadas (o modelo é simplesmente ignorado, por isso não bloqueia outros modelos numa pasta);
  • Não podemos 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. Neste momento, usar o argumento -folder só funciona bem com dados irrelevantes;
  • A geração de entrada de lixo como Gray ou YUV não é suportada atualmente. Idealmente, o pipeline de dados inúteis do WinMLRunner deve suportar todos os tipos de entradas que podemos dar ao WinML.