Nie jestem bardzo zaznajomiony z równoległością w Pythonie i otrzymuję błąd podczas próby szkolenia modelu na wielu składach szkolonych równolegle. Oto uproszczona wersja mojego kodu:

def train_test_model(fold):
    # here I train the model etc...
    
    # now I want to save the parameters and metrics
    with mlflow.start_run():
        mlflow.log_param("run_name", run_name)
        mlflow.log_param("modeltype", modeltype)
        # and so on...

if __name__=="__main__":
    pool = ThreadPool(processes = num_trials)
    # run folds in parallel
    pool.map(lambda fold:train_test_model(fold), folds)

Otrzymuję następujący błąd:

Exception: Run with UUID 23e9bb6d22674a518e48af9c51252860 is already active. To start a new run, first end the current run with mlflow.end_run(). To start a nested run, call start_run with nested=True

Dokumentacja mówi, że mlflow.start_run() rozpoczyna nowy Uruchom i czyni go aktywnym, co jest źródłem mojego problemu. Każda nić uruchamia uruchamianie MLFLOW dla odpowiadającego składania i sprawia, że jest aktywny, gdy potrzebuję przebiegów do uruchomienia równolegle I.e. Wszystkie są aktywne (?) I Zapisz parametry / Metryki odpowiedniego fałdu. Jak mogę rozwiązać ten problem?

0
jared3412341 24 październik 2020, 15:58

1 odpowiedź

Najlepsza odpowiedź

Znalazłem rozwiązanie, może będzie przydatne dla kogoś innego. Możesz zobaczyć szczegóły z przykładami kodu tutaj: https://github.com/mlflow/mlflow/issues / 3592.

1
jared3412341 28 październik 2020, 09:26