Pull to refresh

Comments 8

А что значит «осталось полтора места»?
Значит, что одно место свободно и еще одно условно занято)
Я поддерживаю инициативу выпускать крутых спецов, но здесь конкретный подвох.
Весь мир переходит на Spark, а мы учим умирающий Hadoop 1.0.
На задаче, где не нужен Hadoop (спокойно можно за неделю сделать систему на gnu parallel + scikit learn. Ну конечно там с параллельным обучением не ахти, но еще большой вопрос — оно в этой задаче нужно?)
У Mahaout-а нету шансов выжить — посмотрите хотя бы какую поддержку Спарк получает: www.datanami.com/2015/02/25/apache-spark-ecosystem-continues-to-build/?utm_source=rss&utm_medium=rss&utm_campaign=apache-spark-ecosystem-continues-to-build

Имо намерения самые хорошие, но в результате что получится — большой вопрос.
Весь мир переходит на Spark, а мы учим умирающий Hadoop 1.0.

Может я невнимательно читал, но я не увидел, где в статье идёт речь про Hadoop 1.0?

На задаче, где не нужен Hadoop (спокойно можно за неделю сделать систему на gnu parallel + scikit learn [...])

Фишка всей инфраструктуры Hadoop-а состоит в использовании HDFS и вычислений над локальными данными (вычисления и данные лежат на одной ноде). Насколько я понимаю, GNU Parallel не предоставляет абстракции хранилища, а SciKit Learn не умеет использовать свойство локальности, так что сравнение некорректно.

У Mahaout-а нету шансов выжить — посмотрите хотя бы какую поддержку Спарк получает

Опять же, не понятно, откуда появился Mahout, но в любом случае, сравнивать его с самим Spark-ом будет неправильно: Spark — вычислительное ядро, Mahout — библиотека машинного обучения, которая уже скоро как год официально транслирует вычисления на Spark:

We are building our future implementations on top of a DSL for linear algebraic operations which has been developed over the last months. Programs written in this DSL are automatically optimized and executed in parallel on Apache Spark.

Можно сравнить Mahout со Spark MLlib, но вроде как у Mahout-а всё ещё остаётся несколько интересных алгоритмов, которых нет в MLlib, так что хоронить его рано.
О, отлично, что кто-то решил ответить наконец :)

1) 1.0 — я имею ввиду, что без Spark, у меня была инфа, что спарк включат в Хадуп, но это пока не случилось.

2) Ну я неплохо понимаю фишку, но так же понимаю и все накладные расходы + очень крутую кривую обучения. И если у вас по сути одноразовая задача + она наивно-параллельна (это не совсем ваш случай, но практически такой) — то гораздо проще *очень* быстро все сделать на более простых инструментах. Вы же сначала все в базу заливаете, а потом 1 раз по ней обучитесь, и зачем столько страданий?

ScikitLearn не паралелится — он на одном узле. Если его использовать для скоринга — то просто кучу процессов на каждом узле можно запустить, а потом забрать данные куда надо, или прямо из узлов уже писать в СУБД. Для параллельного обучения он не годится.

3) Ну а какое вы параллельное обучение сверху map-reduce запустите, если не Mahaout?

4) А что хорошего есть в Mahaout, причем качественного? Я пытался на нем делать ALS — и там ни производительность, ни качество алгоритмов не соответствовала рекламным заявлениям.

P.S. В общем такое впечатление, что будете стрелять базукой (старой модели) по воробьям. И как бы не получилось такой ситуации: aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html
1) 1.0 — я имею ввиду, что без Spark, у меня была инфа, что спарк включат в Хадуп, но это пока не случилось.

Я думаю, речь шла не о самом Apache Hadoop, а о крупных дистрибутивах типа CDH. И туда Spark уже включили.

И если у вас по сути одноразовая задача + она наивно-параллельна

Честно говоря, я слабо представляю наивно-параллельную задачу для больших данных. Возьмём, например, обычную линейную регрессию и SGD для её решения: чтобы обучить одну общую модель, а не несколько отдельных на каждом узле, после каждой итерации так или иначе придётся где-то собирать дельты, а затем рассылать обратно обновлённые параметры. А это значит, что не только SciKit Learn, но и вообще любые одномашинные библиотеки вам здесь мало помогут. По крайней мере, придётся влазить в сам алгоритм, а чем тогда это сложнее использования инфраструктуры Hadoop-а — непонятно.

Вы же сначала все в базу заливаете, а потом 1 раз по ней обучитесь, и зачем столько страданий?

Один ли? Тот же SGD предполагает большое количество итераций по одним и тем же данным, и если у вас их достаточно много (а иначе бы мы вообще не говорили про Hadoop, верно?), то вам эти данные придётся либо вручную раскладывать по нодам, делая своё подобие HDFS, либо каждый раз тягать их по сети к вычислительным узлам. Хотите сказать, что это проще, чем поставить CDH5 с готовым HDFS и Spark? :)

Ну а какое вы параллельное обучение сверху map-reduce запустите, если не Mahaout?

Я не знаю, есть ли другие библиотеки машинного обучения на классическом MR (подозреваю, что есть и много), но я вполне успешно запускал на нём свои алгоритмы без использования каких-либо библиотек вообще.

Я пытался на нем делать ALS — и там ни производительность, ни качество алгоритмов не соответствовала рекламным заявлениям.

А что вы подразумеваете под качеством алгоритмов? Качество результатов? Ну так оно скорее зависит от правильности подхода и входных данных. А на чём вы выбранный алгоритм запустите, в общем-то, всё равно.

P.S. В общем такое впечатление, что будете стрелять базукой (старой модели) по воробьям. И как бы не получилось такой ситуации: aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html

Во-первых, есть такое подозрение, что вы подумали, будто я как-то связан с авторами статьи. Так вот, я не.
Во-вторых, статья довольно известная, но прекращать её читать можно сразу после слов:

Since the data volume was only about 1.75GB containing around 2 million chess games, I was skeptical of using Hadoop for the task

Как правильно догадался автор, с объёмом данных меньше 2Гб Hadoop является жесточайшим overkill-ом. В общем-то, объёмы до 6-8Гб я вообще предпочитаю загружать в память и работать с ними напрямую через Pandas или что-нибудь пободное — и удобнее, и гибче. А вот когда у вас данных становится не 2Гб, а пол терабайта в день, и гонять каждую порцию приходится по три десятка раз, вот тогда вы и начинаете задумываться про распределённое хранилище, локальность вычислений и тому подобные прелести.
Спасибо за развернутый апдейт.

С линейной регрессией думается мне, что сэмплом, которые влезет в память одного узла можно обойтись — а срокинг можно наивно-параллельно пустить. Ну дело ваше конечно.

На parallel поднимал все очень быстро, конечно быстрее Hadoop и Spark

Sign up to leave a comment.