Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Összefoglalás
Fontos
A DirectML folyamatos mérnöki munkával működik. A DirectML továbbra is támogatott, de az új funkciófejlesztés átkerült a Windows ML-be a Windows-alapú ONNX Runtime-környezetekhez. A Windows ML ugyanazokat az ONNX futtatókörnyezeti API-kat biztosítja, miközben a hardver alapján dinamikusan választja ki a legjobb végrehajtási szolgáltatót. További információ : Mi az a Windows ML ?
A Direct Machine Learning (DirectML) egy alacsony szintű API a gépi tanuláshoz (ML). Az API egy ismerős (natív C++, nano-COM) programozási felülettel és munkafolyamatokkal rendelkezik a DirectX 12 stílusában. A gépi tanulás következtetési számítási feladatait integrálhatja a játékba, a motorba, a köztes szoftverbe, a háttérrendszerbe vagy más alkalmazásba. A DirectML-t minden DirectX 12-kompatibilis hardver támogatja.
A DirectML építőelemei a hardveresen gyorsított gépi tanulási primitívek (operátorok). Ezekből az építőelemekből olyan gépi tanulási technikákat fejleszthet ki, mint a skálázás, az élsimítás és a stílusátvitel, hogy csak néhányat említsünk. A denoising és a szuperfelbontás például lehetővé teszi a lenyűgöző sugárkövetéses effektusok elérését, képpontonként kevesebb sugárral.
A gépi tanulás következtetési számítási feladatait integrálhatja a játékba, a motorba, a köztes szoftverbe, a háttérrendszerbe vagy más alkalmazásba. A DirectML ismerős (natív C++, nano-COM) DirectX 12-stílusú programozási felülettel és munkafolyamattal rendelkezik, és minden DirectX 12-kompatibilis hardver támogatja. DirectML-mintaalkalmazások esetén, beleértve egy minimális DirectML-alkalmazás mintáját, tekintse meg a DirectML-mintaalkalmazásokat.
A DirectML a Windows 10 1903-as verziójában és a Windows SDK megfelelő verziójában lett bevezetve.
Megfelelő a DirectML a projektemhez?
A DirectML egy alacsony szintű hardver absztrakciós réteg, amely lehetővé teszi gépi tanulási számítási feladatok futtatását bármely DirectX 12-kompatibilis GPU-n.
Ha a gépi tanulási teljesítményt valós idejű, nagy teljesítményű, alacsony késésű vagy erőforrás-korlátozású forgatókönyvekhez kell optimalizálnia, a DirectML a legnagyobb vezérlést és rugalmasságot biztosítja. A DirectML használatával közvetlenül integrálhatja a gépi tanulást a meglévő motorba vagy renderelési folyamatba, vagy létrehozhat saját egyéni gépi tanulási keretrendszereket és köztes szoftvereket Windows rendszeren.
A DirectML-t közvetetten is használhatja az ONNX Futtatókörnyezeten keresztül, amely egy platformfüggetlen kódtár, amely támogatja a gépi tanulási modellek nyílt szabványos ONNX formátumát. Az ONNX-futtatókörnyezet a DirectML-t használhatja végrehajtási szolgáltatóként, más háttérrendszerekkel, például CPU-val, CUDA-val vagy TensorRT-tal együtt. Így anélkül használhatja ki a DirectML teljesítményét és kompatibilitását, hogy saját maga ír bármilyen DirectML-kódot.
Másik lehetőségként használhatja a WinML API-t, amely egy magasabb szintű, modellközpontú API, amely a terhelés-kötés-kiértékelési mintával leegyszerűsíti a gépi tanulási munkafolyamatot. A WinML az ONNX formátumot is használja a modellekhez, és használhatja a DirectML-t háttérrendszerként. A WinML olyan helyzetekhez készült, ahol gyorsan és egyszerűen integrálnia kell a gépi tanulást a Windows-alkalmazásokba anélkül, hogy a mögöttes hardver vagy keretrendszer részletei miatt kellene aggódnia.
Milyen munkát végez a DirectML? és milyen munkát kell végeznem fejlesztőként?
A DirectML hatékonyan végrehajtja a következtetési modell egyes rétegeit a GPU-n (vagy ha van ilyen, AI-gyorsítási magokon). Minden réteg egy operátor, a DirectML pedig alacsony szintű, hardveresen gyorsított gépi tanulási primitív operátorok tárát biztosítja. A DirectML-műveleteket elkülönítve vagy gráfként is végrehajthatja (lásd a Rétegenkénti és gráfalapú munkafolyamatok szakaszt a DirectML-ben).
Az operátorok és a grafikonok hardverspecifikus és architektúraspecifikus optimalizálást alkalmaznak. Ugyanakkor Ön, mint fejlesztő egyetlen szállítói-agnosztikus felületet lát az operátorok végrehajtásához.
A DirectML operátorainak könyvtára biztosítja az összes olyan szokásos műveletet, amelyet várhatóan használni fog egy gépi tanulási számítási feladatban.
- Aktiválási operátorok, például lineáris, ReLU, szigmoid, tanh stb.
- Elemalapú operátorok, például hozzáadás, exp, log, max, min, sub és egyebek.
- Konvolúciós operátorok, például 2D és 3D konvolúció stb.
- Csökkentési operátorok, például argmin, átlag, l2, összeg stb.
- Készletező operátorok, például átlag, lp és max.
- Neurális hálózati (NN) operátorok, például gemm, gru, lstm és rnn.
- És még sok más.
A maximális teljesítmény érdekében, és annak érdekében, hogy ne fizessen azért, amit nem használ, a DirectML fejlesztőként a kezébe veszi az irányítást a gépi tanulási számítási feladatok hardveren való végrehajtásának módjáról. Annak megállapítása, hogy mely operátorokat kell végrehajtani, és mikor, az Ön felelőssége fejlesztőként. A belátása szerint hátrahagyott feladatok közé tartozik a modell átírása; a rétegek egyszerűsítése és optimalizálása; terhelési súlyok; erőforrás-kiosztás, kötés, memóriakezelés (csakúgy, mint a Direct3D 12 esetén); és a gráf végrehajtása.
A gráfjairól magas szintű ismeretekkel rendelkezik (a modellt közvetlenül kódolhatja, vagy saját modellbetöltőt írhat). Felskálázási modellt is tervezhet, például több réteget használva, amelyek mindegyike kibővítési, konvolúciós, normalizálási és aktiválási operátorokat tartalmaz. Ezzel a jártassággal, gondos ütemezéssel és akadálykezeléssel a lehető legtöbb párhuzamosságot és teljesítményt nyerheti ki a hardverből. Ha egy játékot fejleszt, akkor a gondos erőforrás-kezelés és az ütemezés vezérlése lehetővé teszi, hogy összeillessze a gépi tanulási munkafolyamatokat a hagyományos renderelési feladatokkal annak érdekében, hogy telítse a GPU-t.
Mi a magas szintű DirectML-munkafolyamat?
Íme a DirectML várható felhasználásának magas szintű receptje. Az inicializálás és a végrehajtás két fő fázisán belül a munkafolyamatokat a parancslistákba rögzíti, majd végrehajtja őket egy végrehajtási sorban.
Inicializálás
- Hozza létre a Direct3D 12 erőforrásokat – a Direct3D 12-eszközt, a parancssort, a parancslistát és az erőforrásokat, például a leíró halmokat.
- Mivel gépi tanulási következtetést végez, valamint a renderelési számítási feladatot is, hozzon létre DirectML-erőforrásokat – a DirectML-eszköz- és operátorpéldányokat. Ha rendelkezik egy gépi tanulási modellel, ahol egy adott adattípusú szűrő-tenzor méretű konvolúciós típust kell végrehajtania, akkor ezek mind a DirectML konvolúciós operátorának paraméterei.
- A DirectML a feladatokat a Direct3D 12 parancslistákba rögzíti. Így az inicializálás befejezése után rögzíti a konvolúciós operátor kötését és inicializálását a parancslistában. Ezután a szokásos módon zárja be és hajtsa végre a parancslistát az üzenetsoron.
Kivégzés
- Töltse fel a súly-tenzorokat az erőforrásokba. A DirectML tenzor egy normál Direct3D 12-erőforrás használatával van ábrázolva. Ha például a súlyadatokat a GPU-ra szeretné feltölteni, akkor ezt ugyanúgy tegye meg, mint bármely más Direct3D 12-erőforrás esetében, használva egy feltöltési kupacot vagy a másolási sort.
- Ezután ezeket a Direct3D 12-erőforrásokat kell összekötnie bemeneti és kimeneti tenzorként. Jegyezze fel a parancslistába az operátorok kötését és végrehajtását.
- Zárja be és hajtsa végre a parancslistát.
A Direct3D 12-hez hasonlóan az erőforrások élettartama és szinkronizálása is az Ön feladata. Ne engedje fel például a DirectML-objektumokat legalább addig, amíg a GPU-n nem fejezték be a végrehajtást.
Rétegenkénti és gráfalapú munkafolyamatok a DirectML-ben
A DirectML támogatja a modell végrehajtásának rétegenkénti és gráfalapú megközelítéseit is. Rétegenkénti végrehajtás esetén ön a felelős az egyes DirectML-operátorok létrehozásáért és inicializálásáért, valamint azok parancslistán való végrehajtásához való egyedi rögzítéséért. Ezzel szemben a gráfok végrehajtásakor ehelyett csomópontok és élek halmazát kell létrehoznia – ahol minden csomópont Egy DirectML-operátort jelöl, az élek pedig a csomópontok között áramló tenzoros adatokat jelölik. Ezután a teljes gráfot egyszerre küldi el inicializálásra vagy végrehajtásra, és a DirectML kezeli az egyes operátorok ütemezését és rögzítését az Ön nevében.
Mindkét minta különböző helyzetekben hasznos. A rétegenkénti megközelítés maximálisan szabályozhatja a számítási feladatok sorrendjét és ütemezését. Ez a vezérlési szint lehetővé teszi például a Direct3D 12 renderelési számítási feladatok és a DirectML számítási feladatok közötti együttműködését. Ez hasznos lehet az aszinkron számítási vagy árnyékoló egységek kihasználásához a GPU-n, amelyek egyébként tétlenek lennének. A rétegenkénti manuális végrehajtás explicit fejlesztői vezérlést is biztosít a tenzoros elrendezések és a memóriahasználat felett.
A gépi tanulási modelleket azonban gyakran rétegdiagramok formájában fejezik ki. A rétegenkénti megközelítés alternatívaként a DirectML lehetővé teszi, hogy a modellt a csomópontok (DirectML-operátorok) és a köztük lévő élek irányított aciklikus gráfjaként fejezze ki (tenzorleírások). A gráf leírásának elkészítése után egyszerre fordíthatja le és küldheti el a DirectML-nek inicializálás és végrehajtás céljából. Ebben a megközelítésben a DirectML egy bejárási sorrendet határoz meg, és kezeli az egyes operátorokat és a közöttük lévő adatáramlást az Ön nevében. Ez gyakran egyszerűbb és természetesebb módszer a gépi tanulási modellek kifejezésére, és lehetővé teszi az achitecture-specifikus optimalizálások automatikus alkalmazását. Emellett a DirectMLX segédkönyvtára tiszta és kényelmes szintaxist biztosít a DirectML-operátorok összetett gráfjainak létrehozásához.
Bármelyik megközelítést is választja, mindig hozzáférhet a DirectML-operátorok széles választékához. Ez azt jelenti, hogy soha nem kell feláldoznia a funkciókat, függetlenül attól, hogy a rétegenkénti megközelítés finomított vezérlését vagy a gráfalapú megközelítés kényelmét részesíti előnyben.
Ebben a szakaszban
| Téma | Leírás |
|---|---|
| Rövid útmutató | A DirectML használatának első lépései. |
| Fejlesztői eszközök | A DirectML profilkészítéséhez, optimalizálásához és hibakereséséhez szükséges eszközök. |
| Programozási útmutató | Az adatkötéssel, a korlátokkal, a diákkal, a fúziókkal, a hibakezeléssel, az eszközeltávolítással és a segédfunkciókkal kapcsolatos témakörök. |
| Hibaelhárítás | Hibafeltételek kezelése és a hibakeresési réteg használata. |
| DirectML-verzióelőzmények | A DirectML a Windows 10 rendszerösszetevője, és önálló terjeszthető csomagként is elérhető. |
| A DirectML szolgáltatásszint-előzményei | Az egyes funkciók szintjén bevezetett típusok jegyzéke. |
| DirectML-mintaalkalmazások | DirectML-mintaalkalmazásokra mutató hivatkozások, beleértve egy minimális DirectML-alkalmazás mintáját is. |
| GPU-gyorsított gépi tanulás betanítása | A linuxos Windows-alrendszer (WSL) és a natív Windows gpu-gyorsított gépi tanulás (ML) betanításának jelenleg támogatott ismereteit ismerteti. |
| DirectML API-referencia | Ez a szakasz a Direct Machine Learning (DirectML)-ben DirectML.hdeklarált API-kat ismerteti. |