Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Important
Windows ML Runtime API är för närvarande experimentellt och stöds inte för användning i produktionsmiljöer. Appar som provar det här API:et bör inte publiceras till Microsoft Store.
Important
Windows ML Runtime API är för närvarande tillgängligt i C++ och Python; C# stöds för närvarande inte. Meddela oss om du är intresserad av att använda dessa API:er från C# genom att skapa ett ärende i Windows ML GitHub-repo!
Windows ML Runtime API är ett inbyggt C/C++-lokalt AI-inferensramverk som skapats specifikt för Windows. Med Windows ML Runtime-API:et kan du läsa in en modell, välja ett cpu-, GPU- eller NPU-körningsmål (inklusive ett specifikt DXCore-kort eller en D3D12-enhet), binda tensorer till det målet, skapa modell- och processorsteg i en pipeline, kompilera pipelinen och köra den för att producera utdata tensorer.
De valfria API:erna för textgenerering och taligenkänning sammanfogar dessa samma Runtime-objekt till arbetsflöden på högre nivå över en modell som din app tillhandahåller: se Generera text med din egen språkmodell med Windows ML och Känn igen tal med din egen Whisper-modell med hjälp av Windows ML.
Runtime API jämfört med ONNX Runtime
Om din app endast riktar sig mot Windows (och du är villig att använda API:er som för närvarande är experimentella), använd Runtime-API:et. Den ger explicit kontroll över maskinvaruval (inklusive ett specifikt DXCore-kort eller D3D12-enhet), tensorresidens, pipelineplacering i flera steg och kompilering.
Annars, om din app behöver köras på andra plattformar eller redan har fungerande plattformsoberoende ONNX Runtime-sessionskod, använd ONNX Runtime-API:er som ingår i Windows ML i stället.
Kärnobjektmodell
| Begrepp | Huvud-API | Description |
|---|---|---|
| Runtime | IWinMLRuntime |
Gränssnitt som returneras av WinMLCreateRuntime; läser in modellfiler, skapar körningsmål och skapar pipelinebyggare. |
| Modell | IWinMLModel |
Oföränderlig, opak modellartefakt som lästs in från en fil eller buffert. Återspegla det deklarerade schemat via IWinMLModelSchema. |
| Körningsmål | IWinMLExecutionTarget |
Cpu-, GPU- eller NPU-placeringstoken som används för att bygga steg och skapa tensorer. |
| Pipelineverktyg | IWinMLPipelineBuilder |
Lägger till modell- och processorsteg, ansluter dem och skapar en förberedd pipeline. |
| Pipeline | IWinMLPipeline |
Förberedd, omedelbart runnbar graf som kör bundna tensorer och producerar utdata tensorer. |
| Scenen | IWinMLStage |
Ett steg i pipelinen som äger positionella indata- och utdatabindningar och ett löst körningsmål. |
| Tensor | IWinMLTensor |
Typade flerdimensionella data bundna till stegindata och utdata |
| Textgenerering/taligenkänning | Windows API:er för ML-textgenerering och taligenkänning | Arbetsflöde på högre nivå, byggt ovanpå anroparägda Runtime-objekt, med typade sessioner, strömmar och resultat. |
Välj en backend och ett körningsmål
LoadModelFromFile väljer backend från modellartefaktens filnamnstillägg.
Appen använder samma Runtime-objekt – modell, körningsmål, pipelinebyggare, steg, bindningar och Run – oavsett vilken backend som läser in filen.
| Modellfil | Backend | Maskinvaruacceleration |
|---|---|---|
.onnx, .ort |
ONNX Runtime | Körningsproviders (EPs) som Windows installerar och håller uppdaterade via Windows ML EP-katalogen |
.gguf |
llama.cpp | En applokal CPU-modul, plus en valfri CUDA-modul för NVIDIA GPU:er som du distribuerar tillsammans med din app. CPU och CUDA är de enda llama.cpp-bakändar som Windows ML validerar för den här versionen. |
Ett körningsmål representerar en maskinvaruklass – CPU, GPU eller NPU – som skapats med IWinMLRuntime. Återanvänd ett mål för att skapa steg och skapa tensorer: återanvändning av ett mål uttrycker samma måltillhörighet, samtidigt som distinkta mål gör överföringsgränser mellan mål explicita. När pipelinebyggarens Build-metod körs placerar körningen varje steg på exekveringsbackend för sitt mål och bekräftar kompatibiliteten mellan mål och backend.
För en maskinvaruklass utan att räkna upp enheter själv anropar du CreateExecutionTarget med en WINML_EXECUTION_TARGET_KIND och en WINML_EXECUTION_TARGET_PREFERENCE som rangordnar kandidater i den klassen, till exempel en integrerad kontra en diskret GPU. Behandla ERROR_NOT_FOUND och ERROR_NOT_SUPPORTED lika och använd en annan klass som reserv:
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 motsvarar att begära CPU-typen.
CreateExecutionTargetFromAdapter och CreateExecutionTargetFromD3D12 binder ett mål till ett specifikt DXCore-kort eller en D3D12-enhet i stället för att låta Runtime välja ett. För ONNX-modeller som är beroende av en installerad execution provider (EP) kan du med en valfri ONNX Runtime-kompatibilitetsyta fästa en provider som du redan har registrerat.
Varje serverdel löser dessa mål på olika sätt– till exempel kräver den llama.cpp serverdel som används av .gguf modeller minst delvis GPU-avlastning för att uppfylla ett GPU-mål och stöder inte NPU-mål eller leverantörslåsning. Den fullständiga målupplösningsmatrisen per backend och en genomgång av hur du kör en GGUF-modell finns i Begrepp för Windows ML Runtime API.