Полный тренировочный набор, используемый dask_lightgbm?

Я просматриваю реализацию оценок dask-lightgbm (в частности, функцию _train_part в dask_lightgb.core.py), и я не вижу, как весь обучающий набор используется для соответствия окончательной оценке?

Функция _train_part принимает логический аргумент return_model, а в реализации функции train (которая использует client.submit для вызова _train_part для каждого рабочего процесса) return_model истинно только тогда, когда рабочий процесс является master_worker (который сам по себе является случайно выбранным рабочим процессом Dask). ). Логически, каждый рабочий получает 1/n фрагментов общего обучающего набора модели, где n = общее количество рабочих, затем каждый рабочий обучает свою собственную независимую модель на своем собственном подмножестве обучающего набора. Параметр return_model определяет, будет ли модель каждого рабочего процесса возвращаться функцией _train_part, поэтому он возвращает None для всех рабочих процессов — и, следовательно, моделей — кроме одного рабочего процесса.

Код:

def _train_part(params, model_factory, list_of_parts, worker_addresses, return_model, local_listen_port=12400,
                time_out=120, **kwargs):

    network_params = build_network_params(worker_addresses, get_worker().address, local_listen_port, time_out)
    params.update(network_params)

    # Concatenate many parts into one
    parts = tuple(zip(*list_of_parts))
    data = concat(parts[0])
    label = concat(parts[1])
    weight = concat(parts[2]) if len(parts) == 3 else None

    try:
        model = model_factory(**params)
        model.fit(data, label, sample_weight=weight)
    finally:
        _safe_call(_LIB.LGBM_NetworkFree())

    return model if return_model else None

Разве это не эквивалентно обучению нераспределенной версии оценщика lightgbm на подвыборке 1/n обучающего набора? Я что-то упускаю? Я чувствую, что упускаю часть, где либо независимые модели рабочих объединяются в одну, либо где одна оценка обновляется с помощью отдельных деревьев, изученных отдельными рабочими.

Благодарю вас!


person Frank Fineis    schedule 19.10.2020    source источник


Ответы (1)


Ах, да, dask_lightgbm использует все доступные обучающие образцы. В обязанности Dask входит только распространение данных среди воркеров. LightGBM обрабатывает все распределенное обучение после установки его сетевых параметров. Дело не в том, что каждый воркер обучает свою собственную независимую модель — LightGBM обучает одну модель — но каждый воркер получит ее копию. По этой причине только выбранный рабочий возвращает подходящую оценку, а все остальные возвращают None.

person Frank Fineis    schedule 21.10.2020