Sdílet prostřednictvím


Přehled DirectML

Shrnutí

Direct Machine Learning (DirectML) je rozhraní API nízké úrovně pro strojové učení (ML). Rozhraní API má známé (nativní programovací rozhraní C++, nano-COM) a pracovní postup ve stylu DirectX 12. Úlohy odvozování strojového učení můžete integrovat do hry, stroje, middlewaru, back-endu nebo jiné aplikace. DirectML podporuje veškerý hardware kompatibilní s DirectX 12.

Hardwarové akcelerované primitivy strojového učení (označované jako operátory) jsou stavební bloky DirectML. Z těchto stavebních kamenů můžete vyvinout takové techniky strojového učení, jako je navýšení rozlišení, odstranění aliasingu a převod stylů, abych jmenoval alespoň některé. "Odstranění šumu a zvýšení rozlišení například umožňuje dosáhnout působivých efektů raytracingu s méně paprsky na pixel."

Úlohy odvozování strojového učení můžete integrovat do hry, stroje, middlewaru, back-endu nebo jiné aplikace. DirectML má známé programovací rozhraní a pracovní postup ve stylu DirectX 12, které je nativní pro C++ a nano-COM, a podporuje jej veškerý hardware kompatibilní s DirectX 12. Ukázkové aplikace DirectML, včetně vzorku minimální aplikace DirectML, najdete v tématu Ukázkové aplikace DirectML.

Rozhraní DirectML bylo zavedeno ve Windows 10 verze 1903 a v odpovídající verzi sady Windows SDK.

Je DirectML vhodné pro můj projekt?

DirectML je vrstva abstrakce hardwaru nízké úrovně, která umožňuje spouštět úlohy strojového učení na jakémkoli grafickém procesoru kompatibilním s DirectX 12.

Pokud potřebujete optimalizovat výkon strojového učení pro scénáře s vysokým výkonem, vysokou latencí nebo omezenými prostředky v reálném čase, poskytuje DirectML největší kontrolu a flexibilitu. DirectML můžete použít k integraci strojového učení přímo do existujícího modulu nebo kanálu vykreslování nebo k vytvoření vlastních architektur strojového učení a middlewaru ve Windows.

DirectML můžete také použít nepřímo prostřednictvím modulu runtime ONNX, což je multiplatformní knihovna, která podporuje otevřený standardní formát ONNX pro modely strojového učení. Modul runtime ONNX může directML používat jako jednoho z jejích poskytovatelů spouštění spolu s dalšími back-endy, jako jsou procesor, CUDA nebo TensorRT. Díky tomu můžete využít výkon a kompatibilitu DirectML, aniž byste museli sami psát kód DirectML.

Alternativně můžete použít rozhraní WinML API, což je rozhraní API zaměřené na vyšší úroveň, které zjednodušuje pracovní postup strojového učení s jeho vzorem vyhodnocení zátěžové vazby. WinML také používá pro modely formát ONNX a může jako svůj back-end použít DirectML. WinML je navržený pro scénáře, ve kterých potřebujete rychle a snadno integrovat strojové učení do aplikací pro Windows, aniž byste se museli starat o podrobnosti základního hardwaru nebo architektury.

Co dělá DirectML; a jakou práci musím dělat jako vývojář?

DirectML efektivně spouští jednotlivé vrstvy modelu odvozování na GPU (nebo na jádrech akcelerace AI, pokud jsou k dispozici). Každá vrstva je operátorem a DirectML poskytuje knihovnu základních operátorů strojového učení na nízké úrovni. Operace DirectML můžete spouštět izolovaně nebo jako graf (viz část Pracovní postupy založené na vrstvách a grafech v DirectML).

Operátory a grafy používají optimalizace specifické pro hardware a architekturu. Současně jako vývojář uvidíte jedno rozhraní nezávislé na dodavateli pro provádění těchto operátorů.

Knihovna operátorů v DirectML poskytuje všechny obvyklé operace, které byste očekávali, že budete moct používat v úloze strojového učení.

  • Aktivační operátory, jako jsou lineární, ReLU, sigmoid, tanh a další.
  • Elementární operátory, jako jsou sčítání, exponenciální, logaritmus, maximum, minimum, odčítání a další.
  • Konvoluční operátory, například 2D a 3D konvoluce, a další.
  • Operátory redukce, například argmin, průměr, l2, součet a další.
  • Operátory sdružování, jako jsou průměr, lp a max.
  • Operátory neurální sítě (NN), jako jsou gemm, gru, lstm a rnn.
  • A mnoho dalších.

Pokud chcete dosáhnout maximálního výkonu a neplatit za to, co nepoužíváte, DirectML dává vývojáři do rukou kontrolu nad tím, jak se úloha strojového učení provádí na hardwaru. Určení, které operátory vykonat a kdy, je vaší odpovědností jako vývojáře. Úkoly, které jsou ponechány na vašem uvážení, zahrnují: přepis modelu, zjednodušení a optimalizaci vrstev, nahrání vah, přidělování prostředků, vazba, správa paměti (stejně jako u Direct3D 12) a provedení grafu.

Zachováváte vysokou úroveň znalostí o svých grafech (můžete svůj model přímo zakódovat, nebo si napsat vlastní zavaděč modelů). Můžete navrhnout model vertikálního škálování, například pomocí několika vrstev každého z převzorkování, konvoluce, normalizace a aktivačních operátorů. Díky této znalosti, pečlivému plánování a správě bariér můžete z hardwaru extrahovat nejvíce paralelismu a výkonu. Pokud vyvíjíte hru, vaše pečlivá správa prostředků a kontrola nad plánováním vám umožní prokládání úloh strojového učení a tradičních vykreslování, aby bylo možné gpu nasytit.

