Hydra konfigurációk a mély tanulási kísérletekhez

Hydra konfigurációk a mély tanulási kísérletekhez

Forrás csomópont: 1998433

Hydra konfigurációk a mély tanulási kísérletekhez
Kép a szerkesztőtől

Hydra A könyvtár rugalmas és hatékony konfigurációkezelő rendszert biztosít, amely lehetővé teszi a hierarchikus konfigurációk dinamikus létrehozását a konfigurációs fájlok és a parancssor segítségével.

Ez a hatékony eszköz egyszerű és hatékony módot kínál a különféle konfigurációk egy helyen történő kezelésére és rendszerezésére, összetett többszintű konfigurációs struktúrák létrehozásával korlátok nélkül, amelyek elengedhetetlenek lehetnek a gépi tanulási projektekben.

Mindez lehetővé teszi, hogy egyszerűen váltson a paraméterek között, és próbáljon ki különböző konfigurációkat a kód manuális frissítése nélkül. A paraméterek rugalmas és moduláris definiálásával sokkal könnyebbé válik az új ML modellek iterálása és a különböző megközelítések gyorsabb összehasonlítása, ami időt és erőforrást takaríthat meg, emellett pedig a fejlesztési folyamatot is hatékonyabbá teszi.

A Hydra központi komponensként szolgálhat a mély tanulási folyamatokban (találhat példát a képzési folyamatsablonra itt), amely az összes belső modult hangszerelné.

Egy dekoratőr hydra.main állítólag a Hydra konfiguráció betöltésére szolgál a csővezeték indításakor. Itt a Hydra nyelvtani elemző elemzi a konfigurációt, egyesíti, összeállítja és átadja a folyamat fő funkciójának.

Ezenkívül a Hydra is megvalósíthatja Írás API, Felhasználva initialize, initialize_config_module or initialize_config_dir, ahelyett hydra.main lakberendező:

Egy objektum példányosítható a konfigurációból, ha tartalmazza a _target_ gomb például osztály vagy függvénynévvel torchmetrics.Accuracy. Ezenkívül a konfiguráció tartalmazhat más paramétereket is, amelyeket át kell adni az objektum példányosításnak. A Hydra biztosítja hydra.utils.instantiate() függvény (és álneve hydra.utils.call()) objektumok példányosításához és osztály vagy függvény hívásához. Előnyösebb használni instantiate tárgyak létrehozásához és call függvények meghívására.

E konfiguráció alapján egyszerűen példányosíthat:

  • veszteség keresztül loss = hydra.utils.instantiate(config.loss)
  • metrikus via metric = hydra.utils.instantiate(config.metric)

Emellett több stratégiát is támogat a konfigurációs paraméterek konvertálására: none, partial, object és a all Az _convert_ attribútum ennek a beállításnak a kezelésére szolgál. További részleteket találhat itt.

Sőt, kínál a részleges példányosítás, ami nagyon hasznos lehet például függvénypéldányosításhoz vagy rekurzív objektum példányosításhoz.

A Hydra parancssori műveleteket biztosít a konfigurációs paraméterek felülbírálásához:

  • A meglévő konfigurációs érték lecserélhető egy másik érték átadásával.
  • A konfigurációban nem szereplő új konfigurációs érték a következővel adható hozzá + operátor.
  • Ha a konfigurációnak már van értéke, az felülbírálható a ++ operátor. Ha az érték nem létezik a konfigurációban, akkor hozzáadódik.

Különféle izgalmas funkciókat is támogat, mint például:

  • Strukturált konfigurációk a rendelkezésre álló primitív típusok bővített listájával, beágyazott szerkezettel, primitíveket tartalmazó tárolókkal, alapértelmezett értékekkel, alulról felfelé haladó értékek felülbírálásával és még sok mással. Ez a lehetőségek széles skáláját kínálja a konfigurációk sokféle formában történő szervezésére.

A Hydra lehetőséget ad funkcionalitásának még tovább bővítésére egyéni rezolverek hozzáadásával OmegaConf könyvtár. Lehetővé teszi egyéni végrehajtható kifejezések hozzáadását a konfigurációhoz. OmegaConf.register_new_resolver() függvény az ilyen feloldók regisztrálására szolgál.

