Configurar um projeto C++ para a API de runtime do Windows ML

Importante

A API do Windows ML Runtime atualmente é experimental e não tem suporte para uso em ambientes de produção. Os aplicativos que estão testando essa API não devem ser publicados na Microsoft Store.

Este tópico mostra como configurar um projeto C++ nativo para usar a API do Runtime e criar uma IWinMLRuntime instância. Continue para executar um modelo com a API de runtime do Windows ML para carregamento de modelo, associação de tensor e inferência.

Prerequisites

Note

C++20 e C++/WinRT são requisitos desses exemplos de documentação, não da API de Runtime. A API do Runtime é uma ABI nativa no estilo COM que também pode ser acessada a partir de C ou C++ usando COM puro, WRL, WIL ou outro auxiliar COM de acordo com os requisitos de linguagem desse aplicativo.

O destino de execução da CPU é o caminho base. A disponibilidade de GPU e NPU depende do dispositivo, dos recursos da plataforma e do back-end de execução instalado para seu aplicativo.

Configurar a restauração nativa do NuGet

Os projetos nativos do Visual C++ precisam de um target moniker do NuGet para que a restauração de pacote selecione os recursos nativos do Windows. Adicione esse grupo de propriedades próximo à parte superior do .vcxproj arquivo, antes da primeira Microsoft.Cpp.* importação:

<PropertyGroup Label="NuGet">
  <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  <NuGetTargetMoniker>native,Version=v0.0</NuGetTargetMoniker>
  <NuGetTargetPlatformIdentifier>Windows</NuGetTargetPlatformIdentifier>
  <NuGetTargetPlatformVersion>$(WindowsTargetPlatformVersion)</NuGetTargetPlatformVersion>
</PropertyGroup>

Instale o Microsoft.Windows.AI.MachineLearning pacote usando Gerenciar Pacotes NuGet ou PackageReference. Para criar os exemplos nessas páginas, instale Microsoft.Windows.CppWinRT e defina o C++ Language Standard como ISO C++20 Standard (/std:c++20). O pacote ML do Windows fornece os cabeçalhos de tempo de execução, bibliotecas de importação e DLLs independentes; C++/WinRT fornece as conveniências winrt::com_ptr, winrt::check_hresult e <winrt/base.h> usadas apenas pelo código de exemplo.

Para opções de CMake e implantação, consulte Instalação independente.

Inicializar o Runtime

Substitua main.cpp pelo seguinte código:

// Copyright (C) Microsoft Corporation. All rights reserved.

#include <Windows.h>
#include <winrt/base.h>

#include <WinMLRuntime.h>

#pragma comment(lib, "windowsapp.lib")

int wmain()
{
    winrt::com_ptr<IWinMLRuntime> runtime;
    winrt::check_hresult(WinMLCreateRuntime(
        __uuidof(IWinMLRuntime),
        runtime.put_void()));

    return 0;
}

Compile para a arquitetura que corresponde aos ativos do pacote, como Release|x64. Um build bem-sucedido confirma que a restauração do NuGet encontrou os cabeçalhos do Runtime e a biblioteca de importação e copiou as DLLs necessárias ao lado do executável.

Próximas Etapas