A Windows ML teljesítménye és memóriája

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:

  • ImageFeatureValue

    • 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á.
  • TensorFloat

    • 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 .
  • TensorFloat16 bites

    • 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.