Python: альтернатива гиперопту, поддерживающая многопроцессорность?

Есть ли что-нибудь кроме HyperOpt, которое может поддерживать многопроцессорность для поиска по гиперпараметрам? Я знаю, что HyperOpt можно настроить на использование MongoDB, но кажется, что легко ошибиться и провести неделю в сорняках, есть ли что-нибудь более популярное и эффективное?


person user1367204    schedule 19.03.2018    source источник
comment
Вы видели это обсуждение?   -  person Maxim    schedule 23.03.2018


Ответы (2)


Проверьте Рэй Тьюн!

Вы можете использовать его для многопроцессорного и многомашинного выполнения случайного поиска, поиска по сетке и эволюционных методов. Он также имеет реализации популярных алгоритмов, таких как HyperBand.

Вот страница документации — ray.readthedocs.io/en/latest/tune.html

В качестве примера запуска 4 параллельных экспериментов одновременно:

import ray
import ray.tune as tune


def my_func(config, reporter):  # add the reporter parameter
    import time, numpy as np
    i = 0
    while True:
        reporter(timesteps_total=i, 
                 mean_accuracy=i ** config["alpha"])
        i += 1
        time.sleep(.01)


tune.register_trainable("my_func", my_func)
ray.init(num_cpus=4)
tune.run_experiments({
    "my_experiment": { 
        "run": "my_func", 
        "stop": { "mean_accuracy": 100 }, 
        "config": { 
            "alpha": tune.grid_search([0.2, 0.4, 0.6]), 
            "beta": tune.grid_search([1, 2]) } } })

Отказ от ответственности: я работаю над этим проектом — дайте мне знать, если у вас есть какие-либо отзывы!

person richliaw    schedule 01.04.2018
comment
Я считаю, что луч не для окон, вы согласны? - person user1367204; 01.04.2018
comment
Я попытался запустить его на 1000 прогонов, я вижу, что накладные расходы больше для приведенного примера. Может быть полезно, если вы используете только распределенное обучение. - person Dileep; 08.09.2020

Некоторые модели (например, RandomForest) имеют параметр njobs для использования количества ядер. Вы можете попробовать njobs=-1; таким образом, даже если hyperopt использует 1 ядро, каждое испытание будет использовать все ядра, что ускоряет процесс.

person Tanveer    schedule 17.09.2020