Путаница с расположением данных при применении Scikit-learn в кластере (Dask)

В настоящее время я работаю над внедрением машинного обучения (Scikit-Learn) с одной машины на кластер Slurm через dask. Согласно некоторым руководствам (например, https://examples.dask.org/machine-learning/scale-scikit-learn.html), это довольно просто с помощью job_lib.parallel_backend('dask'). Однако расположение прочитанных данных меня смущает, и ни в одном из руководств это не упоминается. Должен ли я использовать dask.dataframe для чтения данных, чтобы убедиться, что они переданы в кластер, или не имеет значения, если я просто прочитаю их с помощью pd.dataframe (тогда данные хранятся в ОЗУ того компьютера, на котором я запускаю блокнот Юпитер)?

Большое тебе спасибо.


person dispink    schedule 05.07.2020    source источник
comment
Я не уверен, правильно ли я понимаю. Но если данные есть у вас в планировщике вы читаете с dask.dataframe и они разбрасываются по кластеру. В противном случае, если ваши данные разделены (например, на S3), снова читая с помощью dask, каждый рабочий получает раздел.   -  person rpanai    schedule 06.07.2020
comment
Для меня имеет смысл читать данные через dask.dataframe. Как вы сказали, данные затем будут разбросаны по кластеру, где происходят вычисления. Однако туториал меня смущает, потому что он использует простой pd.dataframe вместо dask.dataframe и распространяет его по with joblib.parallel_backend('dask'): grid_search.fit(data.data, data.target). Я не уверен, что эти коды автоматически разбрасывают данные из локального в кластер.   -  person dispink    schedule 06.07.2020


Ответы (1)


Если ваши данные достаточно малы (как в учебнике), а этапы предварительной обработки довольно тривиальны, тогда можно читать с пандами. Это будет считывать данные в ваш локальный сеанс, а не в какой-либо из рабочих dask. Как только вы вызовете with joblib.parallel_backend('dask'), данные будут скопированы в каждый рабочий процесс, и работа scikit будет выполнена там.

Если ваши данные большие или у вас есть интенсивные этапы предварительной обработки, лучше всего загрузить данные с помощью dask, а затем использовать встроенный в dask предварительная обработка и поиск по сетке, где это возможно. В этом случае данные фактически будут загружаться непосредственно из рабочих процессов из-за парадигмы ленивого выполнения dask. Поиск по сетке Dask также кэширует повторяющиеся шаги перекрестной проверки и может значительно ускорить вычисления. Дополнительную информацию можно найти здесь: https://ml.dask.org/hyper-parameter-search.html

person rikturr    schedule 10.07.2020
comment
Благодарю вас! Вот именно моя путаница. - person dispink; 13.07.2020