Regelverk: Justering av Hyperparameter med Hyperopt

Bästa praxis

  • Bayesianska metoder kan vara mycket effektivare än rutnätssökning och slumpmässig sökning. Med algoritmen Hyperopt Tree of Parzen Estimators (TPE) kan du därför utforska fler hyperparametrar och större intervall. Om du använder domänkunskaper för att begränsa sökdomänen kan du optimera justeringen och ge bättre resultat.
  • När du använder hp.choice()returnerar Hyperopt indexet för vallistan. Därför är parametern som loggas i MLflow också indexet. Använd hyperopt.space_eval() för att hämta parametervärdena.
  • För modeller med långa träningstider börjar du experimentera med små datamängder och många hyperparametrar. Använd MLflow för att identifiera de modeller som fungerar bäst och avgöra vilka hyperparametrar som kan åtgärdas. På så sätt kan du minska parameterutrymmet när du förbereder dig för att justera i stor skala.
  • Dra nytta av Hyperopt-stöd för villkorsstyrda dimensioner och hyperparametrar. När du till exempel utvärderar flera varianter av gradient descent, i stället för att begränsa hyperparameterutrymmet till bara vanliga hyperparametrar, kan du använda Hyperopt som villkorsstyrda hyperparametrar – de som bara är lämpliga för en delmängd av smakerna. Mer information om hur du använder villkorsparametrar finns i Definiera ett sökutrymme.
  • När du använder SparkTrialskonfigurerar du parallellitet på rätt sätt för endast PROCESSOR- och GPU-aktiverade kluster. I Azure Databricks använder CPU- och GPU-kluster olika antal körtrådar per arbetsnod. CPU-kluster använder flera körtrådar per nod. GPU-kluster använder bara en körtråd per nod för att undvika konflikter mellan flera Spark-uppgifter som försöker använda samma GPU. Även om detta vanligtvis är optimalt för bibliotek skrivna för GPU:er innebär det att maximal parallellitet minskas för GPU-kluster, så var medveten om hur många GPU:er varje utvärderingsversion kan använda när du väljer GPU-instanstyper. Mer information finns i GPU-aktiverade kluster .
  • Använd inte SparkTrials på autoskalningskluster. Hyperopt väljer parallellitetsvärdet när körningen påbörjas. Om klustret senare skalar automatiskt kan Hyperopt inte dra nytta av den nya klusterstorleken.

Felsökning

  • En rapporterad förlust av NaN (inte ett tal) innebär vanligtvis den objektiva funktion som skickas till fmin() returnerade NaN. Detta påverkar inte andra körningar och du kan ignorera det på ett säkert sätt. Om du vill förhindra det här resultatet kan du prova att justera hyperparameterutrymmet eller ändra målfunktionen.
  • Eftersom Hyperopt använder stokastiska sökalgoritmer minskar förlusten vanligtvis inte monotont med varje körning. De här metoderna hittar dock ofta de bästa hyperparametrarna snabbare än andra metoder.
  • Både Hyperopt och Spark medför kostnader som kan dominera utvärderingstiden för korta utvärderingskörningar (låga tiotals sekunder). Den hastighet du ser kan vara liten eller till och med noll.

Exempel på notebook-fil: Metodtips för datauppsättningar av olika storlekar

SparkTrials kör utvärderingsversionerna på Spark-arbetsnoder. Den här notebook-filen innehåller riktlinjer för hur du flyttar datauppsättningar av olika storleksordningar till arbetsnoder när du använder SparkTrials.

Hantera datauppsättningar med olika storleksordningar för notebook-filer

Hämta notebook-fil