Co je pracovní postup DirectML vysoké úrovně?

Tady je základní recept na to, jak očekáváme, že se directML použije. V rámci dvou hlavních fází inicializace a spuštění zaznamenáte práci do seznamů příkazů a pak je spustíte ve frontě.

Inicializace

  1. Vytvořte zdroje Direct3D 12 – zařízení Direct3D 12, frontu příkazů, příkazový seznam a zdroje, jako jsou haldy popisovačů.
  2. Vzhledem k tomu, že provádíte odvozování strojového učení i úlohy vykreslování, vytvořte prostředky DirectML – zařízení DirectML a instance operátorů. Pokud máte model strojového učení, ve kterém potřebujete provést určitý typ konvoluce s konkrétní velikostí tensoru filtru s konkrétním datovým typem, pak se jedná o všechny parametry do operátoru konvoluce DirectML.
  3. Záznamy DirectML fungují v seznamech příkazů Direct3D 12. Po dokončení inicializace tedy zaznamenáte vazbu a inicializaci konvolučního operátoru (například) do seznamu příkazů. Pak zavřete a spusťte seznam příkazů ve frontě obvyklým způsobem.

Provádění

  1. Nahrajte své tenzory hmotnosti do zdrojů. Tensor v DirectML je reprezentován pomocí běžného prostředku Direct3D 12. Například pokud chcete nahrát data o hmotnosti do GPU, uděláte to stejným způsobem jako u jakéhokoli jiného prostředku Direct3D 12 (použijte uploadovací haldu nebo kopírovací frontu).
  2. Dále musíte tyto prostředky Direct3D 12 svázat jako vstupní a výstupní tensory. Zaznamenejte do svého příkazového seznamu vazbu a výkon operátorů.
  3. Zavřete a spusťte seznam příkazů.

Stejně jako u Direct3D 12 je správa doby života a synchronizace prostředků vaší odpovědností. Například nevyvolávejte objekty DirectML alespoň do dokončení provádění na GPU.

Pracovní postupy založené na vrstvách a grafech v DirectML

DirectML podporuje přístupy založené na vrstvách i grafech při provádění modelu. Při provádění vrstvy po vrstvě zodpovídáte za vytvoření a inicializaci jednotlivých operátorů DirectML a jejich individuální záznam pro provádění v seznamu příkazů. Naproti tomu při provádění grafu místo toho sestavíte sadu uzlů a hran – kde každý uzel představuje operátor DirectML a hrany představují tok dat tensoru mezi uzly. Celý graf se pak odešle k inicializaci nebo spuštění najednou a DirectML zpracovává plánování a záznam jednotlivých operátorů vaším jménem.

Oba vzory jsou užitečné v různých situacích. Přístup vrstvy po vrstvě poskytuje maximální kontrolu nad řazením a plánováním výpočetních prací. Tato úroveň kontroly například umožňuje prokládání úloh vykreslování Direct3D 12 s výpočetními operacemi DirectML. To může být užitečné pro využití asynchronních výpočetních jednotek nebo jednotek shaderu na GPU, které by jinak byly nečinné. Ruční provádění po jednotlivých vrstvách také dává vývojáři explicitní řízení nad rozloženími tensorů a využitím paměti.

Modely strojového učení se ale často vyjadřují z hlediska grafů vrstev. Alternativně k přístupu vrstvy po vrstvě umožňuje DirectML vyjádřit model jako směrovaný acyklický graf uzlů (operátory DirectML) a hrany mezi nimi (popisy tenzorů). Po vytvoření popisu grafu můžete zkompilovat a odeslat vše najednou do DirectML pro inicializaci a spuštění. V tomto přístupu se DirectML rozhodne o pořadí procházení a zpracuje jednotlivé operátory a tok dat mezi nimi vaším jménem. To je často jednodušší a přirozenější způsob, jak vyjádřit model strojového učení a umožnit automatické použití optimalizací specifických pro architekturu. Pomocná knihovna DirectMLX navíc poskytuje čistou a pohodlnou syntaxi pro vytváření složitých grafů operátorů DirectML.

Bez ohledu na to, jaký přístup dáváte přednost, budete mít vždy přístup ke stejné rozsáhlé sadě operátorů DirectML. To znamená, že nikdy nemusíte obětovat funkce bez ohledu na to, jestli dáváte přednost jemně odstupňovanému řízení přístupu vrstvy po vrstvě nebo pohodlí přístupu k grafu.

V této části

Téma Popis
Průvodce rychlým startem Začínáme používat DirectML.
Vývojářské nástroje Nástroje pro profilování, optimalizaci a ladění DirectML
Průvodce programováním Témata týkající se datových vazeb, bariér, prezentací, fúzí, zpracování chyb, odebrání zařízení a pomocných funkcí.
Řešení problémů Zpracování chybových stavů a použití vrstvy ladění
Historie verzí DirectML DirectML je systémová komponenta Windows 10 a je k dispozici také jako samostatný distribuovatelný balíček.
Historie na úrovni funkcí DirectML Manifest typů zavedených v jednotlivých úrovních funkcí.
ukázkové aplikace DirectML Odkazy na ukázkové aplikace DirectML, včetně vzorku minimální aplikace DirectML.
Trénování STROJOVÉho učení s akcelerovaným GPU Uvedeno, co aktuálně podporuje trénování strojového učení akcelerované pomocí GPU pro subsystém Windows pro Linux (WSL) a nativní Windows.
Referenční informace k rozhraní API DirectML Tato část popisuje rozhraní API Direct Machine Learning (DirectML) deklarovaná v DirectML.h.

Viz také