Alapértelmezés szerint az OmegaConf a következő feloldókat támogatja:

  • oc.env: egy környezeti változó értékét adja vissza
  • oc.create: konfigurációs csomópontok dinamikus generálására használható
  • oc.deprecated: egy konfigurációs csomópont elavultként való megjelölésére használható
  • oc.decode: egy karakterláncot dekódol egy adott kodek segítségével
  • oc.select: alapértelmezett értéket ad arra az esetre, ha az elsődleges interpolációs kulcs nem található, vagy olyan kulcsokat választ ki, amelyek egyébként illegális interpolációs kulcsok, vagy kezeli a hiányzó értékeket is
  • oc.dict.{keys,value}: analóg a dict.keys és dict.values ​​metódusaival az egyszerű Python szótárakban

További részletek itt.

Ezért ez egy hatékony eszköz, amely lehetővé teszi bármilyen egyéni feloldó hozzáadását. Fárasztó és időigényes lehet például a veszteség- vagy metrikanevek többszöri beírása a konfigurációkba több helyre, mint pl. early_stopping konfiguráció, model_checkpoint config, az ütemező paramétereit tartalmazó konfiguráció, vagy valahol máshol. Megoldható egy egyedi feloldó hozzáadásával __loss__ és a __metric__ a neveket a tényleges veszteség vagy metrikanév alapján, amelyet a konfigurációnak továbbít, és a Hydra példányosít.

Megjegyzés: Előtte regisztrálnia kell az egyéni feloldókat hydra.main or Írás API hívásokat. Ellenkező esetben a Hydra config parser egyszerűen nem alkalmazza.

In sablonom a gyors mély tanulási kísérletekhez, lakberendezőként valósul meg utils.register_custom_resolvers, amely lehetővé teszi az összes egyedi feloldó regisztrálását egy helyen. Támogatja a fő Hydra parancssori jelzőit, amelyek szükségesek a konfigurációs elérési út, név vagy könyvtár felülbírálásához. Alapértelmezés szerint lehetővé teszi a cserét __loss__ nak nek loss.__class__.__name__ és a __metric__ nak nek metric.__class__.__name__ ilyen szintaxison keresztül: ${replace:"__metric__/valid"}. Használjon idézőjeleket a belső érték meghatározásához ${replace:"..."} hogy elkerüljük a nyelvtani problémákat a Hydra konfigurációs elemzővel.

Tekintsen meg további részleteket erről utils.register_custom_resolvers itt. Könnyen bővítheti bármilyen más célra.

Ez a hatékony eszköz jelentősen leegyszerűsíti az összetett csővezetékek fejlesztését és konfigurálását, például:

  • Modulok példányosítása bármilyen egyedi logikával a motorháztető alatt, pl.
    • Példányosítsa az egész modult az összes belső almodullal rekurzív módon a Hydra segítségével.
    • A fő modult és a belső almodulok egyes részeit a Hydra inicializálhatja, a többit pedig manuálisan.
    • Inicializálja manuálisan a fő modult és az összes almodult.
  • Csomagoljon dinamikus struktúrákat, például adatbővítéseket a konfigurációhoz, ahol könnyedén beállíthat bármilyen transforms osztályok, paraméterek vagy megfelelő jelentkezési sorrend. Lásd a lehetséges megvalósítási példát TransformsWrapper alapján albumentációk könyvtár erre a célra, amely könnyen átdolgozható bármely over augmentations csomaghoz. Konfigurációs példa:

  • Hozzon létre összetett többszintű konfigurációs struktúrát. Itt a konfigurációk megszervezésének vázlata:

 

Hydra konfigurációk a mély tanulási kísérletekhez
 

  • És még sok más dolog… Nagyon kevés korlátja van, így bármilyen egyéni logikához használhatja, amelyet a projektjében szeretne megvalósítani.

A Hydra megnyitja az utat a méretezhető konfigurációkezelő rendszer felé, amely lehetővé teszi a munkafolyamat hatékonyságának növelését és a konfigurációk szükség szerinti módosításának rugalmasságát. A különböző konfigurációk közötti könnyű váltás, egyszerűen újrakomponálás és a különböző megközelítések kipróbálása a kód kézi frissítése nélkül az egyik legfontosabb előnye egy ilyen rendszernek a gépi tanulási problémák megoldására, különösen a mély tanulással kapcsolatos feladatoknál, amikor a további rugalmasság annyira kritikus. .

 
 
Alekszandr Gorodnyickij egy gépi tanulási mérnök, aki mély ismeretekkel rendelkezik az ML, a Computer Vision és az Analytics területén. Több mint 3 éves tapasztalattal rendelkezem gépi tanulást alkalmazó termékek létrehozásában és fejlesztésében.
 

Időbélyeg:

Még több KDnuggets