Visão geral da API do Windows ML Runtime

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.

Importante

A API do Windows ML Runtime está atualmente disponível em C++ e Python; O C# não é atualmente suportado. Diz-nos se estiveres interessado em usar estas APIs do C# abrindo um issue no repositório GitHub do Windows ML!

A API do Windows ML Runtime é um framework nativo de inferência local de IA em C/C++, construído especificamente para o Windows. Com a API do Windows ML Runtime, pode carregar um modelo, escolher um CPU, GPU ou NPU alvo de execução (incluindo um adaptador DXCore específico ou dispositivo D3D12), associar tensores a esse destino, compor os estágios do modelo e do processador num pipeline, compilar o pipeline e executá-lo para produzir tensores de saída.

As APIs opcionais de Geração de Texto e Reconhecimento de Fala compõem estes mesmos objetos de Runtime em fluxos de trabalho de nível superior sobre um modelo fornecido pela sua aplicação: veja Gerar texto com o seu próprio modelo de linguagem usando Windows ML e Reconhecer fala com o seu próprio modelo Whisper usando Windows ML.

Runtime API vs ONNX Runtime

Se a tua aplicação só tem como alvo o Windows (e estiveres disposto a usar APIs que se encontram atualmente em fase experimental), usa a API de Runtime. Proporciona controlo explícito sobre a seleção de hardware (incluindo um adaptador DXCore específico ou dispositivo D3D12), residência tensorial, colocação de pipelines em múltiplos estágios e compilação.

Caso contrário, se a sua aplicação precisar de correr noutras plataformas, ou já tiver código de sessão ONNX Runtime multiplataforma a funcionar, use as APIs ONNX Runtime incluídas no Windows ML.

Modelo de objetos do núcleo

Conceito API Primária Description
Runtime IWinMLRuntime Interface devolvida por WinMLCreateRuntime; carrega ficheiros de modelo, cria alvos de execução e cria construtores de pipeline.
Modelo IWinMLModel Artefacto imutável e opaco do modelo carregado a partir de um ficheiro ou buffer. Reflete o seu esquema declarado através de IWinMLModelSchema.
Alvo de execução IWinMLExecutionTarget token de posicionamento de CPU, GPU ou NPU usado para construir estágios e criar tensores.
Construtor de pipeline IWinMLPipelineBuilder Adiciona estágios de modelo e processador, liga-os e constrói um pipeline preparado.
Gasoduto IWinMLPipeline Grafo preparado, imediatamente executável, que executa tensores ligados e produz tensores de saída.
Stage IWinMLStage Um passo no pipeline que detém as ligações posicionais de entrada e saída e o seu alvo de execução resolvido.
Tensor IWinMLTensor Dados multidimensionais tipados ligados às entradas e saídas da fase.
Geração de texto / reconhecimento de voz APIs de Geração de Texto e Reconhecimento de Fala para Windows ML Fluxo de trabalho de nível superior composto sobre objetos Runtime propriedade do chamador, com sessões, fluxos e resultados tipados.

Escolha um backend e um destino de execução

LoadModelFromFile seleciona o backend com base na extensão de ficheiro do artefacto do modelo. A tua aplicação usa os mesmos objetos de Runtime — modelo, destino de execução, construtor de pipelines, estágios, bindings, e Run — independentemente do backend que carrega o ficheiro.

Ficheiro de modelo Backend Aceleração de hardware
.onnx, .ort Tempo de execução do ONNX Fornecedores de execução (EPs) que o Windows instala e mantém atualizados através do catálogo de EPs do Windows ML
.gguf llama.cpp Um módulo de CPU local para a aplicação, além de um módulo CUDA opcional para GPUs NVIDIA que é implementado em conjunto com a sua aplicação. CPU e CUDA são os únicos backends de llama.cpp que o Windows ML valida para esta versão.

Um destino de execução representa uma classe de hardware — CPU, GPU ou NPU — criada com IWinMLRuntime. Reutilizar um alvo para construir estágios e criar tensores: reutilizar um alvo expressa afinidade pelo mesmo alvo, enquanto usar alvos distintos torna explícitas as fronteiras de transferência entre alvos. Quando o método do construtor Build de pipeline é executado, o runtime coloca cada etapa no backend de execução para o seu destino e garante a compatibilidade entre o destino e o backend.

Para uma classe de hardware sem enumerar você mesmo os dispositivos, chame CreateExecutionTarget com a WINML_EXECUTION_TARGET_KIND e a WINML_EXECUTION_TARGET_PREFERENCE que classifiquem candidatos dessa classe, como uma GPU integrada versus uma discreta. Trate ERROR_NOT_FOUND e ERROR_NOT_SUPPORTED da mesma forma e recorra a outra classe:

ComPtr<IWinMLExecutionTarget> target;
HRESULT hr = runtime->CreateExecutionTarget(
    WINML_EXECUTION_TARGET_KIND_NPU,
    WINML_EXECUTION_TARGET_PREFERENCE_EFFICIENCY,
    target.GetAddressOf());
if (hr == HRESULT_FROM_WIN32(ERROR_NOT_FOUND) ||
    hr == HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED))
{
    THROW_IF_FAILED(runtime->CreateExecutionTarget(
        WINML_EXECUTION_TARGET_KIND_GPU,
        WINML_EXECUTION_TARGET_PREFERENCE_PERFORMANCE,
        target.GetAddressOf()));
}
else
{
    THROW_IF_FAILED(hr);
}

CreateCpuExecutionTarget é equivalente a pedir o tipo CPU. CreateExecutionTargetFromAdapter e CreateExecutionTargetFromD3D12 atribuem um alvo a um adaptador DXCore específico ou dispositivo D3D12 em vez de deixar o Runtime escolher um. Para modelos ONNX que dependem de um provedor de execução (EP) instalado, uma interface opcional de compatibilidade do ONNX Runtime permite-lhe fixar um provedor que já registou. Cada backend resolve estes destinos de forma diferente — por exemplo, o backend llama.cpp usado pelos modelos .gguf requer pelo menos um descarregamento parcial para a GPU para respeitar um destino GPU, e não suporta destinos NPU nem fixação do fornecedor/provedor. Para a matriz completa de resoluções de destino por backend e para um guia de execução de um modelo GGUF, consulte Windows ML Runtime API concepts.

Passos seguintes