Configurar um projeto C++ para a API Runtime do Windows ML

Importante

A interface API do Windows ML Runtime está atualmente em fase experimental e não é suportada para utilização em ambientes de produção. As aplicações que testam esta API não devem ser publicadas na Microsoft Store.

Este tópico mostra-te como configurar um projeto nativo em C++ para usar a API de Runtime e criar uma IWinMLRuntime instância. Continuar a executar um modelo com a API de execução do Windows ML para carregamento de modelos, ligação de tensores e inferência.

Prerequisites

Note

C++20 e C++/WinRT são requisitos destes exemplos de documentação, não da API de Runtime. A API de Runtime é uma ABI nativa ao estilo COM que também pode ser consumida em C ou C++ utilizando raw COM, WRL, WIL ou outro auxiliar COM de acordo com os requisitos da linguagem dessa aplicação.

O alvo de execução da CPU é o caminho base. A disponibilidade da GPU e NPU depende do dispositivo, das capacidades da plataforma e do backend de execução instalado na sua aplicação.

Configurar a restauração nativa do NuGet

Projetos nativos Visual C++ precisam de um moniker de destino NuGet, por isso o restauro de pacotes seleciona os recursos nativos do Windows. Adicione este grupo de propriedades perto do topo do ficheiro .vcxproj, antes da primeira importação Microsoft.Cpp.*:

<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 Gerir Pacotes NuGet ou PackageReference. Para construir os exemplos nestas páginas, instale Microsoft.Windows.CppWinRT também e defina C++ Language Standard para ISO C++20 Standard (/std:c++20). O pacote Windows ML fornece os cabeçalhos de Runtime, bibliotecas de importação e DLLs autónomas; C++/WinRT fornece as conveniências winrt::com_ptr, winrt::check_hresult e <winrt/base.h> usadas apenas pelo código de exemplo.

Para CMake e opções de implementação/distribuição, consulte Instalação autónoma.

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;
}

Build para a arquitetura que corresponde aos assets do pacote, como Release|x64. Uma compilação bem-sucedida confirma que a restauração do NuGet encontrou os cabeçalhos de runtime e a biblioteca de importação e copiou as DLLs necessárias ao lado do executável.

Passos seguintes