Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Opensourcová verze Hyperoptu se už neudržuje.
Hyperopt se odebere v další hlavní verzi DBR ML. Azure Databricks doporučuje používat Optuna pro optimalizaci na jediném uzlu nebo RayTune pro obdobný zážitek jako u zastaralé distribuované funkce ladění hyperparametrů Hyperopt. Přečtěte si další informace o používání RayTune v Azure Databricks.
Tento článek popisuje některé koncepty, které potřebujete vědět, abyste mohli používat distribuovanou technologii Hyperopt.
V této části:
Příklady ilustrující použití Hyperoptu v Azure Databricks najdete v tématu Hyperopt.
fmin()
Používáte fmin()
ke spuštění Hyperoptu. Argumenty pro fmin()
jsou uvedeny v tabulce; Další informace najdete v dokumentaci k Hyperoptu. Příklady použití jednotlivých argumentů najdete v ukázkových poznámkových blocích.
Název argumentu | Popis |
---|---|
fn |
Účelová funkce. Hyperopt volá tuto funkci s hodnotami vygenerovanými z prostoru hyperparametrů zadaného v argumentu prostor. Tato funkce může vrátit ztrátu jako skalární hodnotu nebo ve slovníku (podrobnosti najdete v dokumentaci k Hyperoptu ). Tato funkce obvykle obsahuje kód pro trénink modelu a výpočet ztráty. |
space |
Definuje prostor hyperparametrů, který se má prohledávat. Hyperopt poskytuje velkou flexibilitu při definování tohoto prostoru. Můžete zvolit kategorickou možnost, jako je algoritmus nebo pravděpodobnostní rozdělení číselných hodnot, jako je uniforma a protokol. |
algo |
Vyhledávací algoritmus Hyperoptu, který se použije k vyhledávání prostoru hyperparametrů. Nejčastěji se hyperopt.rand.suggest používají pro náhodné vyhledávání a hyperopt.tpe.suggest pro TPE. |
max_evals |
Počet nastavení hyperparametrů, které se mají vyzkoušet (počet modelů, které se mají přizpůsobit). |
max_queue_len |
Počet nastavení hyperparametrů, která by měl Hyperopt předem vygenerovat. Vzhledem k tomu, že generování algoritmem Hyperopt TPE může trvat delší dobu, může být užitečné zvýšit tuto hodnotu nad výchozí hodnotu 1, ale obecně by neměla překročit nastavení SparkTrials parallelism . |
trials |
A Trials nebo SparkTrials objekt. Použijte SparkTrials při volání algoritmů pro jeden počítač, jako jsou metody scikit-learn v rámci objektivní funkce. Používá se Trials při volání distribuovaných trénovacích algoritmů, jako jsou metody MLlib nebo Horovod v objektivní funkci. |
early_stop_fn |
Volitelná funkce časného zastavení určuje, jestli by se fmin měl zastavit před dosažením max_evals . Výchozí hodnota je None . Vstupní podpis funkce je Trials, *args a výstupní podpis je bool, *args . Logická hodnota výstupu označuje, jestli se má zastavit nebo ne.
*args je jakýkoli stav, kdy výstup volání early_stop_fn slouží jako vstup do dalšího volání.
Trials může být SparkTrials objekt. Při použití SparkTrials nenít zaručeno, že se funkce pro předčasné zastavení spustí po každém pokusu; místo toho je pravidelně kontrolována.
Příklad časné zastavení funkce |
Třída SparkTrials
SparkTrials
je rozhraní API vyvinuté službou Databricks, které umožňuje distribuovat spuštění Hyperoptu, aniž byste museli provádět další změny kódu Hyperoptu.
SparkTrials
zrychluje ladění na jednom počítači tím, že distribuuje zkušební verze pracovníkům Sparku.
Poznámka:
SparkTrials
je navržený tak, aby paralelizoval výpočty pro modely STROJOVÉho učení s jedním počítačem, jako je scikit-learn. Pro modely vytvořené s distribuovanými algoritmy ML, jako je MLlib nebo Horovod, nepoužívejte SparkTrials
. V tomto případě je proces sestavování modelu automaticky paralelizován v clusteru a měli byste použít výchozí třídu Trials
Hyperopt .
Tato část popisuje, jak nakonfigurovat argumenty, které předáváte SparkTrials
, a vysvětluje aspekty implementace SparkTrials
.
Argumenty
SparkTrials
přijímá dva volitelné argumenty:
parallelism
: Maximální počet pokusů, které se mají vyhodnotit souběžně. Vyšší číslo umožňuje škálovat testování více nastavení hyperparametrů. Vzhledem k tomu, že Hyperopt navrhuje nové pokusy založené na minulých výsledcích, existuje kompromis mezi paralelismu a adaptivitou. U pevnéhomax_evals
, větší paralelismus urychluje výpočty, ale nižší paralelismus může vést k lepším výsledkům, protože každá iterace má přístup k více minulým výsledkům.Výchozí hodnota: Počet dostupných exekutorů Sparku Maximum: 128. Pokud je hodnota větší než počet souběžných úloh povolených konfigurací clusteru,
SparkTrials
snižuje paralelismus na tuto hodnotu.timeout
: Maximální počet sekund volánífmin()
může trvat. Při překročení tohoto čísla se všechny běhy zastaví afmin()
ukončí činnost. Informace o dokončených spuštěních se ukládají.
Implementace
Při definování účelové funkce fn
předané fmin()
a při výběru nastavení clusteru je užitečné pochopit, jak SparkTrials
distribuuje úlohy ladění.
V Hyperoptu obvykle zkušební verze odpovídá přizpůsobení jednoho modelu na jedno nastavení hyperparametrů. Hyperopt iterativním způsobem generuje pokusy, vyhodnocuje je a opakuje.
Uzel SparkTrials
ovladače vašeho clusteru vygeneruje nové zkušební verze a pracovní uzly tyto zkušební verze vyhodnocují. Každá zkušební verze se vygeneruje s úlohou Sparku, která má jeden úkol, a vyhodnocuje se v úkolu na pracovním počítači. Pokud je váš cluster nastavený tak, aby spouští více úloh na jednoho pracovníka, může být u tohoto pracovníka vyhodnoceno více pokusů najednou.
SparkTrials
a MLflow
Databricks Runtime ML podporuje protokolování do MLflow z pracovních procesů. Do funkce cíle, kterou předáte Hyperopt, můžete přidat vlastní kód protokolování.
SparkTrials
zaznamenává výsledky ladění jako vnořené záznamy běhů MLflow takto:
- Hlavní nebo nadřazené spuštění: Volání
fmin()
se zaprotokoluje jako hlavní spuštění. Pokud je aktivní běh,SparkTrials
protokoluje do tohoto běhu a běh nekončí, když sefmin()
vrátí. Pokud neexistuje aktivní spuštění,SparkTrials
vytvoří nové spuštění, zapíše do něj záznam a ukončí spuštění před vrácením pomocífmin()
. - Podřízená spuštění: Každé testované nastavení hyperparametrů (zkušební verze) se protokoluje jako podřízené spuštění v rámci hlavního spuštění. Záznamy protokolu MLflow od pracovních procesů se také ukládají v odpovídajících podřízených bězích.
Při volání fmin()
, Databricks doporučuje aktivní řízení spuštění MLflow; to znamená, že zavolání fmin()
zabalíte do příkazu with mlflow.start_run():
. Tím se zajistí, že se každé volání fmin()
zaprotokoluje do samostatného hlavního spuštění MLflow a usnadňuje přidání dalších značek, parametrů nebo metrik do tohoto spuštění.
Poznámka:
Když voláte fmin()
vícekrát během stejného aktivního běhu MLflow, MLflow zaznamená tato volání do stejného hlavního běhu. Pokud chcete vyřešit konflikty názvů pro protokolované parametry a značky, MLflow připojí UUID k názvům s konflikty.
Při protokolování od pracovníků není nutné explicitně spravovat spuštění v cílové funkci. Zavolejte mlflow.log_param("param_from_worker", x)
v objektivní funkci, abyste zalogovali parametr do podřízeného běhu. Ve funkci cíle můžete protokolovat parametry, metriky, značky a artefakty.