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.
Ebben a cikkben bemutatjuk, hogyan kezelheti az alkalmazás teljesítményét a Windows Machine Learning használatakor.
Szálkezelés és párhuzamosság
A futtatókörnyezetből közzétett összes objektum agilis, ami azt jelenti, hogy bármely szálról elérhetők. Az agilis objektumokról további információt a C++/WinRT fájlban talál.
Az egyik legfontosabb objektum, amellyel dolgozni fog, a LearningModelSession. Ez az objektum mindig biztonságosan hívható bármilyen szálról.
GPU-munkamenetek esetén: Az objektum egyidejű hívásokat fog zárolni és szinkronizálni. Ha egyidejűséget igényel, több munkamenetet kell létrehoznia annak eléréséhez.
CPU-munkamenetek esetén: Az objektum nem zárolja az objektumot, és egyidejű hívásokat tesz lehetővé egyetlen munkameneten. Gondoskodnia kell saját állapotának, puffereinek és kötési objektumainak kezeléséről.
Fontolja meg a forgatókönyv célját, és mérje fel a célját a kontextusában. A modern GPU-architektúrák másként működnek, mint a CPU-k. Ha például az alacsony késés a cél, érdemes lehet a cpu- és GPU-motorok munkaütemezésének ütemezését pipelininggel kezelni, nem pedig egyidejűséggel. Ez a többmotoros szinkronizálásról szóló cikk nagyszerű hely az első lépésekhez. Ha az átviteli sebesség a cél (például a lehető legtöbb kép feldolgozása), gyakran több szálat és egyidejűséget szeretne használni a processzor telítettsége érdekében.
Ha a szálkezelésről és az egyidejűségről van szó, kísérleteket szeretne futtatni, és mérni szeretné az időzítéseket. A teljesítmény a célok és a forgatókönyvek alapján jelentősen megváltozik.
Memóriakihasználtság
A LearningModel és a LearningModelSession minden példánya rendelkezik a modell másolatával a memóriában. Ha kis modellekkel dolgozik, lehet, hogy nem aggódik, de ha nagyon nagy modellekkel dolgozik, ez fontossá válik.
A memória felszabadításához hívja meg az Elidegenítés parancsot a modellen vagy a munkameneten. Ne csak törölje őket, mivel egyes nyelvek lusta szemétgyűjtést végeznek.
A LearningModel egy másolatot tart a memóriában az új munkamenetek létrehozásához. A LearningModel megsemmisítése után az összes meglévő munkamenet továbbra is működni fog. Ezzel a LearningModel-példánnyal azonban már nem hozhat létre új munkameneteket. Nagy modellek esetén létrehozhat egy modellt és munkamenetet, majd megsemmisítheti a modellt. Ha egyetlen munkamenetet használ az összes kiértékelésre irányuló híváshoz, a nagy modell egyetlen példánya lesz a memóriában.
Float16-támogatás
A jobb teljesítmény és a modelligény csökkentése érdekében az ONNXMLTools használatával átalakíthatja a modellt lebegőpontossá16.
Az átalakítás után minden súly és bemenet float16 formátumú lesz. Az alábbi módon dolgozhat float16 bemenetekkel és kimenetekkel:
-
- Ajánlott használat.
- Színeket alakít át és átalakítja tenzorrá "float16" formátumban.
- Támogatja a bgr8- és 8 bites képformátumokat, amelyek adatvesztés nélkül, biztonságosan átalakíthatók lebegőpontos16 formátummá.
-
- Haladó elérési út.
- Float32 átalakítva float16-ra.
- A képek esetében ez biztonságosan alkalmazható, mivel a bgr8 adatformátum kicsi és megfelelő.
- Nem képek esetén a Bind sikertelen lesz, és ehelyett TensorFloat16Bit-et kell megadnia .
-
- Haladó elérési út.
- Át kell alakítania float16-ra, és float32 formátumban kell továbbítania a bemeneteket, amelyek float16-ra lesznek konvertálva.
Megjegyzés:
Az operátor többnyire továbbra is 32 bites matematikát végez. Kisebb a túlcsordulás kockázata, és az eredmény truncálva van a float16 típusra. Ha azonban a hardver a float16-támogatást hirdeti, akkor a futtatókörnyezet kihasználja azt.
Bemeneti adatok előzetes feldolgozása
A WinML néhány előfeldolgozási lépést hajt végre a borítók alatt, hogy egyszerűbbé és hatékonyabbá tegye a bemeneti adatok feldolgozását. A bemeneti képek például különböző színformátumokban és alakzatokban lehetnek, és eltérhetnek attól, amit a modell elvár. A WinML konverziókat hajt végre a képeken, hogy azok megfeleljenek, csökkentve a fejlesztő terhelését.
A WinML a teljes hardververmet (CPU, GPU stb.) is kihasználja, hogy a leghatékonyabb átalakításokat biztosítsa egy adott eszközhöz és forgatókönyvhöz.
Bizonyos esetekben azonban előfordulhat, hogy bizonyos követelmények miatt manuálisan szeretné tenzorizálni a bemeneti adatokat. Előfordulhat például, hogy nem szeretné a VideoFrame-et használni a képekhez, vagy a képpontértékeket a 0–255 tartománytól a 0–1 tartományig szeretné normalizálni. Ezekben az esetekben saját tensorizálást végezhet az adatokon. Erre példa az egyéni tenzorizálási minta .
Megjegyzés:
A Windows ML-vel kapcsolatos segítségért használja az alábbi erőforrásokat:
- Ha technikai kérdéseket szeretne feltenni vagy megválaszolni a Windows ML-ről, használja a Windows-machine-learning címkét a Stack Overflow-on.
- Hiba bejelentéséhez küldjön egy hibát a GitHubon.