Hyperopt-fogalmak
Ez a cikk az elosztott Hyperopt használatához szükséges néhány fogalmat ismerteti.
Ebben a szakaszban:
A Hyperopt Azure Databricksben való használatát bemutató példákért lásd: Hiperparaméter-finomhangolás a Hyperopttal.
fmin()
Hyperopt-futtatás végrehajtására használható fmin()
. A argumentumok fmin()
a táblázatban láthatók. További információt a Hyperopt dokumentációjában talál. Az egyes argumentumok használatára vonatkozó példákért tekintse meg a példajegyzetfüzeteket.
Argumentum neve | Leírás |
---|---|
fn |
Objektív függvény. A Hyperopt meghívja ezt a függvényt a szóköz argumentumban megadott hiperparaméter-térből generált értékekkel. Ez a függvény skaláris értékként vagy szótárban is visszaadhatja a veszteséget (részletekért lásd: Hyperopt-dokumentumok ). Ez a függvény általában a modell betanítási és veszteségszámítási kódját tartalmazza. |
space |
Meghatározza a keresendő hiperparaméter-területet. A Hyperopt nagy rugalmasságot biztosít a tér definiálásához. Választhat kategorikus lehetőségeket, például algoritmust vagy valószínűségi eloszlást numerikus értékekhez, például egységes és naplókhoz. |
algo |
Hiperopt keresési algoritmus a hiperparaméter-terület kereséséhez. Leggyakrabban a hyperopt.rand.suggest véletlenszerű kereséshez és hyperopt.tpe.suggest a TPE-hez használják. |
max_evals |
A kipróbálandó hiperparaméter-beállítások száma (az illesztendő modellek száma). |
max_queue_len |
A hiperparaméter-beállítások számának a Hyperoptnak előre létre kell hoznia. Mivel a Hyperopt TPE-generáció algoritmusa eltarthat egy ideig, hasznos lehet ezt növelni az alapértelmezett 1 értéknél, de általában nem nagyobb a SparkTrials beállításnál parallelism . |
trials |
A Trials vagy SparkTrials objektum. Akkor használja SparkTrials , ha egygépes algoritmusokat hív meg, például scikit-learn metódusokat az objektív függvényben. Akkor használja Trials , ha elosztott betanítási algoritmusokat hív meg, például MLlib metódusokat vagy Horovodot az objektív függvényben. |
early_stop_fn |
Egy nem kötelező korai leállítási függvény annak meghatározásához, hogy le kell-e fmin állnia, mielőtt max_evals elérnék. Az alapértelmezett szint a None . A függvény bemeneti aláírása, Trials, *args a kimeneti aláírás pedig .bool, *args A kimeneti logikai érték azt jelzi, hogy le kell-e állítani. *args bármely olyan állapot, amelyben a hívás early_stop_fn kimenete a következő hívás bemeneteként szolgál. Trials objektum lehet SparkTrials . A használata SparkTrials esetén a korai leállítási függvény nem garantáltan minden próba után fut, hanem lekérdezi. Példa egy korai leállítási függvényre |
Az SparkTrials
osztály
SparkTrials
a Databricks által fejlesztett API, amely lehetővé teszi a Hyperopt-futtatások terjesztését anélkül, hogy más módosításokat végez a Hyperopt-kódon. SparkTrials
felgyorsítja az egygépes finomhangolást a próbaverziók Spark-feldolgozóknak való terjesztésével.
Megjegyzés
SparkTrials
az egygépes gépi tanulási modellek, például a scikit-learn számításainak párhuzamosítására lett kialakítva. Elosztott ML-algoritmusokkal (például MLlib vagy Horovod) létrehozott modellekhez ne használja a következőt SparkTrials
: . Ebben az esetben a modellépítési folyamat automatikusan párhuzamos lesz a fürtön, és az alapértelmezett Hyperopt osztályt Trials
kell használnia.
Ez a szakasz bemutatja, hogyan konfigurálhatja a neki átadott SparkTrials
argumentumokat és a megvalósítás szempontjait SparkTrials
.
Argumentumok
SparkTrials
két választható argumentumot vesz fel:
parallelism
: Az egyidejűleg kiértékelendő kísérletek maximális száma. A magasabb szám lehetővé teszi a több hiperparaméter-beállítás tesztelésének vertikális felskálázását. Mivel a Hyperopt új kísérleteket javasol a múltbeli eredmények alapján, kompromisszum van a párhuzamosság és az adaptívság között. A rögzítettmax_evals
, nagyobb párhuzamosság felgyorsítja a számításokat, de az alacsonyabb párhuzamosság jobb eredményhez vezethet, mivel minden iteráció több korábbi eredményhez fér hozzá.Alapértelmezett: Elérhető Spark-végrehajtók száma. Maximum: 128. Ha az érték nagyobb, mint a fürtkonfiguráció által engedélyezett egyidejű tevékenységek száma,
SparkTrials
csökkenti a párhuzamosságot ezzel az értékkel.timeout
: A hívások maximális száma másodpercigfmin()
tarthat. Ha túllépi ezt a számot, az összes futtatás leáll, ésfmin()
kilép. A rendszer menti a befejezett futtatásokra vonatkozó információkat.
Megvalósítás
A célfüggvény fn
fmin()
definiálásakor és a fürtbeállítás kiválasztásakor hasznos megérteni, hogyan SparkTrials
osztja el a hangolási feladatokat.
A Hyperoptban a próbaverzió általában megfelel egy modellnek a hiperparaméterek egy beállítására való illesztésének. A Hyperopt iteratív módon hoz létre próbaverziókat, kiértékeli és ismétli őket.
A használatával SparkTrials
a fürt illesztőprogram-csomópontja új próbaverziókat hoz létre, és a feldolgozó csomópontok kiértékelik ezeket a próbaverziókat. Minden próbaverzió egy Spark-feladattal jön létre, amely egy tevékenységgel rendelkezik, és a munkavégző gépen lévő feladatban lesz kiértékelve. Ha a fürt több feladat futtatására van beállítva feldolgozónként, akkor egyszerre több próba is kiértékelhető a feldolgozón.
SparkTrials
és MLflow
A Databricks Runtime ML támogatja a feldolgozók MLflow-ba való naplózását. Egyéni naplózási kódot adhat hozzá a Hyperoptnak átadott objektív függvényhez.
SparkTrials
naplózza a hangolási eredményeket beágyazott MLflow-futtatásként az alábbiak szerint:
- Fő vagy szülőfuttatás: A rendszer főfuttatásként naplózza a hívását
fmin()
. Ha aktív futtatás van, naplózza ezt az aktív futtatásba,SparkTrials
és a visszatéréskorfmin()
nem fejezi be a futtatás befejezését. Ha nincs aktív futtatás,SparkTrials
létrehoz egy új futtatásokat, naplózza azt, és a visszatérés előttfmin()
befejezi a futtatásokat. - Gyermekfuttatások: A rendszer minden tesztelt hiperparaméter-beállítást (próbaverziót) gyermekfuttatásként naplóz a főfuttatás alatt. A feldolgozók MLflow-naplórekordjait a rendszer a megfelelő gyermekfuttatások alatt is tárolja.
fmin()
Híváskor a Databricks aktív MLflow-futtatási felügyeletet javasol, azaz a hívást fmin()
egy with mlflow.start_run():
utasításba csomagolja. Ez biztosítja, hogy minden fmin()
hívás külön MLflow főfuttatásba legyen naplózva, és egyszerűbbé teszi a további címkék, paraméterek vagy metrikák naplózását a futtatáshoz.
Megjegyzés
Ha ugyanazon az aktív MLflow-futtatáson belül többször is hív fmin()
, az MLflow naplózza ezeket a hívásokat ugyanarra a fő futtatásra. A naplózott paraméterek és címkék névütközéseinek feloldásához az MLflow hozzáfűz egy UUID-t az ütköző nevekhez.
A feldolgozóktól való naplózáskor nem kell explicit módon kezelnie a futtatásokat az objektív függvényben. Hívja meg mlflow.log_param("param_from_worker", x)
az objektív függvényt, hogy naplózza a paramétert a gyermekfuttatásban. Az objektív függvényben naplózhatja a paramétereket, a metrikákat, a címkéket és az összetevőket.